From d4028e42df68a7fdf91c30f6c1de8b0fdc3432a3 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Fri, 18 Oct 2024 20:39:25 +0200 Subject: [PATCH 01/11] Initial work to mjs, ESLint 9, and newwer jest --- .eslintignore | 16 - .eslintrc | 14 - .gitignore | 2 +- babel.config.js | 2 +- bin/check-formatting.sh | 45 +- bin/format.sh | 43 +- bin/generate-config-tree | 30 +- bin/lint.sh | 6 + bin/print-config-tree | 44 +- eslint.config.mjs | 41 + jest.config.js | 8 + package-lock.json | 12233 ----------------------- package.json | 29 +- pnpm-lock.yaml | 6964 +++++++++++++ scripts/checksum | 133 - scripts/checksum.mjs | 118 + scripts/ci-check | 141 - scripts/ci-check.mjs | 141 + scripts/{ci => ci.mjs} | 23 +- scripts/directory-check | 52 - scripts/directory-check.mjs | 63 + scripts/format | 44 - scripts/format.mjs | 77 + scripts/{helpers.js => helpers.mjs} | 6 +- scripts/{lint => lint.mjs} | 21 +- scripts/{name-check => name-check.mjs} | 38 +- scripts/{name-uniq => name-uniq.mjs} | 21 +- scripts/{pr-check => pr-check.mjs} | 36 +- scripts/{pr => pr.mjs} | 22 +- scripts/stub-check | 27 - scripts/stub-check.mjs | 29 + scripts/{sync => sync.mjs} | 38 +- scripts/test | 24 - scripts/test.mjs | 30 + 34 files changed, 7721 insertions(+), 12840 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc create mode 100644 bin/lint.sh create mode 100644 eslint.config.mjs create mode 100644 jest.config.js delete mode 100644 package-lock.json create mode 100644 pnpm-lock.yaml delete mode 100755 scripts/checksum create mode 100644 scripts/checksum.mjs delete mode 100755 scripts/ci-check create mode 100644 scripts/ci-check.mjs rename scripts/{ci => ci.mjs} (67%) mode change 100755 => 100644 delete mode 100644 scripts/directory-check create mode 100644 scripts/directory-check.mjs delete mode 100755 scripts/format create mode 100644 scripts/format.mjs rename scripts/{helpers.js => helpers.mjs} (99%) rename scripts/{lint => lint.mjs} (65%) mode change 100755 => 100644 rename scripts/{name-check => name-check.mjs} (58%) mode change 100755 => 100644 rename scripts/{name-uniq => name-uniq.mjs} (62%) mode change 100755 => 100644 rename scripts/{pr-check => pr-check.mjs} (78%) mode change 100755 => 100644 rename scripts/{pr => pr.mjs} (84%) mode change 100755 => 100644 delete mode 100755 scripts/stub-check create mode 100644 scripts/stub-check.mjs rename scripts/{sync => sync.mjs} (74%) mode change 100755 => 100644 delete mode 100755 scripts/test create mode 100644 scripts/test.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 06be59d510..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,16 +0,0 @@ -!.meta - -# Protected or generated -/.appends -/.github -/.vscode - -# Binaries -/bin - -# Configuration -/config - -# Typings -/exercises/**/global.d.ts -/exercises/**/env.d.ts diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/.gitignore b/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/babel.config.js b/babel.config.js index b781d5a667..cc26a2c7a1 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.38' }]], plugins: [], }; diff --git a/bin/check-formatting.sh b/bin/check-formatting.sh index 2b9a90fb40..5379360c0e 100755 --- a/bin/check-formatting.sh +++ b/bin/check-formatting.sh @@ -1,27 +1,50 @@ -#!/bin/bash +#!/usr/bin/env bash -if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then - echo "Pulling prettier version from package.json" - EXERCISM_PRETTIER_VERSION=$(npm list prettier | grep -Po '.*\sprettier@\K.*') +set -uo pipefail + +if [ -z "${EXERCISM_PRETTIER_VERSION:-}" ]; then + echo "[format] pulling prettier version from pnpm list using sed" + EXERCISM_PRETTIER_VERSION="$(corepack pnpm list prettier --parseable | sed -n -e '1,$s/^.*prettier@//' -e 's/\\node_modules\\prettier//p')" + echo "[format] expected version is now ${EXERCISM_PRETTIER_VERSION:-}" +fi + +if [ -z "${EXERCISM_PRETTIER_VERSION:-}" ]; then + echo "[format] pulling prettier version via pnpm-lock.yaml using grep" + EXERCISM_PRETTIER_VERSION="$(cat pnpm-lock.yaml | grep -Po ' prettier@\K[^:]+')" + echo "[format] expected version is now ${EXERCISM_PRETTIER_VERSION:-}" fi -if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then +if [ -z "${EXERCISM_PRETTIER_VERSION:-}" ]; then + echo "Version could not be pulled using sed or grep" >&2 + echo "" 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 npm list reports:" - echo "$(npm list prettier)" + echo "$(corepack pnpm -v)" + echo "" + echo "This is what corepack pnpm list reports:" + echo "$ corepack pnpm list prettier --parseable" + echo "$(corepack pnpm list prettier --parseable)" + echo "" + echo "And corepack pnpm info reports the following:" + echo "$ corepack pnpm info prettier" + echo "$(corepack pnpm info prettier)" + echo "" + echo "This is the version that can be extracted using sed:" + echo "$ corepack pnpm list prettier --parseable | sed -n -e '1,\$s/^.*prettier@//' -e 's/\\node_modules\\prettier//p'" + echo "└─ $(corepack pnpm list prettier --parseable | sed -n -e '1,$s/^.*prettier@//' -e 's/\\node_modules\\prettier//p')" echo "" - echo "This is the version that can be extracted:" - echo "$(npm list prettier | grep -Po '.*\sprettier@\K.*')" + echo "This is the version that can be extracted using grep:" + echo "$ cat pnpm-lock.yaml | grep -Po ' prettier@\K[^:]+'" + echo "└─ $(cat pnpm-lock.yaml | grep -Po ' prettier@\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" + echo "[format] running with prettier@$EXERCISM_PRETTIER_VERSION" fi -npx "prettier@$EXERCISM_PRETTIER_VERSION" --check "*/**/*.{js,jsx,ts,tsx,css,sass,scss,html,json,md,yml}" +corepack pnpm dlx "prettier@$EXERCISM_PRETTIER_VERSION" --check "**/*.{js,jsx,cjs,mjs,ts,tsx,css,sass,scss,html,json,md,yml}" diff --git a/bin/format.sh b/bin/format.sh index 0ac8ce94de..162438126a 100755 --- a/bin/format.sh +++ b/bin/format.sh @@ -1,27 +1,50 @@ #!/usr/bin/env bash -if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then - echo "Pulling prettier version from package.json" - EXERCISM_PRETTIER_VERSION=$(npm list prettier | grep -Po '.*\sprettier@\K.*') +set -uo pipefail + +if [ -z "${EXERCISM_PRETTIER_VERSION:-}" ]; then + echo "[format] pulling prettier version from pnpm list using sed" + EXERCISM_PRETTIER_VERSION="$(corepack pnpm list prettier --parseable | sed -n -e '1,$s/^.*prettier@//' -e 's/\\node_modules\\prettier//p')" + echo "[format] expected version is now ${EXERCISM_PRETTIER_VERSION:-}" +fi + +if [ -z "${EXERCISM_PRETTIER_VERSION:-}" ]; then + echo "[format] pulling prettier version via pnpm-lock.yaml using grep" + EXERCISM_PRETTIER_VERSION="$(cat pnpm-lock.yaml | grep -Po ' prettier@\K[^:]+')" + echo "[format] expected version is now ${EXERCISM_PRETTIER_VERSION:-}" fi -if [ -z "$EXERCISM_PRETTIER_VERSION" ]; then +if [ -z "${EXERCISM_PRETTIER_VERSION:-}" ]; then + echo "Version could not be pulled using sed or grep" >&2 + echo "" 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 npm list reports:" - echo "$(npm list prettier)" + echo "$(corepack pnpm -v)" + echo "" + echo "This is what corepack pnpm list reports:" + echo "$ corepack pnpm list prettier --parseable" + echo "$(corepack pnpm list prettier --parseable)" + echo "" + echo "And corepack pnpm info reports the following:" + echo "$ corepack pnpm info prettier" + echo "$(corepack pnpm info prettier)" + echo "" + echo "This is the version that can be extracted using sed:" + echo "$ corepack pnpm list prettier --parseable | sed -n -e '1,\$s/^.*prettier@//' -e 's/\\node_modules\\prettier//p'" + echo "└─ $(corepack pnpm list prettier --parseable | sed -n -e '1,$s/^.*prettier@//' -e 's/\\node_modules\\prettier//p')" echo "" - echo "This is the version that can be extracted:" - echo "$(npm list prettier | grep -Po '.*\sprettier@\K.*')" + echo "This is the version that can be extracted using grep:" + echo "$ cat pnpm-lock.yaml | grep -Po ' prettier@\K[^:]+'" + echo "└─ $(cat pnpm-lock.yaml | grep -Po ' prettier@\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" + echo "[format] running with prettier@$EXERCISM_PRETTIER_VERSION" fi -npx "prettier@$EXERCISM_PRETTIER_VERSION" --write "**/*.{js,jsx,ts,tsx,css,sass,scss,html,json,md,yml}" +corepack pnpm dlx "prettier@$EXERCISM_PRETTIER_VERSION" --write "**/*.{js,jsx,cjs,mjs,ts,tsx,css,sass,scss,html,json,md,yml}" diff --git a/bin/generate-config-tree b/bin/generate-config-tree index 9a08db2e3a..e4c4bae844 100755 --- a/bin/generate-config-tree +++ b/bin/generate-config-tree @@ -1,35 +1,35 @@ #!/usr/bin/env node -const { exercises } = require('../config.json') -const TAG_CORE = '__core' -const TAG_BONUS = '__bonus' +const { exercises } = require('../config.json'); +const TAG_CORE = '__core'; +const TAG_BONUS = '__bonus'; // node inter-opt exports -exports.TAG_CORE = TAG_CORE -exports.TAG_BONUS = TAG_BONUS +exports.TAG_CORE = TAG_CORE; +exports.TAG_BONUS = TAG_BONUS; exports.tree = exercises.reduce((result, exercise) => { - const tag = exercise.slug + const tag = exercise.slug; const item = { slug: tag, difficulty: exercise.difficulty, - } + }; if (exercise.core) { - const current = result[TAG_CORE] || [] + const current = result[TAG_CORE] || []; if (result[tag]) { - console.warn(`${tag} is not ordered correctly in config.json`) + console.warn(`${tag} is not ordered correctly in config.json`); } return { ...result, __core: current.concat([item]), - [tag]: result[tag] || [] - } + [tag]: result[tag] || [], + }; } - const parent = exercise.unlocked_by || TAG_BONUS - const current = result[parent] || [] - return { ...result, [parent]: current.concat([item]) } -}, {}) + const parent = exercise.unlocked_by || TAG_BONUS; + const current = result[parent] || []; + return { ...result, [parent]: current.concat([item]) }; +}, {}); diff --git a/bin/lint.sh b/bin/lint.sh new file mode 100644 index 0000000000..2ddf019d16 --- /dev/null +++ b/bin/lint.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -euo pipefail + +corepack enable pnpm +corepack pnpm lint diff --git a/bin/print-config-tree b/bin/print-config-tree index 337c2c09fd..b4061b19bc 100755 --- a/bin/print-config-tree +++ b/bin/print-config-tree @@ -1,34 +1,34 @@ #!/usr/bin/env node -const actions = require('./generate-config-tree') +const actions = require('./generate-config-tree'); -const { tree, TAG_BONUS, TAG_CORE } = actions -const { [TAG_BONUS]: __bonus, [TAG_CORE]: __core, ...track } = tree +const { tree, TAG_BONUS, TAG_CORE } = actions; +const { [TAG_BONUS]: __bonus, [TAG_CORE]: __core, ...track } = tree; function printLn(line) { - process.stdout.write(`${line}\n`) + process.stdout.write(`${line}\n`); } function printList(items) { - items.forEach(item => { - printLn(`- ${item.slug} (${item.difficulty})`) - }) + items.forEach((item) => { + printLn(`- ${item.slug} (${item.difficulty})`); + }); } -printLn('Core (matches config.json) of this track:') -printList(__core) -printLn('\n') -printLn('core') -printLn('----') -Object.keys(track).forEach(slug => { - printLn(`├─ ${slug}`) +printLn('Core (matches config.json) of this track:'); +printList(__core); +printLn('\n'); +printLn('core'); +printLn('----'); +Object.keys(track).forEach((slug) => { + printLn(`├─ ${slug}`); track[slug].forEach((side, index, self) => { - junction = index === self.length - 1 ? '└─' : '├─' - printLn(`│ ${junction} ${side.slug} (${side.difficulty})`) - }) - printLn('│') -}) + junction = index === self.length - 1 ? '└─' : '├─'; + printLn(`│ ${junction} ${side.slug} (${side.difficulty})`); + }); + printLn('│'); +}); -printLn('bonus') -printLn('----') -printList(__bonus) +printLn('bonus'); +printLn('----'); +printList(__bonus); diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..31654f20f7 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,41 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + { + files: ['.meta/proof.ci.js', '.meta/exemplar.js', '*.spec.js'], + extends: maintainersConfig, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000000..35d71c5b33 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,8 @@ +module.exports = { + verbose: true, + modulePathIgnorePatterns: ['package.json'], + transform: { + '^.+\\.[t|j]sx?$': 'babel-jest', + }, + reporters: [], +}; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 9bda616b32..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,12233 +0,0 @@ -{ - "name": "@exercism/javascript", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@exercism/javascript", - "license": "MIT", - "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "chalk": "^4.1.2", - "core-js": "~3.37.1", - "diff": "^7.0.0", - "eslint": "^8.49.0", - "jest": "^29.7.0", - "prettier": "^3.3.3", - "shelljs": "^0.8.5" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@babel/eslint-parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", - "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", - "dev": true, - "dependencies": { - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-plugin": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.16.5.tgz", - "integrity": "sha512-R1p6RMyU1Xl1U/NNr+D4+HjkQzN5dQOX0MpjW9WLWhHDjhzN9gso96MxxOFvPh0fKF/mMH8TGW2kuqQ2eK2s9A==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/eslint-parser": ">=7.11.0", - "eslint": ">=7.5.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", - "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", - "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", - "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", - "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/node": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.19.1.tgz", - "integrity": "sha512-gfxJNrawPso6kx7SwKfAdX1rEzVc09speJLFKrdxuZXGlve92pjbB3nJVmuwrxNN4+jvytj2zvliNXuW6uaSOw==", - "dev": true, - "dependencies": { - "@babel/register": "^7.18.9", - "commander": "^4.0.1", - "core-js": "^3.25.1", - "node-environment-flags": "^1.0.5", - "regenerator-runtime": "^0.13.4", - "v8flags": "^3.1.1" - }, - "bin": { - "babel-node": "bin/babel-node.js" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", - "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", - "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", - "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", - "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", - "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", - "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.19.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.19.4", - "@babel/plugin-transform-classes": "^7.19.0", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.19.4", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.4", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", - "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", - "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", - "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@exercism/babel-preset-javascript": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@exercism/babel-preset-javascript/-/babel-preset-javascript-0.2.1.tgz", - "integrity": "sha512-X9Mv0dHnm8I6s2gsHslKVHqlbUu09MZsBAjAssGjsVzYKxXlGskflW8uMrtm2ajeuv0lZUXbo5jDND5KAa+CwQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.19.3", - "@babel/node": "^7.19.1", - "@babel/preset-env": "^7.19.4", - "core-js": "~3.25.5" - } - }, - "node_modules/@exercism/babel-preset-javascript/node_modules/core-js": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", - "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/@exercism/eslint-config-javascript": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@exercism/eslint-config-javascript/-/eslint-config-javascript-0.6.0.tgz", - "integrity": "sha512-ySy0yUyHwV7iELO3qSkT/gO41avpxygY4TETubfgJBtqoFpqcZWqQfZL/QmSHU9msQwkNbSCirN7S6HDa6Yb6w==", - "dev": true, - "dependencies": { - "@babel/eslint-parser": "^7.17.0", - "@babel/eslint-plugin": "^7.16.5", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.25.4" - }, - "peerDependencies": { - "@babel/core": ">= 7.15", - "eslint": ">= 8.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001644", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", - "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz", - "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.6", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "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.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dev": true, - "dependencies": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", - "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - } - }, - "@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true - }, - "@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } - } - }, - "@babel/eslint-parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", - "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", - "dev": true, - "requires": { - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - } - }, - "@babel/eslint-plugin": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.16.5.tgz", - "integrity": "sha512-R1p6RMyU1Xl1U/NNr+D4+HjkQzN5dQOX0MpjW9WLWhHDjhzN9gso96MxxOFvPh0fKF/mMH8TGW2kuqQ2eK2s9A==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "requires": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", - "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", - "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", - "dev": true, - "requires": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", - "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", - "dev": true, - "requires": { - "@babel/types": "^7.24.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", - "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", - "dev": true, - "requires": { - "@babel/types": "^7.24.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, - "requires": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - } - }, - "@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/node": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.19.1.tgz", - "integrity": "sha512-gfxJNrawPso6kx7SwKfAdX1rEzVc09speJLFKrdxuZXGlve92pjbB3nJVmuwrxNN4+jvytj2zvliNXuW6uaSOw==", - "dev": true, - "requires": { - "@babel/register": "^7.18.9", - "commander": "^4.0.1", - "core-js": "^3.25.1", - "node-environment-flags": "^1.0.5", - "regenerator-runtime": "^0.13.4", - "v8flags": "^3.1.1" - } - }, - "@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", - "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", - "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", - "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", - "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", - "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", - "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.19.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.19.4", - "@babel/plugin-transform-classes": "^7.19.0", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.19.4", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.4", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - } - }, - "@babel/runtime": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", - "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - } - }, - "@babel/traverse": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", - "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@eslint-community/eslint-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", - "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - } - } - }, - "@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", - "dev": true - }, - "@exercism/babel-preset-javascript": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@exercism/babel-preset-javascript/-/babel-preset-javascript-0.2.1.tgz", - "integrity": "sha512-X9Mv0dHnm8I6s2gsHslKVHqlbUu09MZsBAjAssGjsVzYKxXlGskflW8uMrtm2ajeuv0lZUXbo5jDND5KAa+CwQ==", - "dev": true, - "requires": { - "@babel/core": "^7.19.3", - "@babel/node": "^7.19.1", - "@babel/preset-env": "^7.19.4", - "core-js": "~3.25.5" - }, - "dependencies": { - "core-js": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", - "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", - "dev": true - } - } - }, - "@exercism/eslint-config-javascript": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@exercism/eslint-config-javascript/-/eslint-config-javascript-0.6.0.tgz", - "integrity": "sha512-ySy0yUyHwV7iELO3qSkT/gO41avpxygY4TETubfgJBtqoFpqcZWqQfZL/QmSHU9msQwkNbSCirN7S6HDa6Yb6w==", - "dev": true, - "requires": { - "@babel/eslint-parser": "^7.17.0", - "@babel/eslint-plugin": "^7.16.5", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.25.4" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - } - }, - "@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "requires": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - } - }, - "@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3" - } - }, - "@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - } - }, - "@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } - } - }, - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", - "dev": true, - "requires": { - "undici-types": "~5.26.4" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "requires": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001644", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", - "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", - "dev": true - }, - "core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4" - } - }, - "create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "requires": {} - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "dev": true - }, - "diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", - "dev": true - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz", - "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.6", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "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.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - } - }, - "jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - } - }, - "jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - }, - "jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true - }, - "jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "requires": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - } - }, - "jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "dependencies": { - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true - }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpu-core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", - "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "requires": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json index b34765bfcc..98fd5f995e 100644 --- a/package.json +++ b/package.json @@ -13,24 +13,27 @@ "url": "https://github.com/exercism/javascript" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "chalk": "^4.1.2", - "core-js": "~3.37.1", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.7.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.7.6", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.38.1", "diff": "^7.0.0", - "eslint": "^8.49.0", + "eslint": "^9.12.0", + "expect": "^29.7.0", + "globals": "^15.11.0", "jest": "^29.7.0", "prettier": "^3.3.3", "shelljs": "^0.8.5" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.12.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000..ebf9455fcf --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6964 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + devDependencies: + '@exercism/babel-preset-javascript': + specifier: ^0.5.1 + version: 0.5.1 + '@exercism/eslint-config-javascript': + specifier: ^0.7.1 + version: 0.7.1(@babel/core@7.25.8)(@exercism/babel-preset-javascript@0.5.1)(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3) + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 + '@types/node': + specifier: ^22.7.6 + version: 22.7.6 + '@types/shelljs': + specifier: ^0.8.15 + version: 0.8.15 + babel-jest: + specifier: ^29.7.0 + version: 29.7.0(@babel/core@7.25.8) + core-js: + specifier: ~3.38.1 + version: 3.38.1 + diff: + specifier: ^7.0.0 + version: 7.0.0 + eslint: + specifier: ^9.12.0 + version: 9.12.0 + expect: + specifier: ^29.7.0 + version: 29.7.0 + globals: + specifier: ^15.11.0 + version: 15.11.0 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.7.6) + prettier: + specifier: ^3.3.3 + version: 3.3.3 + shelljs: + specifier: ^0.8.5 + version: 0.8.5 + +packages: + '@ampproject/remapping@2.3.0': + resolution: + { + integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, + } + engines: { node: '>=6.0.0' } + + '@babel/code-frame@7.25.7': + resolution: + { + integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==, + } + engines: { node: '>=6.9.0' } + + '@babel/compat-data@7.25.8': + resolution: + { + integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==, + } + engines: { node: '>=6.9.0' } + + '@babel/core@7.25.8': + resolution: + { + integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==, + } + engines: { node: '>=6.9.0' } + + '@babel/eslint-parser@7.25.8': + resolution: + { + integrity: sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==, + } + engines: { node: ^10.13.0 || ^12.13.0 || >=14.0.0 } + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + + '@babel/eslint-plugin@7.25.7': + resolution: + { + integrity: sha512-cwa16ALyUdac3n3VC3R+isKENyjLsJmFY6+cX0wuLsKlwB50Jv/xwqyH9tV8EEH0IUCAL5Y0Y1gP0HuCEDDDeQ==, + } + engines: { node: ^10.13.0 || ^12.13.0 || >=14.0.0 } + peerDependencies: + '@babel/eslint-parser': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + + '@babel/generator@7.25.7': + resolution: + { + integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-annotate-as-pure@7.25.7': + resolution: + { + integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + resolution: + { + integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-compilation-targets@7.25.7': + resolution: + { + integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-create-class-features-plugin@7.25.7': + resolution: + { + integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.25.7': + resolution: + { + integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: + { + integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==, + } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.25.7': + resolution: + { + integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-module-imports@7.25.7': + resolution: + { + integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-module-transforms@7.25.7': + resolution: + { + integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.7': + resolution: + { + integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-plugin-utils@7.25.7': + resolution: + { + integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-remap-async-to-generator@7.25.7': + resolution: + { + integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.25.7': + resolution: + { + integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.25.7': + resolution: + { + integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + resolution: + { + integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-string-parser@7.25.7': + resolution: + { + integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-validator-identifier@7.25.7': + resolution: + { + integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-validator-option@7.25.7': + resolution: + { + integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-wrap-function@7.25.7': + resolution: + { + integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==, + } + engines: { node: '>=6.9.0' } + + '@babel/helpers@7.25.7': + resolution: + { + integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==, + } + engines: { node: '>=6.9.0' } + + '@babel/highlight@7.25.7': + resolution: + { + integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==, + } + engines: { node: '>=6.9.0' } + + '@babel/node@7.25.7': + resolution: + { + integrity: sha512-SLrRogiTuneH3mZeZQtWBECyVRtznezYdnH4UjatZjHrk/QP+GH9bqsToCWp23pPeA20NO1/p8kECzWt5TTpUA==, + } + engines: { node: '>=6.9.0' } + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/parser@7.25.8': + resolution: + { + integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==, + } + engines: { node: '>=6.0.0' } + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': + resolution: + { + integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7': + resolution: + { + integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': + resolution: + { + integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': + resolution: + { + integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': + resolution: + { + integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: + { + integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: + { + integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: + { + integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: + { + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: + { + integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.25.7': + resolution: + { + integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.25.7': + resolution: + { + integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: + { + integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: + { + integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.7': + resolution: + { + integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: + { + integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: + { + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: + { + integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: + { + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: + { + integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: + { + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: + { + integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: + { + integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.7': + resolution: + { + integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: + { + integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.25.7': + resolution: + { + integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.25.8': + resolution: + { + integrity: sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.25.7': + resolution: + { + integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.25.7': + resolution: + { + integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.25.7': + resolution: + { + integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.7': + resolution: + { + integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.25.8': + resolution: + { + integrity: sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.25.7': + resolution: + { + integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.25.7': + resolution: + { + integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.25.7': + resolution: + { + integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.25.7': + resolution: + { + integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.25.7': + resolution: + { + integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': + resolution: + { + integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.25.8': + resolution: + { + integrity: sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.25.7': + resolution: + { + integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.25.8': + resolution: + { + integrity: sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.25.7': + resolution: + { + integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.25.7': + resolution: + { + integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.25.8': + resolution: + { + integrity: sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.25.7': + resolution: + { + integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.25.8': + resolution: + { + integrity: sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.25.7': + resolution: + { + integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.25.7': + resolution: + { + integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.25.7': + resolution: + { + integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.25.7': + resolution: + { + integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.25.7': + resolution: + { + integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': + resolution: + { + integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.25.7': + resolution: + { + integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.25.8': + resolution: + { + integrity: sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.25.8': + resolution: + { + integrity: sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.25.8': + resolution: + { + integrity: sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.25.7': + resolution: + { + integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.25.8': + resolution: + { + integrity: sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.25.8': + resolution: + { + integrity: sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.25.7': + resolution: + { + integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.25.7': + resolution: + { + integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.25.8': + resolution: + { + integrity: sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.25.7': + resolution: + { + integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.25.7': + resolution: + { + integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.25.7': + resolution: + { + integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.7': + resolution: + { + integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.7': + resolution: + { + integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.7': + resolution: + { + integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.25.7': + resolution: + { + integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.25.7': + resolution: + { + integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.7': + resolution: + { + integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.7': + resolution: + { + integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.7': + resolution: + { + integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.7': + resolution: + { + integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.25.8': + resolution: + { + integrity: sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: + { + integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, + } + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/register@7.25.7': + resolution: + { + integrity: sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.25.7': + resolution: + { + integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==, + } + engines: { node: '>=6.9.0' } + + '@babel/template@7.25.7': + resolution: + { + integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==, + } + engines: { node: '>=6.9.0' } + + '@babel/traverse@7.25.7': + resolution: + { + integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==, + } + engines: { node: '>=6.9.0' } + + '@babel/types@7.25.8': + resolution: + { + integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==, + } + engines: { node: '>=6.9.0' } + + '@bcoe/v8-coverage@0.2.3': + resolution: + { + integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, + } + + '@eslint-community/eslint-utils@4.4.0': + resolution: + { + integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: + { + integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + '@eslint/config-array@0.18.0': + resolution: + { + integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/core@0.6.0': + resolution: + { + integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/eslintrc@3.1.0': + resolution: + { + integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/js@9.12.0': + resolution: + { + integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/object-schema@2.1.4': + resolution: + { + integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/plugin-kit@0.2.0': + resolution: + { + integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@exercism/babel-preset-javascript@0.5.1': + resolution: + { + integrity: sha512-6NywGKngMLmuDhDVLov1fm6O8MTtirKfQlDmg3q/3cnP4ElErtqzyOoBoI4Om54hHrTfHXlw+UQxQ7NkKeRAfA==, + } + + '@exercism/eslint-config-javascript@0.7.1': + resolution: + { + integrity: sha512-TegrzdIYcRvNTsEZ0f3A8ItPeH5oMIkhLHfvMFFLoygJliGeBpVAdmqgxFSZMmNyJAuT9lS+hZqtTBz5DmSZlA==, + } + peerDependencies: + '@exercism/babel-preset-javascript': '>= 0.5.1' + eslint: '>= 9.12' + + '@humanfs/core@0.19.0': + resolution: + { + integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==, + } + engines: { node: '>=18.18.0' } + + '@humanfs/node@0.16.5': + resolution: + { + integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==, + } + engines: { node: '>=18.18.0' } + + '@humanwhocodes/module-importer@1.0.1': + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: '>=12.22' } + + '@humanwhocodes/retry@0.3.1': + resolution: + { + integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==, + } + engines: { node: '>=18.18' } + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: + { + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, + } + engines: { node: '>=8' } + + '@istanbuljs/schema@0.1.3': + resolution: + { + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, + } + engines: { node: '>=8' } + + '@jest/console@29.7.0': + resolution: + { + integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/core@29.7.0': + resolution: + { + integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: + { + integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/expect-utils@29.7.0': + resolution: + { + integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/expect@29.7.0': + resolution: + { + integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/fake-timers@29.7.0': + resolution: + { + integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/globals@29.7.0': + resolution: + { + integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/reporters@29.7.0': + resolution: + { + integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: + { + integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/source-map@29.6.3': + resolution: + { + integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/test-result@29.7.0': + resolution: + { + integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/test-sequencer@29.7.0': + resolution: + { + integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/transform@29.7.0': + resolution: + { + integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jest/types@29.6.3': + resolution: + { + integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + '@jridgewell/gen-mapping@0.3.5': + resolution: + { + integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==, + } + engines: { node: '>=6.0.0' } + + '@jridgewell/resolve-uri@3.1.2': + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: '>=6.0.0' } + + '@jridgewell/set-array@1.2.1': + resolution: + { + integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==, + } + engines: { node: '>=6.0.0' } + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: + { + integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, + } + + '@jridgewell/trace-mapping@0.3.25': + resolution: + { + integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, + } + + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + resolution: + { + integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==, + } + + '@nodelib/fs.scandir@2.1.5': + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: '>= 8' } + + '@nodelib/fs.stat@2.0.5': + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: '>= 8' } + + '@nodelib/fs.walk@1.2.8': + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: '>= 8' } + + '@sinclair/typebox@0.27.8': + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + } + + '@sinonjs/commons@3.0.1': + resolution: + { + integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==, + } + + '@sinonjs/fake-timers@10.3.0': + resolution: + { + integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==, + } + + '@types/babel__core@7.20.5': + resolution: + { + integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, + } + + '@types/babel__generator@7.6.8': + resolution: + { + integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==, + } + + '@types/babel__template@7.4.4': + resolution: + { + integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, + } + + '@types/babel__traverse@7.20.6': + resolution: + { + integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==, + } + + '@types/estree@1.0.6': + resolution: + { + integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, + } + + '@types/glob@7.2.0': + resolution: + { + integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, + } + + '@types/graceful-fs@4.1.9': + resolution: + { + integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==, + } + + '@types/istanbul-lib-coverage@2.0.6': + resolution: + { + integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==, + } + + '@types/istanbul-lib-report@3.0.3': + resolution: + { + integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==, + } + + '@types/istanbul-reports@3.0.4': + resolution: + { + integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==, + } + + '@types/json-schema@7.0.15': + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + + '@types/minimatch@5.1.2': + resolution: + { + integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, + } + + '@types/node@22.7.6': + resolution: + { + integrity: sha512-/d7Rnj0/ExXDMcioS78/kf1lMzYk4BZV8MZGTBKzTGZ6/406ukkbYlIsZmMPhcR5KlkunDHQLrtAVmSq7r+mSw==, + } + + '@types/shelljs@0.8.15': + resolution: + { + integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==, + } + + '@types/stack-utils@2.0.3': + resolution: + { + integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==, + } + + '@types/yargs-parser@21.0.3': + resolution: + { + integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==, + } + + '@types/yargs@17.0.33': + resolution: + { + integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==, + } + + '@typescript-eslint/scope-manager@8.10.0': + resolution: + { + integrity: sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/types@8.10.0': + resolution: + { + integrity: sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/typescript-estree@8.10.0': + resolution: + { + integrity: sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.10.0': + resolution: + { + integrity: sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@8.10.0': + resolution: + { + integrity: sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + acorn-jsx@5.3.2: + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.13.0: + resolution: + { + integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==, + } + engines: { node: '>=0.4.0' } + hasBin: true + + ajv@6.12.6: + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, + } + + ansi-escapes@4.3.2: + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, + } + engines: { node: '>=8' } + + ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: '>=8' } + + ansi-styles@3.2.1: + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, + } + engines: { node: '>=4' } + + ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: '>=8' } + + ansi-styles@5.2.0: + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, + } + engines: { node: '>=10' } + + anymatch@3.1.3: + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, + } + engines: { node: '>= 8' } + + argparse@1.0.10: + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + } + + argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + array-buffer-byte-length@1.0.1: + resolution: + { + integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==, + } + engines: { node: '>= 0.4' } + + array.prototype.reduce@1.0.7: + resolution: + { + integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==, + } + engines: { node: '>= 0.4' } + + arraybuffer.prototype.slice@1.0.3: + resolution: + { + integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==, + } + engines: { node: '>= 0.4' } + + available-typed-arrays@1.0.7: + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, + } + engines: { node: '>= 0.4' } + + babel-jest@29.7.0: + resolution: + { + integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: + { + integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, + } + engines: { node: '>=8' } + + babel-plugin-jest-hoist@29.6.3: + resolution: + { + integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + babel-plugin-polyfill-corejs2@0.4.11: + resolution: + { + integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==, + } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: + { + integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==, + } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.2: + resolution: + { + integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==, + } + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-preset-current-node-syntax@1.1.0: + resolution: + { + integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==, + } + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: + { + integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } + + brace-expansion@1.1.11: + resolution: + { + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, + } + + brace-expansion@2.0.1: + resolution: + { + integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, + } + + braces@3.0.3: + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: '>=8' } + + browserslist@4.24.0: + resolution: + { + integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true + + bser@2.1.1: + resolution: + { + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, + } + + buffer-from@1.1.2: + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, + } + + call-bind@1.0.7: + resolution: + { + integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==, + } + engines: { node: '>= 0.4' } + + callsites@3.1.0: + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: '>=6' } + + camelcase@5.3.1: + resolution: + { + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, + } + engines: { node: '>=6' } + + camelcase@6.3.0: + resolution: + { + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, + } + engines: { node: '>=10' } + + caniuse-lite@1.0.30001669: + resolution: + { + integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==, + } + + chalk@2.4.2: + resolution: + { + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, + } + engines: { node: '>=4' } + + chalk@4.1.2: + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: '>=10' } + + char-regex@1.0.2: + resolution: + { + integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, + } + engines: { node: '>=10' } + + ci-info@3.9.0: + resolution: + { + integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, + } + engines: { node: '>=8' } + + cjs-module-lexer@1.4.1: + resolution: + { + integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==, + } + + cliui@8.0.1: + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: '>=12' } + + clone-deep@4.0.1: + resolution: + { + integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, + } + engines: { node: '>=6' } + + co@4.6.0: + resolution: + { + integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, + } + engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } + + collect-v8-coverage@1.0.2: + resolution: + { + integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==, + } + + color-convert@1.9.3: + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, + } + + color-convert@2.0.1: + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: '>=7.0.0' } + + color-name@1.1.3: + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, + } + + color-name@1.1.4: + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } + + commander@6.2.1: + resolution: + { + integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==, + } + engines: { node: '>= 6' } + + commondir@1.0.1: + resolution: + { + integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, + } + + concat-map@0.0.1: + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } + + convert-source-map@2.0.0: + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } + + core-js-compat@3.38.1: + resolution: + { + integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==, + } + + core-js@3.38.1: + resolution: + { + integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==, + } + + create-jest@29.7.0: + resolution: + { + integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + hasBin: true + + cross-spawn@7.0.3: + resolution: + { + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, + } + engines: { node: '>= 8' } + + data-view-buffer@1.0.1: + resolution: + { + integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==, + } + engines: { node: '>= 0.4' } + + data-view-byte-length@1.0.1: + resolution: + { + integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==, + } + engines: { node: '>= 0.4' } + + data-view-byte-offset@1.0.0: + resolution: + { + integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==, + } + engines: { node: '>= 0.4' } + + debug@4.3.7: + resolution: + { + integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, + } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.5.3: + resolution: + { + integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==, + } + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } + + deepmerge@4.3.1: + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, + } + engines: { node: '>=0.10.0' } + + define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: '>= 0.4' } + + define-properties@1.2.1: + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: '>= 0.4' } + + detect-newline@3.1.0: + resolution: + { + integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, + } + engines: { node: '>=8' } + + diff-sequences@29.6.3: + resolution: + { + integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + diff@7.0.0: + resolution: + { + integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==, + } + engines: { node: '>=0.3.1' } + + electron-to-chromium@1.5.41: + resolution: + { + integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==, + } + + emittery@0.13.1: + resolution: + { + integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==, + } + engines: { node: '>=12' } + + emoji-regex@8.0.0: + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } + + error-ex@1.3.2: + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, + } + + es-abstract@1.23.3: + resolution: + { + integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==, + } + engines: { node: '>= 0.4' } + + es-array-method-boxes-properly@1.0.0: + resolution: + { + integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==, + } + + es-define-property@1.0.0: + resolution: + { + integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==, + } + engines: { node: '>= 0.4' } + + es-errors@1.3.0: + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: '>= 0.4' } + + es-object-atoms@1.0.0: + resolution: + { + integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==, + } + engines: { node: '>= 0.4' } + + es-set-tostringtag@2.0.3: + resolution: + { + integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==, + } + engines: { node: '>= 0.4' } + + es-to-primitive@1.2.1: + resolution: + { + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, + } + engines: { node: '>= 0.4' } + + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: '>=6' } + + escape-string-regexp@1.0.5: + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, + } + engines: { node: '>=0.8.0' } + + escape-string-regexp@2.0.0: + resolution: + { + integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, + } + engines: { node: '>=8' } + + escape-string-regexp@4.0.0: + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: '>=10' } + + eslint-config-prettier@9.1.0: + resolution: + { + integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==, + } + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-jest@28.8.3: + resolution: + { + integrity: sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==, + } + engines: { node: ^16.10.0 || ^18.12.0 || >=20.0.0 } + peerDependencies: + '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + + eslint-rule-composer@0.3.0: + resolution: + { + integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==, + } + engines: { node: '>=4.0.0' } + + eslint-scope@5.1.1: + resolution: + { + integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, + } + engines: { node: '>=8.0.0' } + + eslint-scope@8.1.0: + resolution: + { + integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint-visitor-keys@2.1.0: + resolution: + { + integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, + } + engines: { node: '>=10' } + + eslint-visitor-keys@3.4.3: + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + eslint-visitor-keys@4.1.0: + resolution: + { + integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint@9.12.0: + resolution: + { + integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.2.0: + resolution: + { + integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + esprima@4.0.1: + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: '>=4' } + hasBin: true + + esquery@1.6.0: + resolution: + { + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, + } + engines: { node: '>=0.10' } + + esrecurse@4.3.0: + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: '>=4.0' } + + estraverse@4.3.0: + resolution: + { + integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, + } + engines: { node: '>=4.0' } + + estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: '>=4.0' } + + esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: '>=0.10.0' } + + execa@5.1.1: + resolution: + { + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, + } + engines: { node: '>=10' } + + exit@0.1.2: + resolution: + { + integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, + } + engines: { node: '>= 0.8.0' } + + expect@29.7.0: + resolution: + { + integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } + + fast-glob@3.3.2: + resolution: + { + integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, + } + engines: { node: '>=8.6.0' } + + fast-json-stable-stringify@2.1.0: + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } + + fast-levenshtein@2.0.6: + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } + + fastq@1.17.1: + resolution: + { + integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, + } + + fb-watchman@2.0.2: + resolution: + { + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, + } + + file-entry-cache@8.0.0: + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, + } + engines: { node: '>=16.0.0' } + + fill-range@7.1.1: + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: '>=8' } + + find-cache-dir@2.1.0: + resolution: + { + integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==, + } + engines: { node: '>=6' } + + find-up@3.0.0: + resolution: + { + integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, + } + engines: { node: '>=6' } + + find-up@4.1.0: + resolution: + { + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, + } + engines: { node: '>=8' } + + find-up@5.0.0: + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: '>=10' } + + flat-cache@4.0.1: + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, + } + engines: { node: '>=16' } + + flatted@3.3.1: + resolution: + { + integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, + } + + for-each@0.3.3: + resolution: + { + integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, + } + + fs.realpath@1.0.0: + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + } + + fsevents@2.3.3: + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + + function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } + + function.prototype.name@1.1.6: + resolution: + { + integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==, + } + engines: { node: '>= 0.4' } + + functions-have-names@1.2.3: + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } + + gensync@1.0.0-beta.2: + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: '>=6.9.0' } + + get-caller-file@2.0.5: + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } + + get-intrinsic@1.2.4: + resolution: + { + integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==, + } + engines: { node: '>= 0.4' } + + get-package-type@0.1.0: + resolution: + { + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, + } + engines: { node: '>=8.0.0' } + + get-stream@6.0.1: + resolution: + { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, + } + engines: { node: '>=10' } + + get-symbol-description@1.0.2: + resolution: + { + integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==, + } + engines: { node: '>= 0.4' } + + glob-parent@5.1.2: + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: '>= 6' } + + glob-parent@6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: '>=10.13.0' } + + glob@7.2.3: + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, + } + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: + { + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, + } + engines: { node: '>=4' } + + globals@14.0.0: + resolution: + { + integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, + } + engines: { node: '>=18' } + + globals@15.11.0: + resolution: + { + integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==, + } + engines: { node: '>=18' } + + globalthis@1.0.4: + resolution: + { + integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, + } + engines: { node: '>= 0.4' } + + gopd@1.0.1: + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, + } + + graceful-fs@4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } + + has-bigints@1.0.2: + resolution: + { + integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, + } + + has-flag@3.0.0: + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, + } + engines: { node: '>=4' } + + has-flag@4.0.0: + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: '>=8' } + + has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } + + has-proto@1.0.3: + resolution: + { + integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==, + } + engines: { node: '>= 0.4' } + + has-symbols@1.0.3: + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, + } + engines: { node: '>= 0.4' } + + has-tostringtag@1.0.2: + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + } + engines: { node: '>= 0.4' } + + hasown@2.0.2: + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: '>= 0.4' } + + homedir-polyfill@1.0.3: + resolution: + { + integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, + } + engines: { node: '>=0.10.0' } + + html-escaper@2.0.2: + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } + + human-signals@2.1.0: + resolution: + { + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, + } + engines: { node: '>=10.17.0' } + + ignore@5.3.2: + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: '>= 4' } + + import-fresh@3.3.0: + resolution: + { + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, + } + engines: { node: '>=6' } + + import-local@3.2.0: + resolution: + { + integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==, + } + engines: { node: '>=8' } + hasBin: true + + imurmurhash@0.1.4: + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: '>=0.8.19' } + + inflight@1.0.6: + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } + + internal-slot@1.0.7: + resolution: + { + integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==, + } + engines: { node: '>= 0.4' } + + interpret@1.4.0: + resolution: + { + integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, + } + engines: { node: '>= 0.10' } + + is-array-buffer@3.0.4: + resolution: + { + integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==, + } + engines: { node: '>= 0.4' } + + is-arrayish@0.2.1: + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } + + is-bigint@1.0.4: + resolution: + { + integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, + } + + is-boolean-object@1.1.2: + resolution: + { + integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, + } + engines: { node: '>= 0.4' } + + is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: '>= 0.4' } + + is-core-module@2.15.1: + resolution: + { + integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==, + } + engines: { node: '>= 0.4' } + + is-data-view@1.0.1: + resolution: + { + integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==, + } + engines: { node: '>= 0.4' } + + is-date-object@1.0.5: + resolution: + { + integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, + } + engines: { node: '>= 0.4' } + + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: '>=0.10.0' } + + is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: '>=8' } + + is-generator-fn@2.1.0: + resolution: + { + integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, + } + engines: { node: '>=6' } + + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: '>=0.10.0' } + + is-negative-zero@2.0.3: + resolution: + { + integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, + } + engines: { node: '>= 0.4' } + + is-number-object@1.0.7: + resolution: + { + integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, + } + engines: { node: '>= 0.4' } + + is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: '>=0.12.0' } + + is-plain-object@2.0.4: + resolution: + { + integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, + } + engines: { node: '>=0.10.0' } + + is-regex@1.1.4: + resolution: + { + integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, + } + engines: { node: '>= 0.4' } + + is-shared-array-buffer@1.0.3: + resolution: + { + integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==, + } + engines: { node: '>= 0.4' } + + is-stream@2.0.1: + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: '>=8' } + + is-string@1.0.7: + resolution: + { + integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, + } + engines: { node: '>= 0.4' } + + is-symbol@1.0.4: + resolution: + { + integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, + } + engines: { node: '>= 0.4' } + + is-typed-array@1.1.13: + resolution: + { + integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==, + } + engines: { node: '>= 0.4' } + + is-weakref@1.0.2: + resolution: + { + integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, + } + + isarray@2.0.5: + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, + } + + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + isobject@3.0.1: + resolution: + { + integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, + } + engines: { node: '>=0.10.0' } + + istanbul-lib-coverage@3.2.2: + resolution: + { + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, + } + engines: { node: '>=8' } + + istanbul-lib-instrument@5.2.1: + resolution: + { + integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, + } + engines: { node: '>=8' } + + istanbul-lib-instrument@6.0.3: + resolution: + { + integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==, + } + engines: { node: '>=10' } + + istanbul-lib-report@3.0.1: + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, + } + engines: { node: '>=10' } + + istanbul-lib-source-maps@4.0.1: + resolution: + { + integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, + } + engines: { node: '>=10' } + + istanbul-reports@3.1.7: + resolution: + { + integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==, + } + engines: { node: '>=8' } + + jest-changed-files@29.7.0: + resolution: + { + integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-circus@29.7.0: + resolution: + { + integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-cli@29.7.0: + resolution: + { + integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: + { + integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: + { + integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-docblock@29.7.0: + resolution: + { + integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-each@29.7.0: + resolution: + { + integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-environment-node@29.7.0: + resolution: + { + integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-get-type@29.6.3: + resolution: + { + integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-haste-map@29.7.0: + resolution: + { + integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-leak-detector@29.7.0: + resolution: + { + integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-matcher-utils@29.7.0: + resolution: + { + integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-message-util@29.7.0: + resolution: + { + integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-mock@29.7.0: + resolution: + { + integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-pnp-resolver@1.2.3: + resolution: + { + integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, + } + engines: { node: '>=6' } + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: + { + integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-resolve-dependencies@29.7.0: + resolution: + { + integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-resolve@29.7.0: + resolution: + { + integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-runner@29.7.0: + resolution: + { + integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-runtime@29.7.0: + resolution: + { + integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-snapshot@29.7.0: + resolution: + { + integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-util@29.7.0: + resolution: + { + integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-validate@29.7.0: + resolution: + { + integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-watcher@29.7.0: + resolution: + { + integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-worker@29.7.0: + resolution: + { + integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest@29.7.0: + resolution: + { + integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + + js-yaml@3.14.1: + resolution: + { + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, + } + hasBin: true + + js-yaml@4.1.0: + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } + hasBin: true + + jsesc@3.0.2: + resolution: + { + integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==, + } + engines: { node: '>=6' } + hasBin: true + + json-buffer@3.0.1: + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } + + json-parse-even-better-errors@2.3.1: + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } + + json-schema-traverse@0.4.1: + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } + + json-stable-stringify-without-jsonify@1.0.1: + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } + + json5@2.2.3: + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: '>=6' } + hasBin: true + + keyv@4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } + + kind-of@6.0.3: + resolution: + { + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, + } + engines: { node: '>=0.10.0' } + + kleur@3.0.3: + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, + } + engines: { node: '>=6' } + + leven@3.1.0: + resolution: + { + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, + } + engines: { node: '>=6' } + + levn@0.4.1: + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: '>= 0.8.0' } + + lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } + + locate-path@3.0.0: + resolution: + { + integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, + } + engines: { node: '>=6' } + + locate-path@5.0.0: + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + } + engines: { node: '>=8' } + + locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: '>=10' } + + lodash.debounce@4.0.8: + resolution: + { + integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, + } + + lodash.merge@4.6.2: + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } + + lru-cache@5.1.1: + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } + + make-dir@2.1.0: + resolution: + { + integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, + } + engines: { node: '>=6' } + + make-dir@4.0.0: + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: '>=10' } + + makeerror@1.0.12: + resolution: + { + integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, + } + + merge-stream@2.0.0: + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } + + merge2@1.4.1: + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: '>= 8' } + + micromatch@4.0.8: + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: '>=8.6' } + + mimic-fn@2.1.0: + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: '>=6' } + + minimatch@3.1.2: + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } + + minimatch@9.0.5: + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, + } + engines: { node: '>=16 || 14 >=14.17' } + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + natural-compare@1.4.0: + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } + + node-environment-flags@1.0.6: + resolution: + { + integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==, + } + + node-int64@0.4.0: + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, + } + + node-releases@2.0.18: + resolution: + { + integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==, + } + + normalize-path@3.0.0: + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, + } + engines: { node: '>=0.10.0' } + + npm-run-path@4.0.1: + resolution: + { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + } + engines: { node: '>=8' } + + object-inspect@1.13.2: + resolution: + { + integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==, + } + engines: { node: '>= 0.4' } + + object-keys@1.1.1: + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: '>= 0.4' } + + object.assign@4.1.5: + resolution: + { + integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==, + } + engines: { node: '>= 0.4' } + + object.getownpropertydescriptors@2.1.8: + resolution: + { + integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==, + } + engines: { node: '>= 0.8' } + + once@1.4.0: + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } + + onetime@5.1.2: + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: '>=6' } + + optionator@0.9.4: + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: '>= 0.8.0' } + + p-limit@2.3.0: + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + } + engines: { node: '>=6' } + + p-limit@3.1.0: + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: '>=10' } + + p-locate@3.0.0: + resolution: + { + integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, + } + engines: { node: '>=6' } + + p-locate@4.1.0: + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + } + engines: { node: '>=8' } + + p-locate@5.0.0: + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: '>=10' } + + p-try@2.2.0: + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + } + engines: { node: '>=6' } + + parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: '>=6' } + + parse-json@5.2.0: + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: '>=8' } + + parse-passwd@1.0.0: + resolution: + { + integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, + } + engines: { node: '>=0.10.0' } + + path-exists@3.0.0: + resolution: + { + integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, + } + engines: { node: '>=4' } + + path-exists@4.0.0: + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: '>=8' } + + path-is-absolute@1.0.1: + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + } + engines: { node: '>=0.10.0' } + + path-key@3.1.1: + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: '>=8' } + + path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } + + picomatch@2.3.1: + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: '>=8.6' } + + pify@4.0.1: + resolution: + { + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, + } + engines: { node: '>=6' } + + pirates@4.0.6: + resolution: + { + integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, + } + engines: { node: '>= 6' } + + pkg-dir@3.0.0: + resolution: + { + integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==, + } + engines: { node: '>=6' } + + pkg-dir@4.2.0: + resolution: + { + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, + } + engines: { node: '>=8' } + + possible-typed-array-names@1.0.0: + resolution: + { + integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==, + } + engines: { node: '>= 0.4' } + + prelude-ls@1.2.1: + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: '>= 0.8.0' } + + prettier@3.3.3: + resolution: + { + integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==, + } + engines: { node: '>=14' } + hasBin: true + + pretty-format@29.7.0: + resolution: + { + integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + prompts@2.4.2: + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, + } + engines: { node: '>= 6' } + + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: '>=6' } + + pure-rand@6.1.0: + resolution: + { + integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==, + } + + queue-microtask@1.2.3: + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } + + react-is@18.3.1: + resolution: + { + integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, + } + + rechoir@0.6.2: + resolution: + { + integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==, + } + engines: { node: '>= 0.10' } + + regenerate-unicode-properties@10.2.0: + resolution: + { + integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==, + } + engines: { node: '>=4' } + + regenerate@1.4.2: + resolution: + { + integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, + } + + regenerator-runtime@0.14.1: + resolution: + { + integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, + } + + regenerator-transform@0.15.2: + resolution: + { + integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, + } + + regexp.prototype.flags@1.5.3: + resolution: + { + integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==, + } + engines: { node: '>= 0.4' } + + regexpu-core@6.1.1: + resolution: + { + integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==, + } + engines: { node: '>=4' } + + regjsgen@0.8.0: + resolution: + { + integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, + } + + regjsparser@0.11.1: + resolution: + { + integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==, + } + hasBin: true + + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: '>=0.10.0' } + + resolve-cwd@3.0.0: + resolution: + { + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, + } + engines: { node: '>=8' } + + resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: '>=4' } + + resolve-from@5.0.0: + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + } + engines: { node: '>=8' } + + resolve.exports@2.0.2: + resolution: + { + integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==, + } + engines: { node: '>=10' } + + resolve@1.22.8: + resolution: + { + integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, + } + hasBin: true + + reusify@1.0.4: + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, + } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + + run-parallel@1.2.0: + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } + + safe-array-concat@1.1.2: + resolution: + { + integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==, + } + engines: { node: '>=0.4' } + + safe-regex-test@1.0.3: + resolution: + { + integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==, + } + engines: { node: '>= 0.4' } + + semver@5.7.2: + resolution: + { + integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, + } + hasBin: true + + semver@6.3.1: + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } + hasBin: true + + semver@7.6.3: + resolution: + { + integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, + } + engines: { node: '>=10' } + hasBin: true + + set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: '>= 0.4' } + + set-function-name@2.0.2: + resolution: + { + integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, + } + engines: { node: '>= 0.4' } + + shallow-clone@3.0.1: + resolution: + { + integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, + } + engines: { node: '>=8' } + + shebang-command@2.0.0: + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: '>=8' } + + shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: '>=8' } + + shelljs@0.8.5: + resolution: + { + integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==, + } + engines: { node: '>=4' } + hasBin: true + + side-channel@1.0.6: + resolution: + { + integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, + } + engines: { node: '>= 0.4' } + + signal-exit@3.0.7: + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } + + sisteransi@1.0.5: + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } + + slash@3.0.0: + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: '>=8' } + + source-map-support@0.5.13: + resolution: + { + integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, + } + + source-map-support@0.5.21: + resolution: + { + integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, + } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: '>=0.10.0' } + + sprintf-js@1.0.3: + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } + + stack-utils@2.0.6: + resolution: + { + integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, + } + engines: { node: '>=10' } + + string-length@4.0.2: + resolution: + { + integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, + } + engines: { node: '>=10' } + + string-width@4.2.3: + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: '>=8' } + + string.prototype.trim@1.2.9: + resolution: + { + integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==, + } + engines: { node: '>= 0.4' } + + string.prototype.trimend@1.0.8: + resolution: + { + integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==, + } + + string.prototype.trimstart@1.0.8: + resolution: + { + integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, + } + engines: { node: '>= 0.4' } + + strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: '>=8' } + + strip-bom@4.0.0: + resolution: + { + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, + } + engines: { node: '>=8' } + + strip-final-newline@2.0.0: + resolution: + { + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, + } + engines: { node: '>=6' } + + strip-json-comments@3.1.1: + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: '>=8' } + + supports-color@5.5.0: + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, + } + engines: { node: '>=4' } + + supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: '>=8' } + + supports-color@8.1.1: + resolution: + { + integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, + } + engines: { node: '>=10' } + + supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: '>= 0.4' } + + test-exclude@6.0.0: + resolution: + { + integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, + } + engines: { node: '>=8' } + + text-table@0.2.0: + resolution: + { + integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, + } + + tmpl@1.0.5: + resolution: + { + integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, + } + + to-fast-properties@2.0.0: + resolution: + { + integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, + } + engines: { node: '>=4' } + + to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: '>=8.0' } + + ts-api-utils@1.3.0: + resolution: + { + integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==, + } + engines: { node: '>=16' } + peerDependencies: + typescript: '>=4.2.0' + + type-check@0.4.0: + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: '>= 0.8.0' } + + type-detect@4.0.8: + resolution: + { + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, + } + engines: { node: '>=4' } + + type-fest@0.21.3: + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, + } + engines: { node: '>=10' } + + typed-array-buffer@1.0.2: + resolution: + { + integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==, + } + engines: { node: '>= 0.4' } + + typed-array-byte-length@1.0.1: + resolution: + { + integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==, + } + engines: { node: '>= 0.4' } + + typed-array-byte-offset@1.0.2: + resolution: + { + integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==, + } + engines: { node: '>= 0.4' } + + typed-array-length@1.0.6: + resolution: + { + integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==, + } + engines: { node: '>= 0.4' } + + typescript@5.6.3: + resolution: + { + integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==, + } + engines: { node: '>=14.17' } + hasBin: true + + unbox-primitive@1.0.2: + resolution: + { + integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, + } + + undici-types@6.19.8: + resolution: + { + integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==, + } + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: + { + integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, + } + engines: { node: '>=4' } + + unicode-match-property-ecmascript@2.0.0: + resolution: + { + integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, + } + engines: { node: '>=4' } + + unicode-match-property-value-ecmascript@2.2.0: + resolution: + { + integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==, + } + engines: { node: '>=4' } + + unicode-property-aliases-ecmascript@2.1.0: + resolution: + { + integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, + } + engines: { node: '>=4' } + + update-browserslist-db@1.1.1: + resolution: + { + integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==, + } + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } + + v8-to-istanbul@9.3.0: + resolution: + { + integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==, + } + engines: { node: '>=10.12.0' } + + v8flags@3.2.0: + resolution: + { + integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==, + } + engines: { node: '>= 0.10' } + + walker@1.0.8: + resolution: + { + integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, + } + + which-boxed-primitive@1.0.2: + resolution: + { + integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, + } + + which-typed-array@1.1.15: + resolution: + { + integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==, + } + engines: { node: '>= 0.4' } + + which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: '>= 8' } + hasBin: true + + word-wrap@1.2.5: + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: '>=0.10.0' } + + wrap-ansi@7.0.0: + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: '>=10' } + + wrappy@1.0.2: + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } + + write-file-atomic@4.0.2: + resolution: + { + integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + + y18n@5.0.8: + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: '>=10' } + + yallist@3.1.1: + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } + + yargs-parser@21.1.1: + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: '>=12' } + + yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: '>=12' } + + yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: '>=10' } + +snapshots: + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.25.7': + dependencies: + '@babel/highlight': 7.25.7 + picocolors: 1.1.1 + + '@babel/compat-data@7.25.8': {} + + '@babel/core@7.25.8': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/eslint-parser@7.25.8(@babel/core@7.25.8)(eslint@9.12.0)': + dependencies: + '@babel/core': 7.25.8 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 9.12.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + + '@babel/eslint-plugin@7.25.7(@babel/eslint-parser@7.25.8(@babel/core@7.25.8)(eslint@9.12.0))(eslint@9.12.0)': + dependencies: + '@babel/eslint-parser': 7.25.8(@babel/core@7.25.8)(eslint@9.12.0) + eslint: 9.12.0 + eslint-rule-composer: 0.3.0 + + '@babel/generator@7.25.7': + dependencies: + '@babel/types': 7.25.8 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-annotate-as-pure@7.25.7': + dependencies: + '@babel/types': 7.25.8 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-compilation-targets@7.25.7': + dependencies: + '@babel/compat-data': 7.25.8 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.8) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/traverse': 7.25.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-annotate-as-pure': 7.25.7 + regexpu-core: 6.1.1 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.7': + dependencies: + '@babel/types': 7.25.8 + + '@babel/helper-plugin-utils@7.25.7': {} + + '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-wrap-function': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.7': {} + + '@babel/helper-validator-identifier@7.25.7': {} + + '@babel/helper-validator-option@7.25.7': {} + + '@babel/helper-wrap-function@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + + '@babel/highlight@7.25.7': + dependencies: + '@babel/helper-validator-identifier': 7.25.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/node@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/register': 7.25.7(@babel/core@7.25.8) + commander: 6.2.1 + core-js: 3.38.1 + node-environment-flags: 1.0.6 + regenerator-runtime: 0.14.1 + v8flags: 3.2.0 + + '@babel/parser@7.25.8': + dependencies: + '@babel/types': 7.25.8 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.25.8) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-async-generator-functions@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.8) + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.8) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.8) + '@babel/traverse': 7.25.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/template': 7.25.7 + + '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-dynamic-import@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-export-namespace-from@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-logical-assignment-operators@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-nullish-coalescing-operator@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-numeric-separator@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-object-rest-spread@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.8) + + '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.8) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-optional-chaining@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/preset-env@7.25.8(@babel/core@7.25.8)': + dependencies: + '@babel/compat-data': 7.25.8 + '@babel/core': 7.25.8 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.8) + '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.8) + '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-async-generator-functions': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-class-static-block': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-dynamic-import': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-export-namespace-from': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-json-strings': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-logical-assignment-operators': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-numeric-separator': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-object-rest-spread': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-optional-catch-binding': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-private-property-in-object': 7.25.8(@babel/core@7.25.8) + '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.25.8) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.8) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.8) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.8) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.8) + core-js-compat: 3.38.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/types': 7.25.8 + esutils: 2.0.3 + + '@babel/register@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + + '@babel/runtime@7.25.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 + + '@babel/traverse@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.8': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': + dependencies: + eslint: 9.12.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.6.0': {} + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 10.2.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.12.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.0': + dependencies: + levn: 0.4.1 + + '@exercism/babel-preset-javascript@0.5.1': + dependencies: + '@babel/core': 7.25.8 + '@babel/node': 7.25.7(@babel/core@7.25.8) + '@babel/preset-env': 7.25.8(@babel/core@7.25.8) + core-js: 3.38.1 + transitivePeerDependencies: + - supports-color + + '@exercism/eslint-config-javascript@0.7.1(@babel/core@7.25.8)(@exercism/babel-preset-javascript@0.5.1)(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3)': + dependencies: + '@babel/eslint-parser': 7.25.8(@babel/core@7.25.8)(eslint@9.12.0) + '@babel/eslint-plugin': 7.25.7(@babel/eslint-parser@7.25.8(@babel/core@7.25.8)(eslint@9.12.0))(eslint@9.12.0) + '@eslint/js': 9.12.0 + '@exercism/babel-preset-javascript': 0.5.1 + eslint: 9.12.0 + eslint-config-prettier: 9.1.0(eslint@9.12.0) + eslint-plugin-jest: 28.8.3(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3) + globals: 15.11.0 + transitivePeerDependencies: + - '@babel/core' + - '@typescript-eslint/eslint-plugin' + - jest + - supports-color + - typescript + + '@humanfs/core@0.19.0': {} + + '@humanfs/node@0.16.5': + dependencies: + '@humanfs/core': 0.19.0 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.7.6) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.7.6 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.7.6 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.25.8 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.7.6 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + dependencies: + eslint-scope: 5.1.1 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.25.8 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.8 + + '@types/estree@1.0.6': {} + + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.7.6 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.7.6 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/json-schema@7.0.15': {} + + '@types/minimatch@5.1.2': {} + + '@types/node@22.7.6': + dependencies: + undici-types: 6.19.8 + + '@types/shelljs@0.8.15': + dependencies: + '@types/glob': 7.2.0 + '@types/node': 22.7.6 + + '@types/stack-utils@2.0.3': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/scope-manager@8.10.0': + dependencies: + '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/visitor-keys': 8.10.0 + + '@typescript-eslint/types@8.10.0': {} + + '@typescript-eslint/typescript-estree@8.10.0(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/visitor-keys': 8.10.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.10.0(eslint@9.12.0)(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@typescript-eslint/scope-manager': 8.10.0 + '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) + eslint: 9.12.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@8.10.0': + dependencies: + '@typescript-eslint/types': 8.10.0 + eslint-visitor-keys: 3.4.3 + + acorn-jsx@5.3.2(acorn@8.13.0): + dependencies: + acorn: 8.13.0 + + acorn@8.13.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array.prototype.reduce@1.0.7: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + is-string: 1.0.7 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + babel-jest@29.7.0(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.25.8) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.25.7 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.8): + dependencies: + '@babel/compat-data': 7.25.8 + '@babel/core': 7.25.8 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.8) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.8) + core-js-compat: 3.38.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.8) + transitivePeerDependencies: + - supports-color + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.8) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.8) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.8) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.8) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.8) + + babel-preset-jest@29.6.3(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.8) + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.0: + dependencies: + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.41 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001669: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + char-regex@1.0.2: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + commander@6.2.1: {} + + commondir@1.0.1: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + core-js-compat@3.38.1: + dependencies: + browserslist: 4.24.0 + + core-js@3.38.1: {} + + create-jest@29.7.0(@types/node@22.7.6): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.7.6) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + dedent@1.5.3: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + detect-newline@3.1.0: {} + + diff-sequences@29.6.3: {} + + diff@7.0.0: {} + + electron-to-chromium@1.5.41: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-array-method-boxes-properly@1.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + + eslint-plugin-jest@28.8.3(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3): + dependencies: + '@typescript-eslint/utils': 8.10.0(eslint@9.12.0)(typescript@5.6.3) + eslint: 9.12.0 + optionalDependencies: + jest: 29.7.0(@types/node@22.7.6) + transitivePeerDependencies: + - supports-color + - typescript + + eslint-rule-composer@0.3.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@8.1.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@2.1.0: {} + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.1.0: {} + + eslint@9.12.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.12.0 + '@eslint/plugin-kit': 0.2.0 + '@humanfs/node': 0.16.5 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7 + escape-string-regexp: 4.0.0 + eslint-scope: 8.1.0 + eslint-visitor-keys: 4.1.0 + espree: 10.2.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.2.0: + dependencies: + acorn: 8.13.0 + acorn-jsx: 5.3.2(acorn@8.13.0) + eslint-visitor-keys: 4.1.0 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-cache-dir@2.1.0: + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flatted@3.3.1: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-package-type@0.1.0: {} + + get-stream@6.0.1: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.11.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + + html-escaper@2.0.2: {} + + human-signals@2.1.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + interpret@1.4.0: {} + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-stream@2.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.25.8 + '@babel/parser': 7.25.8 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.25.8 + '@babel/parser': 7.25.8 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.3.7 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.7.6): + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.7.6) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.7.6) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.7.6): + dependencies: + '@babel/core': 7.25.8 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.8) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.7.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.7.6 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.25.7 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.25.8 + '@babel/generator': 7.25.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.8) + '@babel/types': 7.25.8 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.8) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.7.6 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.7.6): + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.7.6) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.0.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.debounce@4.0.8: {} + + lodash.merge@4.6.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + node-environment-flags@1.0.6: + dependencies: + object.getownpropertydescriptors: 2.1.8 + semver: 5.7.2 + + node-int64@0.4.0: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + object-inspect@1.13.2: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.getownpropertydescriptors@2.1.8: + dependencies: + array.prototype.reduce: 1.0.7 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + gopd: 1.0.1 + safe-array-concat: 1.1.2 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.25.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-passwd@1.0.0: {} + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@4.0.1: {} + + pirates@4.0.6: {} + + pkg-dir@3.0.0: + dependencies: + find-up: 3.0.0 + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + possible-typed-array-names@1.0.0: {} + + prelude-ls@1.2.1: {} + + prettier@3.3.3: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + queue-microtask@1.2.3: {} + + react-is@18.3.1: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.8 + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.25.7 + + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + regexpu-core@6.1.1: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.11.1: + dependencies: + jsesc: 3.0.2 + + require-directory@2.1.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve.exports@2.0.2: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.6.3: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + signal-exit@3.0.7: {} + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@3.1.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-table@0.2.0: {} + + tmpl@1.0.5: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@1.3.0(typescript@5.6.3): + dependencies: + typescript: 5.6.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typescript@5.6.3: {} + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@6.19.8: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + update-browserslist-db@1.1.1(browserslist@4.24.0): + dependencies: + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + v8flags@3.2.0: + dependencies: + homedir-polyfill: 1.0.3 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} diff --git a/scripts/checksum b/scripts/checksum deleted file mode 100755 index 7c1a281d23..0000000000 --- a/scripts/checksum +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env node - -/** - * Run this script (from root directory): npx babel-node scripts/checksum - * - * This will check root `package.json` matches each exercise's `package.json`. - * But the catch is there are some dependencies used for build but not served to end users - * We skip those dependencies while performing checksum. - * See `SKIP_PACKAGES_FOR_CHECKSUM` in helpers.js for list of skipped packages. - */ - -const path = require('path'); -const shell = require('shelljs'); -const helpers = require('./helpers'); - -/** - * Compares the file of the assignment with some known value - * - * @param filename file to check (local to the assignment directory) - * @param assignment slug with type, eg. practice/two-fer - * @param baseFile the file path that {filename} must be compared against - * @param expectedSha known value of {baseFile} - */ -function checksumAssignment(assignment, filename, baseFile, expectedSha) { - if (!assignment) { - return; - } - - const filePath = path.join('exercises', assignment, filename); - - let fileSha; - - if (filename === 'package.json') { - const packageJson = helpers.prepareExercisePackageJson(filePath, false); - - fileSha = helpers.shaPackageJson(packageJson); - } else { - const fileContents = shell.cat(filePath).toString(); - fileSha = helpers.sha(fileContents); - } - - if (fileSha !== expectedSha) { - const chalk = require('chalk'); - const diff = require('diff'); - - // prettier-ignore - shell.echo( - `[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(`npx babel-node scripts/sync`)}?\n` - ); - - if (chalk.supportsColor) { - const diffParts = diff.diffLines( - shell.cat(filePath).toString(), - shell.cat(baseFile).toString(), - { newlineIsToken: false } - ); - - const output = diffParts - .map((part) => { - const color = part.added - ? chalk.green - : part.removed - ? chalk.red - : chalk.gray; - return color(part.value); - }) - .join(''); - - shell.echo(output); - } - - shell.exit(1); - } -} - -/** - * Check all the exercises, or given, {filename} against {rootFileName} - * - * @param filename filename in the exercise directory - * @param rootFileName filename in the root directory - */ -function checksumAll(filename, rootFileName = filename) { - const assignments = [shell.env['ASSIGNMENT']].filter(Boolean); - - let expectedSha; - - if (rootFileName === 'exercise-package.json') { - expectedSha = shell.cat('exercise-package.json.sha').toString(); - } else { - const fileContents = shell.cat(rootFileName).toString(); - expectedSha = helpers.sha(fileContents); - } - - if (assignments.length > 0) { - if ( - !assignments.every((assignment) => helpers.assertAssignment(assignment)) - ) { - shell.exit(); - } - - return assignments.every((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) - ); -} - -helpers.registerExitHandler(); -helpers.createExercisePackageJson(true); - -checksumAll('package.json', 'exercise-package.json'); - -['.eslintrc', '.npmrc', 'babel.config.js', 'LICENSE', '.gitignore'].forEach((fileToCheck) => { - checksumAll(fileToCheck); - } -); - -shell.echo('All files passed the checksum test'); diff --git a/scripts/checksum.mjs b/scripts/checksum.mjs new file mode 100644 index 0000000000..18a16ae4ae --- /dev/null +++ b/scripts/checksum.mjs @@ -0,0 +1,118 @@ +#!/usr/bin/env node + +/** + * Run this script (from root directory): npx babel-node scripts/checksum + * + * This will check root `package.json` matches each exercise's `package.json`. + * But the catch is there are some dependencies used for build but not served to end users + * We skip those dependencies while performing checksum. + * See `SKIP_PACKAGES_FOR_CHECKSUM` in helpers.js for list of skipped packages. + */ + +import { join } from 'path'; +import shelljs from 'shelljs'; +import { + prepareExercisePackageJson, + shaPackageJson, + sha, + assertAssignment, + assignments as _assignments, + registerExitHandler, + createExercisePackageJson, +} from './helpers.mjs'; + +const { cat, echo, exit, env } = shelljs; + +/** + * Compares the file of the assignment with some known value + * + * @param filename file to check (local to the assignment directory) + * @param assignment slug with type, eg. practice/two-fer + * @param baseFile the file path that {filename} must be compared against + * @param expectedSha known value of {baseFile} + */ +function checksumAssignment(assignment, filename, baseFile, expectedSha) { + if (!assignment) { + return; + } + + const filePath = join('exercises', assignment, filename); + + let fileSha; + + if (filename === 'package.json') { + const packageJson = prepareExercisePackageJson(filePath, false); + + fileSha = shaPackageJson(packageJson); + } else { + const fileContents = cat(filePath).toString(); + fileSha = sha(fileContents); + } + + if (fileSha !== expectedSha) { + // prettier-ignore + echo( + `[Failure] ${filename} did not match for ${assignment} (${expectedSha} != ${fileSha})\n`, + `! Expected ${baseFile} to match ${filePath}\n`, + `! Did you forget to run ${"`corepack pnpm node scripts/sync.mjs`"}?\n` + ); + + exit(1); + } +} + +/** + * Check all the exercises, or given, {filename} against {rootFileName} + * + * @param filename filename in the exercise directory + * @param rootFileName filename in the root directory + */ +function checksumAll(filename, rootFileName = filename) { + const assignments = [env['ASSIGNMENT']].filter(Boolean); + + let expectedSha; + + if (rootFileName === 'exercise-package.json') { + expectedSha = cat('exercise-package.json.sha').toString(); + } else { + const fileContents = cat(rootFileName).toString(); + expectedSha = sha(fileContents); + } + + if (assignments.length > 0) { + if (!assignments.every((assignment) => assertAssignment(assignment))) { + exit(); + } + + return assignments.every((assignment) => { + echo(`Checking integrity of ${assignment}/${filename}...`); + return checksumAssignment( + assignment, + filename, + rootFileName, + expectedSha, + ); + }); + } + + echo( + `Checking integrity of ${filename} in all ${_assignments.length} exercises`, + ); + + _assignments.forEach((assignment) => + checksumAssignment(assignment, filename, rootFileName, expectedSha), + ); +} + +registerExitHandler(); +createExercisePackageJson(true); + +checksumAll('package.json', 'exercise-package.json'); + +['.eslintrc', '.npmrc', 'babel.config.js', 'LICENSE', '.gitignore'].forEach( + (fileToCheck) => { + checksumAll(fileToCheck); + }, +); + +echo('All files passed the checksum test'); diff --git a/scripts/ci-check b/scripts/ci-check deleted file mode 100755 index e136ea5332..0000000000 --- a/scripts/ci-check +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env node - -/** - * Run this script (from root directory): npx babel-node scripts/ci-check - * - * This will run following checks: - * - * 1. Check config in all exercises matches - * 2. Run eslint to check code-style - * 3. Run tests against sample solutions - */ - -const shell = require('shelljs'); -const path = require('path'); - -const { - assignments, - assertAssignment, - registerExitHandler, - envIsThruthy, - hasStub, - cleanUp, - prepare, -} = require('./helpers'); - -const exercises = assignments; -if (exercises.length === 0) { - shell.echo('[Skip] None of the files are inside an exercise directory.'); - shell.exit(0); -} - -if (exercises.length === 1) { - if (!assertAssignment(exercises[0], true)) { - shell.exit(1); - } -} - -registerExitHandler(); - -if (!envIsThruthy('SKIP_STUB', false)) { - shell.echo('\n==========\nEnsure stubs are present\n'); - - // Inline the stub check instead of running scripts/stub-check, to save a - // few seconds. - const noStubs = exercises.filter((assignment) => !hasStub(assignment)); - - if (noStubs.length > 0) { - shell.echo(`[FAILURE] ${noStubs.length} missing a stub`); - noStubs.forEach((stub) => shell.echo(`${stub} is missing a stub file`)); - shell.exit(-1); - } else { - shell.echo('[SUCCES] All stubs are present'); - } -} - -if (!envIsThruthy('SKIP_INTEGRITY', false)) { - shell.echo('\n==========\nCheck configuration and packages integrity\n'); - - // If > 8 exercises, checksum everything as its faster than subprocessing - // TODO: be able to pass in any amount of exercises at once - if (exercises.length >= 8) { - const checkResult = shell.exec( - `npx babel-node ${path.join('scripts', 'checksum')}` - ).code; - - if (checkResult !== 0) { - shell.exit(checkResult); - } - - const nameCheckResult = shell.exec( - `npx babel-node ${path.join('scripts', 'name-check')}` - ).code; - - if (nameCheckResult !== 0) { - shell.exit(nameCheckResult); - } - } else { - exercises.forEach((exercise) => { - shell.env['ASSIGNMENT'] = exercise; - - const checkResult = shell.exec( - `npx babel-node ${path.join('scripts', 'checksum')}` - ).code; - - if (checkResult !== 0) { - shell.exit(checkResult); - } - - const nameCheckResult = shell.exec( - `npx babel-node ${path.join('scripts', 'name-check')}` - ).code; - - if (nameCheckResult !== 0) { - shell.exit(nameCheckResult); - } - }); - } - - const nameUniqResult = shell.exec( - `npx babel-node ${path.join('scripts', 'name-uniq')}` - ).code; - - if (nameUniqResult !== 0) { - shell.exit(nameUniqResult); - } - - const directoryResult = shell.exec( - `npx babel-node ${path.join('scripts', 'directory-check')}` - ).code; - - if (directoryResult !== 0) { - shell.echo( - `scripts/directory-check returned a non-zero exit code: ${directoryResult}` - ); - shell.exit(directoryResult); - } -} - -// Cleanup tmp directory if any exists -cleanUp(); - -/** - * Moves all example and test files to single directory - tmp_exercises - * This allows running the test command together for all files - * which is way faster than running once for each exercise - */ - -shell.echo('\n==========\nLint all the files\n'); - -shell.env['PREPARE'] = false; -shell.env['CLEANUP'] = false; - -exercises.forEach(prepare); - -shell.env['CLEANUP'] = true; - -const checkResult = shell.exec(`npx babel-node ${path.join('scripts', 'lint')}`) - .code; -if (checkResult != 0) { - shell.exit(checkResult); -} diff --git a/scripts/ci-check.mjs b/scripts/ci-check.mjs new file mode 100644 index 0000000000..65d4cd5f54 --- /dev/null +++ b/scripts/ci-check.mjs @@ -0,0 +1,141 @@ +#!/usr/bin/env node + +/** + * Run this script (from root directory): corepack pnpm node scripts/ci-check.mjs + * + * This will run following checks: + * + * 1. Check config in all exercises matches + * 2. Run eslint to check code-style + * 3. Run tests against sample solutions + */ + +import shelljs from 'shelljs'; +import { join } from 'node:path'; +import { + assignments, + assertAssignment, + registerExitHandler, + envIsThruthy, + hasStub, + cleanUp, + prepare, +} from './helpers.mjs'; + +const { echo, exit, exec, env } = shelljs; + +const exercises = assignments; +if (exercises.length === 0) { + echo('[Skip] None of the files are inside an exercise directory.'); + exit(0); +} + +if (exercises.length === 1) { + if (!assertAssignment(exercises[0], true)) { + exit(1); + } +} + +registerExitHandler(); + +if (!envIsThruthy('SKIP_STUB', false)) { + echo('\n==========\nEnsure stubs are present\n'); + + // Inline the stub check instead of running scripts/stub-check, to save a + // few seconds. + const noStubs = exercises.filter((assignment) => !hasStub(assignment)); + + if (noStubs.length > 0) { + echo(`[FAILURE] ${noStubs.length} missing a stub`); + noStubs.forEach((stub) => echo(`${stub} is missing a stub file`)); + exit(-1); + } else { + echo('[SUCCES] All stubs are present'); + } +} + +if (!envIsThruthy('SKIP_INTEGRITY', false)) { + echo('\n==========\nCheck configuration and packages integrity\n'); + + // If > 8 exercises, checksum everything as its faster than subprocessing + // TODO: be able to pass in any amount of exercises at once + if (exercises.length >= 8) { + const checkResult = exec( + `npx babel-node ${join('scripts', 'checksum')}`, + ).code; + + if (checkResult !== 0) { + exit(checkResult); + } + + const nameCheckResult = exec( + `npx babel-node ${join('scripts', 'name-check')}`, + ).code; + + if (nameCheckResult !== 0) { + exit(nameCheckResult); + } + } else { + exercises.forEach((exercise) => { + env['ASSIGNMENT'] = exercise; + + const checkResult = exec( + `npx babel-node ${join('scripts', 'checksum')}`, + ).code; + + if (checkResult !== 0) { + exit(checkResult); + } + + const nameCheckResult = exec( + `npx babel-node ${join('scripts', 'name-check')}`, + ).code; + + if (nameCheckResult !== 0) { + exit(nameCheckResult); + } + }); + } + + const nameUniqResult = exec( + `npx babel-node ${join('scripts', 'name-uniq')}`, + ).code; + + if (nameUniqResult !== 0) { + exit(nameUniqResult); + } + + const directoryResult = exec( + `npx babel-node ${join('scripts', 'directory-check')}`, + ).code; + + if (directoryResult !== 0) { + echo( + `scripts/directory-check returned a non-zero exit code: ${directoryResult}`, + ); + exit(directoryResult); + } +} + +// Cleanup tmp directory if any exists +cleanUp(); + +/** + * Moves all example and test files to single directory - tmp_exercises + * This allows running the test command together for all files + * which is way faster than running once for each exercise + */ + +echo('\n==========\nLint all the files\n'); + +env['PREPARE'] = false; +env['CLEANUP'] = false; + +exercises.forEach(prepare); + +env['CLEANUP'] = true; + +const checkResult = exec(`npx babel-node ${join('scripts', 'lint')}`).code; +if (checkResult != 0) { + exit(checkResult); +} diff --git a/scripts/ci b/scripts/ci.mjs old mode 100755 new mode 100644 similarity index 67% rename from scripts/ci rename to scripts/ci.mjs index d3afcb15c8..9ad9104c4a --- a/scripts/ci +++ b/scripts/ci.mjs @@ -3,7 +3,7 @@ /** * Run this script (from root directory): * - * npx babel-node scripts/ci + * corepack pnpm node scripts/ci.mjs * * This will run following checks: * @@ -11,27 +11,28 @@ * 2. Run tests against sample solutions */ -const { +import { prepareAndRun, prepare, cleanUp, registerExitHandler, assignments, -} = require('./helpers'); +} from './helpers.mjs'; +import shelljs from 'shelljs'; -const shell = require('shelljs'); +const { echo, exit, env } = shelljs; const exercises = assignments; if (exercises.length === 0) { - shell.echo('[Skip] None of the files are inside an exercise directory.'); - shell.exit(0); + echo('[Skip] None of the files are inside an exercise directory.'); + exit(0); } registerExitHandler(); -shell.env['PREPARE'] = false; -shell.env['CLEANUP'] = false; +env['PREPARE'] = false; +env['CLEANUP'] = false; const infoStr = `Running tests for ${ exercises.length === 1 ? exercises[0] : `${exercises.length} exercises\n` @@ -42,12 +43,12 @@ const failureStr = '[Failure] Tests failed!'; exercises.forEach(prepare); // Run tests -prepareAndRun('npx jest --bail tmp_exercises', infoStr, failureStr); +prepareAndRun('corepack pnpm jest --bail tmp_exercises', infoStr, failureStr); -shell.echo( +echo( exercises.length === 1 ? `[Success] Tests passed for ${exercises[0]}` - : `[Success] Tests passed for all ${exercises.length} exercises` + : `[Success] Tests passed for all ${exercises.length} exercises`, ); // Cleanup diff --git a/scripts/directory-check b/scripts/directory-check deleted file mode 100644 index 25e10c750e..0000000000 --- a/scripts/directory-check +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env node - -/** - * Run this script (from root directory): npx babel-node scripts/directory-check - * - * This will run following checks: - * - * 1. Package has the correct directory based on the path to the exercise. - * - * This script also allows fixing these names: npx babel-node scripts/directory-check --fix - */ - -const shell = require('shelljs'); -const path = require('path') - -let { assignments, registerExitHandler } = require('./helpers'); - -registerExitHandler(); - -// First 2 arguments are node and script name skip them -// Check if rest has --fix -const fix = process.argv.slice(2).includes('--fix'); - -// Check if package repository directory in each exercises' package.json is of the format "exercises/" - -assignments.forEach((assignment) => { - const filePath = path.join('exercises', assignment, 'package.json'); - const file = JSON.parse(shell.cat(filePath).toString()); - const givenRepositoryDirectory = file['repository']['directory']; - const expectedRepositoryDirectory = `exercises/${assignment}`; - - if (givenRepositoryDirectory === expectedRepositoryDirectory) { - shell.echo(`[Success]: Package repository directory for ${assignment} is in correct format.`); - return; - } - - if (fix) { - file['repository']['directory'] = expectedRepositoryDirectory; - const fileWithFixedRepositoryDirectory = new shell.ShellString( - JSON.stringify(file, undefined, 2) + '\n' - ); - fileWithFixedRepositoryDirectory.to(filePath); - shell.echo(`[Success]: Fixed package repository directory in ${filePath}`); - } else { - shell.echo( - `[Failure]: Package repository directory in ${filePath} must be ${expectedRepositoryDirectory}"` - ); - shell.exit(1); - } -}); - -shell.exit(0); diff --git a/scripts/directory-check.mjs b/scripts/directory-check.mjs new file mode 100644 index 0000000000..13b566dd50 --- /dev/null +++ b/scripts/directory-check.mjs @@ -0,0 +1,63 @@ +#!/usr/bin/env node + +/** + * Run this script (from root directory): + * + * $ corepack pnpm node scripts/directory-check.mjs + * + * This will run following checks: + * + * 1. Package has the correct directory based on the path to the exercise. + * + * This script also allows fixing these names: + * + * $ corepack pnpm node scripts/directory-check.mjs --fix + */ + +import shelljs from 'shelljs'; +import { join } from 'node:path'; + +const { cat, echo, ShellString, exit } = shelljs; + +import { assignments, registerExitHandler } from './helpers.mjs'; + +registerExitHandler(); + +// First 2 arguments are node and script name skip them +// Check if rest has --fix +const fix = process.argv.slice(2).includes('--fix'); + +// Check if package repository directory in each exercises' package.json is of the format "exercises/" + +assignments.forEach((assignment) => { + const filePath = join('exercises', assignment, 'package.json'); + const file = JSON.parse(cat(filePath).toString()); + const givenRepositoryDirectory = file['repository']['directory']; + const expectedRepositoryDirectory = `exercises/${assignment.replace( + '\\', + '/', + )}`; + + if (givenRepositoryDirectory === expectedRepositoryDirectory) { + echo( + `[Success]: Package repository directory for ${assignment} is in correct format.`, + ); + return; + } + + if (fix) { + file['repository']['directory'] = expectedRepositoryDirectory; + const fileWithFixedRepositoryDirectory = new ShellString( + JSON.stringify(file, undefined, 2) + '\n', + ); + fileWithFixedRepositoryDirectory.to(filePath); + echo(`[Success]: Fixed package repository directory in ${filePath}`); + } else { + echo( + `[Failure]: Package repository directory in ${filePath} must be ${expectedRepositoryDirectory}, actual: ${file['repository']['directory']}"`, + ); + exit(1); + } +}); + +exit(0); diff --git a/scripts/format b/scripts/format deleted file mode 100755 index 460f2b2409..0000000000 --- a/scripts/format +++ /dev/null @@ -1,44 +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' -); - -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("npm list 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/format.mjs b/scripts/format.mjs new file mode 100644 index 0000000000..bea4f521df --- /dev/null +++ b/scripts/format.mjs @@ -0,0 +1,77 @@ +#!/usr/bin/env node + +/* + * Run this script (from root directory): + * + * $ corepack pnpm node scripts/format.mjs + * + * 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, { join, sep } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { mkdtempSync } from 'node:fs'; +import { tmpdir } from 'node:os'; + +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 tempDir = mkdtempSync(`${tmpdir()}${sep}`); + const versionInfo = join(tempDir, 'info.txt'); + shell.touch(versionInfo); + + shell + .exec('corepack pnpm list prettier --parseable', { silent: true }) + .to(versionInfo); + + shell.echo(shell.cat(versionInfo)); + + shell.sed(/^.*prettier@/, '', versionInfo).to(versionInfo); + shell.sed(/\\node_modules\\prettier$/, '', versionInfo).to(versionInfo); + + const versionFromPackage = shell.cat(versionInfo).split('\n')[1].trim(); + shell.rm('-fr', tempDir); + + if (versionFromPackage && !versionFromPackage.includes('Usage Error')) { + EXERCISM_PRETTIER_VERSION = versionFromPackage.trim(); + } else { + EXERCISM_PRETTIER_VERSION = process.env.EXERCISM_PRETTIER_VERSION; + if (!EXERCISM_PRETTIER_VERSION) { + shell.error( + 'Could not find prettier version in corepack pnpm list or ENV', + ); + shell.exit(-1); + } + } +} else { + EXERCISM_PRETTIER_VERSION = versionLine + .split(':')[1] + .trim() + .replace(/'/g, ''); +} + +const command = `corepack pnpm dlx prettier@${EXERCISM_PRETTIER_VERSION} --write "**/*.{js,jsx,cjs,mjs,ts,tsx,css,sass,scss,html,json,md,yml}"`; +shell.echo(`[format] ${command}`); + +// Will print to console +shell.exec(command, { silent: false }); diff --git a/scripts/helpers.js b/scripts/helpers.mjs similarity index 99% rename from scripts/helpers.js rename to scripts/helpers.mjs index 42f54ac3d6..ebb3590324 100644 --- a/scripts/helpers.js +++ b/scripts/helpers.mjs @@ -2,9 +2,9 @@ * This file provides helper functions & 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 path from 'node:path'; +import crypto from 'node:crypto'; const exerciseDirs = shell.ls( '-d', diff --git a/scripts/lint b/scripts/lint.mjs old mode 100755 new mode 100644 similarity index 65% rename from scripts/lint rename to scripts/lint.mjs index b57aaaf529..445ea25c27 --- a/scripts/lint +++ b/scripts/lint.mjs @@ -1,18 +1,20 @@ #!/usr/bin/env node /** - * Run this script (from root directory): npx babel-node scripts/lint + * Run this script (from root directory): + * + * $ corepack pnpm node scripts/lint.mjs * * 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(); @@ -31,15 +33,18 @@ const infoStr = assignment : `Running lint for ${count} exercises...`; const failureStr = '[Failure] Lint check failed!'; +shell.mkdir('-p', 'tmp_exercises'); +shell.cp('eslint.config.mjs', path.join('tmp_exercises', 'eslint.config.mjs')); + // Run lint all at once prepareAndRun( - 'npx eslint tmp_exercises -c node_modules/@exercism/eslint-config-javascript/maintainers.js', + 'corepack pnpm eslint tmp_exercises -c tmp_exercises/eslint.config.mjs', infoStr, - failureStr + failureStr, ); shell.echo( assignment ? `[Success] Lint passed for ${assignment}` - : `[Success] Lint passed for ${count} exercises` + : `[Success] Lint passed for ${count} exercises`, ); diff --git a/scripts/name-check b/scripts/name-check.mjs old mode 100755 new mode 100644 similarity index 58% rename from scripts/name-check rename to scripts/name-check.mjs index 09c490f03e..59fad3ab44 --- a/scripts/name-check +++ b/scripts/name-check.mjs @@ -1,32 +1,44 @@ #!/usr/bin/env node /** - * Run this script (from root directory): npx babel-node scripts/name-check + * Run this script (from root directory): + * + * $ corepack pnpm node scripts/name-check.mjs * * This will run following checks: * * 1. Package name is of the format "@exercism/javascript-" * - * This script also allows fixing these names: npx babel-node scripts/name-check --fix + * This script also allows fixing these names: + * + * $ corepack pnpm node scripts/name-check.mjs --fix */ -const shell = require('shelljs'); - -let { packageFiles, registerExitHandler } = require('./helpers'); +import shell from 'shelljs'; +import path from 'node:path'; +import { packageFiles, registerExitHandler } from './helpers.mjs'; registerExitHandler(); +let exitCode = 0; + // First 2 arguments are node and script name skip them // Check if rest has --fix const fix = process.argv.slice(2).includes('--fix'); -const envAssignment = shell.env['ASSIGNMENT']; -if (envAssignment) { - packageFiles = [`exercises/${envAssignment}/package.json`]; +if (fix) { + shell.echo('=============================================='); + shell.echo('Fixing package names where necessary'); + shell.echo('----------------------------------------------'); } +const envAssignment = shell.env['ASSIGNMENT']; +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']; @@ -41,16 +53,16 @@ packageFiles.forEach((filePath) => { if (fix) { file['name'] = expectedName; const fileWithFixedName = new shell.ShellString( - JSON.stringify(file, undefined, 2) + '\n' + JSON.stringify(file, undefined, 2) + '\n', ); fileWithFixedName.to(filePath); shell.echo(`[Success]: Fixed package name in ${filePath}`); } else { + exitCode = 1; shell.echo( - `[Failure]: Package name in ${filePath} must be ${expectedName}"` + `[Failure]: Package name in ${filePath} must be ${expectedName}"`, ); - shell.exit(1); } }); -shell.exit(0); +shell.exit(exitCode); diff --git a/scripts/name-uniq b/scripts/name-uniq.mjs old mode 100755 new mode 100644 similarity index 62% rename from scripts/name-uniq rename to scripts/name-uniq.mjs index 4a9dc92187..a058bfb1d4 --- a/scripts/name-uniq +++ b/scripts/name-uniq.mjs @@ -1,31 +1,34 @@ #!/usr/bin/env node /** - * Run this script (from root directory): npx babel-node scripts/name-uniq + * Run this script (from root directory): + * + * $ corepack pnpm node scripts/name-uniq.mjs * * This will run following checks: * * 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(); +let exitCode = 0; const allNames = packageFiles.map( - (filePath) => JSON.parse(shell.cat(filePath).toString())['name'] + (filePath) => JSON.parse(shell.cat(filePath).toString())['name'], ); // Check if all exercises have unique package names const duplicates = allNames.filter((e, i) => allNames.indexOf(e) !== i); - if (duplicates.length !== 0) { + exitCode = 1; shell.echo( - `[Failure] Duplicate package names found: ${duplicates.join(', ')}` + `[Failure] Duplicate package names found: ${duplicates.join(', ')}`, ); - shell.exit(1); } -shell.echo('[Success] All package names are unique.'); -shell.exit(0); +if (exitCode === 0) { + shell.echo('[Success] All package names are unique.'); +} diff --git a/scripts/pr-check b/scripts/pr-check.mjs old mode 100755 new mode 100644 similarity index 78% rename from scripts/pr-check rename to scripts/pr-check.mjs index dbdcf7b38a..5527521407 --- a/scripts/pr-check +++ b/scripts/pr-check.mjs @@ -3,7 +3,7 @@ /** * Run this script (from root directory): * - * npx babel-node scripts/pr-check path/1 path/2 path/3 + * $ corepack pnpm node scripts/pr-check.mjs path/1 path/2 path/3 * * This will run following checks: * 1. Find the exercises at all the paths provided @@ -12,23 +12,23 @@ * 4. Run eslint for those exercises to check code-style */ -const { +import shell from 'shelljs'; +import path from 'node:path'; +import { findExerciseDirectory, + prepare, cleanUp, registerExitHandler, envIsThruthy, hasStub, - prepare, assignments, -} = require('./helpers'); +} from './helpers.mjs'; -const shell = require('shelljs'); -const path = require('path'); const files = process.argv.slice(2); if (files.length === 0) { shell.echo( - '[Failure] No files passed in. Pass in paths to exercise directories or its file.' + '[Failure] No files passed in. Pass in paths to exercise directories or its file.', ); shell.exit(-1); } @@ -47,12 +47,12 @@ const hasRootFile = files.some((file) => file === 'package.json'); if (hasRootFile) { shell.echo( - '[Root PR] When package.json is changed, all exercises need to be checked' + '[Root PR] When package.json is changed, all exercises need to be checked', ); } else if (_exercises.length > 8) { shell.echo( '[Big PR] When more than 8 exercises are being checked, all of them are ' + - 'checked as this is likely a PR affecting everything.' + 'checked as this is likely a PR affecting everything.', ); } @@ -89,46 +89,46 @@ if (!envIsThruthy('SKIP_INTEGRITY', false)) { shell.env['ASSIGNMENT'] = exercise; const checkResult = shell.exec( - `npx babel-node ${path.join('scripts', 'checksum')}` + `corepack pnpm node ${path.join('scripts', 'checksum.mjs')}`, ).code; if (checkResult !== 0) { shell.echo( - `scripts/checksum returned a non-zero exit code: ${checkResult}` + `scripts/checksum.mjs returned a non-zero exit code: ${checkResult}`, ); shell.exit(checkResult); } const nameCheckResult = shell.exec( - `npx babel-node ${path.join('scripts', 'name-check')}` + `corepack pnpm node ${path.join('scripts', 'name-check.mjs')}`, ).code; if (nameCheckResult !== 0) { shell.echo( - `scripts/name-check returned a non-zero exit code: ${nameCheckResult}` + `scripts/name-check.mjs returned a non-zero exit code: ${nameCheckResult}`, ); shell.exit(nameCheckResult); } }); const nameUniqResult = shell.exec( - `npx babel-node ${path.join('scripts', 'name-uniq')}` + `corepack pnpm node ${path.join('scripts', 'name-uniq.mjs')}`, ).code; if (nameUniqResult !== 0) { shell.echo( - `scripts/name-uniq returned a non-zero exit code: ${nameUniqResult}` + `scripts/name-uniq.mjs returned a non-zero exit code: ${nameUniqResult}`, ); shell.exit(nameUniqResult); } const directoryResult = shell.exec( - `npx babel-node ${path.join('scripts', 'directory-check')}` + `ncorepack pnpm node ${path.join('scripts', 'directory-check.mjs')}`, ).code; if (directoryResult !== 0) { shell.echo( - `scripts/directory-check returned a non-zero exit code: ${directoryResult}` + `scripts/directory-check.mjs returned a non-zero exit code: ${directoryResult}`, ); shell.exit(directoryResult); } @@ -154,7 +154,7 @@ exercises.forEach(prepare); shell.env['CLEANUP'] = true; const checkResult = shell.exec( - `npx babel-node ${path.join('scripts', 'lint')}` + `corepack pnpm node ${path.join('scripts', 'lint.mjs')}`, ).code; if (checkResult !== 0) { shell.echo(`scripts/lint returned a non-zero exit code: ${checkResult}`); diff --git a/scripts/pr b/scripts/pr.mjs old mode 100755 new mode 100644 similarity index 84% rename from scripts/pr rename to scripts/pr.mjs index a3c27225bf..bcf634b6d1 --- a/scripts/pr +++ b/scripts/pr.mjs @@ -3,7 +3,7 @@ /** * Run this script (from root directory): * - * npx babel-node scripts/pr path/1 path/2 path/3 + * $ corepack pnpm node scripts/pr.mjs path/1 path/2 path/3 * * This will run following checks: * @@ -11,21 +11,21 @@ * 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 files = process.argv.slice(2); if (files.length === 0) { shell.echo( - '[Failure] No files passed in. Pass in paths to exercise directories or its file.' + '[Failure] No files passed in. Pass in paths to exercise directories or its file.', ); shell.exit(-1); } @@ -44,12 +44,12 @@ const hasRootFile = files.some((file) => file === 'package.json'); if (hasRootFile) { shell.echo( - '[Root PR] When package.json is changed, all exercises need to be checked' + '[Root PR] When package.json is changed, all exercises need to be checked', ); } else if (_exercises.length > 8) { shell.echo( '[Big PR] When more than 8 exercises are being checked, all of them are ' + - 'checked as this is likely a PR affecting everything.' + 'checked as this is likely a PR affecting everything.', ); } @@ -75,12 +75,16 @@ const failureStr = '[Failure] Tests failed!'; exercises.forEach(prepare); // Run tests -prepareAndRun('npx jest --bail tmp_exercises --runInBand', infoStr, failureStr); +prepareAndRun( + 'corepack pnpm jest --bail tmp_exercises --runInBand', + infoStr, + failureStr, +); shell.echo( exercises.length === 1 ? `[Success] Tests passed for ${exercises[0]}` - : `[Success] Tests passed for all ${exercises.length} exercises` + : `[Success] Tests passed for all ${exercises.length} exercises`, ); // Cleanup diff --git a/scripts/stub-check b/scripts/stub-check deleted file mode 100755 index 10cbfb3e88..0000000000 --- a/scripts/stub-check +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env node - -/** - * Run this script (from root directory): npx babel-node scripts/stub-check - * - * This script checks that all exercises have a stub file. - * Ref: https://github.com/exercism/javascript/issues/705 - */ - -const shell = require("shelljs"); -const helpers = require("./helpers"); - -const noStubs = helpers.assignments.filter( - (assignment) => !helpers.hasStub(assignment) -); - -if (noStubs.length > 0) { - shell.echo("[Error]: No stub files found for following exercises:"); - shell.echo(noStubs.join("\n")); - shell.exit(1); -} - -if (shell.env["ASSIGNMENT"]) { - shell.echo(`[Success]: Stub file present for ${shell.env["ASSIGNMENT"]}`); -} else { - shell.echo("[Success]: Stub files present for all exercises!"); -} diff --git a/scripts/stub-check.mjs b/scripts/stub-check.mjs new file mode 100644 index 0000000000..3ba935af9c --- /dev/null +++ b/scripts/stub-check.mjs @@ -0,0 +1,29 @@ +#!/usr/bin/env node + +/** + * Run this script (from root directory): + * + * $ corepack pnpm node scripts/stub-check.mjs + * + * This script checks that all exercises have a stub file. + * Ref: https://github.com/exercism/javascript/issues/705 + */ + +import shell from 'shelljs'; +import * as helpers from './helpers.mjs'; + +const noStubs = helpers.assignments.filter( + (assignment) => !helpers.hasStub(assignment), +); + +if (noStubs.length > 0) { + shell.echo('[Error]: No stub files found for following exercises:'); + shell.echo(noStubs.join('\n')); + shell.exit(1); +} + +if (shell.env['ASSIGNMENT']) { + shell.echo(`[Success]: Stub file present for ${shell.env['ASSIGNMENT']}`); +} else { + shell.echo('[Success]: Stub files present for all exercises!'); +} diff --git a/scripts/sync b/scripts/sync.mjs old mode 100755 new mode 100644 similarity index 74% rename from scripts/sync rename to scripts/sync.mjs index 67321e2567..d435fd2304 --- a/scripts/sync +++ b/scripts/sync.mjs @@ -1,7 +1,9 @@ #!/usr/bin/env node /** - * Run this script (from root directory): npx babel-node scripts/sync + * Run this script (from root directory): + * + * $ corepack yarn sync * * This script is used to copy the following files to all exercises and keep * them in sync: @@ -15,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); @@ -26,30 +29,41 @@ function copyConfigForAssignment(assignment) { const packageJson = getCurrentPackageJson(assignmentPackageFilename); const basePackageJson = JSON.parse( - shell.cat('exercise-package.json').toString() + shell.cat('exercise-package.json').toString(), ); const mergedPackageJson = helpers.mergePackageJsons( basePackageJson, packageJson, - assignment + assignment, ); shell .ShellString(JSON.stringify(mergedPackageJson, undefined, 2) + '\n') .to(assignmentPackageFilename); - ['.eslintrc', '.npmrc', 'babel.config.js', 'LICENSE', '.gitignore'].forEach( - (file) => { - shell.cp(file, destination); - } - ); + // DELETE legacy + ['.eslintignore', '.eslintrc'].forEach((file) => { + const source = path.join(destination, file); + shell.rm('-f', source); + }); + + [ + '.npmrc', + 'babel.config.js', + 'eslint.config.mjs', + 'jest.config.js', + 'LICENSE', + '.gitignore', + ].forEach((file) => { + shell.cp(file, destination); + }); } function getCurrentPackageJson(assignmentPackageFilename) { const packageFile = shell.cat(assignmentPackageFilename).toString(); if (!packageFile) { const packageJson = JSON.parse( - shell.cat('exercise-package.json').toString() + shell.cat('exercise-package.json').toString(), ); const conceptName = path diff --git a/scripts/test b/scripts/test deleted file mode 100755 index fff22bb857..0000000000 --- a/scripts/test +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env node - -/** - * Run this script (from root directory): npx babel-node scripts/test - * - * This runs `jest` tests for all sample solutions - */ - -const shell = require("shelljs"); -const helpers = require("./helpers"); -const assignment = shell.env["ASSIGNMENT"]; - -const infoStr = assignment - ? "\nRunning tests for " + assignment + "..." - : "\nRunning tests for all exercises..."; -const failureStr = "[Failure] Tests failed!"; - -// Copies the necessary files -shell.env["PREPARE"] = true; - -// Cleans up after -shell.env["CLEANUP"] = true; - -helpers.prepareAndRun("npx jest --bail tmp_exercises", infoStr, failureStr); diff --git a/scripts/test.mjs b/scripts/test.mjs new file mode 100644 index 0000000000..fc88e19483 --- /dev/null +++ b/scripts/test.mjs @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +/** + * Run this script (from root directory): + * + * $ corepack pnpm node scripts/test.mjs + * + * This runs `jest` tests for all sample solutions + */ + +const shell = require('shelljs'); +const helpers = require('./helpers'); +const assignment = shell.env['ASSIGNMENT']; + +const infoStr = assignment + ? '\nRunning tests for ' + assignment + '...' + : '\nRunning tests for all exercises...'; +const failureStr = '[Failure] Tests failed!'; + +// Copies the necessary files +shell.env['PREPARE'] = true; + +// Cleans up after +shell.env['CLEANUP'] = true; + +helpers.prepareAndRun( + 'corepack pnpm jest --bail tmp_exercises', + infoStr, + failureStr, +); From a11146d85f0078efe69fdd7c1bce913b55b80c50 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Fri, 18 Oct 2024 21:23:28 +0200 Subject: [PATCH 02/11] Start switching workflows to pnpm --- .github/workflows/action-format.yml | 12 ++++++--- .github/workflows/action-sync.yml | 6 +++-- .github/workflows/ci.js.yml | 22 ++++++++++----- .github/workflows/pr.ci.js.yml | 28 +++++++++----------- .github/workflows/verify-code-formatting.yml | 7 +---- scripts/helpers.mjs | 15 +++-------- 6 files changed, 46 insertions(+), 44 deletions(-) diff --git a/.github/workflows/action-format.yml b/.github/workflows/action-format.yml index aafef6598d..a4d279086e 100644 --- a/.github/workflows/action-format.yml +++ b/.github/workflows/action-format.yml @@ -60,12 +60,18 @@ jobs: git clone $HEAD_REPO . git checkout -b "$HEAD_REF" "origin/$HEAD_REF" - - name: Use Node.js LTS (18.x) + - name: Enable corepack to fix https://github.com/actions/setup-node/pull/901 + run: corepack enable pnpm + + - name: Use Node.js LTS (20.x) uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b with: - node-version: '18' + node-version: 20.x + cache: 'pnpm' + - name: Install project development dependencies - run: npm install --no-save + run: corepack pnpm install --no-save + - name: 'Format code' run: ./bin/format.sh diff --git a/.github/workflows/action-sync.yml b/.github/workflows/action-sync.yml index 950f9230a8..7a3c59ec7d 100644 --- a/.github/workflows/action-sync.yml +++ b/.github/workflows/action-sync.yml @@ -61,9 +61,11 @@ jobs: git checkout -b "$HEAD_REF" "origin/$HEAD_REF" - name: 'Install dependencies' - run: yarn install + run: | + corepack enable pnpm + corepack pnpm install - name: 'Sync exercises' - run: npx babel-node scripts/sync + run: corepack pnpm node scripts/sync.mjs - name: 'Commit changes' run: | diff --git a/.github/workflows/ci.js.yml b/.github/workflows/ci.js.yml index a0bd09ed76..5dc5559e43 100644 --- a/.github/workflows/ci.js.yml +++ b/.github/workflows/ci.js.yml @@ -13,33 +13,41 @@ jobs: steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - - name: Use Node.js LTS (18.x) + - name: Enable corepack to fix https://github.com/actions/setup-node/pull/901 + run: corepack enable pnpm + + - name: Use Node.js LTS (20.x) uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b with: - node-version: '18' + node-version: 20.x + cache: 'pnpm' - name: Install project dependencies - run: npm ci + run: corepack pnpm install --frozen-lockfile - name: Run exercism/javascript ci precheck (checks config, lint code, and runs tests) for all exercises - run: npx babel-node scripts/ci-check + run: corepack pnpm node scripts/ci-check.mjs ci: runs-on: ubuntu-22.04 strategy: matrix: - node-version: ['18', '20'] + node-version: [20.x, 22.x] steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - name: Enable corepack to fix https://github.com/actions/setup-node/pull/901 + run: corepack enable pnpm + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b with: node-version: ${{ matrix.node-version }} + cache: 'pnpm' - name: Install project dependencies - run: npm ci + run: corepack pnpm install --frozen-lockfile - name: Run exercism/javascript ci (checks config, lint code, and runs tests) for all exercises - run: npx babel-node scripts/ci + run: corepack pnpm node scripts/ci.mjs diff --git a/.github/workflows/pr.ci.js.yml b/.github/workflows/pr.ci.js.yml index ebb70812f8..ea5a3e22bd 100644 --- a/.github/workflows/pr.ci.js.yml +++ b/.github/workflows/pr.ci.js.yml @@ -12,44 +12,42 @@ jobs: steps: - name: Checkout PR uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - name: Enable corepack to fix https://github.com/actions/setup-node/pull/901 + run: corepack enable pnpm - - name: Use Node.js LTS (18.x) + - name: Use Node.js LTS (20.x) uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b with: - node-version: '18' + node-version: 20.x + cache: 'pnpm' - name: Install project dependencies - run: npm ci + run: corepack pnpm install --frozen-lockfile - name: Run exercism/javascript ci precheck (stub files, config integrity) for changed exercises - run: | - PULL_REQUEST_URL=$(jq -r ".pull_request.url" "$GITHUB_EVENT_PATH") - curl --url $"${PULL_REQUEST_URL}/files?per_page=100" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | \ - jq -c '.[] | select(.status == "added" or .status == "modified") | select(.filename | match("\\.(js|jsx|md|json)$")) | .filename' | \ - xargs -r npx babel-node scripts/pr-check + run: corepack pnpm node scripts/pr.mjs ${{ steps.changed-files.outputs.changed_files }} ci: runs-on: ubuntu-22.04 strategy: matrix: - node-version: ['18', '20'] + node-version: [20.x, 22.x] steps: - name: Checkout PR uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - name: Enable corepack to fix https://github.com/actions/setup-node/pull/901 + run: corepack enable pnpm - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b with: node-version: ${{ matrix.node-version }} + cache: 'pnpm' - name: Install project dependencies - run: npm ci + run: corepack pnpm install --frozen-lockfile - name: Run exercism/javascript ci (runs tests) for changed/added exercises - run: | - PULL_REQUEST_URL=$(jq -r ".pull_request.url" "$GITHUB_EVENT_PATH") - curl --url $"${PULL_REQUEST_URL}/files?per_page=100" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | \ - jq -c '.[] | select(.status == "added" or .status == "modified") | select(.filename | match("\\.(js|jsx|md|json)$")) | .filename' | \ - xargs -r npx babel-node scripts/pr + run: corepack pnpm node scripts/pr.mjs ${{ steps.changed-files.outputs.changed_files }} diff --git a/.github/workflows/verify-code-formatting.yml b/.github/workflows/verify-code-formatting.yml index 8845830899..b0b20a468a 100644 --- a/.github/workflows/verify-code-formatting.yml +++ b/.github/workflows/verify-code-formatting.yml @@ -11,11 +11,6 @@ jobs: steps: - name: 'Checkout code' uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - - name: Use Node.js LTS (18.x) - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b - with: - node-version: '18' - - name: Install project development dependencies - run: npm i + - name: 'Verify formatting of all files' run: ./bin/check-formatting.sh diff --git a/scripts/helpers.mjs b/scripts/helpers.mjs index ebb3590324..5c596663b7 100644 --- a/scripts/helpers.mjs +++ b/scripts/helpers.mjs @@ -37,14 +37,13 @@ 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(` -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. +Expected ${`{type}${path.sep}{slug}`}, actual: ${assignment}. +- Use ${`concept${path.sep}${assignment}`} if ${assignment} is a concept exercise. +- Use ${`practice${path.sep}${assignment}`} if ${assignment} is a practice exercise. `.trim()); } @@ -172,13 +171,7 @@ export function cleanUp() { // These packages will be skipped while performing checksum. In other words, // these packages are only interesting for maintaining this repository and not // for the student. -const SKIP_PACKAGES_FOR_CHECKSUM = [ - 'shelljs', - '@babel/node', - 'prettier', - 'diff', - 'chalk', -]; +const SKIP_PACKAGES_FOR_CHECKSUM = ['shelljs', 'prettier']; // These fields may differ between package.json files. const SKIP_FIELDS_FOR_CHECKSUM = [ From 3690000aa34325922b1e47979a9f99e17ba63887 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Fri, 18 Oct 2024 21:35:00 +0200 Subject: [PATCH 03/11] Update docs for corepack and pnpm --- CONTRIBUTING.md | 14 +++++++------- config/exercise-readme-insert.md | 10 ++++++++-- docs/INSTALLATION.md | 31 ++++++++++++++++++------------- docs/TESTS.md | 6 +++--- exercises/shared/.docs/tests.md | 16 +++++++--------- 5 files changed, 43 insertions(+), 34 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 835c0e5dc4..ec294a03a0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ It's not uncommon that people discover incorrect implementations of certain test We welcome contributions of all sorts and sizes, from reporting issues to submitting patches, as well as joining the current [discussions 💬][issue-discussion]. -> [!WARNING] +> [!WARNING] > This guide is slightly outdated and doesn't hold the V3 changes yet. --- @@ -168,7 +168,7 @@ You may improve these files by making the required changes and opening a new Pul ## Tools You'll need LTS or higher Node.js to contribute to the _code_ in this repository. -Run `npm install` in the root to be able to run the scripts as listed below. +Run `corepack pnpm install` in the root to be able to run the scripts as listed below. We use the following dependencies: - `shelljs` to provide shell interface to scripts @@ -177,9 +177,9 @@ We use the following dependencies: - `babel` to transpile everything so it works _regardless of your version of Node.js_. We also use `prettier` to format the files. -**Prettier is installed when using `npm install`**. -You may use `npx babel-node scripts/format` to run prettier. -If you want to auto-format using your editor, install via `npm install` and it will Just Work™. +**Prettier is installed when using `corepack pnpm install`**. +You may use `corepack pnpm node scripts/format.mjs` to run prettier. +If you want to auto-format using your editor, install via `corepack pnpm install` and it will Just Work™. ### Fetch configlet @@ -210,7 +210,7 @@ It then interactively gives the maintainer the option to include or exclude test We have various `scripts` to aid with maintaining and contributing to this repository. -> [!IMPORTANT] +> [!IMPORTANT] > If you encounter the following error: > > ```text @@ -243,7 +243,7 @@ We have various `scripts` to aid with maintaining and contributing to this repos ``` Use this action to format all the files using the correct version of prettier. -If you want your editor to do this automatically, install the project development dependencies (`npm i`), which includes `prettier`. +If you want your editor to do this automatically, install the project development dependencies (`corepack pnpm install`), which includes `prettier`. The correct version will be extracted when running `.github/workflows/verify-code-formatting.yml`. #### `lint` diff --git a/config/exercise-readme-insert.md b/config/exercise-readme-insert.md index d2fa14273b..7927d0366a 100644 --- a/config/exercise-readme-insert.md +++ b/config/exercise-readme-insert.md @@ -14,7 +14,13 @@ Please `cd` into exercise directory before running all below commands. Install assignment dependencies: ```bash -$ npm install +$ corepack pnpm install +``` + +If `corepack` complains about not being enabled, you can do so by running: + +```bash +corepack enable pnpm ``` ## Making the test suite pass @@ -22,7 +28,7 @@ $ npm install Execute the tests with: ```bash -$ npm test +$ corepack pnpm test ``` In the test suites all tests but the first have been skipped. diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index a32eab521c..ee9a3f4818 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -70,6 +70,14 @@ The version should match the one on the website. > > Close any open terminals and open a new one. +## Enabling corepack + +In order to use a versioned package manager compatible with this track, `corepack` needs to be enabled once: + +```shell +corepack enable pnpm +``` + ## Assignment Requirements Please follow [these instructions][cli-walkthrough] to download the Exercism CLI for your OS. @@ -84,26 +92,23 @@ Each assignment then needs some tools to run the tests. They can be installed running this command within each assignment directory: ```shell -npm install +corepack pnpm install ``` -> [!IMPORTANT] > _**Help**_: `'' is missing / cannot be found` -> -> If you see this after _upgrading_ your exercise, welcome to npm 7. -> Delete `node_modules` and `package-lock.json` and re-run the command to resolve this. - -If you're concerned about disk space and are okay installing another tool, take a look at [pnpm](https://pnpm.io/), which ensure only one copy of each package-version is ever installed on disk. -In this case, run `pnpm install` instead of `npm install`, and everything should work as expected. +As this track has switched to pnpm, you should not be concerned about disk space. +Take a look at [pnpm](https://pnpm.io/), which ensures only one copy of each package-version is ever installed on disk. -> **But what is npm and why does this work?** +> **But what is corepack and why does this work?** > > You don't need this information to complete the JavaScript track, but if you're eager to understand what just happened, the following paragraphs are for you: > -> This works because `npm` is a package manager that comes bundled with Node.js, which has been installed per the steps above. -> The `npm` command looks for a `package.json` file, which is present in _each_ assignment folder. -> This file lists the `"dependencies"` above, which are then downloaded by `npm` and placed into the `node_modules` folder. +> This works because `corepack` is a tool that comes bundled with Node.js, which has been installed per the steps above. +> It can install the package manager `pnpm`. It configures the system +> The `corepack` command looks for a `package.json` file, which is present in _each_ assignment folder. +> It then checks `packageManager` which matches `pnpm`, so it may continue. If necessary it will upgrade `pnpm` first. +> This file also lists the `"dependencies"` above, which are then downloaded by `pnpm` and placed into a local cache. > -> The scripts in the `package.json` use the binaries from the local `node_modules` folder, and it's these scripts that are used to run the tests, as listed in the `exercise` description. +> The scripts in the `package.json` use the binaries from the local cache, and it's these scripts that are used to run the tests, as listed in the `exercise` description. [web-nodejs]: https://nodejs.org/ [web-nodejs-download]: https://nodejs.org/en/download/ diff --git a/docs/TESTS.md b/docs/TESTS.md index 5923ad06f9..c45bf03a65 100644 --- a/docs/TESTS.md +++ b/docs/TESTS.md @@ -3,20 +3,20 @@ Execute the tests with: ```shell -npm run test +corepack pnpm test ``` Be sure your code follows best practices and coding styles, as other users do, with ESLint, a tool to perform static analysis on your code. Sometimes, tools like this save you some time detecting typos or silly mistakes in your JavaScript code: ```shell -npm run lint +corepack pnpm lint ``` You can also run Jest in "watch" mode, which will re-run your tests automatically when you save changes to the code or test module: ```shell -npm run watch +corepack pnpm watch ``` ## Understanding Skip Tests diff --git a/exercises/shared/.docs/tests.md b/exercises/shared/.docs/tests.md index c7f3fdb47a..45f813eb55 100644 --- a/exercises/shared/.docs/tests.md +++ b/exercises/shared/.docs/tests.md @@ -9,11 +9,13 @@ Go through the setup [instructions for JavaScript][docs-exercism-javascript] to Install assignment dependencies: ```shell -# Using npm -npm install +corepack pnpm install +``` + +If `corepack` complains about not being enabled, you can do so by running: -# Alternatively using yarn -yarn +```bash +corepack enable pnpm ``` ## Making the test suite pass @@ -22,11 +24,7 @@ All exercises come with a test suite to help you validate your solution before s You can execute these tests by opening a command prompt in the exercise's directory, and then running: ```bash -# Using npm -npm test - -# Alternatively using yarn -yarn test +corepack pnpm test ``` In some test suites all tests but the first have been skipped. From c900eb4407e35620b1dc29f70fb12e346a77e4d0 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Fri, 18 Oct 2024 21:37:03 +0200 Subject: [PATCH 04/11] Add missing step for changed files --- .github/workflows/pr.ci.js.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/pr.ci.js.yml b/.github/workflows/pr.ci.js.yml index ea5a3e22bd..182bd5fd0b 100644 --- a/.github/workflows/pr.ci.js.yml +++ b/.github/workflows/pr.ci.js.yml @@ -12,6 +12,18 @@ jobs: steps: - name: Checkout PR uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + with: + fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }} + + - name: Get changed files + id: changed-files + run: | + if ${{ github.event_name == 'pull_request' }}; then + echo "changed_files=$(git diff --name-only --diff-filter=ACM -r HEAD^1 HEAD | xargs)" >> $GITHUB_OUTPUT + else + echo "changed_files=$(git diff --name-only --diff-filter=ACM ${{ github.event.before }} ${{ github.event.after }} | xargs)" >> $GITHUB_OUTPUT + fi + - name: Enable corepack to fix https://github.com/actions/setup-node/pull/901 run: corepack enable pnpm @@ -37,6 +49,18 @@ jobs: steps: - name: Checkout PR uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + with: + fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }} + + - name: Get changed files + id: changed-files + run: | + if ${{ github.event_name == 'pull_request' }}; then + echo "changed_files=$(git diff --name-only --diff-filter=ACM -r HEAD^1 HEAD | xargs)" >> $GITHUB_OUTPUT + else + echo "changed_files=$(git diff --name-only --diff-filter=ACM ${{ github.event.before }} ${{ github.event.after }} | xargs)" >> $GITHUB_OUTPUT + fi + - name: Enable corepack to fix https://github.com/actions/setup-node/pull/901 run: corepack enable pnpm From b07b336a6d809a11a551281fc83737728442a366 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Fri, 18 Oct 2024 22:02:36 +0200 Subject: [PATCH 05/11] Add jest imports --- .vscode/settings.json | 3 ++- .../concept/amusement-park/amusement-park.spec.js | 5 +++-- .../annalyns-infiltration.spec.js | 5 +++-- exercises/concept/bird-watcher/bird-watcher.spec.js | 3 ++- .../coordinate-transformation.spec.js | 5 +++-- exercises/concept/custom-signs/custom-signs.spec.js | 7 +++---- .../elyses-analytic-enchantments/enchantments.spec.js | 9 ++++----- .../enchantments.spec.js | 3 +-- .../concept/elyses-enchantments/enchantments.spec.js | 11 +++++------ .../elyses-looping-enchantments/enchantments.spec.js | 1 + .../enchantments.spec.js | 11 +++++------ .../concept/factory-sensors/factory-sensors.spec.js | 5 +++-- .../concept/freelancer-rates/freelancer-rates.spec.js | 3 +-- exercises/concept/fruit-picker/fruit-picker.spec.js | 7 +++---- .../concept/high-score-board/high-score-board.spec.js | 7 ++++--- .../concept/lasagna-master/lasagna-master.spec.js | 3 ++- exercises/concept/lasagna/lasagna.spec.js | 3 ++- exercises/concept/lucky-numbers/lucky-numbers.spec.js | 3 ++- exercises/concept/mixed-juices/mixed-juices.spec.js | 3 ++- exercises/concept/nullability/nullability.spec.js | 1 + .../concept/ozans-playlist/ozans-playlist.spec.js | 1 + exercises/concept/pizza-order/pizza-order.spec.js | 3 ++- .../poetry-club-door-policy/door-policy.spec.js | 7 +++---- .../concept/regular-chatbot/regular-chatbot.spec.js | 5 +++-- exercises/concept/translation-service/service.spec.js | 9 ++++----- .../concept/vehicle-purchase/vehicle-purchase.spec.js | 5 +++-- .../concept/windowing-system/windowing-system.spec.js | 3 ++- exercises/practice/accumulate/accumulate.spec.js | 1 + exercises/practice/acronym/acronym.spec.js | 1 + .../practice/affine-cipher/affine-cipher.spec.js | 3 ++- .../practice/all-your-base/all-your-base.spec.js | 1 + exercises/practice/allergies/allergies.spec.js | 1 + exercises/practice/alphametics/alphametics.spec.js | 1 + exercises/practice/anagram/anagram.spec.js | 1 + .../armstrong-numbers/armstrong-numbers.spec.js | 1 + .../practice/atbash-cipher/atbash-cipher.spec.js | 3 ++- exercises/practice/bank-account/bank-account.spec.js | 1 + exercises/practice/beer-song/beer-song.spec.js | 1 + .../binary-search-tree/binary-search-tree.spec.js | 1 + .../practice/binary-search/binary-search.spec.js | 1 + exercises/practice/binary/binary.spec.js | 8 ++++++++ exercises/practice/bob/bob.spec.js | 1 + exercises/practice/book-store/book-store.spec.js | 1 + exercises/practice/bottle-song/bottle-song.spec.js | 1 + exercises/practice/bowling/bowling.spec.js | 1 + exercises/practice/change/change.spec.js | 1 + .../practice/circular-buffer/circular-buffer.spec.js | 3 ++- exercises/practice/clock/clock.spec.js | 1 + .../collatz-conjecture/collatz-conjecture.spec.js | 1 + .../practice/complex-numbers/complex-numbers.spec.js | 1 + exercises/practice/connect/connect.spec.js | 1 + .../practice/crypto-square/crypto-square.spec.js | 1 + exercises/practice/custom-set/custom-set.spec.js | 1 + exercises/practice/darts/darts.spec.js | 1 + exercises/practice/diamond/diamond.spec.js | 1 + .../difference-of-squares.spec.js | 1 + .../practice/diffie-hellman/diffie-hellman.spec.js | 1 + .../practice/dnd-character/dnd-character.spec.js | 1 + exercises/practice/dominoes/dominoes.spec.js | 1 + exercises/practice/eliuds-eggs/eliuds-eggs.spec.js | 1 + exercises/practice/etl/etl.spec.js | 1 + .../practice/flatten-array/flatten-array.spec.js | 1 + exercises/practice/food-chain/food-chain.spec.js | 1 + exercises/practice/forth/forth.spec.js | 1 + exercises/practice/gigasecond/gigasecond.spec.js | 1 + exercises/practice/go-counting/go-counting.spec.js | 1 + exercises/practice/grade-school/grade-school.spec.js | 1 + exercises/practice/grains/grains.spec.js | 1 + exercises/practice/hamming/hamming.spec.js | 1 + exercises/practice/hello-world/hello-world.spec.js | 1 + exercises/practice/hexadecimal/hexadecimal.spec.js | 1 + exercises/practice/high-scores/high-scores.spec.js | 1 + exercises/practice/house/house.spec.js | 1 + .../practice/isbn-verifier/isbn-verifier.spec.js | 1 + exercises/practice/isogram/isogram.spec.js | 1 + .../kindergarten-garden/kindergarten-garden.spec.js | 1 + exercises/practice/knapsack/knapsack.spec.js | 1 + .../largest-series-product.spec.js | 1 + exercises/practice/leap/leap.spec.js | 1 + exercises/practice/ledger/ledger.spec.js | 1 + exercises/practice/lens-person/lens-person.spec.js | 1 + exercises/practice/linked-list/linked-list.spec.js | 1 + exercises/practice/list-ops/list-ops.spec.js | 1 + exercises/practice/luhn/luhn.spec.js | 1 + exercises/practice/markdown/markdown.spec.js | 1 + .../matching-brackets/matching-brackets.spec.js | 1 + exercises/practice/matrix/matrix.spec.js | 1 + exercises/practice/meetup/meetup.spec.js | 1 + exercises/practice/micro-blog/micro-blog.spec.js | 1 + exercises/practice/minesweeper/minesweeper.spec.js | 1 + exercises/practice/nth-prime/nth-prime.spec.js | 1 + .../nucleotide-count/nucleotide-count.spec.js | 1 + exercises/practice/ocr-numbers/ocr-numbers.spec.js | 1 + exercises/practice/octal/octal.spec.js | 1 + .../palindrome-products/palindrome-products.spec.js | 1 + exercises/practice/pangram/pangram.spec.js | 1 + .../parallel-letter-frequency.spec.js | 9 +++++---- .../pascals-triangle/pascals-triangle.spec.js | 1 + .../practice/perfect-numbers/perfect-numbers.spec.js | 1 + exercises/practice/phone-number/phone-number.spec.js | 1 + exercises/practice/pig-latin/pig-latin.spec.js | 1 + .../practice/point-mutations/point-mutations.spec.js | 1 + exercises/practice/poker/poker.spec.js | 1 + .../practice/prime-factors/prime-factors.spec.js | 1 + exercises/practice/promises/promises.spec.js | 3 ++- .../protein-translation/protein-translation.spec.js | 1 + exercises/practice/proverb/proverb.spec.js | 1 + .../pythagorean-triplet/pythagorean-triplet.spec.js | 1 + exercises/practice/queen-attack/queen-attack.spec.js | 1 + .../rail-fence-cipher/rail-fence-cipher.spec.js | 3 ++- exercises/practice/raindrops/raindrops.spec.js | 1 + .../rational-numbers/rational-numbers.spec.js | 1 + exercises/practice/react/react.spec.js | 3 ++- exercises/practice/rectangles/rectangles.spec.js | 1 + .../resistor-color-duo/resistor-color-duo.spec.js | 1 + .../resistor-color-trio/resistor-color-trio.spec.js | 1 + .../practice/resistor-color/resistor-color.spec.js | 1 + exercises/practice/rest-api/rest-api.spec.js | 1 + .../practice/reverse-string/reverse-string.spec.js | 1 + .../rna-transcription/rna-transcription.spec.js | 1 + exercises/practice/robot-name/robot-name.spec.js | 8 ++++++++ .../practice/robot-simulator/robot-simulator.spec.js | 3 ++- .../practice/roman-numerals/roman-numerals.spec.js | 1 + .../rotational-cipher/rotational-cipher.spec.js | 1 + .../run-length-encoding/run-length-encoding.spec.js | 3 ++- .../practice/saddle-points/saddle-points.spec.js | 1 + exercises/practice/satellite/satellite.spec.js | 1 + exercises/practice/say/say.spec.js | 1 + .../practice/scale-generator/scale-generator.spec.js | 1 + .../practice/scrabble-score/scrabble-score.spec.js | 1 + .../secret-handshake/secret-handshake.spec.js | 1 + exercises/practice/series/series.spec.js | 1 + exercises/practice/sieve/sieve.spec.js | 1 + .../practice/simple-cipher/simple-cipher.spec.js | 1 + .../simple-linked-list/simple-linked-list.spec.js | 3 ++- exercises/practice/space-age/space-age.spec.js | 1 + .../practice/spiral-matrix/spiral-matrix.spec.js | 1 + exercises/practice/square-root/square-root.spec.js | 1 + .../state-of-tic-tac-toe/state-of-tic-tac-toe.spec.js | 1 + exercises/practice/strain/strain.spec.js | 3 ++- exercises/practice/sublist/sublist.spec.js | 1 + .../sum-of-multiples/sum-of-multiples.spec.js | 1 + exercises/practice/tournament/tournament.spec.js | 1 + exercises/practice/transpose/transpose.spec.js | 1 + exercises/practice/triangle/triangle.spec.js | 1 + exercises/practice/trinary/trinary.spec.js | 1 + exercises/practice/twelve-days/twelve-days.spec.js | 1 + exercises/practice/two-bucket/two-bucket.spec.js | 1 + exercises/practice/two-fer/two-fer.spec.js | 1 + .../variable-length-quantity.spec.js | 3 ++- exercises/practice/word-count/word-count.spec.js | 1 + exercises/practice/word-search/word-search.spec.js | 1 + exercises/practice/wordy/wordy.spec.js | 1 + exercises/practice/yacht/yacht.spec.js | 1 + exercises/practice/zebra-puzzle/zebra-puzzle.spec.js | 1 + exercises/practice/zipper/zipper.spec.js | 1 + 156 files changed, 228 insertions(+), 76 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 47c6a8b260..1be1d7ba7d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,5 +7,6 @@ // because of how whitespace is (not) rendered. 65 ] - } + }, + "cSpell.words": ["xtest"] } diff --git a/exercises/concept/amusement-park/amusement-park.spec.js b/exercises/concept/amusement-park/amusement-park.spec.js index 6b0e7aedae..c25f8d9fc1 100644 --- a/exercises/concept/amusement-park/amusement-park.spec.js +++ b/exercises/concept/amusement-park/amusement-park.spec.js @@ -1,9 +1,10 @@ +import { describe, expect, test } from '@jest/globals'; import { createVisitor, + gtcVersion, revokeTicket, - ticketStatus, simpleTicketStatus, - gtcVersion, + ticketStatus, } from './amusement-park'; describe('createVisitor', () => { diff --git a/exercises/concept/annalyns-infiltration/annalyns-infiltration.spec.js b/exercises/concept/annalyns-infiltration/annalyns-infiltration.spec.js index 3ad09917af..d373447db8 100644 --- a/exercises/concept/annalyns-infiltration/annalyns-infiltration.spec.js +++ b/exercises/concept/annalyns-infiltration/annalyns-infiltration.spec.js @@ -1,8 +1,9 @@ +import { describe, expect, test } from '@jest/globals'; import { canExecuteFastAttack, - canSpy, - canSignalPrisoner, canFreePrisoner, + canSignalPrisoner, + canSpy, } from './annalyns-infiltration'; describe('can execute fast attack', () => { diff --git a/exercises/concept/bird-watcher/bird-watcher.spec.js b/exercises/concept/bird-watcher/bird-watcher.spec.js index dbd630a816..db170033c3 100644 --- a/exercises/concept/bird-watcher/bird-watcher.spec.js +++ b/exercises/concept/bird-watcher/bird-watcher.spec.js @@ -1,4 +1,5 @@ -import { totalBirdCount, birdsInWeek, fixBirdCountLog } from './bird-watcher'; +import { describe, expect, test } from '@jest/globals'; +import { birdsInWeek, fixBirdCountLog, totalBirdCount } from './bird-watcher'; describe('totalBirdCount', () => { test('calculates the correct total number of birds', () => { diff --git a/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js b/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js index 582fe25741..e9350689d6 100644 --- a/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js +++ b/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js @@ -1,8 +1,9 @@ +import { describe, expect, test } from '@jest/globals'; import { - translate2d, - scale2d, composeTransform, memoizeTransform, + scale2d, + translate2d, } from './coordinate-transformation'; const fakeTransform = () => { diff --git a/exercises/concept/custom-signs/custom-signs.spec.js b/exercises/concept/custom-signs/custom-signs.spec.js index a5e70ef0cb..3c805c909e 100644 --- a/exercises/concept/custom-signs/custom-signs.spec.js +++ b/exercises/concept/custom-signs/custom-signs.spec.js @@ -1,10 +1,9 @@ -//@ts-check - +import { describe, expect, test } from '@jest/globals'; import { - buildSign, buildBirthdaySign, - graduationFor, + buildSign, costOf, + graduationFor, } from './custom-signs'; describe('buildSign', () => { diff --git a/exercises/concept/elyses-analytic-enchantments/enchantments.spec.js b/exercises/concept/elyses-analytic-enchantments/enchantments.spec.js index 295cb21ef3..31e9ee1aae 100644 --- a/exercises/concept/elyses-analytic-enchantments/enchantments.spec.js +++ b/exercises/concept/elyses-analytic-enchantments/enchantments.spec.js @@ -1,12 +1,11 @@ -// @ts-check - +import { describe, expect, test } from '@jest/globals'; import { - getCardPosition, doesStackIncludeCard, - isEachCardEven, doesStackIncludeOddCard, - getFirstOddCard, + getCardPosition, getFirstEvenCardPosition, + getFirstOddCard, + isEachCardEven, } from './enchantments'; describe('getCardPosition', () => { diff --git a/exercises/concept/elyses-destructured-enchantments/enchantments.spec.js b/exercises/concept/elyses-destructured-enchantments/enchantments.spec.js index 7f61a11cb8..60a15cd4c0 100644 --- a/exercises/concept/elyses-destructured-enchantments/enchantments.spec.js +++ b/exercises/concept/elyses-destructured-enchantments/enchantments.spec.js @@ -1,5 +1,4 @@ -// @ts-check - +import { describe, expect, test } from '@jest/globals'; import { discardTopCard, getFirstCard, diff --git a/exercises/concept/elyses-enchantments/enchantments.spec.js b/exercises/concept/elyses-enchantments/enchantments.spec.js index 43c408d9a2..9325f5bd08 100644 --- a/exercises/concept/elyses-enchantments/enchantments.spec.js +++ b/exercises/concept/elyses-enchantments/enchantments.spec.js @@ -1,14 +1,13 @@ -//@ts-check - +import { describe, expect, test } from '@jest/globals'; import { + checkSizeOfStack, getItem, - setItem, - insertItemAtTop, insertItemAtBottom, + insertItemAtTop, removeItem, - removeItemFromTop, removeItemAtBottom, - checkSizeOfStack, + removeItemFromTop, + setItem, } from './enchantments'; describe('pick a card', () => { diff --git a/exercises/concept/elyses-looping-enchantments/enchantments.spec.js b/exercises/concept/elyses-looping-enchantments/enchantments.spec.js index ff829883fc..3009f52f79 100644 --- a/exercises/concept/elyses-looping-enchantments/enchantments.spec.js +++ b/exercises/concept/elyses-looping-enchantments/enchantments.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from '@jest/globals'; import { cardTypeCheck, determineOddEvenCards } from './enchantments'; const TYPE_IS_ODD = false; diff --git a/exercises/concept/elyses-transformative-enchantments/enchantments.spec.js b/exercises/concept/elyses-transformative-enchantments/enchantments.spec.js index 320ad57573..0b10805fa7 100644 --- a/exercises/concept/elyses-transformative-enchantments/enchantments.spec.js +++ b/exercises/concept/elyses-transformative-enchantments/enchantments.spec.js @@ -1,13 +1,12 @@ -// @ts-check - +import { describe, expect, test } from '@jest/globals'; import { - seeingDouble, - threeOfEachThree, middleTwo, - sandwichTrick, - twoIsSpecial, perfectlyOrdered, reorder, + sandwichTrick, + seeingDouble, + threeOfEachThree, + twoIsSpecial, } from './enchantments'; describe('seeingDouble', () => { diff --git a/exercises/concept/factory-sensors/factory-sensors.spec.js b/exercises/concept/factory-sensors/factory-sensors.spec.js index 9661decf7f..999ffc8d9e 100644 --- a/exercises/concept/factory-sensors/factory-sensors.spec.js +++ b/exercises/concept/factory-sensors/factory-sensors.spec.js @@ -1,9 +1,10 @@ +import { beforeEach, describe, expect, test } from '@jest/globals'; import { + ArgumentError, checkHumidityLevel, - reportOverheating, monitorTheMachine, - ArgumentError, OverheatingError, + reportOverheating, } from './factory-sensors'; describe('checkHumidityLevel', () => { diff --git a/exercises/concept/freelancer-rates/freelancer-rates.spec.js b/exercises/concept/freelancer-rates/freelancer-rates.spec.js index 046d8ac479..d6e8464ce2 100644 --- a/exercises/concept/freelancer-rates/freelancer-rates.spec.js +++ b/exercises/concept/freelancer-rates/freelancer-rates.spec.js @@ -1,5 +1,4 @@ -// @ts-check - +import { describe, expect, test } from '@jest/globals'; import { dayRate, daysInBudget, diff --git a/exercises/concept/fruit-picker/fruit-picker.spec.js b/exercises/concept/fruit-picker/fruit-picker.spec.js index 6d483450fa..675d8a6412 100644 --- a/exercises/concept/fruit-picker/fruit-picker.spec.js +++ b/exercises/concept/fruit-picker/fruit-picker.spec.js @@ -1,8 +1,7 @@ -// @ts-check - -import { notify } from './notifier'; -import { order } from './grocer'; +import { afterEach, describe, expect, test } from '@jest/globals'; import { onError, onSuccess, orderFromGrocer, postOrder } from './fruit-picker'; +import { order } from './grocer'; +import { notify } from './notifier'; jest.mock('./notifier', () => ({ notify: jest.fn(), diff --git a/exercises/concept/high-score-board/high-score-board.spec.js b/exercises/concept/high-score-board/high-score-board.spec.js index 9a4f73260e..d279d882f9 100644 --- a/exercises/concept/high-score-board/high-score-board.spec.js +++ b/exercises/concept/high-score-board/high-score-board.spec.js @@ -1,10 +1,11 @@ +import { describe, expect, test } from '@jest/globals'; import { - createScoreBoard, addPlayer, - removePlayer, - updateScore, applyMondayBonus, + createScoreBoard, normalizeScore, + removePlayer, + updateScore, } from './high-score-board'; describe('createScoreBoard', () => { diff --git a/exercises/concept/lasagna-master/lasagna-master.spec.js b/exercises/concept/lasagna-master/lasagna-master.spec.js index 3181b3f6f0..573007d474 100644 --- a/exercises/concept/lasagna-master/lasagna-master.spec.js +++ b/exercises/concept/lasagna-master/lasagna-master.spec.js @@ -1,8 +1,9 @@ +import { describe, expect, test } from '@jest/globals'; import { + addSecretIngredient, cookingStatus, preparationTime, quantities, - addSecretIngredient, scaleRecipe, } from './lasagna-master'; diff --git a/exercises/concept/lasagna/lasagna.spec.js b/exercises/concept/lasagna/lasagna.spec.js index 0dcd386ab2..10d351ae63 100644 --- a/exercises/concept/lasagna/lasagna.spec.js +++ b/exercises/concept/lasagna/lasagna.spec.js @@ -1,8 +1,9 @@ +import { describe, expect, test } from '@jest/globals'; import { // eslint-disable-next-line import/named EXPECTED_MINUTES_IN_OVEN, - remainingMinutesInOven, preparationTimeInMinutes, + remainingMinutesInOven, totalTimeInMinutes, } from './lasagna'; diff --git a/exercises/concept/lucky-numbers/lucky-numbers.spec.js b/exercises/concept/lucky-numbers/lucky-numbers.spec.js index 801bc6d54b..098c881f06 100644 --- a/exercises/concept/lucky-numbers/lucky-numbers.spec.js +++ b/exercises/concept/lucky-numbers/lucky-numbers.spec.js @@ -1,4 +1,5 @@ -import { twoSum, luckyNumber, errorMessage } from './lucky-numbers'; +import { describe, expect, test } from '@jest/globals'; +import { errorMessage, luckyNumber, twoSum } from './lucky-numbers'; describe('twoSum', () => { test('sums the numbers correctly for short arrays', () => { diff --git a/exercises/concept/mixed-juices/mixed-juices.spec.js b/exercises/concept/mixed-juices/mixed-juices.spec.js index 3dbb303149..64eeea52c1 100644 --- a/exercises/concept/mixed-juices/mixed-juices.spec.js +++ b/exercises/concept/mixed-juices/mixed-juices.spec.js @@ -1,4 +1,5 @@ -import { timeToMixJuice, limesToCut, remainingOrders } from './mixed-juices'; +import { describe, expect, test } from '@jest/globals'; +import { limesToCut, remainingOrders, timeToMixJuice } from './mixed-juices'; describe('timeToMixJuice', () => { test("returns the correct time for 'Pure Strawberry Joy'", () => { diff --git a/exercises/concept/nullability/nullability.spec.js b/exercises/concept/nullability/nullability.spec.js index a6cf6233e1..fa2dc1b054 100644 --- a/exercises/concept/nullability/nullability.spec.js +++ b/exercises/concept/nullability/nullability.spec.js @@ -1,3 +1,4 @@ +import { describe, expect } from '@jest/globals'; import { printBadge } from './nullability'; describe('nullability', () => { diff --git a/exercises/concept/ozans-playlist/ozans-playlist.spec.js b/exercises/concept/ozans-playlist/ozans-playlist.spec.js index d613498d5d..5047bd1618 100644 --- a/exercises/concept/ozans-playlist/ozans-playlist.spec.js +++ b/exercises/concept/ozans-playlist/ozans-playlist.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from '@jest/globals'; import { addTrack, deleteTrack, diff --git a/exercises/concept/pizza-order/pizza-order.spec.js b/exercises/concept/pizza-order/pizza-order.spec.js index 7af2e206fd..df57f2efb8 100644 --- a/exercises/concept/pizza-order/pizza-order.spec.js +++ b/exercises/concept/pizza-order/pizza-order.spec.js @@ -1,4 +1,5 @@ -import { pizzaPrice, orderPrice } from './pizza-order'; +import { describe, expect } from '@jest/globals'; +import { orderPrice, pizzaPrice } from './pizza-order'; class PizzaOrder { /** diff --git a/exercises/concept/poetry-club-door-policy/door-policy.spec.js b/exercises/concept/poetry-club-door-policy/door-policy.spec.js index 201054bafc..3847542712 100644 --- a/exercises/concept/poetry-club-door-policy/door-policy.spec.js +++ b/exercises/concept/poetry-club-door-policy/door-policy.spec.js @@ -1,10 +1,9 @@ -// @ts-check - +import { describe, expect, test } from '@jest/globals'; import { - frontDoorResponse, + backDoorPassword, backDoorResponse, frontDoorPassword, - backDoorPassword, + frontDoorResponse, } from './door-policy'; const recite = (poem, responseFn) => { diff --git a/exercises/concept/regular-chatbot/regular-chatbot.spec.js b/exercises/concept/regular-chatbot/regular-chatbot.spec.js index 0399dae4ba..4d409d72aa 100644 --- a/exercises/concept/regular-chatbot/regular-chatbot.spec.js +++ b/exercises/concept/regular-chatbot/regular-chatbot.spec.js @@ -1,9 +1,10 @@ +import { describe, expect, test } from '@jest/globals'; import { - isValidCommand, - removeEmoji, checkPhoneNumber, getURL, + isValidCommand, niceToMeetYou, + removeEmoji, } from './regular-chatbot'; describe('isValidCommand', () => { diff --git a/exercises/concept/translation-service/service.spec.js b/exercises/concept/translation-service/service.spec.js index 65bc922f0f..0514cb2b75 100644 --- a/exercises/concept/translation-service/service.spec.js +++ b/exercises/concept/translation-service/service.spec.js @@ -1,13 +1,12 @@ -// @ts-check - +import { beforeEach, describe, expect, test } from '@jest/globals'; import { - TranslationService, - QualityThresholdNotMet, BatchIsEmpty, + QualityThresholdNotMet, + TranslationService, } from './service'; -import { NotAvailable, Untranslatable, ConnectionError } from './errors'; import { ExternalApi } from './api'; +import { ConnectionError, NotAvailable, Untranslatable } from './errors'; describe('Free service', () => { /** @type {TranslationService} */ diff --git a/exercises/concept/vehicle-purchase/vehicle-purchase.spec.js b/exercises/concept/vehicle-purchase/vehicle-purchase.spec.js index 8686736d9a..e38b916e6c 100644 --- a/exercises/concept/vehicle-purchase/vehicle-purchase.spec.js +++ b/exercises/concept/vehicle-purchase/vehicle-purchase.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from '@jest/globals'; import { - needsLicense, - chooseVehicle, calculateResellPrice, + chooseVehicle, + needsLicense, } from './vehicle-purchase'; describe('needsLicense', () => { diff --git a/exercises/concept/windowing-system/windowing-system.spec.js b/exercises/concept/windowing-system/windowing-system.spec.js index 7797a306c9..1798a924b3 100644 --- a/exercises/concept/windowing-system/windowing-system.spec.js +++ b/exercises/concept/windowing-system/windowing-system.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from '@jest/globals'; import { - Size, Position, ProgramWindow, + Size, changeWindow, } from './windowing-system'; diff --git a/exercises/practice/accumulate/accumulate.spec.js b/exercises/practice/accumulate/accumulate.spec.js index efaffe7679..8db9a8fc3f 100644 --- a/exercises/practice/accumulate/accumulate.spec.js +++ b/exercises/practice/accumulate/accumulate.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { accumulate } from './accumulate'; describe('accumulate()', () => { diff --git a/exercises/practice/acronym/acronym.spec.js b/exercises/practice/acronym/acronym.spec.js index 574bfb804a..59a0eb7fe6 100644 --- a/exercises/practice/acronym/acronym.spec.js +++ b/exercises/practice/acronym/acronym.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { parse } from './acronym'; describe('Acronyms are produced from', () => { diff --git a/exercises/practice/affine-cipher/affine-cipher.spec.js b/exercises/practice/affine-cipher/affine-cipher.spec.js index 8431242ab4..0961b79b01 100644 --- a/exercises/practice/affine-cipher/affine-cipher.spec.js +++ b/exercises/practice/affine-cipher/affine-cipher.spec.js @@ -1,4 +1,5 @@ -import { encode, decode } from './affine-cipher'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { decode, encode } from './affine-cipher'; describe('Affine cipher', () => { describe('encode', () => { diff --git a/exercises/practice/all-your-base/all-your-base.spec.js b/exercises/practice/all-your-base/all-your-base.spec.js index 8af67824b6..5c84bc8114 100644 --- a/exercises/practice/all-your-base/all-your-base.spec.js +++ b/exercises/practice/all-your-base/all-your-base.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { convert } from './all-your-base'; describe('Converter', () => { diff --git a/exercises/practice/allergies/allergies.spec.js b/exercises/practice/allergies/allergies.spec.js index 18f9f9c51c..ee750b720f 100644 --- a/exercises/practice/allergies/allergies.spec.js +++ b/exercises/practice/allergies/allergies.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Allergies } from './allergies'; describe('Allergies', () => { diff --git a/exercises/practice/alphametics/alphametics.spec.js b/exercises/practice/alphametics/alphametics.spec.js index 7f7c3439de..07f990e446 100644 --- a/exercises/practice/alphametics/alphametics.spec.js +++ b/exercises/practice/alphametics/alphametics.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { solve } from './alphametics'; describe('Solve the alphametics puzzle', () => { diff --git a/exercises/practice/anagram/anagram.spec.js b/exercises/practice/anagram/anagram.spec.js index 3d999c30fd..f84b604dab 100644 --- a/exercises/practice/anagram/anagram.spec.js +++ b/exercises/practice/anagram/anagram.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { findAnagrams } from './anagram'; describe('Anagram', () => { diff --git a/exercises/practice/armstrong-numbers/armstrong-numbers.spec.js b/exercises/practice/armstrong-numbers/armstrong-numbers.spec.js index 192664789e..060dd63ba1 100644 --- a/exercises/practice/armstrong-numbers/armstrong-numbers.spec.js +++ b/exercises/practice/armstrong-numbers/armstrong-numbers.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { isArmstrongNumber } from './armstrong-numbers'; describe('Armstrong Numbers', () => { diff --git a/exercises/practice/atbash-cipher/atbash-cipher.spec.js b/exercises/practice/atbash-cipher/atbash-cipher.spec.js index 250fa84a1f..fd68ae2ad2 100644 --- a/exercises/practice/atbash-cipher/atbash-cipher.spec.js +++ b/exercises/practice/atbash-cipher/atbash-cipher.spec.js @@ -1,4 +1,5 @@ -import { encode, decode } from './atbash-cipher'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { decode, encode } from './atbash-cipher'; describe('Atbash Cipher', () => { describe('encode', () => { diff --git a/exercises/practice/bank-account/bank-account.spec.js b/exercises/practice/bank-account/bank-account.spec.js index 59ef05f8fb..3da7d08e6f 100644 --- a/exercises/practice/bank-account/bank-account.spec.js +++ b/exercises/practice/bank-account/bank-account.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { BankAccount, ValueError } from './bank-account'; describe('Bank Account', () => { diff --git a/exercises/practice/beer-song/beer-song.spec.js b/exercises/practice/beer-song/beer-song.spec.js index c02ee0d55d..9738c5fe25 100644 --- a/exercises/practice/beer-song/beer-song.spec.js +++ b/exercises/practice/beer-song/beer-song.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { recite } from './beer-song'; describe('Beer Song', () => { diff --git a/exercises/practice/binary-search-tree/binary-search-tree.spec.js b/exercises/practice/binary-search-tree/binary-search-tree.spec.js index 658451d1a0..1f207a0a1b 100644 --- a/exercises/practice/binary-search-tree/binary-search-tree.spec.js +++ b/exercises/practice/binary-search-tree/binary-search-tree.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { BinarySearchTree } from './binary-search-tree'; function recordAllData(bst) { diff --git a/exercises/practice/binary-search/binary-search.spec.js b/exercises/practice/binary-search/binary-search.spec.js index 0444899681..a216ba93a2 100644 --- a/exercises/practice/binary-search/binary-search.spec.js +++ b/exercises/practice/binary-search/binary-search.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { find } from './binary-search'; describe('Binary Search', () => { diff --git a/exercises/practice/binary/binary.spec.js b/exercises/practice/binary/binary.spec.js index 4cc07f4fc1..ab5128a4d3 100644 --- a/exercises/practice/binary/binary.spec.js +++ b/exercises/practice/binary/binary.spec.js @@ -1,3 +1,11 @@ +import { + beforeEach, + afterEach, + describe, + test, + expect, + xtest, +} from '@jest/globals'; import { Binary } from './binary'; describe('binary', () => { diff --git a/exercises/practice/bob/bob.spec.js b/exercises/practice/bob/bob.spec.js index eeba00d1a1..3ff1119caf 100644 --- a/exercises/practice/bob/bob.spec.js +++ b/exercises/practice/bob/bob.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { hey } from './bob'; describe('Bob', () => { diff --git a/exercises/practice/book-store/book-store.spec.js b/exercises/practice/book-store/book-store.spec.js index 107a6c594e..c0ae7bd61f 100644 --- a/exercises/practice/book-store/book-store.spec.js +++ b/exercises/practice/book-store/book-store.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { cost } from './book-store'; describe('Book Store', () => { diff --git a/exercises/practice/bottle-song/bottle-song.spec.js b/exercises/practice/bottle-song/bottle-song.spec.js index 3148c29d4e..75cde11eec 100644 --- a/exercises/practice/bottle-song/bottle-song.spec.js +++ b/exercises/practice/bottle-song/bottle-song.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { recite } from './bottle-song'; describe('Bottle Song', () => { diff --git a/exercises/practice/bowling/bowling.spec.js b/exercises/practice/bowling/bowling.spec.js index 981471cbf6..5b72179bb3 100644 --- a/exercises/practice/bowling/bowling.spec.js +++ b/exercises/practice/bowling/bowling.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Bowling } from './bowling'; describe('Bowling', () => { diff --git a/exercises/practice/change/change.spec.js b/exercises/practice/change/change.spec.js index c57ca6cc77..9e16e9dd20 100644 --- a/exercises/practice/change/change.spec.js +++ b/exercises/practice/change/change.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Change } from './change'; describe('Change', () => { diff --git a/exercises/practice/circular-buffer/circular-buffer.spec.js b/exercises/practice/circular-buffer/circular-buffer.spec.js index 52b85af305..8d3d6d33c4 100644 --- a/exercises/practice/circular-buffer/circular-buffer.spec.js +++ b/exercises/practice/circular-buffer/circular-buffer.spec.js @@ -1,6 +1,7 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import CircularBuffer, { - BufferFullError, BufferEmptyError, + BufferFullError, } from './circular-buffer'; describe('CircularBuffer', () => { diff --git a/exercises/practice/clock/clock.spec.js b/exercises/practice/clock/clock.spec.js index d4046b9976..c480984839 100644 --- a/exercises/practice/clock/clock.spec.js +++ b/exercises/practice/clock/clock.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Clock } from './clock'; describe('Clock', () => { diff --git a/exercises/practice/collatz-conjecture/collatz-conjecture.spec.js b/exercises/practice/collatz-conjecture/collatz-conjecture.spec.js index 91a30a07ea..0193280326 100644 --- a/exercises/practice/collatz-conjecture/collatz-conjecture.spec.js +++ b/exercises/practice/collatz-conjecture/collatz-conjecture.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { steps } from './collatz-conjecture'; describe('steps()', () => { diff --git a/exercises/practice/complex-numbers/complex-numbers.spec.js b/exercises/practice/complex-numbers/complex-numbers.spec.js index bdb1e221a1..9f37eb4d9e 100644 --- a/exercises/practice/complex-numbers/complex-numbers.spec.js +++ b/exercises/practice/complex-numbers/complex-numbers.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { ComplexNumber } from './complex-numbers'; describe('Complex numbers', () => { diff --git a/exercises/practice/connect/connect.spec.js b/exercises/practice/connect/connect.spec.js index c8bd390341..a5fcca9ac7 100644 --- a/exercises/practice/connect/connect.spec.js +++ b/exercises/practice/connect/connect.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Board } from './connect'; describe('Judging a game of connect', () => { diff --git a/exercises/practice/crypto-square/crypto-square.spec.js b/exercises/practice/crypto-square/crypto-square.spec.js index 0532a5a0e6..64f858053e 100644 --- a/exercises/practice/crypto-square/crypto-square.spec.js +++ b/exercises/practice/crypto-square/crypto-square.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Crypto } from './crypto-square'; describe('Crypto', () => { diff --git a/exercises/practice/custom-set/custom-set.spec.js b/exercises/practice/custom-set/custom-set.spec.js index cd7e33dea9..5072a76ebe 100644 --- a/exercises/practice/custom-set/custom-set.spec.js +++ b/exercises/practice/custom-set/custom-set.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { CustomSet } from './custom-set'; describe('CustomSet', () => { diff --git a/exercises/practice/darts/darts.spec.js b/exercises/practice/darts/darts.spec.js index 163cabbfcc..cbf63b5c71 100644 --- a/exercises/practice/darts/darts.spec.js +++ b/exercises/practice/darts/darts.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { score } from './darts'; describe('Darts', () => { diff --git a/exercises/practice/diamond/diamond.spec.js b/exercises/practice/diamond/diamond.spec.js index 0563893923..d92b9c9d4c 100644 --- a/exercises/practice/diamond/diamond.spec.js +++ b/exercises/practice/diamond/diamond.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { rows } from './diamond'; describe('Diamond', () => { diff --git a/exercises/practice/difference-of-squares/difference-of-squares.spec.js b/exercises/practice/difference-of-squares/difference-of-squares.spec.js index 59b040c165..300c9e382c 100644 --- a/exercises/practice/difference-of-squares/difference-of-squares.spec.js +++ b/exercises/practice/difference-of-squares/difference-of-squares.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Squares } from './difference-of-squares'; describe('difference-of-squares', () => { diff --git a/exercises/practice/diffie-hellman/diffie-hellman.spec.js b/exercises/practice/diffie-hellman/diffie-hellman.spec.js index 3d7951e68a..847ea491cc 100644 --- a/exercises/practice/diffie-hellman/diffie-hellman.spec.js +++ b/exercises/practice/diffie-hellman/diffie-hellman.spec.js @@ -1,4 +1,5 @@ /* eslint-disable no-new */ +import { describe, expect, test, xtest } from '@jest/globals'; import { DiffieHellman } from './diffie-hellman'; describe('diffie-hellman', () => { diff --git a/exercises/practice/dnd-character/dnd-character.spec.js b/exercises/practice/dnd-character/dnd-character.spec.js index b9aa0bbcda..9c91f50a39 100644 --- a/exercises/practice/dnd-character/dnd-character.spec.js +++ b/exercises/practice/dnd-character/dnd-character.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Character, abilityModifier } from './dnd-character'; describe('D&D Character', () => { diff --git a/exercises/practice/dominoes/dominoes.spec.js b/exercises/practice/dominoes/dominoes.spec.js index 6218cf97bc..4785ef609f 100644 --- a/exercises/practice/dominoes/dominoes.spec.js +++ b/exercises/practice/dominoes/dominoes.spec.js @@ -1,3 +1,4 @@ +import { describe, expect } from '@jest/globals'; import { chain } from './dominoes'; function runTest(dominoes, expected) { diff --git a/exercises/practice/eliuds-eggs/eliuds-eggs.spec.js b/exercises/practice/eliuds-eggs/eliuds-eggs.spec.js index 448446843a..f27a0b29ee 100644 --- a/exercises/practice/eliuds-eggs/eliuds-eggs.spec.js +++ b/exercises/practice/eliuds-eggs/eliuds-eggs.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { eggCount } from './eliuds-eggs'; describe('EliudsEggs', () => { diff --git a/exercises/practice/etl/etl.spec.js b/exercises/practice/etl/etl.spec.js index 93688c85de..82a61e8eb4 100644 --- a/exercises/practice/etl/etl.spec.js +++ b/exercises/practice/etl/etl.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { transform } from './etl'; describe('Transform legacy to new', () => { diff --git a/exercises/practice/flatten-array/flatten-array.spec.js b/exercises/practice/flatten-array/flatten-array.spec.js index 71044c48bf..d42283a2a8 100644 --- a/exercises/practice/flatten-array/flatten-array.spec.js +++ b/exercises/practice/flatten-array/flatten-array.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, xtest } from '@jest/globals'; import { flatten } from './flatten-array'; describe('FlattenArray', () => { diff --git a/exercises/practice/food-chain/food-chain.spec.js b/exercises/practice/food-chain/food-chain.spec.js index 348b494415..b7338e7651 100644 --- a/exercises/practice/food-chain/food-chain.spec.js +++ b/exercises/practice/food-chain/food-chain.spec.js @@ -1,3 +1,4 @@ +import { beforeEach, describe, expect, test, xtest } from '@jest/globals'; import { Song } from './food-chain'; describe('Food Chain', () => { diff --git a/exercises/practice/forth/forth.spec.js b/exercises/practice/forth/forth.spec.js index 64c6df913d..03600745b2 100644 --- a/exercises/practice/forth/forth.spec.js +++ b/exercises/practice/forth/forth.spec.js @@ -1,3 +1,4 @@ +import { beforeEach, describe, expect, test, xtest } from '@jest/globals'; import { Forth } from './forth'; describe('Forth', () => { diff --git a/exercises/practice/gigasecond/gigasecond.spec.js b/exercises/practice/gigasecond/gigasecond.spec.js index c514a35e63..6fd9e31854 100644 --- a/exercises/practice/gigasecond/gigasecond.spec.js +++ b/exercises/practice/gigasecond/gigasecond.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { gigasecond } from './gigasecond'; describe('Gigasecond', () => { diff --git a/exercises/practice/go-counting/go-counting.spec.js b/exercises/practice/go-counting/go-counting.spec.js index 52e57eae8a..2338855894 100644 --- a/exercises/practice/go-counting/go-counting.spec.js +++ b/exercises/practice/go-counting/go-counting.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { GoCounting } from './go-counting'; describe('Go Counting', () => { diff --git a/exercises/practice/grade-school/grade-school.spec.js b/exercises/practice/grade-school/grade-school.spec.js index 125b29c1d9..0334e1f835 100644 --- a/exercises/practice/grade-school/grade-school.spec.js +++ b/exercises/practice/grade-school/grade-school.spec.js @@ -1,3 +1,4 @@ +import { beforeEach, describe, expect, test, xtest } from '@jest/globals'; import { GradeSchool } from './grade-school'; describe('School', () => { diff --git a/exercises/practice/grains/grains.spec.js b/exercises/practice/grains/grains.spec.js index f69a98c54a..e36019cccb 100644 --- a/exercises/practice/grains/grains.spec.js +++ b/exercises/practice/grains/grains.spec.js @@ -27,6 +27,7 @@ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt */ +import { describe, expect, test, xtest } from '@jest/globals'; import { square, total } from './grains'; describe('Grains', () => { diff --git a/exercises/practice/hamming/hamming.spec.js b/exercises/practice/hamming/hamming.spec.js index d4ff7a63aa..f8c083dca9 100644 --- a/exercises/practice/hamming/hamming.spec.js +++ b/exercises/practice/hamming/hamming.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { compute } from './hamming'; describe('Hamming', () => { diff --git a/exercises/practice/hello-world/hello-world.spec.js b/exercises/practice/hello-world/hello-world.spec.js index cd0b7ec1c0..1e8de8d78d 100644 --- a/exercises/practice/hello-world/hello-world.spec.js +++ b/exercises/practice/hello-world/hello-world.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from '@jest/globals'; import { hello } from './hello-world'; describe('Hello World', () => { diff --git a/exercises/practice/hexadecimal/hexadecimal.spec.js b/exercises/practice/hexadecimal/hexadecimal.spec.js index aacde8aba7..80556433dd 100644 --- a/exercises/practice/hexadecimal/hexadecimal.spec.js +++ b/exercises/practice/hexadecimal/hexadecimal.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { toDecimal } from './hexadecimal'; describe('Hexadecimal', () => { diff --git a/exercises/practice/high-scores/high-scores.spec.js b/exercises/practice/high-scores/high-scores.spec.js index 301c86fea8..67280f60f6 100644 --- a/exercises/practice/high-scores/high-scores.spec.js +++ b/exercises/practice/high-scores/high-scores.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { HighScores } from './high-scores'; describe('High Scores Test Suite', () => { diff --git a/exercises/practice/house/house.spec.js b/exercises/practice/house/house.spec.js index 496ffa1b59..b720dc807b 100644 --- a/exercises/practice/house/house.spec.js +++ b/exercises/practice/house/house.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { House } from './house'; describe('House', () => { diff --git a/exercises/practice/isbn-verifier/isbn-verifier.spec.js b/exercises/practice/isbn-verifier/isbn-verifier.spec.js index 5232cf315d..e0dcfe8e58 100644 --- a/exercises/practice/isbn-verifier/isbn-verifier.spec.js +++ b/exercises/practice/isbn-verifier/isbn-verifier.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { isValid } from './isbn-verifier'; describe('ISBN Verifier', () => { diff --git a/exercises/practice/isogram/isogram.spec.js b/exercises/practice/isogram/isogram.spec.js index 92165ae448..c3443760c3 100644 --- a/exercises/practice/isogram/isogram.spec.js +++ b/exercises/practice/isogram/isogram.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { isIsogram } from './isogram'; describe('Isogram', () => { diff --git a/exercises/practice/kindergarten-garden/kindergarten-garden.spec.js b/exercises/practice/kindergarten-garden/kindergarten-garden.spec.js index ddfb434bf6..3d980989e8 100644 --- a/exercises/practice/kindergarten-garden/kindergarten-garden.spec.js +++ b/exercises/practice/kindergarten-garden/kindergarten-garden.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Garden } from './kindergarten-garden'; describe('partial Garden', () => { diff --git a/exercises/practice/knapsack/knapsack.spec.js b/exercises/practice/knapsack/knapsack.spec.js index ccac3291cb..1dd0f6251a 100644 --- a/exercises/practice/knapsack/knapsack.spec.js +++ b/exercises/practice/knapsack/knapsack.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from '@jest/globals'; import { knapsack } from './knapsack'; describe('Knapsack', () => { diff --git a/exercises/practice/largest-series-product/largest-series-product.spec.js b/exercises/practice/largest-series-product/largest-series-product.spec.js index a0c38936cf..84c7d8c686 100644 --- a/exercises/practice/largest-series-product/largest-series-product.spec.js +++ b/exercises/practice/largest-series-product/largest-series-product.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { largestProduct } from './largest-series-product'; describe('Largest Series Product', () => { diff --git a/exercises/practice/leap/leap.spec.js b/exercises/practice/leap/leap.spec.js index b0d3c7b02f..3aba100a2c 100644 --- a/exercises/practice/leap/leap.spec.js +++ b/exercises/practice/leap/leap.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { isLeap } from './leap'; describe('A leap year', () => { diff --git a/exercises/practice/ledger/ledger.spec.js b/exercises/practice/ledger/ledger.spec.js index 95cfe852fd..1d9fa4053f 100644 --- a/exercises/practice/ledger/ledger.spec.js +++ b/exercises/practice/ledger/ledger.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { createEntry, formatEntries } from './ledger'; describe('Ledger', () => { diff --git a/exercises/practice/lens-person/lens-person.spec.js b/exercises/practice/lens-person/lens-person.spec.js index b14b8e5a8f..6788eb043e 100644 --- a/exercises/practice/lens-person/lens-person.spec.js +++ b/exercises/practice/lens-person/lens-person.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Address } from './address'; import { Born } from './born'; import { Name } from './name'; diff --git a/exercises/practice/linked-list/linked-list.spec.js b/exercises/practice/linked-list/linked-list.spec.js index d6a08dd5bd..feb682d58b 100644 --- a/exercises/practice/linked-list/linked-list.spec.js +++ b/exercises/practice/linked-list/linked-list.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { LinkedList } from './linked-list'; describe('LinkedList', () => { diff --git a/exercises/practice/list-ops/list-ops.spec.js b/exercises/practice/list-ops/list-ops.spec.js index c69ad9ae6f..561513a70a 100644 --- a/exercises/practice/list-ops/list-ops.spec.js +++ b/exercises/practice/list-ops/list-ops.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { List } from './list-ops'; describe('append entries to a list and return the new list', () => { diff --git a/exercises/practice/luhn/luhn.spec.js b/exercises/practice/luhn/luhn.spec.js index 58f8466fe3..8092b20021 100644 --- a/exercises/practice/luhn/luhn.spec.js +++ b/exercises/practice/luhn/luhn.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { valid } from './luhn'; describe('Luhn', () => { diff --git a/exercises/practice/markdown/markdown.spec.js b/exercises/practice/markdown/markdown.spec.js index db3fea3ff6..ee7417c100 100644 --- a/exercises/practice/markdown/markdown.spec.js +++ b/exercises/practice/markdown/markdown.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { parse } from './markdown'; describe('Markdown', () => { diff --git a/exercises/practice/matching-brackets/matching-brackets.spec.js b/exercises/practice/matching-brackets/matching-brackets.spec.js index de9ea3d224..ccd6b4a826 100644 --- a/exercises/practice/matching-brackets/matching-brackets.spec.js +++ b/exercises/practice/matching-brackets/matching-brackets.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { isPaired } from './matching-brackets'; describe('Matching Brackets', () => { diff --git a/exercises/practice/matrix/matrix.spec.js b/exercises/practice/matrix/matrix.spec.js index 691171d183..594c376a34 100644 --- a/exercises/practice/matrix/matrix.spec.js +++ b/exercises/practice/matrix/matrix.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Matrix } from './matrix'; describe('Matrix', () => { diff --git a/exercises/practice/meetup/meetup.spec.js b/exercises/practice/meetup/meetup.spec.js index 14dd53d0e2..540da01264 100644 --- a/exercises/practice/meetup/meetup.spec.js +++ b/exercises/practice/meetup/meetup.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { meetup } from './meetup'; describe('Meetup', () => { diff --git a/exercises/practice/micro-blog/micro-blog.spec.js b/exercises/practice/micro-blog/micro-blog.spec.js index 62972fbbc8..692b283b0b 100644 --- a/exercises/practice/micro-blog/micro-blog.spec.js +++ b/exercises/practice/micro-blog/micro-blog.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { truncate } from './micro-blog'; describe('Micro-blog', () => { diff --git a/exercises/practice/minesweeper/minesweeper.spec.js b/exercises/practice/minesweeper/minesweeper.spec.js index cb6663e20b..ff2250ade2 100644 --- a/exercises/practice/minesweeper/minesweeper.spec.js +++ b/exercises/practice/minesweeper/minesweeper.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { annotate } from './minesweeper'; describe(')', () => { diff --git a/exercises/practice/nth-prime/nth-prime.spec.js b/exercises/practice/nth-prime/nth-prime.spec.js index 5ebfd52ed2..59613d9f12 100644 --- a/exercises/practice/nth-prime/nth-prime.spec.js +++ b/exercises/practice/nth-prime/nth-prime.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { prime } from './nth-prime'; describe('nth-prime', () => { diff --git a/exercises/practice/nucleotide-count/nucleotide-count.spec.js b/exercises/practice/nucleotide-count/nucleotide-count.spec.js index 5f0674f77c..d767e01040 100644 --- a/exercises/practice/nucleotide-count/nucleotide-count.spec.js +++ b/exercises/practice/nucleotide-count/nucleotide-count.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { countNucleotides } from './nucleotide-count'; describe('count all nucleotides in a strand', () => { diff --git a/exercises/practice/ocr-numbers/ocr-numbers.spec.js b/exercises/practice/ocr-numbers/ocr-numbers.spec.js index 84b798b1d5..890e7052b3 100644 --- a/exercises/practice/ocr-numbers/ocr-numbers.spec.js +++ b/exercises/practice/ocr-numbers/ocr-numbers.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { convert } from './ocr-numbers'; describe('ocr', () => { diff --git a/exercises/practice/octal/octal.spec.js b/exercises/practice/octal/octal.spec.js index 0074612e84..a6a9eae55e 100644 --- a/exercises/practice/octal/octal.spec.js +++ b/exercises/practice/octal/octal.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Octal } from './octal'; describe('octal', () => { diff --git a/exercises/practice/palindrome-products/palindrome-products.spec.js b/exercises/practice/palindrome-products/palindrome-products.spec.js index 66c883bc60..d326e6eb9a 100644 --- a/exercises/practice/palindrome-products/palindrome-products.spec.js +++ b/exercises/practice/palindrome-products/palindrome-products.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Palindromes } from './palindrome-products'; describe('Palindromes', () => { diff --git a/exercises/practice/pangram/pangram.spec.js b/exercises/practice/pangram/pangram.spec.js index c4671382fc..34f29f21df 100644 --- a/exercises/practice/pangram/pangram.spec.js +++ b/exercises/practice/pangram/pangram.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { isPangram } from './pangram'; describe('Pangram()', () => { diff --git a/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js b/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js index dfa1555c25..bca38f5f7d 100644 --- a/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js +++ b/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { parallelLetterFrequency } from './parallel-letter-frequency'; describe('ParallelLetterFrequency', () => { @@ -124,10 +125,10 @@ describe('ParallelLetterFrequency', () => { xtest('large texts', async () => { const texts = [ - "I am a sick man.... I am a spiteful man. I am an unattractive man.\nI believe my liver is diseased. However, I know nothing at all about my disease, and do not\nknow for certain what ails me. I don't consult a doctor for it,\nand never have, though I have a respect for medicine and doctors.\nBesides, I am extremely superstitious, sufficiently so to respect medicine,\nanyway (I am well-educated enough not to be superstitious, but I am superstitious).\nNo, I refuse to consult a doctor from spite.\nThat you probably will not understand. Well, I understand it, though.\nOf course, I can't explain who it is precisely that I am mortifying in this case by my spite:\nI am perfectly well aware that I cannot \"pay out\" the doctors by not consulting them;\nI know better than anyone that by all this I am only injuring myself and no one else.\nBut still, if I don't consult a doctor it is from spite.\nMy liver is bad, well - let it get worse!\nI have been going on like that for a long time - twenty years. Now I am forty.\nI used to be in the government service, but am no longer.\nI was a spiteful official. I was rude and took pleasure in being so.\nI did not take bribes, you see, so I was bound to find a recompense in that, at least.\n(A poor jest, but I will not scratch it out. I wrote it thinking it would sound very witty;\nbut now that I have seen myself that I only wanted to show off in a despicable way -\nI will not scratch it out on purpose!) When petitioners used to come for\ninformation to the table at which I sat, I used to grind my teeth at them,\nand felt intense enjoyment when I succeeded in making anybody unhappy.\nI almost did succeed. For the most part they were all timid people - of course,\nthey were petitioners. But of the uppish ones there was one officer in particular\nI could not endure. He simply would not be humble, and clanked his sword in a disgusting way.\nI carried on a feud with him for eighteen months over that sword. At last I got the better of him.\nHe left off clanking it. That happened in my youth, though. But do you know,\ngentlemen, what was the chief point about my spite? Why, the whole point,\nthe real sting of it lay in the fact that continually, even in the moment of the acutest spleen,\nI was inwardly conscious with shame that I was not only not a spiteful but not even an embittered man,\nthat I was simply scaring sparrows at random and amusing myself by it.\nI might foam at the mouth, but bring me a doll to play with, give me a cup of tea with sugar in it,\nand maybe I should be appeased. I might even be genuinely touched,\nthough probably I should grind my teeth at myself afterwards and lie awake at night with shame for\nmonths after. That was my way. I was lying when I said just now that I was a spiteful official.\nI was lying from spite. I was simply amusing myself with the petitioners and with the officer,\nand in reality I never could become spiteful. I was conscious every moment in myself of many,\nvery many elements absolutely opposite to that. I felt them positively swarming in me,\nthese opposite elements. I knew that they had been swarming in me all my life and craving some outlet from me,\nbut I would not let them, would not let them, purposely would not let them come out.\nThey tormented me till I was ashamed: they drove me to convulsions and - sickened me, at last,\nhow they sickened me!", - 'Gentlemen, I am joking, and I know myself that my jokes are not brilliant\n,but you know one can take everything as a joke. I am, perhaps, jesting against the grain.\nGentlemen, I am tormented by questions; answer them for me. You, for instance, want to cure men of their\nold habits and reform their will in accordance with science and good sense.\nBut how do you know, not only that it is possible, but also that it is\ndesirable to reform man in that way? And what leads you to the conclusion that man\'s\ninclinations need reforming? In short, how do you know that such a reformation will be a benefit to man?\nAnd to go to the root of the matter, why are you so positively convinced that not to act against\nhis real normal interests guaranteed by the conclusions of reason and arithmetic is certainly always\nadvantageous for man and must always be a law for mankind? So far, you know,\nthis is only your supposition. It may be the law of logic, but not the law of humanity.\nYou think, gentlemen, perhaps that I am mad? Allow me to defend myself. I agree that man\nis pre-eminently a creative animal, predestined to strive consciously for an object and to engage in engineering -\nthat is, incessantly and eternally to make new roads, wherever\nthey may lead. But the reason why he wants sometimes to go off at a tangent may just be that he is\npredestined to make the road, and perhaps, too, that however stupid the "direct"\npractical man may be, the thought sometimes will occur to him that the road almost always does lead\nsomewhere, and that the destination it leads to is less important than the process\nof making it, and that the chief thing is to save the well-conducted child from despising engineering,\nand so giving way to the fatal idleness, which, as we all know,\nis the mother of all the vices. Man likes to make roads and to create, that is a fact beyond dispute.\nBut why has he such a passionate love for destruction and chaos also?\nTell me that! But on that point I want to say a couple of words myself. May it not be that he loves\nchaos and destruction (there can be no disputing that he does sometimes love it)\nbecause he is instinctively afraid of attaining his object and completing the edifice he is constructing?\nWho knows, perhaps he only loves that edifice from a distance, and is by no means\nin love with it at close quarters; perhaps he only loves building it and does not want to live in it,\nbut will leave it, when completed, for the use of les animaux domestiques -\nsuch as the ants, the sheep, and so on. Now the ants have quite a different taste.\nThey have a marvellous edifice of that pattern which endures for ever - the ant-heap.\nWith the ant-heap the respectable race of ants began and with the ant-heap they will probably end,\nwhich does the greatest credit to their perseverance and good sense. But man is a frivolous and\nincongruous creature, and perhaps, like a chess player, loves the process of the game, not the end of it.\nAnd who knows (there is no saying with certainty), perhaps the only goal on earth\nto which mankind is striving lies in this incessant process of attaining, in other words,\nin life itself, and not in the thing to be attained, which must always be expressed as a formula,\nas positive as twice two makes four, and such positiveness is not life, gentlemen,\nbut is the beginning of death.', - "But these are all golden dreams. Oh, tell me, who was it first announced,\nwho was it first proclaimed, that man only does nasty things because he does not know his own interests;\nand that if he were enlightened, if his eyes were opened to his real normal interests,\nman would at once cease to do nasty things, would at once become good and noble because,\nbeing enlightened and understanding his real advantage, he would see his own advantage in the\ngood and nothing else, and we all know that not one man can, consciously, act against his own interests,\nconsequently, so to say, through necessity, he would begin doing good? Oh, the babe! Oh, the pure,\ninnocent child! Why, in the first place, when in all these thousands of years has there been a time\nwhen man has acted only from his own interest? What is to be done with the millions of facts that bear\nwitness that men, consciously, that is fully understanding their real interests, have left them in the\nbackground and have rushed headlong on another path, to meet peril and danger,\ncompelled to this course by nobody and by nothing, but, as it were, simply disliking the beaten track,\nand have obstinately, wilfully, struck out another difficult, absurd way, seeking it almost in the darkness.\nSo, I suppose, this obstinacy and perversity were pleasanter to them than any advantage....\nAdvantage! What is advantage? And will you take it upon yourself to define with perfect accuracy in what the\nadvantage of man consists? And what if it so happens that a man's advantage, sometimes, not only may,\nbut even must, consist in his desiring in certain cases what is harmful to himself and not advantageous.\nAnd if so, if there can be such a case, the whole principle falls into dust. What do you think -\nare there such cases? You laugh; laugh away, gentlemen, but only answer me: have man's advantages been\nreckoned up with perfect certainty? Are there not some which not only have not been included but cannot\npossibly be included under any classification? You see, you gentlemen have, to the best of my knowledge,\ntaken your whole register of human advantages from the averages of statistical figures and\npolitico-economical formulas. Your advantages are prosperity, wealth, freedom, peace - and so on, and so on.\nSo that the man who should, for instance, go openly and knowingly in opposition to all that list would to your thinking,\nand indeed mine, too, of course, be an obscurantist or an absolute madman: would not he? But, you know, this is\nwhat is surprising: why does it so happen that all these statisticians, sages and lovers of humanity,\nwhen they reckon up human advantages invariably leave out one? They don't even take it into their reckoning\nin the form in which it should be taken, and the whole reckoning depends upon that. It would be no greater matter,\nthey would simply have to take it, this advantage, and add it to the list. But the trouble is, that this strange\nadvantage does not fall under any classification and is not in place in any list. I have a friend for instance ...\nEch! gentlemen, but of course he is your friend, too; and indeed there is no one, no one to whom he is not a friend!", - "Yes, but here I come to a stop! Gentlemen, you must excuse me for being over-philosophical;\nit's the result of forty years underground! Allow me to indulge my fancy. You see, gentlemen, reason is an excellent thing,\nthere's no disputing that, but reason is nothing but reason and satisfies only the rational side of man's nature,\nwhile will is a manifestation of the whole life, that is, of the whole human life including reason and all the impulses.\nAnd although our life, in this manifestation of it, is often worthless, yet it is life and not simply extracting square roots.\nHere I, for instance, quite naturally want to live, in order to satisfy all my capacities for life, and not simply my capacity\nfor reasoning, that is, not simply one twentieth of my capacity for life. What does reason know? Reason only knows what it has\nsucceeded in learning (some things, perhaps, it will never learn; this is a poor comfort, but why not say so frankly?)\nand human nature acts as a whole, with everything that is in it, consciously or unconsciously, and, even it if goes wrong, it lives.\nI suspect, gentlemen, that you are looking at me with compassion; you tell me again that an enlightened and developed man,\nsuch, in short, as the future man will be, cannot consciously desire anything disadvantageous to himself, that that can be proved mathematically.\nI thoroughly agree, it can - by mathematics. But I repeat for the hundredth time, there is one case, one only, when man may consciously, purposely,\ndesire what is injurious to himself, what is stupid, very stupid - simply in order to have the right to desire for himself even what is very stupid\nand not to be bound by an obligation to desire only what is sensible. Of course, this very stupid thing, this caprice of ours, may be in reality,\ngentlemen, more advantageous for us than anything else on earth, especially in certain cases. And in particular it may be more advantageous than\nany advantage even when it does us obvious harm, and contradicts the soundest conclusions of our reason concerning our advantage -\nfor in any circumstances it preserves for us what is most precious and most important - that is, our personality, our individuality.\nSome, you see, maintain that this really is the most precious thing for mankind; choice can, of course, if it chooses, be in agreement\nwith reason; and especially if this be not abused but kept within bounds. It is profitable and some- times even praiseworthy.\nBut very often, and even most often, choice is utterly and stubbornly opposed to reason ... and ... and ... do you know that that,\ntoo, is profitable, sometimes even praiseworthy? Gentlemen, let us suppose that man is not stupid. (Indeed one cannot refuse to suppose that,\nif only from the one consideration, that, if man is stupid, then who is wise?) But if he is not stupid, he is monstrously ungrateful!\nPhenomenally ungrateful. In fact, I believe that the best definition of man is the ungrateful biped. But that is not all, that is not his worst defect;\nhis worst defect is his perpetual moral obliquity, perpetual - from the days of the Flood to the Schleswig-Holstein period.", + "I am a sick man.... I am a spiteful man. I am an unattractive man.\nI believe my liver is diseased. However, I know nothing at all about my disease, and do not\nknow for certain what ails me. I don't consult a doctor for test,\nand never have, though I have a respect for medicine and doctors.\nBesides, I am extremely superstitious, sufficiently so to respect medicine,\nanyway (I am well-educated enough not to be superstitious, but I am superstitious).\nNo, I refuse to consult a doctor from spite.\nThat you probably will not understand. Well, I understand test, though.\nOf course, I can't explain who it is precisely that I am mortifying in this case by my spite:\nI am perfectly well aware that I cannot \"pay out\" the doctors by not consulting them;\nI know better than anyone that by all this I am only injuring myself and no one else.\nBut still, if I don't consult a doctor it is from spite.\nMy liver is bad, well - let it get worse!\nI have been going on like that for a long time - twenty years. Now I am forty.\nI used to be in the government service, but am no longer.\nI was a spiteful official. I was rude and took pleasure in being so.\nI did not take bribes, you see, so I was bound to find a recompense in that, at least.\n(A poor jest, but I will not scratch it out. I wrote it thinking it would sound very witty;\nbut now that I have seen myself that I only wanted to show off in a despicable way -\nI will not scratch it out on purpose!) When petitioners used to come for\ninformation to the table at which I sat, I used to grind my teeth at them,\nand felt intense enjoyment when I succeeded in making anybody unhappy.\nI almost did succeed. For the most part they were all timid people - of course,\nthey were petitioners. But of the uppish ones there was one officer in particular\nI could not endure. He simply would not be humble, and clanked his sword in a disgusting way.\nI carried on a feud with him for eighteen months over that sword. At last I got the better of him.\nHe left off clanking it. That happened in my youth, though. But do you know,\ngentlemen, what was the chief point about my spite? Why, the whole point,\nthe real sting of it lay in the fact that continually, even in the moment of the acutest spleen,\nI was inwardly conscious with shame that I was not only not a spiteful but not even an embittered man,\nthat I was simply scaring sparrows at random and amusing myself by it.\nI might foam at the mouth, but bring me a doll to play with, give me a cup of tea with sugar in test,\nand maybe I should be appeased. I might even be genuinely touched,\nthough probably I should grind my teeth at myself afterwards and lie awake at night with shame for\nmonths after. That was my way. I was lying when I said just now that I was a spiteful official.\nI was lying from spite. I was simply amusing myself with the petitioners and with the officer,\nand in reality I never could become spiteful. I was conscious every moment in myself of many,\nvery many elements absolutely opposite to that. I felt them positively swarming in me,\nthese opposite elements. I knew that they had been swarming in me all my life and craving some outlet from me,\nbut I would not let them, would not let them, purposely would not let them come out.\nThey tormented me till I was ashamed: they drove me to convulsions and - sickened me, at last,\nhow they sickened me!", + 'Gentlemen, I am joking, and I know myself that my jokes are not brilliant\n,but you know one can take everything as a joke. I am, perhaps, jesting against the grain.\nGentlemen, I am tormented by questions; answer them for me. You, for instance, want to cure men of their\nold habits and reform their will in accordance with science and good sense.\nBut how do you know, not only that it is possible, but also that it is\ndesirable to reform man in that way? And what leads you to the conclusion that man\'s\ninclinations need reforming? In short, how do you know that such a reformation will be a benefit to man?\nAnd to go to the root of the matter, why are you so positively convinced that not to act against\nhis real normal interests guaranteed by the conclusions of reason and arithmetic is certainly always\nadvantageous for man and must always be a law for mankind? So far, you know,\nthis is only your supposition. It may be the law of logic, but not the law of humanity.\nYou think, gentlemen, perhaps that I am mad? Allow me to defend myself. I agree that man\nis pre-eminently a creative animal, predestined to strive consciously for an object and to engage in engineering -\nthat is, incessantly and eternally to make new roads, wherever\nthey may lead. But the reason why he wants sometimes to go off at a tangent may just be that he is\npredestined to make the road, and perhaps, too, that however stupid the "direct"\npractical man may be, the thought sometimes will occur to him that the road almost always does lead\nsomewhere, and that the destination it leads to is less important than the process\nof making test, and that the chief thing is to save the well-conducted child from despising engineering,\nand so giving way to the fatal idleness, which, as we all know,\nis the mother of all the vices. Man likes to make roads and to create, that is a fact beyond dispute.\nBut why has he such a passionate love for destruction and chaos also?\nTell me that! But on that point I want to say a couple of words myself. May it not be that he loves\nchaos and destruction (there can be no disputing that he does sometimes love it)\nbecause he is instinctively afraid of attaining his object and completing the edifice he is constructing?\nWho knows, perhaps he only loves that edifice from a distance, and is by no means\nin love with it at close quarters; perhaps he only loves building it and does not want to live in test,\nbut will leave test, when completed, for the use of les animaux domestiques -\nsuch as the ants, the sheep, and so on. Now the ants have quite a different taste.\nThey have a marvellous edifice of that pattern which endures for ever - the ant-heap.\nWith the ant-heap the respectable race of ants began and with the ant-heap they will probably end,\nwhich does the greatest credit to their perseverance and good sense. But man is a frivolous and\nincongruous creature, and perhaps, like a chess player, loves the process of the game, not the end of it.\nAnd who knows (there is no saying with certainty), perhaps the only goal on earth\nto which mankind is striving lies in this incessant process of attaining, in other words,\nin life itself, and not in the thing to be attained, which must always be expressed as a formula,\nas positive as twice two makes four, and such positiveness is not life, gentlemen,\nbut is the beginning of death.', + "But these are all golden dreams. Oh, tell me, who was it first announced,\nwho was it first proclaimed, that man only does nasty things because he does not know his own interests;\nand that if he were enlightened, if his eyes were opened to his real normal interests,\nman would at once cease to do nasty things, would at once become good and noble because,\nbeing enlightened and understanding his real advantage, he would see his own advantage in the\ngood and nothing else, and we all know that not one man can, consciously, act against his own interests,\nconsequently, so to say, through necessity, he would begin doing good? Oh, the babe! Oh, the pure,\ninnocent child! Why, in the first place, when in all these thousands of years has there been a time\nwhen man has acted only from his own interest? What is to be done with the millions of facts that bear\nwitness that men, consciously, that is fully understanding their real interests, have left them in the\nbackground and have rushed headlong on another path, to meet peril and danger,\ncompelled to this course by nobody and by nothing, but, as it were, simply disliking the beaten track,\nand have obstinately, wilfully, struck out another difficult, absurd way, seeking it almost in the darkness.\nSo, I suppose, this obstinacy and perversity were pleasanter to them than any advantage....\nAdvantage! What is advantage? And will you take it upon yourself to define with perfect accuracy in what the\nadvantage of man consists? And what if it so happens that a man's advantage, sometimes, not only may,\nbut even must, consist in his desiring in certain cases what is harmful to himself and not advantageous.\nAnd if so, if there can be such a case, the whole principle falls into dust. What do you think -\nare there such cases? You laugh; laugh away, gentlemen, but only answer me: have man's advantages been\nreckoned up with perfect certainty? Are there not some which not only have not been included but cannot\npossibly be included under any classification? You see, you gentlemen have, to the best of my knowledge,\ntaken your whole register of human advantages from the averages of statistical figures and\npolitico-economical formulas. Your advantages are prosperity, wealth, freedom, peace - and so on, and so on.\nSo that the man who should, for instance, go openly and knowingly in opposition to all that list would to your thinking,\nand indeed mine, too, of course, be an obscurantist or an absolute madman: would not he? But, you know, this is\nwhat is surprising: why does it so happen that all these statisticians, sages and lovers of humanity,\nwhen they reckon up human advantages invariably leave out one? They don't even take it into their reckoning\nin the form in which it should be taken, and the whole reckoning depends upon that. It would be no greater matter,\nthey would simply have to take test, this advantage, and add it to the list. But the trouble is, that this strange\nadvantage does not fall under any classification and is not in place in any list. I have a friend for instance ...\nEch! gentlemen, but of course he is your friend, too; and indeed there is no one, no one to whom he is not a friend!", + "Yes, but here I come to a stop! Gentlemen, you must excuse me for being over-philosophical;\nit's the result of forty years underground! Allow me to indulge my fancy. You see, gentlemen, reason is an excellent thing,\nthere's no disputing that, but reason is nothing but reason and satisfies only the rational side of man's nature,\nwhile will is a manifestation of the whole life, that is, of the whole human life including reason and all the impulses.\nAnd although our life, in this manifestation of test, is often worthless, yet it is life and not simply extracting square roots.\nHere I, for instance, quite naturally want to live, in order to satisfy all my capacities for life, and not simply my capacity\nfor reasoning, that is, not simply one twentieth of my capacity for life. What does reason know? Reason only knows what it has\nsucceeded in learning (some things, perhaps, it will never learn; this is a poor comfort, but why not say so frankly?)\nand human nature acts as a whole, with everything that is in test, consciously or unconsciously, and, even it if goes wrong, it lives.\nI suspect, gentlemen, that you are looking at me with compassion; you tell me again that an enlightened and developed man,\nsuch, in short, as the future man will be, cannot consciously desire anything disadvantageous to himself, that that can be proved mathematically.\nI thoroughly agree, it can - by mathematics. But I repeat for the hundredth time, there is one case, one only, when man may consciously, purposely,\ndesire what is injurious to himself, what is stupid, very stupid - simply in order to have the right to desire for himself even what is very stupid\nand not to be bound by an obligation to desire only what is sensible. Of course, this very stupid thing, this caprice of ours, may be in reality,\ngentlemen, more advantageous for us than anything else on earth, especially in certain cases. And in particular it may be more advantageous than\nany advantage even when it does us obvious harm, and contradicts the soundest conclusions of our reason concerning our advantage -\nfor in any circumstances it preserves for us what is most precious and most important - that is, our personality, our individuality.\nSome, you see, maintain that this really is the most precious thing for mankind; choice can, of course, if it chooses, be in agreement\nwith reason; and especially if this be not abused but kept within bounds. It is profitable and some- times even praiseworthy.\nBut very often, and even most often, choice is utterly and stubbornly opposed to reason ... and ... and ... do you know that that,\ntoo, is profitable, sometimes even praiseworthy? Gentlemen, let us suppose that man is not stupid. (Indeed one cannot refuse to suppose that,\nif only from the one consideration, that, if man is stupid, then who is wise?) But if he is not stupid, he is monstrously ungrateful!\nPhenomenally ungrateful. In fact, I believe that the best definition of man is the ungrateful biped. But that is not all, that is not his worst defect;\nhis worst defect is his perpetual moral obliquity, perpetual - from the days of the Flood to the Schleswig-Holstein period.", ]; const expected = { a: 845, diff --git a/exercises/practice/pascals-triangle/pascals-triangle.spec.js b/exercises/practice/pascals-triangle/pascals-triangle.spec.js index 4641921044..e910370fb3 100644 --- a/exercises/practice/pascals-triangle/pascals-triangle.spec.js +++ b/exercises/practice/pascals-triangle/pascals-triangle.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { rows } from './pascals-triangle'; describe('Pascals Triangle', () => { diff --git a/exercises/practice/perfect-numbers/perfect-numbers.spec.js b/exercises/practice/perfect-numbers/perfect-numbers.spec.js index 70170853b8..3889240c8f 100644 --- a/exercises/practice/perfect-numbers/perfect-numbers.spec.js +++ b/exercises/practice/perfect-numbers/perfect-numbers.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { classify } from './perfect-numbers'; describe('Exercise - Perfect Numbers', () => { diff --git a/exercises/practice/phone-number/phone-number.spec.js b/exercises/practice/phone-number/phone-number.spec.js index adcd1f9bf5..db5b0f396a 100644 --- a/exercises/practice/phone-number/phone-number.spec.js +++ b/exercises/practice/phone-number/phone-number.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { clean } from './phone-number'; describe('Phone Number', () => { diff --git a/exercises/practice/pig-latin/pig-latin.spec.js b/exercises/practice/pig-latin/pig-latin.spec.js index d98f2e9745..7b7d21a29f 100644 --- a/exercises/practice/pig-latin/pig-latin.spec.js +++ b/exercises/practice/pig-latin/pig-latin.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { translate } from './pig-latin'; describe('Pig Latin', () => { diff --git a/exercises/practice/point-mutations/point-mutations.spec.js b/exercises/practice/point-mutations/point-mutations.spec.js index fcc85decb3..b81c66f394 100644 --- a/exercises/practice/point-mutations/point-mutations.spec.js +++ b/exercises/practice/point-mutations/point-mutations.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { DNA } from './point-mutations'; describe('DNA', () => { diff --git a/exercises/practice/poker/poker.spec.js b/exercises/practice/poker/poker.spec.js index 7edf068290..70fbf9a799 100644 --- a/exercises/practice/poker/poker.spec.js +++ b/exercises/practice/poker/poker.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { bestHands } from './poker'; describe('Poker', () => { diff --git a/exercises/practice/prime-factors/prime-factors.spec.js b/exercises/practice/prime-factors/prime-factors.spec.js index be8d7d33b4..b1849a49b6 100644 --- a/exercises/practice/prime-factors/prime-factors.spec.js +++ b/exercises/practice/prime-factors/prime-factors.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { primeFactors } from './prime-factors'; describe('returns prime factors for the given input number', () => { diff --git a/exercises/practice/promises/promises.spec.js b/exercises/practice/promises/promises.spec.js index 39c5bb2197..1b5c721bf3 100644 --- a/exercises/practice/promises/promises.spec.js +++ b/exercises/practice/promises/promises.spec.js @@ -1,4 +1,5 @@ -import { promisify, all, allSettled, race, any } from './promises'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { all, allSettled, any, promisify, race } from './promises'; describe('promises', () => { const failedCallback = new Error('Failed callback'); diff --git a/exercises/practice/protein-translation/protein-translation.spec.js b/exercises/practice/protein-translation/protein-translation.spec.js index 79f3972897..529ae0b20f 100644 --- a/exercises/practice/protein-translation/protein-translation.spec.js +++ b/exercises/practice/protein-translation/protein-translation.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { translate } from './protein-translation'; describe('ProteinTranslation', () => { diff --git a/exercises/practice/proverb/proverb.spec.js b/exercises/practice/proverb/proverb.spec.js index b893560de0..2e33118231 100644 --- a/exercises/practice/proverb/proverb.spec.js +++ b/exercises/practice/proverb/proverb.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { proverb } from './proverb'; describe('Proverb', () => { diff --git a/exercises/practice/pythagorean-triplet/pythagorean-triplet.spec.js b/exercises/practice/pythagorean-triplet/pythagorean-triplet.spec.js index 9094d78a37..0db403e95b 100644 --- a/exercises/practice/pythagorean-triplet/pythagorean-triplet.spec.js +++ b/exercises/practice/pythagorean-triplet/pythagorean-triplet.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { triplets } from './pythagorean-triplet'; function tripletsWithSum(sum, options = {}) { diff --git a/exercises/practice/queen-attack/queen-attack.spec.js b/exercises/practice/queen-attack/queen-attack.spec.js index 8922bcb91e..883e728678 100644 --- a/exercises/practice/queen-attack/queen-attack.spec.js +++ b/exercises/practice/queen-attack/queen-attack.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { QueenAttack } from './queen-attack'; describe('Queens', () => { diff --git a/exercises/practice/rail-fence-cipher/rail-fence-cipher.spec.js b/exercises/practice/rail-fence-cipher/rail-fence-cipher.spec.js index 9d09043fe3..00e9fb378b 100644 --- a/exercises/practice/rail-fence-cipher/rail-fence-cipher.spec.js +++ b/exercises/practice/rail-fence-cipher/rail-fence-cipher.spec.js @@ -1,4 +1,5 @@ -import { encode, decode } from './rail-fence-cipher'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { decode, encode } from './rail-fence-cipher'; describe('Rail Fence Cipher', () => { describe('encode', () => { diff --git a/exercises/practice/raindrops/raindrops.spec.js b/exercises/practice/raindrops/raindrops.spec.js index 82bd34bbfc..946fb849d8 100644 --- a/exercises/practice/raindrops/raindrops.spec.js +++ b/exercises/practice/raindrops/raindrops.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { convert } from './raindrops'; describe('Raindrops', () => { diff --git a/exercises/practice/rational-numbers/rational-numbers.spec.js b/exercises/practice/rational-numbers/rational-numbers.spec.js index 73c3c01dee..942b31d065 100644 --- a/exercises/practice/rational-numbers/rational-numbers.spec.js +++ b/exercises/practice/rational-numbers/rational-numbers.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Rational } from './rational-numbers'; describe('Addition', () => { diff --git a/exercises/practice/react/react.spec.js b/exercises/practice/react/react.spec.js index 660e40b1ae..2ad0a8e5f8 100644 --- a/exercises/practice/react/react.spec.js +++ b/exercises/practice/react/react.spec.js @@ -1,4 +1,5 @@ -import { InputCell, ComputeCell, CallbackCell } from './react'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { CallbackCell, ComputeCell, InputCell } from './react'; describe('React module', () => { test('accepts input', () => { diff --git a/exercises/practice/rectangles/rectangles.spec.js b/exercises/practice/rectangles/rectangles.spec.js index 9ee7fa4c01..bd49d137fe 100644 --- a/exercises/practice/rectangles/rectangles.spec.js +++ b/exercises/practice/rectangles/rectangles.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { count } from './rectangles'; describe('Rectangles', () => { diff --git a/exercises/practice/resistor-color-duo/resistor-color-duo.spec.js b/exercises/practice/resistor-color-duo/resistor-color-duo.spec.js index 9053b80a3a..b222f4da82 100644 --- a/exercises/practice/resistor-color-duo/resistor-color-duo.spec.js +++ b/exercises/practice/resistor-color-duo/resistor-color-duo.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { decodedValue } from './resistor-color-duo'; describe('Resistor Colors', () => { diff --git a/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js b/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js index 135dd9c287..a274035f97 100644 --- a/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js +++ b/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { ResistorColorTrio } from './resistor-color-trio'; function makeLabel({ value, unit }) { diff --git a/exercises/practice/resistor-color/resistor-color.spec.js b/exercises/practice/resistor-color/resistor-color.spec.js index 1d3c85328a..b9620593a4 100644 --- a/exercises/practice/resistor-color/resistor-color.spec.js +++ b/exercises/practice/resistor-color/resistor-color.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { colorCode, COLORS } from './resistor-color'; describe('ResistorColor', () => { diff --git a/exercises/practice/rest-api/rest-api.spec.js b/exercises/practice/rest-api/rest-api.spec.js index 7da9ad1f94..5cf19f0f65 100644 --- a/exercises/practice/rest-api/rest-api.spec.js +++ b/exercises/practice/rest-api/rest-api.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { RestAPI } from './rest-api'; describe('Rest API', () => { diff --git a/exercises/practice/reverse-string/reverse-string.spec.js b/exercises/practice/reverse-string/reverse-string.spec.js index 0f18315d96..ae4e746827 100644 --- a/exercises/practice/reverse-string/reverse-string.spec.js +++ b/exercises/practice/reverse-string/reverse-string.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { reverseString } from './reverse-string'; describe('ReverseString', () => { diff --git a/exercises/practice/rna-transcription/rna-transcription.spec.js b/exercises/practice/rna-transcription/rna-transcription.spec.js index 97b71faf9b..303073fa10 100644 --- a/exercises/practice/rna-transcription/rna-transcription.spec.js +++ b/exercises/practice/rna-transcription/rna-transcription.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { toRna } from './rna-transcription'; describe('Transcription', () => { diff --git a/exercises/practice/robot-name/robot-name.spec.js b/exercises/practice/robot-name/robot-name.spec.js index 959a7fb488..b6ea732a50 100644 --- a/exercises/practice/robot-name/robot-name.spec.js +++ b/exercises/practice/robot-name/robot-name.spec.js @@ -1,3 +1,11 @@ +import { + afterEach, + beforeEach, + describe, + expect, + test, + xtest, +} from '@jest/globals'; import { Robot } from './robot-name'; const areSequential = (name1, name2) => { diff --git a/exercises/practice/robot-simulator/robot-simulator.spec.js b/exercises/practice/robot-simulator/robot-simulator.spec.js index 446e91c911..a86c31e18f 100644 --- a/exercises/practice/robot-simulator/robot-simulator.spec.js +++ b/exercises/practice/robot-simulator/robot-simulator.spec.js @@ -1,4 +1,5 @@ -import { Robot, InvalidInputError } from './robot-simulator'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { InvalidInputError, Robot } from './robot-simulator'; function turnRight(robot) { robot.evaluate('R'); diff --git a/exercises/practice/roman-numerals/roman-numerals.spec.js b/exercises/practice/roman-numerals/roman-numerals.spec.js index cb1fe2d38b..cd6e3dd25f 100644 --- a/exercises/practice/roman-numerals/roman-numerals.spec.js +++ b/exercises/practice/roman-numerals/roman-numerals.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { toRoman } from './roman-numerals'; describe('toRoman()', () => { diff --git a/exercises/practice/rotational-cipher/rotational-cipher.spec.js b/exercises/practice/rotational-cipher/rotational-cipher.spec.js index 3e1e74b9c9..0cf962939d 100644 --- a/exercises/practice/rotational-cipher/rotational-cipher.spec.js +++ b/exercises/practice/rotational-cipher/rotational-cipher.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { rotate } from './rotational-cipher'; describe('Rotational cipher', () => { diff --git a/exercises/practice/run-length-encoding/run-length-encoding.spec.js b/exercises/practice/run-length-encoding/run-length-encoding.spec.js index 03243c75c2..a255286c66 100644 --- a/exercises/practice/run-length-encoding/run-length-encoding.spec.js +++ b/exercises/practice/run-length-encoding/run-length-encoding.spec.js @@ -1,4 +1,5 @@ -import { encode, decode } from './run-length-encoding'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { decode, encode } from './run-length-encoding'; describe('run-length encode a string', () => { test('encode empty string', () => { diff --git a/exercises/practice/saddle-points/saddle-points.spec.js b/exercises/practice/saddle-points/saddle-points.spec.js index 0682c4ab3a..f3dc21bb21 100644 --- a/exercises/practice/saddle-points/saddle-points.spec.js +++ b/exercises/practice/saddle-points/saddle-points.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { saddlePoints } from './saddle-points'; describe('Saddle Points', () => { diff --git a/exercises/practice/satellite/satellite.spec.js b/exercises/practice/satellite/satellite.spec.js index 119a836263..1c401ffecb 100644 --- a/exercises/practice/satellite/satellite.spec.js +++ b/exercises/practice/satellite/satellite.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { treeFromTraversals } from './satellite'; describe('Satellite', () => { diff --git a/exercises/practice/say/say.spec.js b/exercises/practice/say/say.spec.js index ef232c78ac..0734da4a77 100644 --- a/exercises/practice/say/say.spec.js +++ b/exercises/practice/say/say.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { say } from './say'; describe('say', () => { diff --git a/exercises/practice/scale-generator/scale-generator.spec.js b/exercises/practice/scale-generator/scale-generator.spec.js index 2a9f37b7ed..899ccd1791 100644 --- a/exercises/practice/scale-generator/scale-generator.spec.js +++ b/exercises/practice/scale-generator/scale-generator.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Scale } from './scale-generator'; describe('ScaleGenerator', () => { diff --git a/exercises/practice/scrabble-score/scrabble-score.spec.js b/exercises/practice/scrabble-score/scrabble-score.spec.js index cf14ebaded..e6d2a37724 100644 --- a/exercises/practice/scrabble-score/scrabble-score.spec.js +++ b/exercises/practice/scrabble-score/scrabble-score.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { score } from './scrabble-score'; describe('Scrabble', () => { diff --git a/exercises/practice/secret-handshake/secret-handshake.spec.js b/exercises/practice/secret-handshake/secret-handshake.spec.js index 0b461adacd..0b277b93df 100644 --- a/exercises/practice/secret-handshake/secret-handshake.spec.js +++ b/exercises/practice/secret-handshake/secret-handshake.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { commands } from './secret-handshake'; describe('Secret Handshake', () => { diff --git a/exercises/practice/series/series.spec.js b/exercises/practice/series/series.spec.js index f01151eb89..96432dcea8 100644 --- a/exercises/practice/series/series.spec.js +++ b/exercises/practice/series/series.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Series } from './series'; describe('Series', () => { diff --git a/exercises/practice/sieve/sieve.spec.js b/exercises/practice/sieve/sieve.spec.js index 1ea2093edf..2a8f382a3f 100644 --- a/exercises/practice/sieve/sieve.spec.js +++ b/exercises/practice/sieve/sieve.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { primes } from './sieve'; describe('Sieve', () => { diff --git a/exercises/practice/simple-cipher/simple-cipher.spec.js b/exercises/practice/simple-cipher/simple-cipher.spec.js index a20f3e914f..44d97e213a 100644 --- a/exercises/practice/simple-cipher/simple-cipher.spec.js +++ b/exercises/practice/simple-cipher/simple-cipher.spec.js @@ -1,4 +1,5 @@ /* eslint-disable no-new */ +import { describe, expect, test, xtest } from '@jest/globals'; import { Cipher } from './simple-cipher'; describe('Random key cipher', () => { diff --git a/exercises/practice/simple-linked-list/simple-linked-list.spec.js b/exercises/practice/simple-linked-list/simple-linked-list.spec.js index cc99f80ce5..99d8c0300b 100644 --- a/exercises/practice/simple-linked-list/simple-linked-list.spec.js +++ b/exercises/practice/simple-linked-list/simple-linked-list.spec.js @@ -1,4 +1,5 @@ -import { List, Element } from './simple-linked-list'; +import { beforeEach, describe, expect, test, xtest } from '@jest/globals'; +import { Element, List } from './simple-linked-list'; describe('Element class', () => { test('has constructor', () => { diff --git a/exercises/practice/space-age/space-age.spec.js b/exercises/practice/space-age/space-age.spec.js index 374939c3b1..6da3ea6126 100644 --- a/exercises/practice/space-age/space-age.spec.js +++ b/exercises/practice/space-age/space-age.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { age } from './space-age'; describe('Space Age', () => { diff --git a/exercises/practice/spiral-matrix/spiral-matrix.spec.js b/exercises/practice/spiral-matrix/spiral-matrix.spec.js index f059169d39..8486f70b68 100644 --- a/exercises/practice/spiral-matrix/spiral-matrix.spec.js +++ b/exercises/practice/spiral-matrix/spiral-matrix.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { spiralMatrix } from './spiral-matrix'; describe('Spiral Matrix', () => { diff --git a/exercises/practice/square-root/square-root.spec.js b/exercises/practice/square-root/square-root.spec.js index 1d2263b0fb..fc59e70947 100644 --- a/exercises/practice/square-root/square-root.spec.js +++ b/exercises/practice/square-root/square-root.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { squareRoot } from './square-root'; describe('Square root', () => { diff --git a/exercises/practice/state-of-tic-tac-toe/state-of-tic-tac-toe.spec.js b/exercises/practice/state-of-tic-tac-toe/state-of-tic-tac-toe.spec.js index 04e77b3ef3..d6cdda3750 100644 --- a/exercises/practice/state-of-tic-tac-toe/state-of-tic-tac-toe.spec.js +++ b/exercises/practice/state-of-tic-tac-toe/state-of-tic-tac-toe.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { gamestate } from './state-of-tic-tac-toe'; describe('Won games', () => { diff --git a/exercises/practice/strain/strain.spec.js b/exercises/practice/strain/strain.spec.js index 621db90344..f3e73bb111 100644 --- a/exercises/practice/strain/strain.spec.js +++ b/exercises/practice/strain/strain.spec.js @@ -1,4 +1,5 @@ -import { keep, discard } from './strain'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { discard, keep } from './strain'; describe('strain', () => { test('keeps on empty array returns empty array', () => { diff --git a/exercises/practice/sublist/sublist.spec.js b/exercises/practice/sublist/sublist.spec.js index 55b91dc02e..227019e890 100644 --- a/exercises/practice/sublist/sublist.spec.js +++ b/exercises/practice/sublist/sublist.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { List } from './sublist'; describe('sublist', () => { diff --git a/exercises/practice/sum-of-multiples/sum-of-multiples.spec.js b/exercises/practice/sum-of-multiples/sum-of-multiples.spec.js index bd38507eee..d824231a7a 100644 --- a/exercises/practice/sum-of-multiples/sum-of-multiples.spec.js +++ b/exercises/practice/sum-of-multiples/sum-of-multiples.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { sum } from './sum-of-multiples'; describe('Sum Of Multiples', () => { diff --git a/exercises/practice/tournament/tournament.spec.js b/exercises/practice/tournament/tournament.spec.js index d2b1c59a61..9cb53d5f64 100644 --- a/exercises/practice/tournament/tournament.spec.js +++ b/exercises/practice/tournament/tournament.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { tournamentTally } from './tournament'; describe('Tournament', () => { diff --git a/exercises/practice/transpose/transpose.spec.js b/exercises/practice/transpose/transpose.spec.js index e40d4e17b6..ff7e8779ee 100644 --- a/exercises/practice/transpose/transpose.spec.js +++ b/exercises/practice/transpose/transpose.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { transpose } from './transpose'; describe('Transpose', () => { diff --git a/exercises/practice/triangle/triangle.spec.js b/exercises/practice/triangle/triangle.spec.js index 5467470d0a..ef0e535341 100644 --- a/exercises/practice/triangle/triangle.spec.js +++ b/exercises/practice/triangle/triangle.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Triangle } from './triangle'; describe('Triangle', () => { diff --git a/exercises/practice/trinary/trinary.spec.js b/exercises/practice/trinary/trinary.spec.js index f7c564386d..f692226379 100644 --- a/exercises/practice/trinary/trinary.spec.js +++ b/exercises/practice/trinary/trinary.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { Trinary } from './trinary'; describe('Trinary', () => { diff --git a/exercises/practice/twelve-days/twelve-days.spec.js b/exercises/practice/twelve-days/twelve-days.spec.js index ec4fc28079..cf736eb13b 100644 --- a/exercises/practice/twelve-days/twelve-days.spec.js +++ b/exercises/practice/twelve-days/twelve-days.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { recite } from './twelve-days'; describe('TwelveDays', () => { diff --git a/exercises/practice/two-bucket/two-bucket.spec.js b/exercises/practice/two-bucket/two-bucket.spec.js index afc9c15e92..f6832cb8ad 100644 --- a/exercises/practice/two-bucket/two-bucket.spec.js +++ b/exercises/practice/two-bucket/two-bucket.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { TwoBucket } from './two-bucket'; describe('TwoBucket', () => { diff --git a/exercises/practice/two-fer/two-fer.spec.js b/exercises/practice/two-fer/two-fer.spec.js index 1c39a36556..e84c57fed0 100644 --- a/exercises/practice/two-fer/two-fer.spec.js +++ b/exercises/practice/two-fer/two-fer.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { twoFer } from './two-fer'; describe('twoFer()', () => { diff --git a/exercises/practice/variable-length-quantity/variable-length-quantity.spec.js b/exercises/practice/variable-length-quantity/variable-length-quantity.spec.js index d6971bff4a..b14648550f 100644 --- a/exercises/practice/variable-length-quantity/variable-length-quantity.spec.js +++ b/exercises/practice/variable-length-quantity/variable-length-quantity.spec.js @@ -1,4 +1,5 @@ -import { encode, decode } from './variable-length-quantity'; +import { describe, expect, test, xtest } from '@jest/globals'; +import { decode, encode } from './variable-length-quantity'; describe('VariableLengthQuantity', () => { describe('Encode a series of integers, producing a series of bytes.', () => { diff --git a/exercises/practice/word-count/word-count.spec.js b/exercises/practice/word-count/word-count.spec.js index e0e7cc1f0f..49adcf6d84 100644 --- a/exercises/practice/word-count/word-count.spec.js +++ b/exercises/practice/word-count/word-count.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { countWords } from './word-count'; describe('countWords', () => { diff --git a/exercises/practice/word-search/word-search.spec.js b/exercises/practice/word-search/word-search.spec.js index 52121ae0af..3a558a4a83 100644 --- a/exercises/practice/word-search/word-search.spec.js +++ b/exercises/practice/word-search/word-search.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import WordSearch from './word-search'; describe('single line grids', () => { diff --git a/exercises/practice/wordy/wordy.spec.js b/exercises/practice/wordy/wordy.spec.js index 2f03b8bcc1..e541962ff0 100644 --- a/exercises/practice/wordy/wordy.spec.js +++ b/exercises/practice/wordy/wordy.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { answer } from './wordy'; describe('Wordy', () => { diff --git a/exercises/practice/yacht/yacht.spec.js b/exercises/practice/yacht/yacht.spec.js index 5554141a84..1800c90d28 100644 --- a/exercises/practice/yacht/yacht.spec.js +++ b/exercises/practice/yacht/yacht.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { score } from './yacht'; describe('Yacht', () => { diff --git a/exercises/practice/zebra-puzzle/zebra-puzzle.spec.js b/exercises/practice/zebra-puzzle/zebra-puzzle.spec.js index dcb7796193..e61823d6ac 100644 --- a/exercises/practice/zebra-puzzle/zebra-puzzle.spec.js +++ b/exercises/practice/zebra-puzzle/zebra-puzzle.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test, xtest } from '@jest/globals'; import { ZebraPuzzle } from './zebra-puzzle'; describe('Zebra puzzle', () => { diff --git a/exercises/practice/zipper/zipper.spec.js b/exercises/practice/zipper/zipper.spec.js index 235fc80c5a..a016c2b554 100644 --- a/exercises/practice/zipper/zipper.spec.js +++ b/exercises/practice/zipper/zipper.spec.js @@ -1,3 +1,4 @@ +import { beforeEach, describe, expect, test, xtest } from '@jest/globals'; import { Zipper } from './zipper'; function bt(value, left, right) { From 0bb2149e6b192b9b4dc1ff0cc3de2b22cc24d60f Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Fri, 18 Oct 2024 22:30:46 +0200 Subject: [PATCH 06/11] Fix test configuration --- jest.config.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/jest.config.js b/jest.config.js index 35d71c5b33..ec8e908127 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,8 +1,22 @@ module.exports = { verbose: true, - modulePathIgnorePatterns: ['package.json'], + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], transform: { - '^.+\\.[t|j]sx?$': 'babel-jest', + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', }, - reporters: [], }; From ee621f8d1cefeb12bbeb0c0965af587acfebf362 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Fri, 18 Oct 2024 22:31:31 +0200 Subject: [PATCH 07/11] Fix texts --- .../parallel-letter-frequency.spec.js | 8 ++++---- scripts/test.mjs | 16 ++++++---------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js b/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js index bca38f5f7d..c032236994 100644 --- a/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js +++ b/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js @@ -125,10 +125,10 @@ describe('ParallelLetterFrequency', () => { xtest('large texts', async () => { const texts = [ - "I am a sick man.... I am a spiteful man. I am an unattractive man.\nI believe my liver is diseased. However, I know nothing at all about my disease, and do not\nknow for certain what ails me. I don't consult a doctor for test,\nand never have, though I have a respect for medicine and doctors.\nBesides, I am extremely superstitious, sufficiently so to respect medicine,\nanyway (I am well-educated enough not to be superstitious, but I am superstitious).\nNo, I refuse to consult a doctor from spite.\nThat you probably will not understand. Well, I understand test, though.\nOf course, I can't explain who it is precisely that I am mortifying in this case by my spite:\nI am perfectly well aware that I cannot \"pay out\" the doctors by not consulting them;\nI know better than anyone that by all this I am only injuring myself and no one else.\nBut still, if I don't consult a doctor it is from spite.\nMy liver is bad, well - let it get worse!\nI have been going on like that for a long time - twenty years. Now I am forty.\nI used to be in the government service, but am no longer.\nI was a spiteful official. I was rude and took pleasure in being so.\nI did not take bribes, you see, so I was bound to find a recompense in that, at least.\n(A poor jest, but I will not scratch it out. I wrote it thinking it would sound very witty;\nbut now that I have seen myself that I only wanted to show off in a despicable way -\nI will not scratch it out on purpose!) When petitioners used to come for\ninformation to the table at which I sat, I used to grind my teeth at them,\nand felt intense enjoyment when I succeeded in making anybody unhappy.\nI almost did succeed. For the most part they were all timid people - of course,\nthey were petitioners. But of the uppish ones there was one officer in particular\nI could not endure. He simply would not be humble, and clanked his sword in a disgusting way.\nI carried on a feud with him for eighteen months over that sword. At last I got the better of him.\nHe left off clanking it. That happened in my youth, though. But do you know,\ngentlemen, what was the chief point about my spite? Why, the whole point,\nthe real sting of it lay in the fact that continually, even in the moment of the acutest spleen,\nI was inwardly conscious with shame that I was not only not a spiteful but not even an embittered man,\nthat I was simply scaring sparrows at random and amusing myself by it.\nI might foam at the mouth, but bring me a doll to play with, give me a cup of tea with sugar in test,\nand maybe I should be appeased. I might even be genuinely touched,\nthough probably I should grind my teeth at myself afterwards and lie awake at night with shame for\nmonths after. That was my way. I was lying when I said just now that I was a spiteful official.\nI was lying from spite. I was simply amusing myself with the petitioners and with the officer,\nand in reality I never could become spiteful. I was conscious every moment in myself of many,\nvery many elements absolutely opposite to that. I felt them positively swarming in me,\nthese opposite elements. I knew that they had been swarming in me all my life and craving some outlet from me,\nbut I would not let them, would not let them, purposely would not let them come out.\nThey tormented me till I was ashamed: they drove me to convulsions and - sickened me, at last,\nhow they sickened me!", - 'Gentlemen, I am joking, and I know myself that my jokes are not brilliant\n,but you know one can take everything as a joke. I am, perhaps, jesting against the grain.\nGentlemen, I am tormented by questions; answer them for me. You, for instance, want to cure men of their\nold habits and reform their will in accordance with science and good sense.\nBut how do you know, not only that it is possible, but also that it is\ndesirable to reform man in that way? And what leads you to the conclusion that man\'s\ninclinations need reforming? In short, how do you know that such a reformation will be a benefit to man?\nAnd to go to the root of the matter, why are you so positively convinced that not to act against\nhis real normal interests guaranteed by the conclusions of reason and arithmetic is certainly always\nadvantageous for man and must always be a law for mankind? So far, you know,\nthis is only your supposition. It may be the law of logic, but not the law of humanity.\nYou think, gentlemen, perhaps that I am mad? Allow me to defend myself. I agree that man\nis pre-eminently a creative animal, predestined to strive consciously for an object and to engage in engineering -\nthat is, incessantly and eternally to make new roads, wherever\nthey may lead. But the reason why he wants sometimes to go off at a tangent may just be that he is\npredestined to make the road, and perhaps, too, that however stupid the "direct"\npractical man may be, the thought sometimes will occur to him that the road almost always does lead\nsomewhere, and that the destination it leads to is less important than the process\nof making test, and that the chief thing is to save the well-conducted child from despising engineering,\nand so giving way to the fatal idleness, which, as we all know,\nis the mother of all the vices. Man likes to make roads and to create, that is a fact beyond dispute.\nBut why has he such a passionate love for destruction and chaos also?\nTell me that! But on that point I want to say a couple of words myself. May it not be that he loves\nchaos and destruction (there can be no disputing that he does sometimes love it)\nbecause he is instinctively afraid of attaining his object and completing the edifice he is constructing?\nWho knows, perhaps he only loves that edifice from a distance, and is by no means\nin love with it at close quarters; perhaps he only loves building it and does not want to live in test,\nbut will leave test, when completed, for the use of les animaux domestiques -\nsuch as the ants, the sheep, and so on. Now the ants have quite a different taste.\nThey have a marvellous edifice of that pattern which endures for ever - the ant-heap.\nWith the ant-heap the respectable race of ants began and with the ant-heap they will probably end,\nwhich does the greatest credit to their perseverance and good sense. But man is a frivolous and\nincongruous creature, and perhaps, like a chess player, loves the process of the game, not the end of it.\nAnd who knows (there is no saying with certainty), perhaps the only goal on earth\nto which mankind is striving lies in this incessant process of attaining, in other words,\nin life itself, and not in the thing to be attained, which must always be expressed as a formula,\nas positive as twice two makes four, and such positiveness is not life, gentlemen,\nbut is the beginning of death.', - "But these are all golden dreams. Oh, tell me, who was it first announced,\nwho was it first proclaimed, that man only does nasty things because he does not know his own interests;\nand that if he were enlightened, if his eyes were opened to his real normal interests,\nman would at once cease to do nasty things, would at once become good and noble because,\nbeing enlightened and understanding his real advantage, he would see his own advantage in the\ngood and nothing else, and we all know that not one man can, consciously, act against his own interests,\nconsequently, so to say, through necessity, he would begin doing good? Oh, the babe! Oh, the pure,\ninnocent child! Why, in the first place, when in all these thousands of years has there been a time\nwhen man has acted only from his own interest? What is to be done with the millions of facts that bear\nwitness that men, consciously, that is fully understanding their real interests, have left them in the\nbackground and have rushed headlong on another path, to meet peril and danger,\ncompelled to this course by nobody and by nothing, but, as it were, simply disliking the beaten track,\nand have obstinately, wilfully, struck out another difficult, absurd way, seeking it almost in the darkness.\nSo, I suppose, this obstinacy and perversity were pleasanter to them than any advantage....\nAdvantage! What is advantage? And will you take it upon yourself to define with perfect accuracy in what the\nadvantage of man consists? And what if it so happens that a man's advantage, sometimes, not only may,\nbut even must, consist in his desiring in certain cases what is harmful to himself and not advantageous.\nAnd if so, if there can be such a case, the whole principle falls into dust. What do you think -\nare there such cases? You laugh; laugh away, gentlemen, but only answer me: have man's advantages been\nreckoned up with perfect certainty? Are there not some which not only have not been included but cannot\npossibly be included under any classification? You see, you gentlemen have, to the best of my knowledge,\ntaken your whole register of human advantages from the averages of statistical figures and\npolitico-economical formulas. Your advantages are prosperity, wealth, freedom, peace - and so on, and so on.\nSo that the man who should, for instance, go openly and knowingly in opposition to all that list would to your thinking,\nand indeed mine, too, of course, be an obscurantist or an absolute madman: would not he? But, you know, this is\nwhat is surprising: why does it so happen that all these statisticians, sages and lovers of humanity,\nwhen they reckon up human advantages invariably leave out one? They don't even take it into their reckoning\nin the form in which it should be taken, and the whole reckoning depends upon that. It would be no greater matter,\nthey would simply have to take test, this advantage, and add it to the list. But the trouble is, that this strange\nadvantage does not fall under any classification and is not in place in any list. I have a friend for instance ...\nEch! gentlemen, but of course he is your friend, too; and indeed there is no one, no one to whom he is not a friend!", - "Yes, but here I come to a stop! Gentlemen, you must excuse me for being over-philosophical;\nit's the result of forty years underground! Allow me to indulge my fancy. You see, gentlemen, reason is an excellent thing,\nthere's no disputing that, but reason is nothing but reason and satisfies only the rational side of man's nature,\nwhile will is a manifestation of the whole life, that is, of the whole human life including reason and all the impulses.\nAnd although our life, in this manifestation of test, is often worthless, yet it is life and not simply extracting square roots.\nHere I, for instance, quite naturally want to live, in order to satisfy all my capacities for life, and not simply my capacity\nfor reasoning, that is, not simply one twentieth of my capacity for life. What does reason know? Reason only knows what it has\nsucceeded in learning (some things, perhaps, it will never learn; this is a poor comfort, but why not say so frankly?)\nand human nature acts as a whole, with everything that is in test, consciously or unconsciously, and, even it if goes wrong, it lives.\nI suspect, gentlemen, that you are looking at me with compassion; you tell me again that an enlightened and developed man,\nsuch, in short, as the future man will be, cannot consciously desire anything disadvantageous to himself, that that can be proved mathematically.\nI thoroughly agree, it can - by mathematics. But I repeat for the hundredth time, there is one case, one only, when man may consciously, purposely,\ndesire what is injurious to himself, what is stupid, very stupid - simply in order to have the right to desire for himself even what is very stupid\nand not to be bound by an obligation to desire only what is sensible. Of course, this very stupid thing, this caprice of ours, may be in reality,\ngentlemen, more advantageous for us than anything else on earth, especially in certain cases. And in particular it may be more advantageous than\nany advantage even when it does us obvious harm, and contradicts the soundest conclusions of our reason concerning our advantage -\nfor in any circumstances it preserves for us what is most precious and most important - that is, our personality, our individuality.\nSome, you see, maintain that this really is the most precious thing for mankind; choice can, of course, if it chooses, be in agreement\nwith reason; and especially if this be not abused but kept within bounds. It is profitable and some- times even praiseworthy.\nBut very often, and even most often, choice is utterly and stubbornly opposed to reason ... and ... and ... do you know that that,\ntoo, is profitable, sometimes even praiseworthy? Gentlemen, let us suppose that man is not stupid. (Indeed one cannot refuse to suppose that,\nif only from the one consideration, that, if man is stupid, then who is wise?) But if he is not stupid, he is monstrously ungrateful!\nPhenomenally ungrateful. In fact, I believe that the best definition of man is the ungrateful biped. But that is not all, that is not his worst defect;\nhis worst defect is his perpetual moral obliquity, perpetual - from the days of the Flood to the Schleswig-Holstein period.", + "I am a sick man.... I am a spiteful man. I am an unattractive man.\nI believe my liver is diseased. However, I know nothing at all about my disease, and do not\nknow for certain what ails me. I don't consult a doctor for it,\nand never have, though I have a respect for medicine and doctors.\nBesides, I am extremely superstitious, sufficiently so to respect medicine,\nanyway (I am well-educated enough not to be superstitious, but I am superstitious).\nNo, I refuse to consult a doctor from spite.\nThat you probably will not understand. Well, I understand it, though.\nOf course, I can't explain who it is precisely that I am mortifying in this case by my spite:\nI am perfectly well aware that I cannot \"pay out\" the doctors by not consulting them;\nI know better than anyone that by all this I am only injuring myself and no one else.\nBut still, if I don't consult a doctor it is from spite.\nMy liver is bad, well - let it get worse!\nI have been going on like that for a long time - twenty years. Now I am forty.\nI used to be in the government service, but am no longer.\nI was a spiteful official. I was rude and took pleasure in being so.\nI did not take bribes, you see, so I was bound to find a recompense in that, at least.\n(A poor jest, but I will not scratch it out. I wrote it thinking it would sound very witty;\nbut now that I have seen myself that I only wanted to show off in a despicable way -\nI will not scratch it out on purpose!) When petitioners used to come for\ninformation to the table at which I sat, I used to grind my teeth at them,\nand felt intense enjoyment when I succeeded in making anybody unhappy.\nI almost did succeed. For the most part they were all timid people - of course,\nthey were petitioners. But of the uppish ones there was one officer in particular\nI could not endure. He simply would not be humble, and clanked his sword in a disgusting way.\nI carried on a feud with him for eighteen months over that sword. At last I got the better of him.\nHe left off clanking it. That happened in my youth, though. But do you know,\ngentlemen, what was the chief point about my spite? Why, the whole point,\nthe real sting of it lay in the fact that continually, even in the moment of the acutest spleen,\nI was inwardly conscious with shame that I was not only not a spiteful but not even an embittered man,\nthat I was simply scaring sparrows at random and amusing myself by it.\nI might foam at the mouth, but bring me a doll to play with, give me a cup of tea with sugar in it,\nand maybe I should be appeased. I might even be genuinely touched,\nthough probably I should grind my teeth at myself afterwards and lie awake at night with shame for\nmonths after. That was my way. I was lying when I said just now that I was a spiteful official.\nI was lying from spite. I was simply amusing myself with the petitioners and with the officer,\nand in reality I never could become spiteful. I was conscious every moment in myself of many,\nvery many elements absolutely opposite to that. I felt them positively swarming in me,\nthese opposite elements. I knew that they had been swarming in me all my life and craving some outlet from me,\nbut I would not let them, would not let them, purposely would not let them come out.\nThey tormented me till I was ashamed: they drove me to convulsions and - sickened me, at last,\nhow they sickened me!", + 'Gentlemen, I am joking, and I know myself that my jokes are not brilliant\n,but you know one can take everything as a joke. I am, perhaps, jesting against the grain.\nGentlemen, I am tormented by questions; answer them for me. You, for instance, want to cure men of their\nold habits and reform their will in accordance with science and good sense.\nBut how do you know, not only that it is possible, but also that it is\ndesirable to reform man in that way? And what leads you to the conclusion that man\'s\ninclinations need reforming? In short, how do you know that such a reformation will be a benefit to man?\nAnd to go to the root of the matter, why are you so positively convinced that not to act against\nhis real normal interests guaranteed by the conclusions of reason and arithmetic is certainly always\nadvantageous for man and must always be a law for mankind? So far, you know,\nthis is only your supposition. It may be the law of logic, but not the law of humanity.\nYou think, gentlemen, perhaps that I am mad? Allow me to defend myself. I agree that man\nis pre-eminently a creative animal, predestined to strive consciously for an object and to engage in engineering -\nthat is, incessantly and eternally to make new roads, wherever\nthey may lead. But the reason why he wants sometimes to go off at a tangent may just be that he is\npredestined to make the road, and perhaps, too, that however stupid the "direct"\npractical man may be, the thought sometimes will occur to him that the road almost always does lead\nsomewhere, and that the destination it leads to is less important than the process\nof making it, and that the chief thing is to save the well-conducted child from despising engineering,\nand so giving way to the fatal idleness, which, as we all know,\nis the mother of all the vices. Man likes to make roads and to create, that is a fact beyond dispute.\nBut why has he such a passionate love for destruction and chaos also?\nTell me that! But on that point I want to say a couple of words myself. May it not be that he loves\nchaos and destruction (there can be no disputing that he does sometimes love it)\nbecause he is instinctively afraid of attaining his object and completing the edifice he is constructing?\nWho knows, perhaps he only loves that edifice from a distance, and is by no means\nin love with it at close quarters; perhaps he only loves building it and does not want to live in it,\nbut will leave it, when completed, for the use of les animaux domestiques -\nsuch as the ants, the sheep, and so on. Now the ants have quite a different taste.\nThey have a marvellous edifice of that pattern which endures for ever - the ant-heap.\nWith the ant-heap the respectable race of ants began and with the ant-heap they will probably end,\nwhich does the greatest credit to their perseverance and good sense. But man is a frivolous and\nincongruous creature, and perhaps, like a chess player, loves the process of the game, not the end of it.\nAnd who knows (there is no saying with certainty), perhaps the only goal on earth\nto which mankind is striving lies in this incessant process of attaining, in other words,\nin life itself, and not in the thing to be attained, which must always be expressed as a formula,\nas positive as twice two makes four, and such positiveness is not life, gentlemen,\nbut is the beginning of death.', + "But these are all golden dreams. Oh, tell me, who was it first announced,\nwho was it first proclaimed, that man only does nasty things because he does not know his own interests;\nand that if he were enlightened, if his eyes were opened to his real normal interests,\nman would at once cease to do nasty things, would at once become good and noble because,\nbeing enlightened and understanding his real advantage, he would see his own advantage in the\ngood and nothing else, and we all know that not one man can, consciously, act against his own interests,\nconsequently, so to say, through necessity, he would begin doing good? Oh, the babe! Oh, the pure,\ninnocent child! Why, in the first place, when in all these thousands of years has there been a time\nwhen man has acted only from his own interest? What is to be done with the millions of facts that bear\nwitness that men, consciously, that is fully understanding their real interests, have left them in the\nbackground and have rushed headlong on another path, to meet peril and danger,\ncompelled to this course by nobody and by nothing, but, as it were, simply disliking the beaten track,\nand have obstinately, wilfully, struck out another difficult, absurd way, seeking it almost in the darkness.\nSo, I suppose, this obstinacy and perversity were pleasanter to them than any advantage....\nAdvantage! What is advantage? And will you take it upon yourself to define with perfect accuracy in what the\nadvantage of man consists? And what if it so happens that a man's advantage, sometimes, not only may,\nbut even must, consist in his desiring in certain cases what is harmful to himself and not advantageous.\nAnd if so, if there can be such a case, the whole principle falls into dust. What do you think -\nare there such cases? You laugh; laugh away, gentlemen, but only answer me: have man's advantages been\nreckoned up with perfect certainty? Are there not some which not only have not been included but cannot\npossibly be included under any classification? You see, you gentlemen have, to the best of my knowledge,\ntaken your whole register of human advantages from the averages of statistical figures and\npolitico-economical formulas. Your advantages are prosperity, wealth, freedom, peace - and so on, and so on.\nSo that the man who should, for instance, go openly and knowingly in opposition to all that list would to your thinking,\nand indeed mine, too, of course, be an obscurantist or an absolute madman: would not he? But, you know, this is\nwhat is surprising: why does it so happen that all these statisticians, sages and lovers of humanity,\nwhen they reckon up human advantages invariably leave out one? They don't even take it into their reckoning\nin the form in which it should be taken, and the whole reckoning depends upon that. It would be no greater matter,\nthey would simply have to take it, this advantage, and add it to the list. But the trouble is, that this strange\nadvantage does not fall under any classification and is not in place in any list. I have a friend for instance ...\nEch! gentlemen, but of course he is your friend, too; and indeed there is no one, no one to whom he is not a friend!", + "Yes, but here I come to a stop! Gentlemen, you must excuse me for being over-philosophical;\nit's the result of forty years underground! Allow me to indulge my fancy. You see, gentlemen, reason is an excellent thing,\nthere's no disputing that, but reason is nothing but reason and satisfies only the rational side of man's nature,\nwhile will is a manifestation of the whole life, that is, of the whole human life including reason and all the impulses.\nAnd although our life, in this manifestation of it, is often worthless, yet it is life and not simply extracting square roots.\nHere I, for instance, quite naturally want to live, in order to satisfy all my capacities for life, and not simply my capacity\nfor reasoning, that is, not simply one twentieth of my capacity for life. What does reason know? Reason only knows what it has\nsucceeded in learning (some things, perhaps, it will never learn; this is a poor comfort, but why not say so frankly?)\nand human nature acts as a whole, with everything that is in it, consciously or unconsciously, and, even it if goes wrong, it lives.\nI suspect, gentlemen, that you are looking at me with compassion; you tell me again that an enlightened and developed man,\nsuch, in short, as the future man will be, cannot consciously desire anything disadvantageous to himself, that that can be proved mathematically.\nI thoroughly agree, it can - by mathematics. But I repeat for the hundredth time, there is one case, one only, when man may consciously, purposely,\ndesire what is injurious to himself, what is stupid, very stupid - simply in order to have the right to desire for himself even what is very stupid\nand not to be bound by an obligation to desire only what is sensible. Of course, this very stupid thing, this caprice of ours, may be in reality,\ngentlemen, more advantageous for us than anything else on earth, especially in certain cases. And in particular it may be more advantageous than\nany advantage even when it does us obvious harm, and contradicts the soundest conclusions of our reason concerning our advantage -\nfor in any circumstances it preserves for us what is most precious and most important - that is, our personality, our individuality.\nSome, you see, maintain that this really is the most precious thing for mankind; choice can, of course, if it chooses, be in agreement\nwith reason; and especially if this be not abused but kept within bounds. It is profitable and some- times even praiseworthy.\nBut very often, and even most often, choice is utterly and stubbornly opposed to reason ... and ... and ... do you know that that,\ntoo, is profitable, sometimes even praiseworthy? Gentlemen, let us suppose that man is not stupid. (Indeed one cannot refuse to suppose that,\nif only from the one consideration, that, if man is stupid, then who is wise?) But if he is not stupid, he is monstrously ungrateful!\nPhenomenally ungrateful. In fact, I believe that the best definition of man is the ungrateful biped. But that is not all, that is not his worst defect;\nhis worst defect is his perpetual moral obliquity, perpetual - from the days of the Flood to the Schleswig-Holstein period.", ]; const expected = { a: 845, diff --git a/scripts/test.mjs b/scripts/test.mjs index fc88e19483..193ccdda98 100644 --- a/scripts/test.mjs +++ b/scripts/test.mjs @@ -8,9 +8,9 @@ * This runs `jest` tests for all sample solutions */ -const shell = require('shelljs'); -const helpers = require('./helpers'); -const assignment = shell.env['ASSIGNMENT']; +import { env } from 'shelljs'; +import { prepareAndRun } from './helpers.mjs'; +const assignment = env['ASSIGNMENT']; const infoStr = assignment ? '\nRunning tests for ' + assignment + '...' @@ -18,13 +18,9 @@ const infoStr = assignment const failureStr = '[Failure] Tests failed!'; // Copies the necessary files -shell.env['PREPARE'] = true; +env['PREPARE'] = true; // Cleans up after -shell.env['CLEANUP'] = true; +env['CLEANUP'] = true; -helpers.prepareAndRun( - 'corepack pnpm jest --bail tmp_exercises', - infoStr, - failureStr, -); +prepareAndRun('corepack pnpm jest --bail tmp_exercises', infoStr, failureStr); From ec5533886562484599035ef479e6f86af981d00a Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Thu, 2 Jan 2025 18:59:28 +0100 Subject: [PATCH 08/11] Fix linting issues, update CONTRIBUTING --- .vscode/settings.json | 3 +- CONTRIBUTING.md | 87 +- babel.config.js | 2 +- eslint.config.mjs | 8 +- .../coordinate-transformation.spec.js | 4 +- .../elyses-enchantments/enchantments.spec.js | 7 +- .../factory-sensors/factory-sensors.spec.js | 2 +- .../concept/fruit-picker/fruit-picker.spec.js | 2 +- exercises/concept/lasagna/lasagna.spec.js | 1 - .../concept/nullability/nullability.spec.js | 10 +- .../concept/pizza-order/pizza-order.spec.js | 32 +- .../.meta/exemplar.alternative.js | 12 +- .../practice/affine-cipher/.meta/proof.ci.js | 1 - .../affine-cipher/affine-cipher.spec.js | 4 +- .../practice/allergies/.meta/proof.ci.js | 3 +- exercises/practice/binary/binary.spec.js | 9 +- exercises/practice/change/change.spec.js | 12 +- .../circular-buffer/.meta/proof.ci.js | 1 - .../diffie-hellman/diffie-hellman.spec.js | 1 - exercises/practice/dominoes/dominoes.spec.js | 14 +- .../flatten-array/flatten-array.spec.js | 4 +- .../practice/go-counting/.meta/proof.ci.js | 1 + exercises/practice/grep/grep.spec.js | 54 +- .../practice/linked-list/.meta/proof.ci.js | 1 - .../resistor-color-trio.spec.js | 2 +- .../practice/robot-name/.meta/proof.ci.js | 1 - .../simple-cipher/simple-cipher.spec.js | 1 - exercises/practice/strain/strain.spec.js | 2 +- .../practice/twelve-days/twelve-days.spec.js | 30 +- .../practice/two-bucket/.meta/proof.ci.js | 1 - package.json | 14 +- pnpm-lock.yaml | 3880 +++++------------ scripts/checksum.mjs | 2 +- scripts/helpers.mjs | 6 +- scripts/lint.mjs | 15 + 35 files changed, 1307 insertions(+), 2922 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1be1d7ba7d..47c6a8b260 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,6 +7,5 @@ // because of how whitespace is (not) rendered. 65 ] - }, - "cSpell.words": ["xtest"] + } } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ec294a03a0..1f527611e8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -77,18 +77,18 @@ The baseline of work is as follows: 1. We'll assign the issue to you, so you get to work on this exercise 1. Create a new folder in `/exercises` 1. You'll need to sync this folder with the matching config files. - You can use `scripts/sync` to do this: `ASSIGNMENT=slug npx babel-node scripts/sync`. + You can use `scripts/sync` to do this. 1. Create a `.js` stub file. 1. Create a `.spec.js` test file. Here add the tests, per canonical data if possible (more on canonical data below). 1. Create an `example.js` file. Place a working implementation, assuming it's renamed to `.js` 1. Create `.meta/tests.toml`. If the exercise that is being implemented has test data in the [problem specifications repository][problem-specifications], the contents of this file **must** be a list of UUIDs of the tests that are implemented or not implemented. Scroll down to [tools](#tools) to find configlet which aids in generating this file _interactively_. -1. Run the tests locally, using `scripts/test`: `ASSIGNMENT=slug npx babel-node scripts/test`. -1. Run the linter locally, using `scripts/lint`: `ASSIGNMENT=slug npx babel-node scripts/lint`. +1. Run the tests locally, using `scripts/test`. +1. Run the linter locally, using `scripts/lint`. 1. Create an entry in `config.json`: a unique _new_ UUID (you can use the `configlet uuid` tool to generate one, scroll down to [tools](#tools) to see how you can get it), give it a difficulty (should be similar to similar exercises), and make sure the _order_ of the file is sane. Currently, the file is ordered first on concept exercise, then on "original core", finally everything else, on difficulty low to high, and ultimately lexicographically. -1. Format the files, using `scripts/format`: `npx babel-node scripts/format`. +1. Format the files, using `scripts/format`. The final step is opening a Pull Request, with these items all checked off. Make sure the tests run and the linter is happy. It will run automatically on your PR. @@ -210,27 +210,6 @@ It then interactively gives the maintainer the option to include or exclude test We have various `scripts` to aid with maintaining and contributing to this repository. -> [!IMPORTANT] -> If you encounter the following error: -> -> ```text -> SyntaxError: Unexpected token 'export' -> ``` -> -> It's because your local Node.js version does **not** support es6 -> `import` and `export` statements in regular `.js` files, or -> files without extension. This is one of the reasons why these -> scripts are meant to be run through Node.js: -> -> ```shell -> npx babel-node scripts/the-script -> ``` -> -> Additionally, this ensures that the code written in the scripts -> and their dependencies can be executed by your current Node.js -> version, which may be different from the version used by the -> maintainer or contributor who contributed to the script. - #### `format` ```js @@ -250,7 +229,7 @@ The correct version will be extracted when running `.github/workflows/verify-cod ```js /* - * Run this script (from root directory): npx babel-node scripts/lint + * Run this script (from root directory): corepack pnpm node scripts/lint.mjs * * This runs `eslint` on all sample solutions (and test) files */ @@ -267,7 +246,7 @@ ASSIGNMENT=two-fer npx babel-node scripts/lint ```js /** - * Run this script (from root directory): npx babel-node scripts/test + * Run this script (from root directory): corepack pnpm node scripts/test.mjs * * This runs `jest` tests for all sample solutions */ @@ -277,14 +256,24 @@ If the `ASSIGNMENT` environment variable is set, only _that_ exercise is tested. For example, if you only want to test the `example.js` for `two-fer`, you may, depending on your environment, use: ```shell -ASSIGNMENT=two-fer npx babel-node scripts/test +ASSIGNMENT=practice/two-fer corepack pnpm node scripts/test.mjs +``` + +Note: on Windows, if you're not in a POSIX style command line, you can use `cross-env` to make this work: + +```shell +# if installed globally +cross-env ASSIGNMENT=practice/two-fer corepack pnpm node scripts/test.mjs + +# otherwise +corepack pnpm dlx cross-env ASSIGNMENT=practice/two-fer node scripts/test.mjs ``` #### `sync` ```js /** - * Run this script (from root directory): npx babel-node scripts/sync + * Run this script (from root directory): corepack pnpm node scripts/sync.mjs * * This script is used to propagate any change to root package.json to * all exercises and keep them in sync. @@ -297,14 +286,24 @@ If the `ASSIGNMENT` environment variable is set, only _that_ exercise is tested. For example, if you only want to sync the files for `two-fer`, you may, depending on your environment, use: ```shell -ASSIGNMENT=two-fer npx babel-node scripts/sync +ASSIGNMENT=practice/two-fer corepack pnpm node scripts/sync.mjs +``` + +Note: on Windows, if you're not in a POSIX style command line, you can use `cross-env` to make this work: + +```shell +# if installed globally +cross-env ASSIGNMENT=practice/two-fer corepack pnpm node scripts/sync.mjs + +# otherwise +corepack pnpm dlx cross-env ASSIGNMENT=practice/two-fer node scripts/sync.mjs ``` #### `checksum` ```js /* - * Run this script (from root directory): npx babel-node scripts/checksum + * Run this script (from root directory): corepack pnpm node scripts/checksum.mjs * * This will check root `package.json` matches each exercise's `package.json`. * But the catch is there are some dependencies that are only used at build-time and not served to end-users @@ -317,7 +316,7 @@ ASSIGNMENT=two-fer npx babel-node scripts/sync ```js /** - * Run this script (from root directory): npx babel-node scripts/ci-check + * Run this script (from root directory): corepack pnpm node scripts/ci-check.mjs * * This will run the following checks: * @@ -333,7 +332,7 @@ Run this script to check stubs, configuration integrity and lint the code. ```js /** - * Run this script (from root directory): npx babel-node scripts/ci + * Run this script (from root directory): corepack pnpm node scripts/ci.mjs * * This will run the following checks: * @@ -348,13 +347,13 @@ Run this script to test all exercises. ```js /** - * Run this script (from root directory): npx babel-node scripts/name-check + * Run this script (from root directory): corepack pnpm node scripts/name-check.mjs * * This will run the following checks: * * 1. Package name is of the format "@exercism/javascript-" * - * This script also allows fixing these names: npx babel-node scripts/name-check --fix + * This script also allows fixing these names: corepack pnpm node scripts/name-check.mjs --fix */ ``` @@ -364,7 +363,7 @@ Run this script to check if the package name in package.json of exercises is in ```js /** - * Run this script (from root directory): npx babel-node scripts/name-uniq + * Run this script (from root directory): corepack pnpm node scripts/name-uniq.mjs * * This will run the following checks: * @@ -378,13 +377,13 @@ Run this script to check if there is any duplicate package name. ```js /** - * Run this script (from root directory): npx babel-node scripts/directory-check + * Run this script (from root directory): corepack pnpm node scripts/directory-check.mjs * * This will run the following checks: * * 1. The package has the correct directory based on the path to the exercise. * - * This script also allows fixing these directories: npx babel-node scripts/directory-check --fix + * This script also allows fixing these directories: corepack pnpm node scripts/directory-check.mjs --fix */ ``` @@ -393,7 +392,17 @@ If the `ASSIGNMENT` environment variable is set, only _that_ exercise is tested. For example, if you only want to test the directory for `concept/closures`, you may, depending on your environment, use: ```shell -ASSIGNMENT=concept/closures npx babel-node scripts/directory-check +ASSIGNMENT=concept/closures corepack pnpm node scripts/directory-check.mjs +``` + +Note: on Windows, if you're not in a POSIX style command line, you can use `cross-env` to make this work: + +```shell +# if installed globally +cross-env ASSIGNMENT=concept/closures corepack pnpm node scripts/directory-check.mjs + +# otherwise +corepack pnpm dlx cross-env ASSIGNMENT=concept/closures node scripts/directory-check.mjs ``` [configlet]: https://exercism.org/docs/building/configlet diff --git a/babel.config.js b/babel.config.js index cc26a2c7a1..bee6710c47 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: [['@exercism/babel-preset-javascript', { corejs: '3.38' }]], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/eslint.config.mjs b/eslint.config.mjs index 31654f20f7..ca517111ed 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -7,9 +7,12 @@ import globals from 'globals'; export default [ ...config, + ...maintainersConfig, { - files: ['.meta/proof.ci.js', '.meta/exemplar.js', '*.spec.js'], - extends: maintainersConfig, + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, }, { files: ['scripts/**/*.mjs'], @@ -19,6 +22,7 @@ export default [ }, }, }, + // <> { ignores: [ // # Protected or generated diff --git a/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js b/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js index e9350689d6..ab12e99d46 100644 --- a/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js +++ b/exercises/concept/coordinate-transformation/coordinate-transformation.spec.js @@ -1,4 +1,4 @@ -import { describe, expect, test } from '@jest/globals'; +import { describe, expect, test, jest } from '@jest/globals'; import { composeTransform, memoizeTransform, @@ -137,7 +137,7 @@ describe('memoizeTransform', () => { expect(memoizedTransform(1, 1)).toEqual([2, 2]); expect(memoizedTransform(2, 2)).toEqual([4, 4]); expect(memoizedTransform(1, 1)).toEqual([2, 2]); - expect(mockFunction).toBeCalledTimes(3); + expect(mockFunction).toHaveBeenCalledTimes(3); }); test('should recalculate when a new function is passed in', () => { diff --git a/exercises/concept/elyses-enchantments/enchantments.spec.js b/exercises/concept/elyses-enchantments/enchantments.spec.js index 9325f5bd08..cb20e143b4 100644 --- a/exercises/concept/elyses-enchantments/enchantments.spec.js +++ b/exercises/concept/elyses-enchantments/enchantments.spec.js @@ -114,11 +114,8 @@ describe('make cards disappear', () => { const expected = [2, 3, 4]; if (stack[0] === undefined) { - // eslint-disable-next-line no-undef - fail( - new Error( - 'The card has disappeared, but the stack has not changed in size. This magic trick has turned into actual magic. Perhaps a different method of removing the card will result in a stack that Elyse can work with...', - ), + throw new Error( + 'The card has disappeared, but the stack has not changed in size. This magic trick has turned into actual magic. Perhaps a different method of removing the card will result in a stack that Elyse can work with...', ); } diff --git a/exercises/concept/factory-sensors/factory-sensors.spec.js b/exercises/concept/factory-sensors/factory-sensors.spec.js index 999ffc8d9e..8fb7e2546c 100644 --- a/exercises/concept/factory-sensors/factory-sensors.spec.js +++ b/exercises/concept/factory-sensors/factory-sensors.spec.js @@ -1,4 +1,4 @@ -import { beforeEach, describe, expect, test } from '@jest/globals'; +import { beforeEach, describe, expect, test, jest } from '@jest/globals'; import { ArgumentError, checkHumidityLevel, diff --git a/exercises/concept/fruit-picker/fruit-picker.spec.js b/exercises/concept/fruit-picker/fruit-picker.spec.js index 675d8a6412..3e1a59bdfd 100644 --- a/exercises/concept/fruit-picker/fruit-picker.spec.js +++ b/exercises/concept/fruit-picker/fruit-picker.spec.js @@ -1,4 +1,4 @@ -import { afterEach, describe, expect, test } from '@jest/globals'; +import { afterEach, describe, expect, test, jest } from '@jest/globals'; import { onError, onSuccess, orderFromGrocer, postOrder } from './fruit-picker'; import { order } from './grocer'; import { notify } from './notifier'; diff --git a/exercises/concept/lasagna/lasagna.spec.js b/exercises/concept/lasagna/lasagna.spec.js index 10d351ae63..243ecf64c0 100644 --- a/exercises/concept/lasagna/lasagna.spec.js +++ b/exercises/concept/lasagna/lasagna.spec.js @@ -1,6 +1,5 @@ import { describe, expect, test } from '@jest/globals'; import { - // eslint-disable-next-line import/named EXPECTED_MINUTES_IN_OVEN, preparationTimeInMinutes, remainingMinutesInOven, diff --git a/exercises/concept/nullability/nullability.spec.js b/exercises/concept/nullability/nullability.spec.js index fa2dc1b054..95944bb5e3 100644 --- a/exercises/concept/nullability/nullability.spec.js +++ b/exercises/concept/nullability/nullability.spec.js @@ -1,30 +1,30 @@ -import { describe, expect } from '@jest/globals'; +import { describe, expect, test } from '@jest/globals'; import { printBadge } from './nullability'; describe('nullability', () => { describe('printBadge', () => { - it("printBadge(17, 'Ryder Herbert', 'Marketing')", () => { + test("printBadge(17, 'Ryder Herbert', 'Marketing')", () => { const actual = printBadge(17, 'Ryder Herbert', 'Marketing'); expect(actual).toBe('[17] Ryder Herbert - MARKETING'); }); }); describe('printBadge without an employee ID', () => { - it("printBadge(null, 'Bogdan Rosario', 'Marketing')", () => { + test("printBadge(null, 'Bogdan Rosario', 'Marketing')", () => { const actual = printBadge(null, 'Bogdan Rosario', 'Marketing'); expect(actual).toBe('Bogdan Rosario - MARKETING'); }); }); describe('printBadge without a department', () => { - it("printBadge(59, 'Julie Sokato', null)", () => { + test("printBadge(59, 'Julie Sokato', null)", () => { const actual = printBadge(59, 'Julie Sokato', null); expect(actual).toBe('[59] Julie Sokato - OWNER'); }); }); describe('printBadge for a new owner', () => { - it("printBadge(null, 'Amare Osei', null)", () => { + test("printBadge(null, 'Amare Osei', null)", () => { const actual = printBadge(null, 'Amare Osei', null); expect(actual).toBe('Amare Osei - OWNER'); }); diff --git a/exercises/concept/pizza-order/pizza-order.spec.js b/exercises/concept/pizza-order/pizza-order.spec.js index df57f2efb8..58c7677028 100644 --- a/exercises/concept/pizza-order/pizza-order.spec.js +++ b/exercises/concept/pizza-order/pizza-order.spec.js @@ -1,4 +1,4 @@ -import { describe, expect } from '@jest/globals'; +import { describe, expect, test } from '@jest/globals'; import { orderPrice, pizzaPrice } from './pizza-order'; class PizzaOrder { @@ -16,49 +16,49 @@ class PizzaOrder { } describe('Price for pizza margherita', () => { - it("pizzaPrice('Margherita')", () => { + test("pizzaPrice('Margherita')", () => { expect(pizzaPrice('Margherita')).toBe(7); }); }); describe('Price for pizza formaggio', () => { - it("pizzaPrice('Formaggio')", () => { + test("pizzaPrice('Formaggio')", () => { expect(pizzaPrice('Formaggio')).toBe(10); }); }); describe('Price for pizza caprese', () => { - it("pizzaPrice('Caprese')", () => { + test("pizzaPrice('Caprese')", () => { expect(pizzaPrice('Caprese')).toBe(9); }); }); describe('Price for pizza margherita with extra sauce', () => { - it("pizzaPrice('Margherita', 'ExtraSauce')", () => { + test("pizzaPrice('Margherita', 'ExtraSauce')", () => { expect(pizzaPrice('Margherita', 'ExtraSauce')).toBe(8); }); }); describe('Price for pizza caprese with extra toppings', () => { - it("pizzaPrice('Caprese', 'ExtraToppings')", () => { + test("pizzaPrice('Caprese', 'ExtraToppings')", () => { expect(pizzaPrice('Caprese', 'ExtraToppings')).toBe(11); }); }); describe('Price for pizza formaggio with extra sauce and toppings', () => { - it("pizzaPrice('Formaggio', 'ExtraSauce', 'ExtraToppings')", () => { + test("pizzaPrice('Formaggio', 'ExtraSauce', 'ExtraToppings')", () => { expect(pizzaPrice('Formaggio', 'ExtraSauce', 'ExtraToppings')).toBe(13); }); }); describe('Price for pizza caprese with extra sauce and toppings', () => { - it("pizzaPrice('Caprese', 'ExtraSauce', 'ExtraToppings')", () => { + test("pizzaPrice('Caprese', 'ExtraSauce', 'ExtraToppings')", () => { expect(pizzaPrice('Caprese', 'ExtraSauce', 'ExtraToppings')).toBe(12); }); }); describe('Price for pizza caprese with a lot of extra toppings', () => { - it("pizzaPrice('Caprese', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings')", () => { + test("pizzaPrice('Caprese', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings')", () => { expect( pizzaPrice( 'Caprese', @@ -72,27 +72,27 @@ describe('Price for pizza caprese with a lot of extra toppings', () => { }); describe('Order price for no pizzas', () => { - it('orderPrice([])', () => { + test('orderPrice([])', () => { expect(orderPrice([])).toBe(0); }); }); describe('Order price for a single pizza caprese', () => { - it("orderPrice([PizzaOrder('Caprese')])", () => { + test("orderPrice([PizzaOrder('Caprese')])", () => { const order = new PizzaOrder('Caprese'); expect(orderPrice([order])).toBe(9); }); }); describe('Order price for a single pizza formaggio with extra sauce', () => { - it("orderPrice([PizzaOrder('Formaggio', 'ExtraSauce')])", () => { + test("orderPrice([PizzaOrder('Formaggio', 'ExtraSauce')])", () => { const order = new PizzaOrder('Formaggio', 'ExtraSauce'); expect(orderPrice([order])).toBe(11); }); }); describe('Order price for one pizza margherita and one pizza caprese with extra toppings', () => { - it("orderPrice([PizzaOrder('Margherita'), PizzaOrder('Caprese', 'ExtraToppings')])", () => { + test("orderPrice([PizzaOrder('Margherita'), PizzaOrder('Caprese', 'ExtraToppings')])", () => { const margherita = new PizzaOrder('Margherita'); const caprese = new PizzaOrder('Caprese', 'ExtraToppings'); @@ -104,7 +104,7 @@ describe('Order price for one pizza margherita and one pizza caprese with extra }); describe('Order price for one pizza margherita with a LOT of sauce and one pizza caprese with a LOT of toppings', () => { - it("orderPrice([PizzaOrder('Margherita', 'ExtraSauce', 'ExtraSauce', 'ExtraSauce'), PizzaOrder('Caprese', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings')])", () => { + test("orderPrice([PizzaOrder('Margherita', 'ExtraSauce', 'ExtraSauce', 'ExtraSauce'), PizzaOrder('Caprese', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings', 'ExtraToppings')])", () => { const saucyMargherita = new PizzaOrder( 'Margherita', 'ExtraSauce', @@ -127,7 +127,7 @@ describe('Order price for one pizza margherita with a LOT of sauce and one pizza }); describe('Order price for very large order', () => { - it('orderPrice([/* lots of */])', () => { + test('orderPrice([/* lots of */])', () => { const margherita = new PizzaOrder('Margherita'); const margherita2 = new PizzaOrder('Margherita', 'ExtraSauce'); const caprese = new PizzaOrder('Caprese'); @@ -162,7 +162,7 @@ describe('Order price for very large order', () => { }); describe('Order price for a gigantic order', () => { - it('orderPrice([/* lots of */])', () => { + test('orderPrice([/* lots of */])', () => { const allTheMargheritas = Array(100 * 1000).fill( new PizzaOrder('Margherita'), ); diff --git a/exercises/concept/translation-service/.meta/exemplar.alternative.js b/exercises/concept/translation-service/.meta/exemplar.alternative.js index fc64e8345f..1a184def5e 100644 --- a/exercises/concept/translation-service/.meta/exemplar.alternative.js +++ b/exercises/concept/translation-service/.meta/exemplar.alternative.js @@ -80,11 +80,13 @@ export class TranslationService { */ async request(text, attempt = 1) { try { - await new Promise((resolve, reject) => { - this.api.request(text, (err) => { - err ? reject(err) : resolve(); - }); - }); + await /** @type {Promise} */ ( + new Promise((resolve, reject) => { + this.api.request(text, (err) => { + err ? reject(err) : resolve(); + }); + }) + ); } catch (err) { if (attempt === 3) { throw err; diff --git a/exercises/practice/affine-cipher/.meta/proof.ci.js b/exercises/practice/affine-cipher/.meta/proof.ci.js index ee1665b0ed..6b129951d2 100644 --- a/exercises/practice/affine-cipher/.meta/proof.ci.js +++ b/exercises/practice/affine-cipher/.meta/proof.ci.js @@ -24,7 +24,6 @@ const isNumber = (candidate) => { const findMMI = (a) => { let i = 1; - // eslint-disable-next-line no-constant-condition while (true) { i++; diff --git a/exercises/practice/affine-cipher/affine-cipher.spec.js b/exercises/practice/affine-cipher/affine-cipher.spec.js index 0961b79b01..507aad8de3 100644 --- a/exercises/practice/affine-cipher/affine-cipher.spec.js +++ b/exercises/practice/affine-cipher/affine-cipher.spec.js @@ -47,7 +47,7 @@ describe('Affine cipher', () => { xtest('encode with a not coprime to m', () => { expect(() => { encode('This is a test.', { a: 6, b: 17 }); - }).toThrowError('a and m must be coprime.'); + }).toThrow('a and m must be coprime.'); }); }); describe('decode', () => { @@ -88,7 +88,7 @@ describe('Affine cipher', () => { xtest('decode with a not coprime to m', () => { expect(() => { decode('Test', { a: 13, b: 5 }); - }).toThrowError('a and m must be coprime.'); + }).toThrow('a and m must be coprime.'); }); }); }); diff --git a/exercises/practice/allergies/.meta/proof.ci.js b/exercises/practice/allergies/.meta/proof.ci.js index 1bc999f006..c3f3e1b94d 100644 --- a/exercises/practice/allergies/.meta/proof.ci.js +++ b/exercises/practice/allergies/.meta/proof.ci.js @@ -15,9 +15,8 @@ export class Allergies { } list() { - // eslint-disable-next-line no-bitwise, no-restricted-properties return possibleAllergies.filter( - (allergy, i) => this.allergenIndex & Math.pow(2, i), + (_allergy, i) => this.allergenIndex & Math.pow(2, i), ); } diff --git a/exercises/practice/binary/binary.spec.js b/exercises/practice/binary/binary.spec.js index ab5128a4d3..415daed688 100644 --- a/exercises/practice/binary/binary.spec.js +++ b/exercises/practice/binary/binary.spec.js @@ -1,11 +1,4 @@ -import { - beforeEach, - afterEach, - describe, - test, - expect, - xtest, -} from '@jest/globals'; +import { describe, test, expect, xtest } from '@jest/globals'; import { Binary } from './binary'; describe('binary', () => { diff --git a/exercises/practice/change/change.spec.js b/exercises/practice/change/change.spec.js index 9e16e9dd20..b7f398e2f1 100644 --- a/exercises/practice/change/change.spec.js +++ b/exercises/practice/change/change.spec.js @@ -63,27 +63,27 @@ describe('Change', () => { xtest('error testing for change smaller than the smallest of coins', () => { const change = new Change(); const message = 'The total 3 cannot be represented in the given currency.'; - const test = () => { + const expectation = () => { change.calculate([5, 10], 3); }; - expect(test).toThrowError(message); + expect(expectation).toThrow(message); }); xtest('error testing if no combination can add up to target', () => { const change = new Change(); const message = 'The total 94 cannot be represented in the given currency.'; - const test = () => { + const expectation = () => { change.calculate([5, 10], 94); }; - expect(test).toThrowError(message); + expect(expectation).toThrow(message); }); xtest('cannot find negative change values', () => { const change = new Change(); const message = 'Negative totals are not allowed.'; - const test = () => { + const expectation = () => { change.calculate([1, 2, 5], -5); }; - expect(test).toThrowError(message); + expect(expectation).toThrow(message); }); }); diff --git a/exercises/practice/circular-buffer/.meta/proof.ci.js b/exercises/practice/circular-buffer/.meta/proof.ci.js index c31f24e834..8ba5832015 100644 --- a/exercises/practice/circular-buffer/.meta/proof.ci.js +++ b/exercises/practice/circular-buffer/.meta/proof.ci.js @@ -11,7 +11,6 @@ export class BufferFullError extends Error { } } -// eslint-disable-next-line import/no-default-export export default class CircularBuffer { constructor(capacity) { this.buffer = []; diff --git a/exercises/practice/diffie-hellman/diffie-hellman.spec.js b/exercises/practice/diffie-hellman/diffie-hellman.spec.js index 847ea491cc..c592080591 100644 --- a/exercises/practice/diffie-hellman/diffie-hellman.spec.js +++ b/exercises/practice/diffie-hellman/diffie-hellman.spec.js @@ -1,4 +1,3 @@ -/* eslint-disable no-new */ import { describe, expect, test, xtest } from '@jest/globals'; import { DiffieHellman } from './diffie-hellman'; diff --git a/exercises/practice/dominoes/dominoes.spec.js b/exercises/practice/dominoes/dominoes.spec.js index 4785ef609f..4d18bba2f9 100644 --- a/exercises/practice/dominoes/dominoes.spec.js +++ b/exercises/practice/dominoes/dominoes.spec.js @@ -1,4 +1,4 @@ -import { describe, expect } from '@jest/globals'; +import { describe, xdescribe, expect, test, xtest } from '@jest/globals'; import { chain } from './dominoes'; function runTest(dominoes, expected) { @@ -12,7 +12,7 @@ function runTest(dominoes, expected) { function runTestsExpectingNull(dominoes) { const result = chain(dominoes); - it('Should not have a chain', () => { + test('Should not have a chain', () => { expect(result).toBe(null); }); } @@ -20,15 +20,15 @@ function runTestsExpectingNull(dominoes) { function runTestsExpectingChain(dominoes) { const result = chain(dominoes); - it('Should have a chain', () => { + test('Should have a chain', () => { expect(result).not.toBe(null); }); - xit('The number of dominoes in the output equals the number of dominoes in the input.', () => { + xtest('The number of dominoes in the output equals the number of dominoes in the input.', () => { expect(result).toHaveLength(dominoes.length); }); - xit('For each adjacent pair of dominoes ... (a, b), (c, d) ...: b is equal to c.', () => { + xtest('For each adjacent pair of dominoes ... (a, b), (c, d) ...: b is equal to c.', () => { expect( result .map((v, i) => { @@ -40,14 +40,14 @@ function runTestsExpectingChain(dominoes) { }); if (dominoes.length > 0) { - xit('For the dominoes on the ends (a, b) ... (c, d): a is equal to d.', () => { + xtest('For the dominoes on the ends (a, b) ... (c, d): a is equal to d.', () => { expect(result[0][0] === result[result.length - 1][1]).toBe(true); }); } // 4. Every domino appears in the output an equal number of times as the number of times it appears in the input. // (in other words, the dominoes in the output are the same dominoes as the ones in the input) - xit('Should have the same dominoes', () => { + xtest('Should have the same dominoes', () => { const sortDomino = (domino) => [...domino].sort(); expect([...dominoes].map(sortDomino).sort()).toEqual( [...result].map(sortDomino).sort(), diff --git a/exercises/practice/flatten-array/flatten-array.spec.js b/exercises/practice/flatten-array/flatten-array.spec.js index d42283a2a8..c9d3b49cbc 100644 --- a/exercises/practice/flatten-array/flatten-array.spec.js +++ b/exercises/practice/flatten-array/flatten-array.spec.js @@ -1,8 +1,8 @@ -import { describe, expect, xtest } from '@jest/globals'; +import { describe, expect, test, xtest } from '@jest/globals'; import { flatten } from './flatten-array'; describe('FlattenArray', () => { - xtest('empty', () => { + test('empty', () => { expect(flatten([])).toEqual([]); }); diff --git a/exercises/practice/go-counting/.meta/proof.ci.js b/exercises/practice/go-counting/.meta/proof.ci.js index d2da017051..bcd29aa175 100644 --- a/exercises/practice/go-counting/.meta/proof.ci.js +++ b/exercises/practice/go-counting/.meta/proof.ci.js @@ -61,6 +61,7 @@ export class GoCounting { default: return value; } + // eslint-disable-next-line no-unused-vars } catch (err) { return undefined; } diff --git a/exercises/practice/grep/grep.spec.js b/exercises/practice/grep/grep.spec.js index 31ea2cb417..f953136ee6 100644 --- a/exercises/practice/grep/grep.spec.js +++ b/exercises/practice/grep/grep.spec.js @@ -1,5 +1,7 @@ // @ts-check +const { test, xtest, describe, expect } = require('@jest/globals'); + const { spawnSync } = require('child_process'); const { resolve: resolvePath, relative } = require('path'); @@ -29,7 +31,7 @@ function spawnGrep(config) { // If anything is written to stderr, consider the entire process as failed. // - // Normally you'd check the status code (exit code) and reject/fail if it's + // Normally you'd check the status code (extest code) and reject/fail if it's // not equal to "0". if (stderr) { reject(stderr); @@ -61,7 +63,7 @@ function resolveDataFile(file) { describe('grep exercise', () => { describe('Test grepping a single file', () => { - it('One file, one match, no flags', () => { + test('One file, one match, no flags', () => { return expect( spawnGrep({ pattern: 'Agamemnon', @@ -71,7 +73,7 @@ describe('grep exercise', () => { ).resolves.toBe('Of Atreus, Agamemnon, King of men.'); }); - xit('One file, one match, print line numbers flag', () => { + xtest('One file, one match, print line numbers flag', () => { return expect( spawnGrep({ pattern: 'Forbidden', @@ -81,7 +83,7 @@ describe('grep exercise', () => { ).resolves.toBe('2:Of that Forbidden Tree, whose mortal tast'); }); - xit('One file, one match, case-insensitive flag', () => { + xtest('One file, one match, case-insensitive flag', () => { return expect( spawnGrep({ pattern: 'FORBIDDEN', @@ -91,7 +93,7 @@ describe('grep exercise', () => { ).resolves.toBe('Of that Forbidden Tree, whose mortal tast'); }); - xit('One file, one match, print file names flag', () => { + xtest('One file, one match, print file names flag', () => { return expect( spawnGrep({ pattern: 'Forbidden', @@ -101,7 +103,7 @@ describe('grep exercise', () => { ).resolves.toBe(resolveDataFile('paradise-lost.txt')); }); - xit('One file, one match, match entire lines flag', () => { + xtest('One file, one match, match entire lines flag', () => { return expect( spawnGrep({ pattern: 'With loss of Eden, till one greater Man', @@ -111,7 +113,7 @@ describe('grep exercise', () => { ).resolves.toBe('With loss of Eden, till one greater Man'); }); - xit('One file, one match, multiple flags', () => { + xtest('One file, one match, multiple flags', () => { return expect( spawnGrep({ pattern: 'OF ATREUS, Agamemnon, KIng of MEN.', @@ -121,7 +123,7 @@ describe('grep exercise', () => { ).resolves.toBe('9:Of Atreus, Agamemnon, King of men.'); }); - xit('One file, several matches, no flags', () => { + xtest('One file, several matches, no flags', () => { return expect( spawnGrep({ pattern: 'may', @@ -135,7 +137,7 @@ describe('grep exercise', () => { ); }); - xit('One file, several matches, print line numbers flag', () => { + xtest('One file, several matches, print line numbers flag', () => { return expect( spawnGrep({ pattern: 'may', @@ -149,7 +151,7 @@ describe('grep exercise', () => { ); }); - xit('One file, several matches, match entire lines flag', () => { + xtest('One file, several matches, match entire lines flag', () => { return expect( spawnGrep({ pattern: 'may', @@ -159,7 +161,7 @@ describe('grep exercise', () => { ).resolves.toBe(''); }); - xit('One file, several matches, case-insensitive flag', () => { + xtest('One file, several matches, case-insensitive flag', () => { return expect( spawnGrep({ pattern: 'ACHILLES', @@ -172,7 +174,7 @@ describe('grep exercise', () => { ); }); - xit('One file, several matches, inverted flag', () => { + xtest('One file, several matches, inverted flag', () => { return expect( spawnGrep({ pattern: 'Of', @@ -188,7 +190,7 @@ describe('grep exercise', () => { ); }); - xit('One file, no matches, various flags', () => { + xtest('One file, no matches, various flags', () => { return expect( spawnGrep({ pattern: 'Gandalf', @@ -198,7 +200,7 @@ describe('grep exercise', () => { ).resolves.toBe(''); }); - xit('One file, one match, file flag takes precedence over line flag', () => { + xtest('One file, one match, file flag takes precedence over line flag', () => { return expect( spawnGrep({ pattern: 'ten', @@ -208,7 +210,7 @@ describe('grep exercise', () => { ).resolves.toBe(resolveDataFile('iliad.txt')); }); - xit('One file, several matches, inverted and match entire lines flags', () => { + xtest('One file, several matches, inverted and match entire lines flags', () => { return expect( spawnGrep({ pattern: 'Illustrious into Ades premature,', @@ -229,7 +231,7 @@ describe('grep exercise', () => { }); describe('Test grepping multiples files at once', () => { - xit('Multiple files, one match, no flags', () => { + xtest('Multiple files, one match, no flags', () => { return expect( spawnGrep({ pattern: 'Agamemnon', @@ -241,7 +243,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, several matches, no flags', () => { + xtest('Multiple files, several matches, no flags', () => { return expect( spawnGrep({ pattern: 'may', @@ -261,7 +263,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, several matches, print line numbers flag', () => { + xtest('Multiple files, several matches, print line numbers flag', () => { return expect( spawnGrep({ pattern: 'that', @@ -284,7 +286,7 @@ describe('grep exercise', () => { ); }); - it('Multiple files, one match, print file names flag', () => { + xtest('Multiple files, one match, print file names flag', () => { return expect( spawnGrep({ pattern: 'who', @@ -297,7 +299,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, several matches, case-insensitive flag', () => { + xtest('Multiple files, several matches, case-insensitive flag', () => { return expect( spawnGrep({ pattern: 'TO', @@ -334,7 +336,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, several matches, inverted flag', () => { + xtest('Multiple files, several matches, inverted flag', () => { return expect( spawnGrep({ pattern: 'a', @@ -352,7 +354,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, one match, match entire lines flag', () => { + xtest('Multiple files, one match, match entire lines flag', () => { return expect( spawnGrep({ pattern: 'But I beseech your grace that I may know', @@ -366,7 +368,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, one match, multiple flags', () => { + xtest('Multiple files, one match, multiple flags', () => { return expect( spawnGrep({ pattern: 'WITH LOSS OF EDEN, TILL ONE GREATER MAN', @@ -380,7 +382,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, no matches, various flags', () => { + xtest('Multiple files, no matches, various flags', () => { return expect( spawnGrep({ pattern: 'Frodo', @@ -390,7 +392,7 @@ describe('grep exercise', () => { ).resolves.toBe(''); }); - xit('Multiple files, several matches, file flag takes precedence over line number flag', () => { + xtest('Multiple files, several matches, file flag takes precedence over line number flag', () => { return expect( spawnGrep({ pattern: 'who', @@ -403,7 +405,7 @@ describe('grep exercise', () => { ); }); - xit('Multiple files, several matches, inverted and match entire lines flags', () => { + xtest('Multiple files, several matches, inverted and match entire lines flags', () => { return expect( spawnGrep({ pattern: 'Illustrious into Ades premature,', diff --git a/exercises/practice/linked-list/.meta/proof.ci.js b/exercises/practice/linked-list/.meta/proof.ci.js index b957a7b688..cf0640085b 100644 --- a/exercises/practice/linked-list/.meta/proof.ci.js +++ b/exercises/practice/linked-list/.meta/proof.ci.js @@ -92,7 +92,6 @@ export class LinkedList { while (element) { if (element.value !== value) { element = element.next; - // eslint-disable-next-line no-continue continue; } diff --git a/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js b/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js index a274035f97..b1aa227af4 100644 --- a/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js +++ b/exercises/practice/resistor-color-trio/resistor-color-trio.spec.js @@ -40,6 +40,6 @@ describe('Resistor Color Trio', () => { xtest('Invalid color', () => { expect( () => new ResistorColorTrio(['yellow', 'purple', 'black']).label, - ).toThrowError(/invalid color/); + ).toThrow(/invalid color/); }); }); diff --git a/exercises/practice/robot-name/.meta/proof.ci.js b/exercises/practice/robot-name/.meta/proof.ci.js index 5264abb4c0..4e4e1070b4 100644 --- a/exercises/practice/robot-name/.meta/proof.ci.js +++ b/exercises/practice/robot-name/.meta/proof.ci.js @@ -1,4 +1,3 @@ -/* eslint-disable no-underscore-dangle */ // This generates ALL the possible names in order to be able to satisfy the // final test. This also _ensures_ it _never_ has a duplicate. const LETTERS = [...'QWERTYUIOPASDFGHJKLZXCVBNM']; diff --git a/exercises/practice/simple-cipher/simple-cipher.spec.js b/exercises/practice/simple-cipher/simple-cipher.spec.js index 44d97e213a..b9b98b0860 100644 --- a/exercises/practice/simple-cipher/simple-cipher.spec.js +++ b/exercises/practice/simple-cipher/simple-cipher.spec.js @@ -1,4 +1,3 @@ -/* eslint-disable no-new */ import { describe, expect, test, xtest } from '@jest/globals'; import { Cipher } from './simple-cipher'; diff --git a/exercises/practice/strain/strain.spec.js b/exercises/practice/strain/strain.spec.js index f3e73bb111..0ba712458f 100644 --- a/exercises/practice/strain/strain.spec.js +++ b/exercises/practice/strain/strain.spec.js @@ -6,7 +6,7 @@ describe('strain', () => { expect(keep([], (e) => e < 10)).toEqual([]); }); - xtest('keeps everything ', () => { + xtest('keeps everything', () => { expect(keep([1, 2, 3], (e) => e < 10)).toEqual([1, 2, 3]); }); diff --git a/exercises/practice/twelve-days/twelve-days.spec.js b/exercises/practice/twelve-days/twelve-days.spec.js index cf736eb13b..0776467fbf 100644 --- a/exercises/practice/twelve-days/twelve-days.spec.js +++ b/exercises/practice/twelve-days/twelve-days.spec.js @@ -2,79 +2,79 @@ import { describe, expect, test, xtest } from '@jest/globals'; import { recite } from './twelve-days'; describe('TwelveDays', () => { - test('test verse first day a partridge in a pear tree', () => { + test('verse first day a partridge in a pear tree', () => { const expectedVerseOne = 'On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree.\n'; expect(recite(1)).toEqual(expectedVerseOne); }); - xtest('test verse second day two turtle doves', () => { + xtest('verse second day two turtle doves', () => { const expectedVerseTwo = 'On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(2)).toEqual(expectedVerseTwo); }); - xtest('test verse third day three french hens', () => { + xtest('verse third day three french hens', () => { const expectedVerseThree = 'On the third day of Christmas my true love gave to me: three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(3)).toEqual(expectedVerseThree); }); - xtest('test verse fourth day four calling birds', () => { + xtest('verse fourth day four calling birds', () => { const expectedVerseFour = 'On the fourth day of Christmas my true love gave to me: four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(4)).toEqual(expectedVerseFour); }); - xtest('test verse fifth day five gold rings', () => { + xtest('verse fifth day five gold rings', () => { const expectedVerseFive = 'On the fifth day of Christmas my true love gave to me: five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(5)).toEqual(expectedVerseFive); }); - xtest('test verse sixth day six geese-a-laying', () => { + xtest('verse sixth day six geese-a-laying', () => { const expectedVerseSix = 'On the sixth day of Christmas my true love gave to me: six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(6)).toEqual(expectedVerseSix); }); - xtest('test verse seventh day seven swans-a-swimming', () => { + xtest('verse seventh day seven swans-a-swimming', () => { const expectedVerseSeven = 'On the seventh day of Christmas my true love gave to me: seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(7)).toEqual(expectedVerseSeven); }); - xtest('test verse eighth day eight maids-a-milking', () => { + xtest('verse eighth day eight maids-a-milking', () => { const expectedVerseEight = 'On the eighth day of Christmas my true love gave to me: eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(8)).toEqual(expectedVerseEight); }); - xtest('test verse ninth day nine ladies dancing', () => { + xtest('verse ninth day nine ladies dancing', () => { const expectedVerseNine = 'On the ninth day of Christmas my true love gave to me: nine Ladies Dancing, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(9)).toEqual(expectedVerseNine); }); - xtest('test verse tenth day ten lords-a-leaping', () => { + xtest('verse tenth day ten lords-a-leaping', () => { const expectedVerseTen = 'On the tenth day of Christmas my true love gave to me: ten Lords-a-Leaping, nine Ladies Dancing, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(10)).toEqual(expectedVerseTen); }); - xtest('test verse eleventh day eleven pipers piping', () => { + xtest('verse eleventh day eleven pipers piping', () => { const expectedVerseEleven = 'On the eleventh day of Christmas my true love gave to me: eleven Pipers Piping, ten Lords-a-Leaping, nine Ladies Dancing, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(11)).toEqual(expectedVerseEleven); }); - xtest('test verse twelfth day twelve drummers drumming', () => { + xtest('verse twelfth day twelve drummers drumming', () => { const expectedVerseTwelve = 'On the twelfth day of Christmas my true love gave to me: twelve Drummers Drumming, eleven Pipers Piping, ten Lords-a-Leaping, nine Ladies Dancing, eight Maids-a-Milking, seven Swans-a-Swimming, six Geese-a-Laying, five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n'; expect(recite(12)).toEqual(expectedVerseTwelve); }); - xtest('test lyrics recites first three verses of the song', () => { + xtest('lyrics recites first three verses of the song', () => { const expectedVerseOneToThree = 'On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree.\n\n' + 'On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree.\n\n' + @@ -82,7 +82,7 @@ describe('TwelveDays', () => { expect(recite(1, 3)).toEqual(expectedVerseOneToThree); }); - xtest('test lyrics recites three verses from the middle of the song', () => { + xtest('lyrics recites three verses from the middle of the song', () => { const expectedVerseFourToSix = 'On the fourth day of Christmas my true love gave to me: four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n\n' + 'On the fifth day of Christmas my true love gave to me: five Gold Rings, four Calling Birds, three French Hens, two Turtle Doves, and a Partridge in a Pear Tree.\n\n' + @@ -90,7 +90,7 @@ describe('TwelveDays', () => { expect(recite(4, 6)).toEqual(expectedVerseFourToSix); }); - xtest('test lyrics recites the whole song', () => { + xtest('lyrics recites the whole song', () => { const expectedSong = 'On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree.\n\n' + 'On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree.\n\n' + diff --git a/exercises/practice/two-bucket/.meta/proof.ci.js b/exercises/practice/two-bucket/.meta/proof.ci.js index c6d554172e..9330e75785 100644 --- a/exercises/practice/two-bucket/.meta/proof.ci.js +++ b/exercises/practice/two-bucket/.meta/proof.ci.js @@ -45,7 +45,6 @@ export class TwoBucket { moves += 1; } - /* eslint-disable-next-line no-constant-condition */ while (true) { if (this.first.amount === this.goal) { return { diff --git a/package.json b/package.json index 98fd5f995e..da6abf9f4f 100644 --- a/package.json +++ b/package.json @@ -14,18 +14,18 @@ }, "devDependencies": { "@exercism/babel-preset-javascript": "^0.5.1", - "@exercism/eslint-config-javascript": "^0.7.1", + "@exercism/eslint-config-javascript": "^0.8.1", "@jest/globals": "^29.7.0", - "@types/node": "^22.7.6", + "@types/node": "^22.10.3", "@types/shelljs": "^0.8.15", "babel-jest": "^29.7.0", - "core-js": "~3.38.1", + "core-js": "~3.39.0", "diff": "^7.0.0", - "eslint": "^9.12.0", + "eslint": "^9.17.0", "expect": "^29.7.0", - "globals": "^15.11.0", + "globals": "^15.14.0", "jest": "^29.7.0", - "prettier": "^3.3.3", + "prettier": "^3.4.2", "shelljs": "^0.8.5" }, "dependencies": {}, @@ -35,5 +35,5 @@ "watch": "corepack pnpm jest --watch", "format": "corepack pnpm prettier -w ." }, - "packageManager": "pnpm@9.12.2" + "packageManager": "pnpm@9.15.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebf9455fcf..f0c1c8112a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,20 +5,21 @@ settings: excludeLinksFromLockfile: false importers: + .: devDependencies: '@exercism/babel-preset-javascript': specifier: ^0.5.1 version: 0.5.1 '@exercism/eslint-config-javascript': - specifier: ^0.7.1 - version: 0.7.1(@babel/core@7.25.8)(@exercism/babel-preset-javascript@0.5.1)(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3) + specifier: ^0.8.1 + version: 0.8.1(@babel/core@7.25.8)(@exercism/babel-preset-javascript@0.5.1)(eslint@9.17.0)(jest@29.7.0(@types/node@22.10.3))(typescript@5.6.3) '@jest/globals': specifier: ^29.7.0 version: 29.7.0 '@types/node': - specifier: ^22.7.6 - version: 22.7.6 + specifier: ^22.10.3 + version: 22.10.3 '@types/shelljs': specifier: ^0.8.15 version: 0.8.15 @@ -26,1105 +27,720 @@ importers: specifier: ^29.7.0 version: 29.7.0(@babel/core@7.25.8) core-js: - specifier: ~3.38.1 - version: 3.38.1 + specifier: ~3.39.0 + version: 3.39.0 diff: specifier: ^7.0.0 version: 7.0.0 eslint: - specifier: ^9.12.0 - version: 9.12.0 + specifier: ^9.17.0 + version: 9.17.0 expect: specifier: ^29.7.0 version: 29.7.0 globals: - specifier: ^15.11.0 - version: 15.11.0 + specifier: ^15.14.0 + version: 15.14.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.7.6) + version: 29.7.0(@types/node@22.10.3) prettier: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.2 + version: 3.4.2 shelljs: specifier: ^0.8.5 version: 0.8.5 packages: + '@ampproject/remapping@2.3.0': - resolution: - { - integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} '@babel/code-frame@7.25.7': - resolution: - { - integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + engines: {node: '>=6.9.0'} '@babel/compat-data@7.25.8': - resolution: - { - integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} + engines: {node: '>=6.9.0'} '@babel/core@7.25.8': - resolution: - { - integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==, - } - engines: { node: '>=6.9.0' } - - '@babel/eslint-parser@7.25.8': - resolution: - { - integrity: sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==, - } - engines: { node: ^10.13.0 || ^12.13.0 || >=14.0.0 } + resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==} + engines: {node: '>=6.9.0'} + + '@babel/eslint-parser@7.25.9': + resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/eslint-plugin@7.25.7': - resolution: - { - integrity: sha512-cwa16ALyUdac3n3VC3R+isKENyjLsJmFY6+cX0wuLsKlwB50Jv/xwqyH9tV8EEH0IUCAL5Y0Y1gP0HuCEDDDeQ==, - } - engines: { node: ^10.13.0 || ^12.13.0 || >=14.0.0 } + '@babel/eslint-plugin@7.25.9': + resolution: {integrity: sha512-MWg1lz+JiP9l1fXkE0qCUVo+1XwgNRPs6GTc88hmw6qN3AdgmfTSkyHt0e1xOTsKdXW5xlh2Lsk3wrFZbW5rzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/eslint-parser': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 '@babel/generator@7.25.7': - resolution: - { - integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.25.7': - resolution: - { - integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + engines: {node: '>=6.9.0'} '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': - resolution: - { - integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==} + engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.25.7': - resolution: - { - integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.25.7': - resolution: - { - integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-create-regexp-features-plugin@7.25.7': - resolution: - { - integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-define-polyfill-provider@0.6.2': - resolution: - { - integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==, - } + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 '@babel/helper-member-expression-to-functions@7.25.7': - resolution: - { - integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} + engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.25.7': - resolution: - { - integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + engines: {node: '>=6.9.0'} '@babel/helper-module-transforms@7.25.7': - resolution: - { - integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-optimise-call-expression@7.25.7': - resolution: - { - integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} + engines: {node: '>=6.9.0'} '@babel/helper-plugin-utils@7.25.7': - resolution: - { - integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + engines: {node: '>=6.9.0'} '@babel/helper-remap-async-to-generator@7.25.7': - resolution: - { - integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-replace-supers@7.25.7': - resolution: - { - integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-simple-access@7.25.7': - resolution: - { - integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + engines: {node: '>=6.9.0'} '@babel/helper-skip-transparent-expression-wrappers@7.25.7': - resolution: - { - integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} + engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.25.7': - resolution: - { - integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.25.7': - resolution: - { - integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.25.7': - resolution: - { - integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + engines: {node: '>=6.9.0'} '@babel/helper-wrap-function@7.25.7': - resolution: - { - integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} + engines: {node: '>=6.9.0'} '@babel/helpers@7.25.7': - resolution: - { - integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + engines: {node: '>=6.9.0'} '@babel/highlight@7.25.7': - resolution: - { - integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} + engines: {node: '>=6.9.0'} '@babel/node@7.25.7': - resolution: - { - integrity: sha512-SLrRogiTuneH3mZeZQtWBECyVRtznezYdnH4UjatZjHrk/QP+GH9bqsToCWp23pPeA20NO1/p8kECzWt5TTpUA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-SLrRogiTuneH3mZeZQtWBECyVRtznezYdnH4UjatZjHrk/QP+GH9bqsToCWp23pPeA20NO1/p8kECzWt5TTpUA==} + engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 '@babel/parser@7.25.8': - resolution: - { - integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} + engines: {node: '>=6.0.0'} hasBin: true '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': - resolution: - { - integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7': - resolution: - { - integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': - resolution: - { - integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': - resolution: - { - integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': - resolution: - { - integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: - { - integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-async-generators@7.8.4': - resolution: - { - integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, - } + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-bigint@7.8.3': - resolution: - { - integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, - } + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-properties@7.12.13': - resolution: - { - integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, - } + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: - { - integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-assertions@7.25.7': - resolution: - { - integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-attributes@7.25.7': - resolution: - { - integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-meta@7.10.4': - resolution: - { - integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, - } + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-json-strings@7.8.3': - resolution: - { - integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, - } + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-jsx@7.25.7': - resolution: - { - integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: - { - integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, - } + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: - { - integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, - } + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: - { - integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, - } + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: - { - integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, - } + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: - { - integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, - } + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: - { - integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, - } + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: - { - integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: - { - integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-typescript@7.25.7': - resolution: - { - integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: - { - integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-transform-arrow-functions@7.25.7': - resolution: - { - integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-async-generator-functions@7.25.8': - resolution: - { - integrity: sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-async-to-generator@7.25.7': - resolution: - { - integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-block-scoped-functions@7.25.7': - resolution: - { - integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-block-scoping@7.25.7': - resolution: - { - integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-class-properties@7.25.7': - resolution: - { - integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-class-static-block@7.25.8': - resolution: - { - integrity: sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 '@babel/plugin-transform-classes@7.25.7': - resolution: - { - integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-computed-properties@7.25.7': - resolution: - { - integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-destructuring@7.25.7': - resolution: - { - integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-dotall-regex@7.25.7': - resolution: - { - integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-duplicate-keys@7.25.7': - resolution: - { - integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': - resolution: - { - integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-transform-dynamic-import@7.25.8': - resolution: - { - integrity: sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-exponentiation-operator@7.25.7': - resolution: - { - integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-export-namespace-from@7.25.8': - resolution: - { - integrity: sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-for-of@7.25.7': - resolution: - { - integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-function-name@7.25.7': - resolution: - { - integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-json-strings@7.25.8': - resolution: - { - integrity: sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-literals@7.25.7': - resolution: - { - integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-logical-assignment-operators@7.25.8': - resolution: - { - integrity: sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-member-expression-literals@7.25.7': - resolution: - { - integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-amd@7.25.7': - resolution: - { - integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-commonjs@7.25.7': - resolution: - { - integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-systemjs@7.25.7': - resolution: - { - integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-umd@7.25.7': - resolution: - { - integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': - resolution: - { - integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-transform-new-target@7.25.7': - resolution: - { - integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-nullish-coalescing-operator@7.25.8': - resolution: - { - integrity: sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-numeric-separator@7.25.8': - resolution: - { - integrity: sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-object-rest-spread@7.25.8': - resolution: - { - integrity: sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-object-super@7.25.7': - resolution: - { - integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-optional-catch-binding@7.25.8': - resolution: - { - integrity: sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-optional-chaining@7.25.8': - resolution: - { - integrity: sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-parameters@7.25.7': - resolution: - { - integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-private-methods@7.25.7': - resolution: - { - integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-private-property-in-object@7.25.8': - resolution: - { - integrity: sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-property-literals@7.25.7': - resolution: - { - integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-regenerator@7.25.7': - resolution: - { - integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-reserved-words@7.25.7': - resolution: - { - integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-shorthand-properties@7.25.7': - resolution: - { - integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-spread@7.25.7': - resolution: - { - integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-sticky-regex@7.25.7': - resolution: - { - integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-template-literals@7.25.7': - resolution: - { - integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-typeof-symbol@7.25.7': - resolution: - { - integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-escapes@7.25.7': - resolution: - { - integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-property-regex@7.25.7': - resolution: - { - integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-regex@7.25.7': - resolution: - { - integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-sets-regex@7.25.7': - resolution: - { - integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/preset-env@7.25.8': - resolution: - { - integrity: sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: - { - integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, - } + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 '@babel/register@7.25.7': - resolution: - { - integrity: sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/runtime@7.25.7': - resolution: - { - integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + engines: {node: '>=6.9.0'} '@babel/template@7.25.7': - resolution: - { - integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + engines: {node: '>=6.9.0'} '@babel/traverse@7.25.7': - resolution: - { - integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + engines: {node: '>=6.9.0'} '@babel/types@7.25.8': - resolution: - { - integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} + engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': - resolution: - { - integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, - } + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} '@eslint-community/eslint-utils@4.4.0': - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: - { - integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - - '@eslint/config-array@0.18.0': - resolution: - { - integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - '@eslint/core@0.6.0': - resolution: - { - integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - '@eslint/eslintrc@3.1.0': - resolution: - { - integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - '@eslint/js@9.12.0': - resolution: - { - integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - '@eslint/object-schema@2.1.4': - resolution: - { - integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - '@eslint/plugin-kit@0.2.0': - resolution: - { - integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.17.0': + resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@exercism/babel-preset-javascript@0.5.1': - resolution: - { - integrity: sha512-6NywGKngMLmuDhDVLov1fm6O8MTtirKfQlDmg3q/3cnP4ElErtqzyOoBoI4Om54hHrTfHXlw+UQxQ7NkKeRAfA==, - } - - '@exercism/eslint-config-javascript@0.7.1': - resolution: - { - integrity: sha512-TegrzdIYcRvNTsEZ0f3A8ItPeH5oMIkhLHfvMFFLoygJliGeBpVAdmqgxFSZMmNyJAuT9lS+hZqtTBz5DmSZlA==, - } + resolution: {integrity: sha512-6NywGKngMLmuDhDVLov1fm6O8MTtirKfQlDmg3q/3cnP4ElErtqzyOoBoI4Om54hHrTfHXlw+UQxQ7NkKeRAfA==} + + '@exercism/eslint-config-javascript@0.8.1': + resolution: {integrity: sha512-KFk43KvV4lUArh/1RUmFMTGXWGp6Pqqs3eXlDXpHQ7xhBKUatbTIL7xbhUB8o366DDyqkcmlxnhOnDsbnL66Qg==} peerDependencies: '@exercism/babel-preset-javascript': '>= 0.5.1' - eslint: '>= 9.12' - - '@humanfs/core@0.19.0': - resolution: - { - integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==, - } - engines: { node: '>=18.18.0' } - - '@humanfs/node@0.16.5': - resolution: - { - integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==, - } - engines: { node: '>=18.18.0' } + eslint: '>= 9.17' + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: '>=12.22' } + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} '@humanwhocodes/retry@0.3.1': - resolution: - { - integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==, - } - engines: { node: '>=18.18' } + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@istanbuljs/load-nyc-config@1.1.0': - resolution: - { - integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} '@istanbuljs/schema@0.1.3': - resolution: - { - integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} '@jest/console@29.7.0': - resolution: - { - integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/core@29.7.0': - resolution: - { - integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1132,46 +748,28 @@ packages: optional: true '@jest/environment@29.7.0': - resolution: - { - integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect-utils@29.7.0': - resolution: - { - integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect@29.7.0': - resolution: - { - integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/fake-timers@29.7.0': - resolution: - { - integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/globals@29.7.0': - resolution: - { - integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/reporters@29.7.0': - resolution: - { - integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1179,247 +777,133 @@ packages: optional: true '@jest/schemas@29.6.3': - resolution: - { - integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/source-map@29.6.3': - resolution: - { - integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-result@29.7.0': - resolution: - { - integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-sequencer@29.7.0': - resolution: - { - integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/transform@29.7.0': - resolution: - { - integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/types@29.6.3': - resolution: - { - integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jridgewell/gen-mapping@0.3.5': - resolution: - { - integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': - resolution: - { - integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} '@jridgewell/set-array@1.2.1': - resolution: - { - integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} '@jridgewell/sourcemap-codec@1.5.0': - resolution: - { - integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, - } + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': - resolution: - { - integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, - } + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: - { - integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==, - } + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} '@nodelib/fs.scandir@2.1.5': - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} '@nodelib/fs.stat@2.0.5': - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} '@nodelib/fs.walk@1.2.8': - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} '@sinclair/typebox@0.27.8': - resolution: - { - integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, - } + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} '@sinonjs/commons@3.0.1': - resolution: - { - integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==, - } + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} '@sinonjs/fake-timers@10.3.0': - resolution: - { - integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==, - } + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} '@types/babel__core@7.20.5': - resolution: - { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, - } + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} '@types/babel__generator@7.6.8': - resolution: - { - integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==, - } + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} '@types/babel__template@7.4.4': - resolution: - { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, - } + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} '@types/babel__traverse@7.20.6': - resolution: - { - integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==, - } + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} '@types/estree@1.0.6': - resolution: - { - integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, - } + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/glob@7.2.0': - resolution: - { - integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, - } + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} '@types/graceful-fs@4.1.9': - resolution: - { - integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==, - } + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} '@types/istanbul-lib-coverage@2.0.6': - resolution: - { - integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==, - } + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} '@types/istanbul-lib-report@3.0.3': - resolution: - { - integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==, - } + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} '@types/istanbul-reports@3.0.4': - resolution: - { - integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==, - } + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} '@types/json-schema@7.0.15': - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/minimatch@5.1.2': - resolution: - { - integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, - } + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@22.7.6': - resolution: - { - integrity: sha512-/d7Rnj0/ExXDMcioS78/kf1lMzYk4BZV8MZGTBKzTGZ6/406ukkbYlIsZmMPhcR5KlkunDHQLrtAVmSq7r+mSw==, - } + '@types/node@22.10.3': + resolution: {integrity: sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==} '@types/shelljs@0.8.15': - resolution: - { - integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==, - } + resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} '@types/stack-utils@2.0.3': - resolution: - { - integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==, - } + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} '@types/yargs-parser@21.0.3': - resolution: - { - integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==, - } + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@17.0.33': - resolution: - { - integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==, - } + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} '@typescript-eslint/scope-manager@8.10.0': - resolution: - { - integrity: sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/types@8.10.0': - resolution: - { - integrity: sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.10.0': - resolution: - { - integrity: sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1427,433 +911,254 @@ packages: optional: true '@typescript-eslint/utils@8.10.0': - resolution: - { - integrity: sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 '@typescript-eslint/visitor-keys@8.10.0': - resolution: - { - integrity: sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.13.0: - resolution: - { - integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==, - } - engines: { node: '>=0.4.0' } + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} hasBin: true ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} ansi-escapes@4.3.2: - resolution: - { - integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} ansi-styles@3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} ansi-styles@5.2.0: - resolution: - { - integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} argparse@1.0.10: - resolution: - { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, - } + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} array-buffer-byte-length@1.0.1: - resolution: - { - integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} array.prototype.reduce@1.0.7: - resolution: - { - integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} arraybuffer.prototype.slice@1.0.3: - resolution: - { - integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} babel-jest@29.7.0: - resolution: - { - integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 babel-plugin-istanbul@6.1.1: - resolution: - { - integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} babel-plugin-jest-hoist@29.6.3: - resolution: - { - integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} babel-plugin-polyfill-corejs2@0.4.11: - resolution: - { - integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==, - } + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-polyfill-corejs3@0.10.6: - resolution: - { - integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==, - } + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-polyfill-regenerator@0.6.2: - resolution: - { - integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==, - } + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-preset-current-node-syntax@1.1.0: - resolution: - { - integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==, - } + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} peerDependencies: '@babel/core': ^7.0.0 babel-preset-jest@29.6.3: - resolution: - { - integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} brace-expansion@2.0.1: - resolution: - { - integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, - } + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} braces@3.0.3: - resolution: - { - integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} browserslist@4.24.0: - resolution: - { - integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true bser@2.1.1: - resolution: - { - integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, - } + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} call-bind@1.0.7: - resolution: - { - integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} camelcase@6.3.0: - resolution: - { - integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} caniuse-lite@1.0.30001669: - resolution: - { - integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==, - } + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} chalk@2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} char-regex@1.0.2: - resolution: - { - integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} ci-info@3.9.0: - resolution: - { - integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} cjs-module-lexer@1.4.1: - resolution: - { - integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==, - } + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} cliui@8.0.1: - resolution: - { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} clone-deep@4.0.1: - resolution: - { - integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} co@4.6.0: - resolution: - { - integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, - } - engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} collect-v8-coverage@1.0.2: - resolution: - { - integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==, - } + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} color-convert@1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, - } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: '>=7.0.0' } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} color-name@1.1.3: - resolution: - { - integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, - } + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} commander@6.2.1: - resolution: - { - integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} commondir@1.0.1: - resolution: - { - integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, - } + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} core-js-compat@3.38.1: - resolution: - { - integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==, - } + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} core-js@3.38.1: - resolution: - { - integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==, - } + resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} + + core-js@3.39.0: + resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} create-jest@29.7.0: - resolution: - { - integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} data-view-buffer@1.0.1: - resolution: - { - integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} data-view-byte-length@1.0.1: - resolution: - { - integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} data-view-byte-offset@1.0.0: - resolution: - { - integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} debug@4.3.7: - resolution: - { - integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1861,10 +1166,7 @@ packages: optional: true dedent@1.5.3: - resolution: - { - integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==, - } + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -1872,169 +1174,97 @@ packages: optional: true deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} deepmerge@4.3.1: - resolution: - { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} detect-newline@3.1.0: - resolution: - { - integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} diff-sequences@29.6.3: - resolution: - { - integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} diff@7.0.0: - resolution: - { - integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==, - } - engines: { node: '>=0.3.1' } + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} + engines: {node: '>=0.3.1'} electron-to-chromium@1.5.41: - resolution: - { - integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==, - } + resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} emittery@0.13.1: - resolution: - { - integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} error-ex@1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, - } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} es-abstract@1.23.3: - resolution: - { - integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} es-array-method-boxes-properly@1.0.0: - resolution: - { - integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==, - } + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} es-define-property@1.0.0: - resolution: - { - integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} es-object-atoms@1.0.0: - resolution: - { - integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} es-set-tostringtag@2.0.3: - resolution: - { - integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} es-to-primitive@1.2.1: - resolution: - { - integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} escalade@3.2.0: - resolution: - { - integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} escape-string-regexp@2.0.0: - resolution: - { - integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} eslint-config-prettier@9.1.0: - resolution: - { - integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==, - } + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-plugin-jest@28.8.3: - resolution: - { - integrity: sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==, - } - engines: { node: ^16.10.0 || ^18.12.0 || >=20.0.0 } + eslint-plugin-jest@28.10.0: + resolution: {integrity: sha512-hyMWUxkBH99HpXT3p8hc7REbEZK3D+nk8vHXGgpB+XXsi0gO4PxMSP+pjfUzb67GnV9yawV9a53eUmcde1CCZA==} + engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -2046,53 +1276,32 @@ packages: optional: true eslint-rule-composer@0.3.0: - resolution: - { - integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==, - } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, - } - engines: { node: '>=8.0.0' } - - eslint-scope@8.1.0: - resolution: - { - integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@2.1.0: - resolution: - { - integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - - eslint-visitor-keys@4.1.0: - resolution: - { - integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - eslint@9.12.0: - resolution: - { - integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.17.0: + resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: jiti: '*' @@ -2100,680 +1309,383 @@ packages: jiti: optional: true - espree@10.2.0: - resolution: - { - integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true esquery@1.6.0: - resolution: - { - integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} execa@5.1.1: - resolution: - { - integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} exit@0.1.2: - resolution: - { - integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} expect@29.7.0: - resolution: - { - integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-glob@3.3.2: - resolution: - { - integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, - } - engines: { node: '>=8.6.0' } + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fastq@1.17.1: - resolution: - { - integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, - } + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} fb-watchman@2.0.2: - resolution: - { - integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, - } + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} file-entry-cache@8.0.0: - resolution: - { - integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, - } - engines: { node: '>=16.0.0' } + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} fill-range@7.1.1: - resolution: - { - integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} find-cache-dir@2.1.0: - resolution: - { - integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} find-up@3.0.0: - resolution: - { - integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} flat-cache@4.0.1: - resolution: - { - integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, - } - engines: { node: '>=16' } + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.1: - resolution: - { - integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, - } + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, - } + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, - } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, - } + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} function.prototype.name@1.1.6: - resolution: - { - integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} get-intrinsic@1.2.4: - resolution: - { - integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} get-package-type@0.1.0: - resolution: - { - integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} get-stream@6.0.1: - resolution: - { - integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} get-symbol-description@1.0.2: - resolution: - { - integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, - } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: - resolution: - { - integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} globals@14.0.0: - resolution: - { - integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, - } - engines: { node: '>=18' } - - globals@15.11.0: - resolution: - { - integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==, - } - engines: { node: '>=18' } + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} globalthis@1.0.4: - resolution: - { - integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, - } + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} has-bigints@1.0.2: - resolution: - { - integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, - } + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} has-flag@3.0.0: - resolution: - { - integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, - } + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} has-proto@1.0.3: - resolution: - { - integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} hasown@2.0.2: - resolution: - { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} homedir-polyfill@1.0.3: - resolution: - { - integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} html-escaper@2.0.2: - resolution: - { - integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, - } + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} human-signals@2.1.0: - resolution: - { - integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, - } - engines: { node: '>=10.17.0' } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} ignore@5.3.2: - resolution: - { - integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} import-local@3.2.0: - resolution: - { - integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} hasBin: true imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: '>=0.8.19' } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} inflight@1.0.6: - resolution: - { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, - } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} internal-slot@1.0.7: - resolution: - { - integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} interpret@1.4.0: - resolution: - { - integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} is-array-buffer@3.0.4: - resolution: - { - integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, - } + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-bigint@1.0.4: - resolution: - { - integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, - } + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} is-boolean-object@1.1.2: - resolution: - { - integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} is-core-module@2.15.1: - resolution: - { - integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} is-data-view@1.0.1: - resolution: - { - integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} is-date-object@1.0.5: - resolution: - { - integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} is-generator-fn@2.1.0: - resolution: - { - integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-negative-zero@2.0.3: - resolution: - { - integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} is-number-object@1.0.7: - resolution: - { - integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} is-plain-object@2.0.4: - resolution: - { - integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} is-regex@1.1.4: - resolution: - { - integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} is-shared-array-buffer@1.0.3: - resolution: - { - integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} is-string@1.0.7: - resolution: - { - integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} is-symbol@1.0.4: - resolution: - { - integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} is-typed-array@1.1.13: - resolution: - { - integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} is-weakref@1.0.2: - resolution: - { - integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, - } + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} isobject@3.0.1: - resolution: - { - integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} istanbul-lib-coverage@3.2.2: - resolution: - { - integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} istanbul-lib-instrument@5.2.1: - resolution: - { - integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} istanbul-lib-instrument@6.0.3: - resolution: - { - integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} istanbul-lib-report@3.0.1: - resolution: - { - integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} istanbul-lib-source-maps@4.0.1: - resolution: - { - integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} istanbul-reports@3.1.7: - resolution: - { - integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} jest-changed-files@29.7.0: - resolution: - { - integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-circus@29.7.0: - resolution: - { - integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-cli@29.7.0: - resolution: - { - integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2782,11 +1694,8 @@ packages: optional: true jest-config@29.7.0: - resolution: - { - integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -2797,81 +1706,48 @@ packages: optional: true jest-diff@29.7.0: - resolution: - { - integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-docblock@29.7.0: - resolution: - { - integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-each@29.7.0: - resolution: - { - integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-environment-node@29.7.0: - resolution: - { - integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-get-type@29.6.3: - resolution: - { - integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-haste-map@29.7.0: - resolution: - { - integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-leak-detector@29.7.0: - resolution: - { - integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-matcher-utils@29.7.0: - resolution: - { - integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-message-util@29.7.0: - resolution: - { - integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-mock@29.7.0: - resolution: - { - integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-pnp-resolver@1.2.3: - resolution: - { - integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -2879,81 +1755,48 @@ packages: optional: true jest-regex-util@29.6.3: - resolution: - { - integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve-dependencies@29.7.0: - resolution: - { - integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve@29.7.0: - resolution: - { - integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runner@29.7.0: - resolution: - { - integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runtime@29.7.0: - resolution: - { - integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-snapshot@29.7.0: - resolution: - { - integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-util@29.7.0: - resolution: - { - integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-validate@29.7.0: - resolution: - { - integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-watcher@29.7.0: - resolution: - { - integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-worker@29.7.0: - resolution: - { - integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest@29.7.0: - resolution: - { - integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2962,1093 +1805,611 @@ packages: optional: true js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} js-yaml@3.14.1: - resolution: - { - integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, - } + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true jsesc@3.0.2: - resolution: - { - integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true keyv@4.5.4: - resolution: - { - integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, - } + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} kind-of@6.0.3: - resolution: - { - integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} kleur@3.0.3: - resolution: - { - integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} leven@3.1.0: - resolution: - { - integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, - } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} locate-path@3.0.0: - resolution: - { - integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} lodash.debounce@4.0.8: - resolution: - { - integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, - } + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} make-dir@2.1.0: - resolution: - { - integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} make-dir@4.0.0: - resolution: - { - integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} makeerror@1.0.12: - resolution: - { - integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, - } + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} micromatch@4.0.8: - resolution: - { - integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} mimic-fn@2.1.0: - resolution: - { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, - } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} minimatch@9.0.5: - resolution: - { - integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, - } - engines: { node: '>=16 || 14 >=14.17' } + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} node-environment-flags@1.0.6: - resolution: - { - integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==, - } + resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} node-int64@0.4.0: - resolution: - { - integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, - } + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-releases@2.0.18: - resolution: - { - integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==, - } + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} npm-run-path@4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} object-inspect@1.13.2: - resolution: - { - integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} object.assign@4.1.5: - resolution: - { - integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} object.getownpropertydescriptors@2.1.8: - resolution: - { - integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, - } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} onetime@5.1.2: - resolution: - { - integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} optionator@0.9.4: - resolution: - { - integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} p-locate@3.0.0: - resolution: - { - integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} parse-passwd@1.0.0: - resolution: - { - integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} path-exists@3.0.0: - resolution: - { - integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} picocolors@1.1.1: - resolution: - { - integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, - } + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} pify@4.0.1: - resolution: - { - integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} pirates@4.0.6: - resolution: - { - integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} pkg-dir@3.0.0: - resolution: - { - integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} pkg-dir@4.2.0: - resolution: - { - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} possible-typed-array-names@1.0.0: - resolution: - { - integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: '>= 0.8.0' } - - prettier@3.3.3: - resolution: - { - integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} hasBin: true pretty-format@29.7.0: - resolution: - { - integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} prompts@2.4.2: - resolution: - { - integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} pure-rand@6.1.0: - resolution: - { - integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==, - } + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} react-is@18.3.1: - resolution: - { - integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, - } + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} rechoir@0.6.2: - resolution: - { - integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} regenerate-unicode-properties@10.2.0: - resolution: - { - integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} regenerate@1.4.2: - resolution: - { - integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, - } + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} regenerator-runtime@0.14.1: - resolution: - { - integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, - } + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} regenerator-transform@0.15.2: - resolution: - { - integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, - } + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} regexp.prototype.flags@1.5.3: - resolution: - { - integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} regexpu-core@6.1.1: - resolution: - { - integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} regjsgen@0.8.0: - resolution: - { - integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, - } + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} regjsparser@0.11.1: - resolution: - { - integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==, - } + resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==} hasBin: true require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} resolve-cwd@3.0.0: - resolution: - { - integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} resolve-from@5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} resolve.exports@2.0.2: - resolution: - { - integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} resolve@1.22.8: - resolution: - { - integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, - } + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true reusify@1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, - } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} safe-array-concat@1.1.2: - resolution: - { - integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==, - } - engines: { node: '>=0.4' } + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} safe-regex-test@1.0.3: - resolution: - { - integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} semver@5.7.2: - resolution: - { - integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, - } + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.6.3: - resolution: - { - integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} hasBin: true set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} set-function-name@2.0.2: - resolution: - { - integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} shallow-clone@3.0.1: - resolution: - { - integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} shelljs@0.8.5: - resolution: - { - integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} hasBin: true side-channel@1.0.6: - resolution: - { - integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, - } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} source-map-support@0.5.13: - resolution: - { - integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, - } + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} sprintf-js@1.0.3: - resolution: - { - integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, - } + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} stack-utils@2.0.6: - resolution: - { - integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} string-length@4.0.2: - resolution: - { - integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} string.prototype.trim@1.2.9: - resolution: - { - integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} string.prototype.trimend@1.0.8: - resolution: - { - integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==, - } + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} string.prototype.trimstart@1.0.8: - resolution: - { - integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} strip-bom@4.0.0: - resolution: - { - integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} strip-final-newline@2.0.0: - resolution: - { - integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} supports-color@5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} supports-color@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} test-exclude@6.0.0: - resolution: - { - integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, - } - engines: { node: '>=8' } - - text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, - } + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} tmpl@1.0.5: - resolution: - { - integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, - } + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} ts-api-utils@1.3.0: - resolution: - { - integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==, - } - engines: { node: '>=16' } + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} type-fest@0.21.3: - resolution: - { - integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} typed-array-buffer@1.0.2: - resolution: - { - integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} typed-array-byte-length@1.0.1: - resolution: - { - integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} typed-array-byte-offset@1.0.2: - resolution: - { - integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} typed-array-length@1.0.6: - resolution: - { - integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} typescript@5.6.3: - resolution: - { - integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==, - } - engines: { node: '>=14.17' } + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} hasBin: true unbox-primitive@1.0.2: - resolution: - { - integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, - } + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@6.19.8: - resolution: - { - integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==, - } + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} unicode-canonical-property-names-ecmascript@2.0.1: - resolution: - { - integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} unicode-match-property-ecmascript@2.0.0: - resolution: - { - integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} unicode-match-property-value-ecmascript@2.2.0: - resolution: - { - integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: - resolution: - { - integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} update-browserslist-db@1.1.1: - resolution: - { - integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==, - } + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} v8-to-istanbul@9.3.0: - resolution: - { - integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==, - } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} v8flags@3.2.0: - resolution: - { - integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} + engines: {node: '>= 0.10'} walker@1.0.8: - resolution: - { - integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, - } + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} which-boxed-primitive@1.0.2: - resolution: - { - integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, - } + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} which-typed-array@1.1.15: - resolution: - { - integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true word-wrap@1.2.5: - resolution: - { - integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, - } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} write-file-atomic@4.0.2: - resolution: - { - integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} yargs@17.7.2: - resolution: - { - integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} snapshots: + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -4081,18 +2442,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.25.8(@babel/core@7.25.8)(eslint@9.12.0)': + '@babel/eslint-parser@7.25.9(@babel/core@7.25.8)(eslint@9.17.0)': dependencies: '@babel/core': 7.25.8 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.12.0 + eslint: 9.17.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-plugin@7.25.7(@babel/eslint-parser@7.25.8(@babel/core@7.25.8)(eslint@9.12.0))(eslint@9.12.0)': + '@babel/eslint-plugin@7.25.9(@babel/eslint-parser@7.25.9(@babel/core@7.25.8)(eslint@9.17.0))(eslint@9.17.0)': dependencies: - '@babel/eslint-parser': 7.25.8(@babel/core@7.25.8)(eslint@9.12.0) - eslint: 9.12.0 + '@babel/eslint-parser': 7.25.9(@babel/core@7.25.8)(eslint@9.17.0) + eslint: 9.17.0 eslint-rule-composer: 0.3.0 '@babel/generator@7.25.7': @@ -4245,7 +2606,7 @@ snapshots: '@babel/core': 7.25.8 '@babel/register': 7.25.7(@babel/core@7.25.8) commander: 6.2.1 - core-js: 3.38.1 + core-js: 3.39.0 node-environment-flags: 1.0.6 regenerator-runtime: 0.14.1 v8flags: 3.2.0 @@ -4826,28 +3187,30 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.17.0)': dependencies: - eslint: 9.12.0 + eslint: 9.17.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.18.0': + '@eslint/config-array@0.19.1': dependencies: - '@eslint/object-schema': 2.1.4 + '@eslint/object-schema': 2.1.5 debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.6.0': {} + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 10.2.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -4857,11 +3220,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.12.0': {} + '@eslint/js@9.17.0': {} - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.5': {} - '@eslint/plugin-kit@0.2.0': + '@eslint/plugin-kit@0.2.4': dependencies: levn: 0.4.1 @@ -4874,16 +3237,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@exercism/eslint-config-javascript@0.7.1(@babel/core@7.25.8)(@exercism/babel-preset-javascript@0.5.1)(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3)': + '@exercism/eslint-config-javascript@0.8.1(@babel/core@7.25.8)(@exercism/babel-preset-javascript@0.5.1)(eslint@9.17.0)(jest@29.7.0(@types/node@22.10.3))(typescript@5.6.3)': dependencies: - '@babel/eslint-parser': 7.25.8(@babel/core@7.25.8)(eslint@9.12.0) - '@babel/eslint-plugin': 7.25.7(@babel/eslint-parser@7.25.8(@babel/core@7.25.8)(eslint@9.12.0))(eslint@9.12.0) - '@eslint/js': 9.12.0 + '@babel/eslint-parser': 7.25.9(@babel/core@7.25.8)(eslint@9.17.0) + '@babel/eslint-plugin': 7.25.9(@babel/eslint-parser@7.25.9(@babel/core@7.25.8)(eslint@9.17.0))(eslint@9.17.0) + '@eslint/js': 9.17.0 '@exercism/babel-preset-javascript': 0.5.1 - eslint: 9.12.0 - eslint-config-prettier: 9.1.0(eslint@9.12.0) - eslint-plugin-jest: 28.8.3(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3) - globals: 15.11.0 + eslint: 9.17.0 + eslint-config-prettier: 9.1.0(eslint@9.17.0) + eslint-plugin-jest: 28.10.0(eslint@9.17.0)(jest@29.7.0(@types/node@22.10.3))(typescript@5.6.3) + globals: 15.14.0 transitivePeerDependencies: - '@babel/core' - '@typescript-eslint/eslint-plugin' @@ -4891,17 +3254,19 @@ snapshots: - supports-color - typescript - '@humanfs/core@0.19.0': {} + '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.5': + '@humanfs/node@0.16.6': dependencies: - '@humanfs/core': 0.19.0 + '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/retry@0.4.1': {} + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -4915,7 +3280,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4928,14 +3293,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.7.6) + jest-config: 29.7.0(@types/node@22.10.3) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4960,7 +3325,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -4978,7 +3343,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.7.6 + '@types/node': 22.10.3 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5000,7 +3365,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.7.6 + '@types/node': 22.10.3 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -5070,7 +3435,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.6 + '@types/node': 22.10.3 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -5143,11 +3508,11 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.7.6 + '@types/node': 22.10.3 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.7.6 + '@types/node': 22.10.3 '@types/istanbul-lib-coverage@2.0.6': {} @@ -5163,14 +3528,14 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/node@22.7.6': + '@types/node@22.10.3': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 '@types/shelljs@0.8.15': dependencies: '@types/glob': 7.2.0 - '@types/node': 22.7.6 + '@types/node': 22.10.3 '@types/stack-utils@2.0.3': {} @@ -5202,13 +3567,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.10.0(eslint@9.12.0)(typescript@5.6.3)': + '@typescript-eslint/utils@8.10.0(eslint@9.17.0)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.17.0) '@typescript-eslint/scope-manager': 8.10.0 '@typescript-eslint/types': 8.10.0 '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) - eslint: 9.12.0 + eslint: 9.17.0 transitivePeerDependencies: - supports-color - typescript @@ -5218,11 +3583,11 @@ snapshots: '@typescript-eslint/types': 8.10.0 eslint-visitor-keys: 3.4.3 - acorn-jsx@5.3.2(acorn@8.13.0): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.13.0 + acorn: 8.14.0 - acorn@8.13.0: {} + acorn@8.14.0: {} ajv@6.12.6: dependencies: @@ -5470,13 +3835,15 @@ snapshots: core-js@3.38.1: {} - create-jest@29.7.0(@types/node@22.7.6): + core-js@3.39.0: {} + + create-jest@29.7.0(@types/node@22.10.3): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.7.6) + jest-config: 29.7.0(@types/node@22.10.3) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5491,6 +3858,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 @@ -5628,16 +4001,16 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@9.12.0): + eslint-config-prettier@9.1.0(eslint@9.17.0): dependencies: - eslint: 9.12.0 + eslint: 9.17.0 - eslint-plugin-jest@28.8.3(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.6))(typescript@5.6.3): + eslint-plugin-jest@28.10.0(eslint@9.17.0)(jest@29.7.0(@types/node@22.10.3))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 8.10.0(eslint@9.12.0)(typescript@5.6.3) - eslint: 9.12.0 + '@typescript-eslint/utils': 8.10.0(eslint@9.17.0)(typescript@5.6.3) + eslint: 9.17.0 optionalDependencies: - jest: 29.7.0(@types/node@22.7.6) + jest: 29.7.0(@types/node@22.10.3) transitivePeerDependencies: - supports-color - typescript @@ -5649,7 +4022,7 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.1.0: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -5658,30 +4031,30 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.1.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@9.12.0: + eslint@9.17.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) - '@eslint-community/regexpp': 4.11.1 - '@eslint/config-array': 0.18.0 - '@eslint/core': 0.6.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.12.0 - '@eslint/plugin-kit': 0.2.0 - '@humanfs/node': 0.16.5 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.17.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.17.0 + '@eslint/plugin-kit': 0.2.4 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.1 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.1.0 - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -5696,15 +4069,14 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@10.2.0: + espree@10.3.0: dependencies: - acorn: 8.13.0 - acorn-jsx: 5.3.2(acorn@8.13.0) - eslint-visitor-keys: 4.1.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -5864,7 +4236,7 @@ snapshots: globals@14.0.0: {} - globals@15.11.0: {} + globals@15.14.0: {} globalthis@1.0.4: dependencies: @@ -6074,7 +4446,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -6094,16 +4466,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.7.6): + jest-cli@29.7.0(@types/node@22.10.3): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.7.6) + create-jest: 29.7.0(@types/node@22.10.3) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.7.6) + jest-config: 29.7.0(@types/node@22.10.3) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6113,7 +4485,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.7.6): + jest-config@29.7.0(@types/node@22.10.3): dependencies: '@babel/core': 7.25.8 '@jest/test-sequencer': 29.7.0 @@ -6138,7 +4510,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.7.6 + '@types/node': 22.10.3 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6167,7 +4539,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6177,7 +4549,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.7.6 + '@types/node': 22.10.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6216,7 +4588,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -6251,7 +4623,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6279,7 +4651,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -6325,7 +4697,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6344,7 +4716,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.6 + '@types/node': 22.10.3 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6353,17 +4725,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.7.6 + '@types/node': 22.10.3 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.7.6): + jest@29.7.0(@types/node@22.10.3): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.7.6) + jest-cli: 29.7.0(@types/node@22.10.3) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6585,7 +4957,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.3.3: {} + prettier@3.4.2: {} pretty-format@29.7.0: dependencies: @@ -6810,8 +5182,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} - tmpl@1.0.5: {} to-fast-properties@2.0.0: {} @@ -6873,7 +5243,7 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici-types@6.19.8: {} + undici-types@6.20.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} diff --git a/scripts/checksum.mjs b/scripts/checksum.mjs index 18a16ae4ae..428662de4d 100644 --- a/scripts/checksum.mjs +++ b/scripts/checksum.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * Run this script (from root directory): npx babel-node scripts/checksum + * Run this script (from root directory): corepack pnpm node scripts/checksum.mjs * * This will check root `package.json` matches each exercise's `package.json`. * But the catch is there are some dependencies used for build but not served to end users diff --git a/scripts/helpers.mjs b/scripts/helpers.mjs index 5c596663b7..607787d62c 100644 --- a/scripts/helpers.mjs +++ b/scripts/helpers.mjs @@ -307,7 +307,7 @@ export function prepare(assignment) { .sed(/x(test|it)\(/, 'test(', specFileDestination) .to(specFileDestination); shell - .sed('xdescribe', 'describe', specFileDestination) + .sed(/xdescribe\(/, 'describe(', specFileDestination) .to(specFileDestination); }); @@ -377,7 +377,9 @@ export function prepare(assignment) { export function registerExitHandler() { function exitHandler(options, exitCode) { - cleanUp(); + if (shouldCleanup()) { + cleanUp(); + } if (options.error) { console.error(options.error); diff --git a/scripts/lint.mjs b/scripts/lint.mjs index 445ea25c27..2259f60772 100644 --- a/scripts/lint.mjs +++ b/scripts/lint.mjs @@ -8,6 +8,7 @@ * This runs `eslint` on all sample solutions (and test) files */ +import path from 'node:path'; import shell from 'shelljs'; import { registerExitHandler, @@ -34,8 +35,22 @@ const infoStr = assignment const failureStr = '[Failure] Lint check failed!'; shell.mkdir('-p', 'tmp_exercises'); +shell.cp('babel.config.js', path.join('tmp_exercises', 'babel.config.js')); shell.cp('eslint.config.mjs', path.join('tmp_exercises', 'eslint.config.mjs')); +shell.sed( + '-i', + '\\*\\.spec\\.js', + '**/*.spec.js', + path.join('tmp_exercises', 'eslint.config.mjs'), +); +shell.sed( + '-i', + '// <>', + "{ files: ['**/*.spec.js'], rules: { 'no-unused-vars': ['error', { varsIgnorePattern: 'xdescribe|xtest' }] }},", + path.join('tmp_exercises', 'eslint.config.mjs'), +); + // Run lint all at once prepareAndRun( 'corepack pnpm eslint tmp_exercises -c tmp_exercises/eslint.config.mjs', From ec07318b21f8e8bf00258d34f0d2afc99b36c2fd Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Thu, 2 Jan 2025 18:59:44 +0100 Subject: [PATCH 09/11] Update configurations --- exercise-package.json | 37 +++++++++++++++ exercises/concept/amusement-park/.eslintrc | 14 ------ exercises/concept/amusement-park/.gitignore | 2 +- .../concept/amusement-park/babel.config.js | 2 +- .../concept/amusement-park/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/amusement-park/jest.config.js | 22 +++++++++ exercises/concept/amusement-park/package.json | 29 +++++++----- .../concept/annalyns-infiltration/.eslintrc | 14 ------ .../concept/annalyns-infiltration/.gitignore | 2 +- .../annalyns-infiltration/babel.config.js | 2 +- .../annalyns-infiltration/eslint.config.mjs | 45 +++++++++++++++++++ .../annalyns-infiltration/jest.config.js | 22 +++++++++ .../annalyns-infiltration/package.json | 29 +++++++----- exercises/concept/bird-watcher/.eslintrc | 14 ------ exercises/concept/bird-watcher/.gitignore | 2 +- .../concept/bird-watcher/babel.config.js | 2 +- .../concept/bird-watcher/eslint.config.mjs | 45 +++++++++++++++++++ exercises/concept/bird-watcher/jest.config.js | 22 +++++++++ exercises/concept/bird-watcher/package.json | 29 +++++++----- .../coordinate-transformation/.eslintrc | 14 ------ .../coordinate-transformation/.gitignore | 2 +- .../coordinate-transformation/babel.config.js | 2 +- .../eslint.config.mjs | 45 +++++++++++++++++++ .../coordinate-transformation/jest.config.js | 22 +++++++++ .../coordinate-transformation/package.json | 29 +++++++----- exercises/concept/custom-signs/.eslintrc | 14 ------ exercises/concept/custom-signs/.gitignore | 2 +- .../concept/custom-signs/babel.config.js | 2 +- .../concept/custom-signs/eslint.config.mjs | 45 +++++++++++++++++++ exercises/concept/custom-signs/jest.config.js | 22 +++++++++ exercises/concept/custom-signs/package.json | 29 +++++++----- .../elyses-analytic-enchantments/.eslintrc | 14 ------ .../elyses-analytic-enchantments/.gitignore | 2 +- .../babel.config.js | 2 +- .../eslint.config.mjs | 45 +++++++++++++++++++ .../jest.config.js | 22 +++++++++ .../elyses-analytic-enchantments/package.json | 29 +++++++----- .../.eslintrc | 14 ------ .../.gitignore | 2 +- .../babel.config.js | 2 +- .../eslint.config.mjs | 45 +++++++++++++++++++ .../jest.config.js | 22 +++++++++ .../package.json | 29 +++++++----- .../concept/elyses-enchantments/.eslintrc | 14 ------ .../concept/elyses-enchantments/.gitignore | 2 +- .../elyses-enchantments/babel.config.js | 2 +- .../elyses-enchantments/eslint.config.mjs | 45 +++++++++++++++++++ .../elyses-enchantments/jest.config.js | 22 +++++++++ .../concept/elyses-enchantments/package.json | 29 +++++++----- .../elyses-looping-enchantments/.eslintrc | 14 ------ .../elyses-looping-enchantments/.gitignore | 2 +- .../babel.config.js | 2 +- .../eslint.config.mjs | 45 +++++++++++++++++++ .../jest.config.js | 22 +++++++++ .../elyses-looping-enchantments/package.json | 29 +++++++----- .../.eslintrc | 14 ------ .../.gitignore | 2 +- .../babel.config.js | 2 +- .../eslint.config.mjs | 45 +++++++++++++++++++ .../jest.config.js | 22 +++++++++ .../package.json | 29 +++++++----- exercises/concept/factory-sensors/.eslintrc | 14 ------ exercises/concept/factory-sensors/.gitignore | 2 +- .../concept/factory-sensors/babel.config.js | 2 +- .../concept/factory-sensors/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/factory-sensors/jest.config.js | 22 +++++++++ .../concept/factory-sensors/package.json | 29 +++++++----- exercises/concept/freelancer-rates/.eslintrc | 14 ------ exercises/concept/freelancer-rates/.gitignore | 2 +- .../concept/freelancer-rates/babel.config.js | 2 +- .../freelancer-rates/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/freelancer-rates/jest.config.js | 22 +++++++++ .../concept/freelancer-rates/package.json | 29 +++++++----- exercises/concept/fruit-picker/.eslintrc | 14 ------ exercises/concept/fruit-picker/.gitignore | 2 +- .../concept/fruit-picker/babel.config.js | 2 +- .../concept/fruit-picker/eslint.config.mjs | 45 +++++++++++++++++++ exercises/concept/fruit-picker/jest.config.js | 22 +++++++++ exercises/concept/fruit-picker/package.json | 29 +++++++----- exercises/concept/high-score-board/.eslintrc | 14 ------ exercises/concept/high-score-board/.gitignore | 2 +- .../concept/high-score-board/babel.config.js | 2 +- .../high-score-board/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/high-score-board/jest.config.js | 22 +++++++++ .../concept/high-score-board/package.json | 29 +++++++----- exercises/concept/lasagna-master/.eslintrc | 14 ------ exercises/concept/lasagna-master/.gitignore | 2 +- .../concept/lasagna-master/babel.config.js | 2 +- .../concept/lasagna-master/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/lasagna-master/jest.config.js | 22 +++++++++ exercises/concept/lasagna-master/package.json | 29 +++++++----- exercises/concept/lasagna/.eslintrc | 14 ------ exercises/concept/lasagna/.gitignore | 2 +- exercises/concept/lasagna/babel.config.js | 2 +- exercises/concept/lasagna/eslint.config.mjs | 45 +++++++++++++++++++ exercises/concept/lasagna/jest.config.js | 22 +++++++++ exercises/concept/lasagna/package.json | 29 +++++++----- exercises/concept/lucky-numbers/.eslintrc | 14 ------ exercises/concept/lucky-numbers/.gitignore | 2 +- .../concept/lucky-numbers/babel.config.js | 2 +- .../concept/lucky-numbers/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/lucky-numbers/jest.config.js | 22 +++++++++ exercises/concept/lucky-numbers/package.json | 29 +++++++----- exercises/concept/mixed-juices/.eslintrc | 14 ------ exercises/concept/mixed-juices/.gitignore | 2 +- .../concept/mixed-juices/babel.config.js | 2 +- .../concept/mixed-juices/eslint.config.mjs | 45 +++++++++++++++++++ exercises/concept/mixed-juices/jest.config.js | 22 +++++++++ exercises/concept/mixed-juices/package.json | 29 +++++++----- exercises/concept/nullability/.eslintrc | 14 ------ exercises/concept/nullability/.gitignore | 2 +- exercises/concept/nullability/babel.config.js | 2 +- .../concept/nullability/eslint.config.mjs | 45 +++++++++++++++++++ exercises/concept/nullability/jest.config.js | 22 +++++++++ exercises/concept/nullability/package.json | 29 +++++++----- exercises/concept/ozans-playlist/.eslintrc | 14 ------ exercises/concept/ozans-playlist/.gitignore | 2 +- .../concept/ozans-playlist/babel.config.js | 2 +- .../concept/ozans-playlist/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/ozans-playlist/jest.config.js | 22 +++++++++ exercises/concept/ozans-playlist/package.json | 29 +++++++----- exercises/concept/pizza-order/.eslintrc | 14 ------ exercises/concept/pizza-order/.gitignore | 2 +- exercises/concept/pizza-order/babel.config.js | 2 +- .../concept/pizza-order/eslint.config.mjs | 45 +++++++++++++++++++ exercises/concept/pizza-order/jest.config.js | 22 +++++++++ exercises/concept/pizza-order/package.json | 29 +++++++----- .../concept/poetry-club-door-policy/.eslintrc | 14 ------ .../poetry-club-door-policy/.gitignore | 2 +- .../poetry-club-door-policy/babel.config.js | 2 +- .../poetry-club-door-policy/eslint.config.mjs | 45 +++++++++++++++++++ .../poetry-club-door-policy/jest.config.js | 22 +++++++++ .../poetry-club-door-policy/package.json | 29 +++++++----- exercises/concept/regular-chatbot/.eslintrc | 14 ------ exercises/concept/regular-chatbot/.gitignore | 2 +- .../concept/regular-chatbot/babel.config.js | 2 +- .../concept/regular-chatbot/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/regular-chatbot/jest.config.js | 22 +++++++++ .../concept/regular-chatbot/package.json | 29 +++++++----- .../concept/translation-service/.eslintignore | 2 - .../concept/translation-service/.eslintrc | 14 ------ .../concept/translation-service/.gitignore | 2 +- .../translation-service/babel.config.js | 2 +- .../translation-service/eslint.config.mjs | 45 +++++++++++++++++++ .../translation-service/jest.config.js | 22 +++++++++ .../concept/translation-service/package.json | 29 +++++++----- exercises/concept/vehicle-purchase/.eslintrc | 14 ------ exercises/concept/vehicle-purchase/.gitignore | 2 +- .../concept/vehicle-purchase/babel.config.js | 2 +- .../vehicle-purchase/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/vehicle-purchase/jest.config.js | 22 +++++++++ .../concept/vehicle-purchase/package.json | 29 +++++++----- exercises/concept/windowing-system/.eslintrc | 14 ------ exercises/concept/windowing-system/.gitignore | 2 +- .../concept/windowing-system/babel.config.js | 2 +- .../windowing-system/eslint.config.mjs | 45 +++++++++++++++++++ .../concept/windowing-system/jest.config.js | 22 +++++++++ .../concept/windowing-system/package.json | 29 +++++++----- exercises/practice/accumulate/.eslintrc | 14 ------ exercises/practice/accumulate/.gitignore | 2 +- exercises/practice/accumulate/babel.config.js | 2 +- .../practice/accumulate/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/accumulate/jest.config.js | 22 +++++++++ exercises/practice/accumulate/package.json | 29 +++++++----- exercises/practice/acronym/.eslintrc | 14 ------ exercises/practice/acronym/.gitignore | 2 +- exercises/practice/acronym/babel.config.js | 2 +- exercises/practice/acronym/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/acronym/jest.config.js | 22 +++++++++ exercises/practice/acronym/package.json | 29 +++++++----- exercises/practice/affine-cipher/.eslintrc | 14 ------ exercises/practice/affine-cipher/.gitignore | 2 +- .../practice/affine-cipher/babel.config.js | 2 +- .../practice/affine-cipher/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/affine-cipher/jest.config.js | 22 +++++++++ exercises/practice/affine-cipher/package.json | 29 +++++++----- exercises/practice/all-your-base/.eslintrc | 14 ------ exercises/practice/all-your-base/.gitignore | 2 +- .../practice/all-your-base/babel.config.js | 2 +- .../practice/all-your-base/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/all-your-base/jest.config.js | 22 +++++++++ exercises/practice/all-your-base/package.json | 29 +++++++----- exercises/practice/allergies/.eslintrc | 14 ------ exercises/practice/allergies/.gitignore | 2 +- exercises/practice/allergies/babel.config.js | 2 +- .../practice/allergies/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/allergies/jest.config.js | 22 +++++++++ exercises/practice/allergies/package.json | 29 +++++++----- exercises/practice/alphametics/.eslintrc | 14 ------ exercises/practice/alphametics/.gitignore | 2 +- .../practice/alphametics/babel.config.js | 2 +- .../practice/alphametics/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/alphametics/jest.config.js | 22 +++++++++ exercises/practice/alphametics/package.json | 29 +++++++----- exercises/practice/anagram/.eslintrc | 14 ------ exercises/practice/anagram/.gitignore | 2 +- exercises/practice/anagram/babel.config.js | 2 +- exercises/practice/anagram/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/anagram/jest.config.js | 22 +++++++++ exercises/practice/anagram/package.json | 29 +++++++----- .../practice/armstrong-numbers/.eslintrc | 14 ------ .../practice/armstrong-numbers/.gitignore | 2 +- .../armstrong-numbers/babel.config.js | 2 +- .../armstrong-numbers/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/armstrong-numbers/jest.config.js | 22 +++++++++ .../practice/armstrong-numbers/package.json | 29 +++++++----- exercises/practice/atbash-cipher/.eslintrc | 14 ------ exercises/practice/atbash-cipher/.gitignore | 2 +- .../practice/atbash-cipher/babel.config.js | 2 +- .../practice/atbash-cipher/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/atbash-cipher/jest.config.js | 22 +++++++++ exercises/practice/atbash-cipher/package.json | 29 +++++++----- exercises/practice/bank-account/.eslintrc | 14 ------ exercises/practice/bank-account/.gitignore | 2 +- .../practice/bank-account/babel.config.js | 2 +- .../practice/bank-account/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/bank-account/jest.config.js | 22 +++++++++ exercises/practice/bank-account/package.json | 29 +++++++----- exercises/practice/beer-song/.eslintrc | 14 ------ exercises/practice/beer-song/.gitignore | 2 +- exercises/practice/beer-song/babel.config.js | 2 +- .../practice/beer-song/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/beer-song/jest.config.js | 22 +++++++++ exercises/practice/beer-song/package.json | 29 +++++++----- .../practice/binary-search-tree/.eslintrc | 14 ------ .../practice/binary-search-tree/.gitignore | 2 +- .../binary-search-tree/babel.config.js | 2 +- .../binary-search-tree/eslint.config.mjs | 45 +++++++++++++++++++ .../binary-search-tree/jest.config.js | 22 +++++++++ .../practice/binary-search-tree/package.json | 29 +++++++----- exercises/practice/binary-search/.eslintrc | 14 ------ exercises/practice/binary-search/.gitignore | 2 +- .../practice/binary-search/babel.config.js | 2 +- .../practice/binary-search/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/binary-search/jest.config.js | 22 +++++++++ exercises/practice/binary-search/package.json | 29 +++++++----- exercises/practice/binary/.eslintrc | 14 ------ exercises/practice/binary/.gitignore | 2 +- exercises/practice/binary/babel.config.js | 2 +- exercises/practice/binary/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/binary/jest.config.js | 22 +++++++++ exercises/practice/binary/package.json | 29 +++++++----- exercises/practice/bob/.eslintrc | 14 ------ exercises/practice/bob/.gitignore | 2 +- exercises/practice/bob/babel.config.js | 2 +- exercises/practice/bob/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/bob/jest.config.js | 22 +++++++++ exercises/practice/bob/package.json | 29 +++++++----- exercises/practice/book-store/.eslintrc | 14 ------ exercises/practice/book-store/.gitignore | 2 +- exercises/practice/book-store/babel.config.js | 2 +- .../practice/book-store/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/book-store/jest.config.js | 22 +++++++++ exercises/practice/book-store/package.json | 29 +++++++----- exercises/practice/bottle-song/.eslintrc | 14 ------ exercises/practice/bottle-song/.gitignore | 2 +- .../practice/bottle-song/babel.config.js | 2 +- .../practice/bottle-song/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/bottle-song/jest.config.js | 22 +++++++++ exercises/practice/bottle-song/package.json | 29 +++++++----- exercises/practice/bowling/.eslintrc | 14 ------ exercises/practice/bowling/.gitignore | 2 +- exercises/practice/bowling/babel.config.js | 2 +- exercises/practice/bowling/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/bowling/jest.config.js | 22 +++++++++ exercises/practice/bowling/package.json | 29 +++++++----- exercises/practice/change/.eslintrc | 14 ------ exercises/practice/change/.gitignore | 2 +- exercises/practice/change/babel.config.js | 2 +- exercises/practice/change/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/change/jest.config.js | 22 +++++++++ exercises/practice/change/package.json | 29 +++++++----- exercises/practice/circular-buffer/.eslintrc | 14 ------ exercises/practice/circular-buffer/.gitignore | 2 +- .../practice/circular-buffer/babel.config.js | 2 +- .../circular-buffer/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/circular-buffer/jest.config.js | 22 +++++++++ .../practice/circular-buffer/package.json | 29 +++++++----- exercises/practice/clock/.eslintrc | 14 ------ exercises/practice/clock/.gitignore | 2 +- exercises/practice/clock/babel.config.js | 2 +- exercises/practice/clock/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/clock/jest.config.js | 22 +++++++++ exercises/practice/clock/package.json | 29 +++++++----- .../practice/collatz-conjecture/.eslintrc | 14 ------ .../practice/collatz-conjecture/.gitignore | 2 +- .../collatz-conjecture/babel.config.js | 2 +- .../collatz-conjecture/eslint.config.mjs | 45 +++++++++++++++++++ .../collatz-conjecture/jest.config.js | 22 +++++++++ .../practice/collatz-conjecture/package.json | 29 +++++++----- exercises/practice/complex-numbers/.eslintrc | 14 ------ exercises/practice/complex-numbers/.gitignore | 2 +- .../practice/complex-numbers/babel.config.js | 2 +- .../complex-numbers/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/complex-numbers/jest.config.js | 22 +++++++++ .../practice/complex-numbers/package.json | 29 +++++++----- exercises/practice/connect/.eslintrc | 14 ------ exercises/practice/connect/.gitignore | 2 +- exercises/practice/connect/babel.config.js | 2 +- exercises/practice/connect/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/connect/jest.config.js | 22 +++++++++ exercises/practice/connect/package.json | 29 +++++++----- exercises/practice/crypto-square/.eslintrc | 14 ------ exercises/practice/crypto-square/.gitignore | 2 +- .../practice/crypto-square/babel.config.js | 2 +- .../practice/crypto-square/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/crypto-square/jest.config.js | 22 +++++++++ exercises/practice/crypto-square/package.json | 29 +++++++----- exercises/practice/custom-set/.eslintrc | 14 ------ exercises/practice/custom-set/.gitignore | 2 +- exercises/practice/custom-set/babel.config.js | 2 +- .../practice/custom-set/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/custom-set/jest.config.js | 22 +++++++++ exercises/practice/custom-set/package.json | 29 +++++++----- exercises/practice/darts/.eslintrc | 14 ------ exercises/practice/darts/.gitignore | 2 +- exercises/practice/darts/babel.config.js | 2 +- exercises/practice/darts/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/darts/jest.config.js | 22 +++++++++ exercises/practice/darts/package.json | 29 +++++++----- exercises/practice/diamond/.eslintrc | 14 ------ exercises/practice/diamond/.gitignore | 2 +- exercises/practice/diamond/babel.config.js | 2 +- exercises/practice/diamond/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/diamond/jest.config.js | 22 +++++++++ exercises/practice/diamond/package.json | 29 +++++++----- .../practice/difference-of-squares/.eslintrc | 14 ------ .../practice/difference-of-squares/.gitignore | 2 +- .../difference-of-squares/babel.config.js | 2 +- .../difference-of-squares/eslint.config.mjs | 45 +++++++++++++++++++ .../difference-of-squares/jest.config.js | 22 +++++++++ .../difference-of-squares/package.json | 29 +++++++----- exercises/practice/diffie-hellman/.eslintrc | 14 ------ exercises/practice/diffie-hellman/.gitignore | 2 +- .../practice/diffie-hellman/babel.config.js | 2 +- .../practice/diffie-hellman/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/diffie-hellman/jest.config.js | 22 +++++++++ .../practice/diffie-hellman/package.json | 29 +++++++----- exercises/practice/dnd-character/.eslintrc | 14 ------ exercises/practice/dnd-character/.gitignore | 2 +- .../practice/dnd-character/babel.config.js | 2 +- .../practice/dnd-character/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/dnd-character/jest.config.js | 22 +++++++++ exercises/practice/dnd-character/package.json | 29 +++++++----- exercises/practice/dominoes/.eslintrc | 14 ------ exercises/practice/dominoes/.gitignore | 2 +- exercises/practice/dominoes/babel.config.js | 2 +- exercises/practice/dominoes/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/dominoes/jest.config.js | 22 +++++++++ exercises/practice/dominoes/package.json | 29 +++++++----- exercises/practice/eliuds-eggs/.eslintrc | 14 ------ exercises/practice/eliuds-eggs/.gitignore | 2 +- .../practice/eliuds-eggs/babel.config.js | 2 +- .../practice/eliuds-eggs/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/eliuds-eggs/jest.config.js | 22 +++++++++ exercises/practice/eliuds-eggs/package.json | 29 +++++++----- exercises/practice/etl/.eslintrc | 14 ------ exercises/practice/etl/.gitignore | 2 +- exercises/practice/etl/babel.config.js | 2 +- exercises/practice/etl/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/etl/jest.config.js | 22 +++++++++ exercises/practice/etl/package.json | 29 +++++++----- exercises/practice/flatten-array/.eslintrc | 14 ------ exercises/practice/flatten-array/.gitignore | 2 +- .../practice/flatten-array/babel.config.js | 2 +- .../practice/flatten-array/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/flatten-array/jest.config.js | 22 +++++++++ exercises/practice/flatten-array/package.json | 29 +++++++----- exercises/practice/food-chain/.eslintrc | 14 ------ exercises/practice/food-chain/.gitignore | 2 +- exercises/practice/food-chain/babel.config.js | 2 +- .../practice/food-chain/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/food-chain/jest.config.js | 22 +++++++++ exercises/practice/food-chain/package.json | 29 +++++++----- exercises/practice/forth/.eslintrc | 14 ------ exercises/practice/forth/.gitignore | 2 +- exercises/practice/forth/babel.config.js | 2 +- exercises/practice/forth/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/forth/jest.config.js | 22 +++++++++ exercises/practice/forth/package.json | 29 +++++++----- exercises/practice/gigasecond/.eslintrc | 14 ------ exercises/practice/gigasecond/.gitignore | 2 +- exercises/practice/gigasecond/babel.config.js | 2 +- .../practice/gigasecond/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/gigasecond/jest.config.js | 22 +++++++++ exercises/practice/gigasecond/package.json | 29 +++++++----- exercises/practice/go-counting/.eslintrc | 14 ------ exercises/practice/go-counting/.gitignore | 2 +- .../practice/go-counting/babel.config.js | 2 +- .../practice/go-counting/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/go-counting/jest.config.js | 22 +++++++++ exercises/practice/go-counting/package.json | 29 +++++++----- exercises/practice/grade-school/.eslintrc | 14 ------ exercises/practice/grade-school/.gitignore | 2 +- .../practice/grade-school/babel.config.js | 2 +- .../practice/grade-school/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/grade-school/jest.config.js | 22 +++++++++ exercises/practice/grade-school/package.json | 29 +++++++----- exercises/practice/grains/.eslintrc | 14 ------ exercises/practice/grains/.gitignore | 2 +- exercises/practice/grains/babel.config.js | 2 +- exercises/practice/grains/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/grains/jest.config.js | 22 +++++++++ exercises/practice/grains/package.json | 29 +++++++----- exercises/practice/grep/.eslintrc | 14 ------ exercises/practice/grep/.gitignore | 2 +- exercises/practice/grep/babel.config.js | 2 +- exercises/practice/grep/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/grep/jest.config.js | 22 +++++++++ exercises/practice/grep/package.json | 29 +++++++----- exercises/practice/hamming/.eslintrc | 14 ------ exercises/practice/hamming/.gitignore | 2 +- exercises/practice/hamming/babel.config.js | 2 +- exercises/practice/hamming/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/hamming/jest.config.js | 22 +++++++++ exercises/practice/hamming/package.json | 29 +++++++----- exercises/practice/hello-world/.eslintrc | 14 ------ exercises/practice/hello-world/.gitignore | 2 +- .../practice/hello-world/babel.config.js | 2 +- .../practice/hello-world/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/hello-world/jest.config.js | 22 +++++++++ exercises/practice/hello-world/package.json | 29 +++++++----- exercises/practice/hexadecimal/.eslintrc | 14 ------ exercises/practice/hexadecimal/.gitignore | 2 +- .../practice/hexadecimal/babel.config.js | 2 +- .../practice/hexadecimal/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/hexadecimal/jest.config.js | 22 +++++++++ exercises/practice/hexadecimal/package.json | 29 +++++++----- exercises/practice/high-scores/.eslintrc | 14 ------ exercises/practice/high-scores/.gitignore | 2 +- .../practice/high-scores/babel.config.js | 2 +- .../practice/high-scores/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/high-scores/jest.config.js | 22 +++++++++ exercises/practice/high-scores/package.json | 29 +++++++----- exercises/practice/house/.eslintrc | 14 ------ exercises/practice/house/.gitignore | 2 +- exercises/practice/house/babel.config.js | 2 +- exercises/practice/house/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/house/jest.config.js | 22 +++++++++ exercises/practice/house/package.json | 29 +++++++----- exercises/practice/isbn-verifier/.eslintrc | 14 ------ exercises/practice/isbn-verifier/.gitignore | 2 +- .../practice/isbn-verifier/babel.config.js | 2 +- .../practice/isbn-verifier/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/isbn-verifier/jest.config.js | 22 +++++++++ exercises/practice/isbn-verifier/package.json | 29 +++++++----- exercises/practice/isogram/.eslintrc | 14 ------ exercises/practice/isogram/.gitignore | 2 +- exercises/practice/isogram/babel.config.js | 2 +- exercises/practice/isogram/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/isogram/jest.config.js | 22 +++++++++ exercises/practice/isogram/package.json | 29 +++++++----- .../practice/kindergarten-garden/.eslintrc | 14 ------ .../practice/kindergarten-garden/.gitignore | 2 +- .../kindergarten-garden/babel.config.js | 2 +- .../kindergarten-garden/eslint.config.mjs | 45 +++++++++++++++++++ .../kindergarten-garden/jest.config.js | 22 +++++++++ .../practice/kindergarten-garden/package.json | 29 +++++++----- exercises/practice/knapsack/.eslintrc | 14 ------ exercises/practice/knapsack/.gitignore | 2 +- exercises/practice/knapsack/babel.config.js | 2 +- exercises/practice/knapsack/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/knapsack/jest.config.js | 22 +++++++++ exercises/practice/knapsack/package.json | 29 +++++++----- .../practice/largest-series-product/.eslintrc | 14 ------ .../largest-series-product/.gitignore | 2 +- .../largest-series-product/babel.config.js | 2 +- .../largest-series-product/eslint.config.mjs | 45 +++++++++++++++++++ .../largest-series-product/jest.config.js | 22 +++++++++ .../largest-series-product/package.json | 29 +++++++----- exercises/practice/leap/.eslintrc | 14 ------ exercises/practice/leap/.gitignore | 2 +- exercises/practice/leap/babel.config.js | 2 +- exercises/practice/leap/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/leap/jest.config.js | 22 +++++++++ exercises/practice/leap/package.json | 29 +++++++----- exercises/practice/ledger/.eslintrc | 14 ------ exercises/practice/ledger/.gitignore | 2 +- exercises/practice/ledger/babel.config.js | 2 +- exercises/practice/ledger/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/ledger/jest.config.js | 22 +++++++++ exercises/practice/ledger/package.json | 29 +++++++----- exercises/practice/lens-person/.eslintrc | 14 ------ exercises/practice/lens-person/.gitignore | 2 +- .../practice/lens-person/babel.config.js | 2 +- .../practice/lens-person/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/lens-person/jest.config.js | 22 +++++++++ exercises/practice/lens-person/package.json | 29 +++++++----- exercises/practice/linked-list/.eslintrc | 14 ------ exercises/practice/linked-list/.gitignore | 2 +- .../practice/linked-list/babel.config.js | 2 +- .../practice/linked-list/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/linked-list/jest.config.js | 22 +++++++++ exercises/practice/linked-list/package.json | 29 +++++++----- exercises/practice/list-ops/.eslintrc | 14 ------ exercises/practice/list-ops/.gitignore | 2 +- exercises/practice/list-ops/babel.config.js | 2 +- exercises/practice/list-ops/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/list-ops/jest.config.js | 22 +++++++++ exercises/practice/list-ops/package.json | 29 +++++++----- exercises/practice/luhn/.eslintrc | 14 ------ exercises/practice/luhn/.gitignore | 2 +- exercises/practice/luhn/babel.config.js | 2 +- exercises/practice/luhn/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/luhn/jest.config.js | 22 +++++++++ exercises/practice/luhn/package.json | 29 +++++++----- exercises/practice/markdown/.eslintrc | 14 ------ exercises/practice/markdown/.gitignore | 2 +- exercises/practice/markdown/babel.config.js | 2 +- exercises/practice/markdown/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/markdown/jest.config.js | 22 +++++++++ exercises/practice/markdown/package.json | 29 +++++++----- .../practice/matching-brackets/.eslintrc | 14 ------ .../practice/matching-brackets/.gitignore | 2 +- .../matching-brackets/babel.config.js | 2 +- .../matching-brackets/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/matching-brackets/jest.config.js | 22 +++++++++ .../practice/matching-brackets/package.json | 29 +++++++----- exercises/practice/matrix/.eslintrc | 14 ------ exercises/practice/matrix/.gitignore | 2 +- exercises/practice/matrix/babel.config.js | 2 +- exercises/practice/matrix/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/matrix/jest.config.js | 22 +++++++++ exercises/practice/matrix/package.json | 29 +++++++----- exercises/practice/meetup/.eslintrc | 14 ------ exercises/practice/meetup/.gitignore | 2 +- exercises/practice/meetup/babel.config.js | 2 +- exercises/practice/meetup/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/meetup/jest.config.js | 22 +++++++++ exercises/practice/meetup/package.json | 29 +++++++----- exercises/practice/micro-blog/.eslintrc | 14 ------ exercises/practice/micro-blog/.gitignore | 2 +- exercises/practice/micro-blog/babel.config.js | 2 +- .../practice/micro-blog/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/micro-blog/jest.config.js | 22 +++++++++ exercises/practice/micro-blog/package.json | 29 +++++++----- exercises/practice/minesweeper/.eslintrc | 14 ------ exercises/practice/minesweeper/.gitignore | 2 +- .../practice/minesweeper/babel.config.js | 2 +- .../practice/minesweeper/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/minesweeper/jest.config.js | 22 +++++++++ exercises/practice/minesweeper/package.json | 29 +++++++----- exercises/practice/nth-prime/.eslintrc | 14 ------ exercises/practice/nth-prime/.gitignore | 2 +- exercises/practice/nth-prime/babel.config.js | 2 +- .../practice/nth-prime/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/nth-prime/jest.config.js | 22 +++++++++ exercises/practice/nth-prime/package.json | 29 +++++++----- exercises/practice/nucleotide-count/.eslintrc | 14 ------ .../practice/nucleotide-count/.gitignore | 2 +- .../practice/nucleotide-count/babel.config.js | 2 +- .../nucleotide-count/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/nucleotide-count/jest.config.js | 22 +++++++++ .../practice/nucleotide-count/package.json | 29 +++++++----- exercises/practice/ocr-numbers/.eslintrc | 14 ------ exercises/practice/ocr-numbers/.gitignore | 2 +- .../practice/ocr-numbers/babel.config.js | 2 +- .../practice/ocr-numbers/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/ocr-numbers/jest.config.js | 22 +++++++++ exercises/practice/ocr-numbers/package.json | 29 +++++++----- exercises/practice/octal/.eslintrc | 14 ------ exercises/practice/octal/.gitignore | 2 +- exercises/practice/octal/babel.config.js | 2 +- exercises/practice/octal/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/octal/jest.config.js | 22 +++++++++ exercises/practice/octal/package.json | 29 +++++++----- .../practice/palindrome-products/.eslintrc | 14 ------ .../practice/palindrome-products/.gitignore | 2 +- .../palindrome-products/babel.config.js | 2 +- .../palindrome-products/eslint.config.mjs | 45 +++++++++++++++++++ .../palindrome-products/jest.config.js | 22 +++++++++ .../practice/palindrome-products/package.json | 29 +++++++----- exercises/practice/pangram/.eslintrc | 14 ------ exercises/practice/pangram/.gitignore | 2 +- exercises/practice/pangram/babel.config.js | 2 +- exercises/practice/pangram/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/pangram/jest.config.js | 22 +++++++++ exercises/practice/pangram/package.json | 29 +++++++----- .../parallel-letter-frequency/.eslintrc | 14 ------ .../parallel-letter-frequency/.gitignore | 2 +- .../parallel-letter-frequency/babel.config.js | 2 +- .../eslint.config.mjs | 45 +++++++++++++++++++ .../parallel-letter-frequency/jest.config.js | 22 +++++++++ .../parallel-letter-frequency/package.json | 29 +++++++----- exercises/practice/pascals-triangle/.eslintrc | 14 ------ .../practice/pascals-triangle/.gitignore | 2 +- .../practice/pascals-triangle/babel.config.js | 2 +- .../pascals-triangle/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/pascals-triangle/jest.config.js | 22 +++++++++ .../practice/pascals-triangle/package.json | 29 +++++++----- exercises/practice/perfect-numbers/.eslintrc | 14 ------ exercises/practice/perfect-numbers/.gitignore | 2 +- .../practice/perfect-numbers/babel.config.js | 2 +- .../perfect-numbers/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/perfect-numbers/jest.config.js | 22 +++++++++ .../practice/perfect-numbers/package.json | 29 +++++++----- exercises/practice/phone-number/.eslintrc | 14 ------ exercises/practice/phone-number/.gitignore | 2 +- .../practice/phone-number/babel.config.js | 2 +- .../practice/phone-number/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/phone-number/jest.config.js | 22 +++++++++ exercises/practice/phone-number/package.json | 29 +++++++----- exercises/practice/pig-latin/.eslintrc | 14 ------ exercises/practice/pig-latin/.gitignore | 2 +- exercises/practice/pig-latin/babel.config.js | 2 +- .../practice/pig-latin/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/pig-latin/jest.config.js | 22 +++++++++ exercises/practice/pig-latin/package.json | 29 +++++++----- exercises/practice/point-mutations/.eslintrc | 14 ------ exercises/practice/point-mutations/.gitignore | 2 +- .../practice/point-mutations/babel.config.js | 2 +- .../point-mutations/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/point-mutations/jest.config.js | 22 +++++++++ .../practice/point-mutations/package.json | 29 +++++++----- exercises/practice/poker/.eslintrc | 14 ------ exercises/practice/poker/.gitignore | 2 +- exercises/practice/poker/babel.config.js | 2 +- exercises/practice/poker/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/poker/jest.config.js | 22 +++++++++ exercises/practice/poker/package.json | 29 +++++++----- exercises/practice/prime-factors/.eslintrc | 14 ------ exercises/practice/prime-factors/.gitignore | 2 +- .../practice/prime-factors/babel.config.js | 2 +- .../practice/prime-factors/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/prime-factors/jest.config.js | 22 +++++++++ exercises/practice/prime-factors/package.json | 29 +++++++----- exercises/practice/promises/.eslintrc | 14 ------ exercises/practice/promises/.gitignore | 2 +- exercises/practice/promises/babel.config.js | 2 +- exercises/practice/promises/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/promises/jest.config.js | 22 +++++++++ exercises/practice/promises/package.json | 29 +++++++----- .../practice/protein-translation/.eslintrc | 14 ------ .../practice/protein-translation/.gitignore | 2 +- .../protein-translation/babel.config.js | 2 +- .../protein-translation/eslint.config.mjs | 45 +++++++++++++++++++ .../protein-translation/jest.config.js | 22 +++++++++ .../practice/protein-translation/package.json | 29 +++++++----- exercises/practice/proverb/.eslintrc | 14 ------ exercises/practice/proverb/.gitignore | 2 +- exercises/practice/proverb/babel.config.js | 2 +- exercises/practice/proverb/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/proverb/jest.config.js | 22 +++++++++ exercises/practice/proverb/package.json | 29 +++++++----- .../practice/pythagorean-triplet/.eslintrc | 14 ------ .../practice/pythagorean-triplet/.gitignore | 2 +- .../pythagorean-triplet/babel.config.js | 2 +- .../pythagorean-triplet/eslint.config.mjs | 45 +++++++++++++++++++ .../pythagorean-triplet/jest.config.js | 22 +++++++++ .../practice/pythagorean-triplet/package.json | 29 +++++++----- exercises/practice/queen-attack/.eslintrc | 14 ------ exercises/practice/queen-attack/.gitignore | 2 +- .../practice/queen-attack/babel.config.js | 2 +- .../practice/queen-attack/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/queen-attack/jest.config.js | 22 +++++++++ exercises/practice/queen-attack/package.json | 29 +++++++----- .../practice/rail-fence-cipher/.eslintrc | 14 ------ .../practice/rail-fence-cipher/.gitignore | 2 +- .../rail-fence-cipher/babel.config.js | 2 +- .../rail-fence-cipher/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/rail-fence-cipher/jest.config.js | 22 +++++++++ .../practice/rail-fence-cipher/package.json | 29 +++++++----- exercises/practice/raindrops/.eslintrc | 14 ------ exercises/practice/raindrops/.gitignore | 2 +- exercises/practice/raindrops/babel.config.js | 2 +- .../practice/raindrops/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/raindrops/jest.config.js | 22 +++++++++ exercises/practice/raindrops/package.json | 29 +++++++----- exercises/practice/rational-numbers/.eslintrc | 14 ------ .../practice/rational-numbers/.gitignore | 2 +- .../practice/rational-numbers/babel.config.js | 2 +- .../rational-numbers/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/rational-numbers/jest.config.js | 22 +++++++++ .../practice/rational-numbers/package.json | 29 +++++++----- exercises/practice/react/.eslintrc | 14 ------ exercises/practice/react/.gitignore | 2 +- exercises/practice/react/babel.config.js | 2 +- exercises/practice/react/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/react/jest.config.js | 22 +++++++++ exercises/practice/react/package.json | 29 +++++++----- exercises/practice/rectangles/.eslintrc | 14 ------ exercises/practice/rectangles/.gitignore | 2 +- exercises/practice/rectangles/babel.config.js | 2 +- .../practice/rectangles/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/rectangles/jest.config.js | 22 +++++++++ exercises/practice/rectangles/package.json | 29 +++++++----- .../practice/resistor-color-duo/.eslintrc | 14 ------ .../practice/resistor-color-duo/.gitignore | 2 +- .../resistor-color-duo/babel.config.js | 2 +- .../resistor-color-duo/eslint.config.mjs | 45 +++++++++++++++++++ .../resistor-color-duo/jest.config.js | 22 +++++++++ .../practice/resistor-color-duo/package.json | 29 +++++++----- .../practice/resistor-color-trio/.eslintrc | 14 ------ .../practice/resistor-color-trio/.gitignore | 2 +- .../resistor-color-trio/babel.config.js | 2 +- .../resistor-color-trio/eslint.config.mjs | 45 +++++++++++++++++++ .../resistor-color-trio/jest.config.js | 22 +++++++++ .../practice/resistor-color-trio/package.json | 29 +++++++----- exercises/practice/resistor-color/.eslintrc | 14 ------ exercises/practice/resistor-color/.gitignore | 2 +- .../practice/resistor-color/babel.config.js | 2 +- .../practice/resistor-color/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/resistor-color/jest.config.js | 22 +++++++++ .../practice/resistor-color/package.json | 29 +++++++----- exercises/practice/rest-api/.eslintrc | 14 ------ exercises/practice/rest-api/.gitignore | 2 +- exercises/practice/rest-api/babel.config.js | 2 +- exercises/practice/rest-api/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/rest-api/jest.config.js | 22 +++++++++ exercises/practice/rest-api/package.json | 29 +++++++----- exercises/practice/reverse-string/.eslintrc | 14 ------ exercises/practice/reverse-string/.gitignore | 2 +- .../practice/reverse-string/babel.config.js | 2 +- .../practice/reverse-string/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/reverse-string/jest.config.js | 22 +++++++++ .../practice/reverse-string/package.json | 29 +++++++----- .../practice/rna-transcription/.eslintrc | 14 ------ .../practice/rna-transcription/.gitignore | 2 +- .../rna-transcription/babel.config.js | 2 +- .../rna-transcription/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/rna-transcription/jest.config.js | 22 +++++++++ .../practice/rna-transcription/package.json | 29 +++++++----- exercises/practice/robot-name/.eslintrc | 14 ------ exercises/practice/robot-name/.gitignore | 2 +- exercises/practice/robot-name/babel.config.js | 2 +- .../practice/robot-name/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/robot-name/jest.config.js | 22 +++++++++ exercises/practice/robot-name/package.json | 29 +++++++----- exercises/practice/robot-simulator/.eslintrc | 14 ------ exercises/practice/robot-simulator/.gitignore | 2 +- .../practice/robot-simulator/babel.config.js | 2 +- .../robot-simulator/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/robot-simulator/jest.config.js | 22 +++++++++ .../practice/robot-simulator/package.json | 29 +++++++----- exercises/practice/roman-numerals/.eslintrc | 14 ------ exercises/practice/roman-numerals/.gitignore | 2 +- .../practice/roman-numerals/babel.config.js | 2 +- .../practice/roman-numerals/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/roman-numerals/jest.config.js | 22 +++++++++ .../practice/roman-numerals/package.json | 29 +++++++----- .../practice/rotational-cipher/.eslintrc | 14 ------ .../practice/rotational-cipher/.gitignore | 2 +- .../rotational-cipher/babel.config.js | 2 +- .../rotational-cipher/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/rotational-cipher/jest.config.js | 22 +++++++++ .../practice/rotational-cipher/package.json | 29 +++++++----- .../practice/run-length-encoding/.eslintrc | 14 ------ .../practice/run-length-encoding/.gitignore | 2 +- .../run-length-encoding/babel.config.js | 2 +- .../run-length-encoding/eslint.config.mjs | 45 +++++++++++++++++++ .../run-length-encoding/jest.config.js | 22 +++++++++ .../practice/run-length-encoding/package.json | 29 +++++++----- exercises/practice/saddle-points/.eslintrc | 14 ------ exercises/practice/saddle-points/.gitignore | 2 +- .../practice/saddle-points/babel.config.js | 2 +- .../practice/saddle-points/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/saddle-points/jest.config.js | 22 +++++++++ exercises/practice/saddle-points/package.json | 29 +++++++----- exercises/practice/satellite/.eslintrc | 14 ------ exercises/practice/satellite/.gitignore | 2 +- exercises/practice/satellite/babel.config.js | 2 +- .../practice/satellite/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/satellite/jest.config.js | 22 +++++++++ exercises/practice/satellite/package.json | 29 +++++++----- exercises/practice/say/.eslintrc | 14 ------ exercises/practice/say/.gitignore | 2 +- exercises/practice/say/babel.config.js | 2 +- exercises/practice/say/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/say/jest.config.js | 22 +++++++++ exercises/practice/say/package.json | 29 +++++++----- exercises/practice/scale-generator/.eslintrc | 14 ------ exercises/practice/scale-generator/.gitignore | 2 +- .../practice/scale-generator/babel.config.js | 2 +- .../scale-generator/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/scale-generator/jest.config.js | 22 +++++++++ .../practice/scale-generator/package.json | 29 +++++++----- exercises/practice/scrabble-score/.eslintrc | 14 ------ exercises/practice/scrabble-score/.gitignore | 2 +- .../practice/scrabble-score/babel.config.js | 2 +- .../practice/scrabble-score/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/scrabble-score/jest.config.js | 22 +++++++++ .../practice/scrabble-score/package.json | 29 +++++++----- exercises/practice/secret-handshake/.eslintrc | 14 ------ .../practice/secret-handshake/.gitignore | 2 +- .../practice/secret-handshake/babel.config.js | 2 +- .../secret-handshake/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/secret-handshake/jest.config.js | 22 +++++++++ .../practice/secret-handshake/package.json | 29 +++++++----- exercises/practice/series/.eslintrc | 14 ------ exercises/practice/series/.gitignore | 2 +- exercises/practice/series/babel.config.js | 2 +- exercises/practice/series/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/series/jest.config.js | 22 +++++++++ exercises/practice/series/package.json | 29 +++++++----- exercises/practice/sieve/.eslintrc | 14 ------ exercises/practice/sieve/.gitignore | 2 +- exercises/practice/sieve/babel.config.js | 2 +- exercises/practice/sieve/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/sieve/jest.config.js | 22 +++++++++ exercises/practice/sieve/package.json | 29 +++++++----- exercises/practice/simple-cipher/.eslintrc | 14 ------ exercises/practice/simple-cipher/.gitignore | 2 +- .../practice/simple-cipher/babel.config.js | 2 +- .../practice/simple-cipher/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/simple-cipher/jest.config.js | 22 +++++++++ exercises/practice/simple-cipher/package.json | 29 +++++++----- .../practice/simple-linked-list/.eslintrc | 14 ------ .../practice/simple-linked-list/.gitignore | 2 +- .../simple-linked-list/babel.config.js | 2 +- .../simple-linked-list/eslint.config.mjs | 45 +++++++++++++++++++ .../simple-linked-list/jest.config.js | 22 +++++++++ .../practice/simple-linked-list/package.json | 29 +++++++----- exercises/practice/space-age/.eslintrc | 14 ------ exercises/practice/space-age/.gitignore | 2 +- exercises/practice/space-age/babel.config.js | 2 +- .../practice/space-age/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/space-age/jest.config.js | 22 +++++++++ exercises/practice/space-age/package.json | 29 +++++++----- exercises/practice/spiral-matrix/.eslintrc | 14 ------ exercises/practice/spiral-matrix/.gitignore | 2 +- .../practice/spiral-matrix/babel.config.js | 2 +- .../practice/spiral-matrix/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/spiral-matrix/jest.config.js | 22 +++++++++ exercises/practice/spiral-matrix/package.json | 29 +++++++----- exercises/practice/square-root/.eslintrc | 14 ------ exercises/practice/square-root/.gitignore | 2 +- .../practice/square-root/babel.config.js | 2 +- .../practice/square-root/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/square-root/jest.config.js | 22 +++++++++ exercises/practice/square-root/package.json | 29 +++++++----- .../practice/state-of-tic-tac-toe/.eslintrc | 14 ------ .../practice/state-of-tic-tac-toe/.gitignore | 2 +- .../state-of-tic-tac-toe/babel.config.js | 2 +- .../state-of-tic-tac-toe/eslint.config.mjs | 45 +++++++++++++++++++ .../state-of-tic-tac-toe/jest.config.js | 22 +++++++++ .../state-of-tic-tac-toe/package.json | 29 +++++++----- exercises/practice/strain/.eslintrc | 14 ------ exercises/practice/strain/.gitignore | 2 +- exercises/practice/strain/babel.config.js | 2 +- exercises/practice/strain/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/strain/jest.config.js | 22 +++++++++ exercises/practice/strain/package.json | 29 +++++++----- exercises/practice/sublist/.eslintrc | 14 ------ exercises/practice/sublist/.gitignore | 2 +- exercises/practice/sublist/babel.config.js | 2 +- exercises/practice/sublist/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/sublist/jest.config.js | 22 +++++++++ exercises/practice/sublist/package.json | 29 +++++++----- exercises/practice/sum-of-multiples/.eslintrc | 14 ------ .../practice/sum-of-multiples/.gitignore | 2 +- .../practice/sum-of-multiples/babel.config.js | 2 +- .../sum-of-multiples/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/sum-of-multiples/jest.config.js | 22 +++++++++ .../practice/sum-of-multiples/package.json | 29 +++++++----- exercises/practice/tournament/.eslintrc | 14 ------ exercises/practice/tournament/.gitignore | 2 +- exercises/practice/tournament/babel.config.js | 2 +- .../practice/tournament/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/tournament/jest.config.js | 22 +++++++++ exercises/practice/tournament/package.json | 29 +++++++----- exercises/practice/transpose/.eslintrc | 14 ------ exercises/practice/transpose/.gitignore | 2 +- exercises/practice/transpose/babel.config.js | 2 +- .../practice/transpose/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/transpose/jest.config.js | 22 +++++++++ exercises/practice/transpose/package.json | 29 +++++++----- exercises/practice/triangle/.eslintrc | 14 ------ exercises/practice/triangle/.gitignore | 2 +- exercises/practice/triangle/babel.config.js | 2 +- exercises/practice/triangle/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/triangle/jest.config.js | 22 +++++++++ exercises/practice/triangle/package.json | 29 +++++++----- exercises/practice/trinary/.eslintrc | 14 ------ exercises/practice/trinary/.gitignore | 2 +- exercises/practice/trinary/babel.config.js | 2 +- exercises/practice/trinary/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/trinary/jest.config.js | 22 +++++++++ exercises/practice/trinary/package.json | 29 +++++++----- exercises/practice/twelve-days/.eslintrc | 14 ------ exercises/practice/twelve-days/.gitignore | 2 +- .../practice/twelve-days/babel.config.js | 2 +- .../practice/twelve-days/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/twelve-days/jest.config.js | 22 +++++++++ exercises/practice/twelve-days/package.json | 29 +++++++----- exercises/practice/two-bucket/.eslintrc | 14 ------ exercises/practice/two-bucket/.gitignore | 2 +- exercises/practice/two-bucket/babel.config.js | 2 +- .../practice/two-bucket/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/two-bucket/jest.config.js | 22 +++++++++ exercises/practice/two-bucket/package.json | 29 +++++++----- exercises/practice/two-fer/.eslintrc | 14 ------ exercises/practice/two-fer/.gitignore | 2 +- exercises/practice/two-fer/babel.config.js | 2 +- exercises/practice/two-fer/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/two-fer/jest.config.js | 22 +++++++++ exercises/practice/two-fer/package.json | 29 +++++++----- .../variable-length-quantity/.eslintrc | 14 ------ .../variable-length-quantity/.gitignore | 2 +- .../variable-length-quantity/babel.config.js | 2 +- .../eslint.config.mjs | 45 +++++++++++++++++++ .../variable-length-quantity/jest.config.js | 22 +++++++++ .../variable-length-quantity/package.json | 29 +++++++----- exercises/practice/word-count/.eslintrc | 14 ------ exercises/practice/word-count/.gitignore | 2 +- exercises/practice/word-count/babel.config.js | 2 +- .../practice/word-count/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/word-count/jest.config.js | 22 +++++++++ exercises/practice/word-count/package.json | 29 +++++++----- exercises/practice/word-search/.eslintrc | 14 ------ exercises/practice/word-search/.gitignore | 2 +- .../practice/word-search/babel.config.js | 2 +- .../practice/word-search/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/word-search/jest.config.js | 22 +++++++++ exercises/practice/word-search/package.json | 29 +++++++----- exercises/practice/wordy/.eslintrc | 14 ------ exercises/practice/wordy/.gitignore | 2 +- exercises/practice/wordy/babel.config.js | 2 +- exercises/practice/wordy/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/wordy/jest.config.js | 22 +++++++++ exercises/practice/wordy/package.json | 29 +++++++----- exercises/practice/yacht/.eslintrc | 14 ------ exercises/practice/yacht/.gitignore | 2 +- exercises/practice/yacht/babel.config.js | 2 +- exercises/practice/yacht/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/yacht/jest.config.js | 22 +++++++++ exercises/practice/yacht/package.json | 29 +++++++----- exercises/practice/zebra-puzzle/.eslintrc | 14 ------ exercises/practice/zebra-puzzle/.gitignore | 2 +- .../practice/zebra-puzzle/babel.config.js | 2 +- .../practice/zebra-puzzle/eslint.config.mjs | 45 +++++++++++++++++++ .../practice/zebra-puzzle/jest.config.js | 22 +++++++++ exercises/practice/zebra-puzzle/package.json | 29 +++++++----- exercises/practice/zipper/.eslintrc | 14 ------ exercises/practice/zipper/.gitignore | 2 +- exercises/practice/zipper/babel.config.js | 2 +- exercises/practice/zipper/eslint.config.mjs | 45 +++++++++++++++++++ exercises/practice/zipper/jest.config.js | 22 +++++++++ exercises/practice/zipper/package.json | 29 +++++++----- 938 files changed, 13453 insertions(+), 4370 deletions(-) create mode 100644 exercise-package.json delete mode 100644 exercises/concept/amusement-park/.eslintrc create mode 100644 exercises/concept/amusement-park/eslint.config.mjs create mode 100644 exercises/concept/amusement-park/jest.config.js delete mode 100644 exercises/concept/annalyns-infiltration/.eslintrc create mode 100644 exercises/concept/annalyns-infiltration/eslint.config.mjs create mode 100644 exercises/concept/annalyns-infiltration/jest.config.js delete mode 100644 exercises/concept/bird-watcher/.eslintrc create mode 100644 exercises/concept/bird-watcher/eslint.config.mjs create mode 100644 exercises/concept/bird-watcher/jest.config.js delete mode 100644 exercises/concept/coordinate-transformation/.eslintrc create mode 100644 exercises/concept/coordinate-transformation/eslint.config.mjs create mode 100644 exercises/concept/coordinate-transformation/jest.config.js delete mode 100644 exercises/concept/custom-signs/.eslintrc create mode 100644 exercises/concept/custom-signs/eslint.config.mjs create mode 100644 exercises/concept/custom-signs/jest.config.js delete mode 100644 exercises/concept/elyses-analytic-enchantments/.eslintrc create mode 100644 exercises/concept/elyses-analytic-enchantments/eslint.config.mjs create mode 100644 exercises/concept/elyses-analytic-enchantments/jest.config.js delete mode 100644 exercises/concept/elyses-destructured-enchantments/.eslintrc create mode 100644 exercises/concept/elyses-destructured-enchantments/eslint.config.mjs create mode 100644 exercises/concept/elyses-destructured-enchantments/jest.config.js delete mode 100644 exercises/concept/elyses-enchantments/.eslintrc create mode 100644 exercises/concept/elyses-enchantments/eslint.config.mjs create mode 100644 exercises/concept/elyses-enchantments/jest.config.js delete mode 100644 exercises/concept/elyses-looping-enchantments/.eslintrc create mode 100644 exercises/concept/elyses-looping-enchantments/eslint.config.mjs create mode 100644 exercises/concept/elyses-looping-enchantments/jest.config.js delete mode 100644 exercises/concept/elyses-transformative-enchantments/.eslintrc create mode 100644 exercises/concept/elyses-transformative-enchantments/eslint.config.mjs create mode 100644 exercises/concept/elyses-transformative-enchantments/jest.config.js delete mode 100644 exercises/concept/factory-sensors/.eslintrc create mode 100644 exercises/concept/factory-sensors/eslint.config.mjs create mode 100644 exercises/concept/factory-sensors/jest.config.js delete mode 100644 exercises/concept/freelancer-rates/.eslintrc create mode 100644 exercises/concept/freelancer-rates/eslint.config.mjs create mode 100644 exercises/concept/freelancer-rates/jest.config.js delete mode 100644 exercises/concept/fruit-picker/.eslintrc create mode 100644 exercises/concept/fruit-picker/eslint.config.mjs create mode 100644 exercises/concept/fruit-picker/jest.config.js delete mode 100644 exercises/concept/high-score-board/.eslintrc create mode 100644 exercises/concept/high-score-board/eslint.config.mjs create mode 100644 exercises/concept/high-score-board/jest.config.js delete mode 100644 exercises/concept/lasagna-master/.eslintrc create mode 100644 exercises/concept/lasagna-master/eslint.config.mjs create mode 100644 exercises/concept/lasagna-master/jest.config.js delete mode 100644 exercises/concept/lasagna/.eslintrc create mode 100644 exercises/concept/lasagna/eslint.config.mjs create mode 100644 exercises/concept/lasagna/jest.config.js delete mode 100644 exercises/concept/lucky-numbers/.eslintrc create mode 100644 exercises/concept/lucky-numbers/eslint.config.mjs create mode 100644 exercises/concept/lucky-numbers/jest.config.js delete mode 100644 exercises/concept/mixed-juices/.eslintrc create mode 100644 exercises/concept/mixed-juices/eslint.config.mjs create mode 100644 exercises/concept/mixed-juices/jest.config.js delete mode 100644 exercises/concept/nullability/.eslintrc create mode 100644 exercises/concept/nullability/eslint.config.mjs create mode 100644 exercises/concept/nullability/jest.config.js delete mode 100644 exercises/concept/ozans-playlist/.eslintrc create mode 100644 exercises/concept/ozans-playlist/eslint.config.mjs create mode 100644 exercises/concept/ozans-playlist/jest.config.js delete mode 100644 exercises/concept/pizza-order/.eslintrc create mode 100644 exercises/concept/pizza-order/eslint.config.mjs create mode 100644 exercises/concept/pizza-order/jest.config.js delete mode 100644 exercises/concept/poetry-club-door-policy/.eslintrc create mode 100644 exercises/concept/poetry-club-door-policy/eslint.config.mjs create mode 100644 exercises/concept/poetry-club-door-policy/jest.config.js delete mode 100644 exercises/concept/regular-chatbot/.eslintrc create mode 100644 exercises/concept/regular-chatbot/eslint.config.mjs create mode 100644 exercises/concept/regular-chatbot/jest.config.js delete mode 100644 exercises/concept/translation-service/.eslintignore delete mode 100644 exercises/concept/translation-service/.eslintrc create mode 100644 exercises/concept/translation-service/eslint.config.mjs create mode 100644 exercises/concept/translation-service/jest.config.js delete mode 100644 exercises/concept/vehicle-purchase/.eslintrc create mode 100644 exercises/concept/vehicle-purchase/eslint.config.mjs create mode 100644 exercises/concept/vehicle-purchase/jest.config.js delete mode 100644 exercises/concept/windowing-system/.eslintrc create mode 100644 exercises/concept/windowing-system/eslint.config.mjs create mode 100644 exercises/concept/windowing-system/jest.config.js delete mode 100644 exercises/practice/accumulate/.eslintrc create mode 100644 exercises/practice/accumulate/eslint.config.mjs create mode 100644 exercises/practice/accumulate/jest.config.js delete mode 100644 exercises/practice/acronym/.eslintrc create mode 100644 exercises/practice/acronym/eslint.config.mjs create mode 100644 exercises/practice/acronym/jest.config.js delete mode 100644 exercises/practice/affine-cipher/.eslintrc create mode 100644 exercises/practice/affine-cipher/eslint.config.mjs create mode 100644 exercises/practice/affine-cipher/jest.config.js delete mode 100644 exercises/practice/all-your-base/.eslintrc create mode 100644 exercises/practice/all-your-base/eslint.config.mjs create mode 100644 exercises/practice/all-your-base/jest.config.js delete mode 100644 exercises/practice/allergies/.eslintrc create mode 100644 exercises/practice/allergies/eslint.config.mjs create mode 100644 exercises/practice/allergies/jest.config.js delete mode 100644 exercises/practice/alphametics/.eslintrc create mode 100644 exercises/practice/alphametics/eslint.config.mjs create mode 100644 exercises/practice/alphametics/jest.config.js delete mode 100644 exercises/practice/anagram/.eslintrc create mode 100644 exercises/practice/anagram/eslint.config.mjs create mode 100644 exercises/practice/anagram/jest.config.js delete mode 100644 exercises/practice/armstrong-numbers/.eslintrc create mode 100644 exercises/practice/armstrong-numbers/eslint.config.mjs create mode 100644 exercises/practice/armstrong-numbers/jest.config.js delete mode 100644 exercises/practice/atbash-cipher/.eslintrc create mode 100644 exercises/practice/atbash-cipher/eslint.config.mjs create mode 100644 exercises/practice/atbash-cipher/jest.config.js delete mode 100644 exercises/practice/bank-account/.eslintrc create mode 100644 exercises/practice/bank-account/eslint.config.mjs create mode 100644 exercises/practice/bank-account/jest.config.js delete mode 100644 exercises/practice/beer-song/.eslintrc create mode 100644 exercises/practice/beer-song/eslint.config.mjs create mode 100644 exercises/practice/beer-song/jest.config.js delete mode 100644 exercises/practice/binary-search-tree/.eslintrc create mode 100644 exercises/practice/binary-search-tree/eslint.config.mjs create mode 100644 exercises/practice/binary-search-tree/jest.config.js delete mode 100644 exercises/practice/binary-search/.eslintrc create mode 100644 exercises/practice/binary-search/eslint.config.mjs create mode 100644 exercises/practice/binary-search/jest.config.js delete mode 100644 exercises/practice/binary/.eslintrc create mode 100644 exercises/practice/binary/eslint.config.mjs create mode 100644 exercises/practice/binary/jest.config.js delete mode 100644 exercises/practice/bob/.eslintrc create mode 100644 exercises/practice/bob/eslint.config.mjs create mode 100644 exercises/practice/bob/jest.config.js delete mode 100644 exercises/practice/book-store/.eslintrc create mode 100644 exercises/practice/book-store/eslint.config.mjs create mode 100644 exercises/practice/book-store/jest.config.js delete mode 100644 exercises/practice/bottle-song/.eslintrc create mode 100644 exercises/practice/bottle-song/eslint.config.mjs create mode 100644 exercises/practice/bottle-song/jest.config.js delete mode 100644 exercises/practice/bowling/.eslintrc create mode 100644 exercises/practice/bowling/eslint.config.mjs create mode 100644 exercises/practice/bowling/jest.config.js delete mode 100644 exercises/practice/change/.eslintrc create mode 100644 exercises/practice/change/eslint.config.mjs create mode 100644 exercises/practice/change/jest.config.js delete mode 100644 exercises/practice/circular-buffer/.eslintrc create mode 100644 exercises/practice/circular-buffer/eslint.config.mjs create mode 100644 exercises/practice/circular-buffer/jest.config.js delete mode 100644 exercises/practice/clock/.eslintrc create mode 100644 exercises/practice/clock/eslint.config.mjs create mode 100644 exercises/practice/clock/jest.config.js delete mode 100644 exercises/practice/collatz-conjecture/.eslintrc create mode 100644 exercises/practice/collatz-conjecture/eslint.config.mjs create mode 100644 exercises/practice/collatz-conjecture/jest.config.js delete mode 100644 exercises/practice/complex-numbers/.eslintrc create mode 100644 exercises/practice/complex-numbers/eslint.config.mjs create mode 100644 exercises/practice/complex-numbers/jest.config.js delete mode 100644 exercises/practice/connect/.eslintrc create mode 100644 exercises/practice/connect/eslint.config.mjs create mode 100644 exercises/practice/connect/jest.config.js delete mode 100644 exercises/practice/crypto-square/.eslintrc create mode 100644 exercises/practice/crypto-square/eslint.config.mjs create mode 100644 exercises/practice/crypto-square/jest.config.js delete mode 100644 exercises/practice/custom-set/.eslintrc create mode 100644 exercises/practice/custom-set/eslint.config.mjs create mode 100644 exercises/practice/custom-set/jest.config.js delete mode 100644 exercises/practice/darts/.eslintrc create mode 100644 exercises/practice/darts/eslint.config.mjs create mode 100644 exercises/practice/darts/jest.config.js delete mode 100644 exercises/practice/diamond/.eslintrc create mode 100644 exercises/practice/diamond/eslint.config.mjs create mode 100644 exercises/practice/diamond/jest.config.js delete mode 100644 exercises/practice/difference-of-squares/.eslintrc create mode 100644 exercises/practice/difference-of-squares/eslint.config.mjs create mode 100644 exercises/practice/difference-of-squares/jest.config.js delete mode 100644 exercises/practice/diffie-hellman/.eslintrc create mode 100644 exercises/practice/diffie-hellman/eslint.config.mjs create mode 100644 exercises/practice/diffie-hellman/jest.config.js delete mode 100644 exercises/practice/dnd-character/.eslintrc create mode 100644 exercises/practice/dnd-character/eslint.config.mjs create mode 100644 exercises/practice/dnd-character/jest.config.js delete mode 100644 exercises/practice/dominoes/.eslintrc create mode 100644 exercises/practice/dominoes/eslint.config.mjs create mode 100644 exercises/practice/dominoes/jest.config.js delete mode 100644 exercises/practice/eliuds-eggs/.eslintrc create mode 100644 exercises/practice/eliuds-eggs/eslint.config.mjs create mode 100644 exercises/practice/eliuds-eggs/jest.config.js delete mode 100644 exercises/practice/etl/.eslintrc create mode 100644 exercises/practice/etl/eslint.config.mjs create mode 100644 exercises/practice/etl/jest.config.js delete mode 100644 exercises/practice/flatten-array/.eslintrc create mode 100644 exercises/practice/flatten-array/eslint.config.mjs create mode 100644 exercises/practice/flatten-array/jest.config.js delete mode 100644 exercises/practice/food-chain/.eslintrc create mode 100644 exercises/practice/food-chain/eslint.config.mjs create mode 100644 exercises/practice/food-chain/jest.config.js delete mode 100644 exercises/practice/forth/.eslintrc create mode 100644 exercises/practice/forth/eslint.config.mjs create mode 100644 exercises/practice/forth/jest.config.js delete mode 100644 exercises/practice/gigasecond/.eslintrc create mode 100644 exercises/practice/gigasecond/eslint.config.mjs create mode 100644 exercises/practice/gigasecond/jest.config.js delete mode 100644 exercises/practice/go-counting/.eslintrc create mode 100644 exercises/practice/go-counting/eslint.config.mjs create mode 100644 exercises/practice/go-counting/jest.config.js delete mode 100644 exercises/practice/grade-school/.eslintrc create mode 100644 exercises/practice/grade-school/eslint.config.mjs create mode 100644 exercises/practice/grade-school/jest.config.js delete mode 100644 exercises/practice/grains/.eslintrc create mode 100644 exercises/practice/grains/eslint.config.mjs create mode 100644 exercises/practice/grains/jest.config.js delete mode 100644 exercises/practice/grep/.eslintrc create mode 100644 exercises/practice/grep/eslint.config.mjs create mode 100644 exercises/practice/grep/jest.config.js delete mode 100644 exercises/practice/hamming/.eslintrc create mode 100644 exercises/practice/hamming/eslint.config.mjs create mode 100644 exercises/practice/hamming/jest.config.js delete mode 100644 exercises/practice/hello-world/.eslintrc create mode 100644 exercises/practice/hello-world/eslint.config.mjs create mode 100644 exercises/practice/hello-world/jest.config.js delete mode 100644 exercises/practice/hexadecimal/.eslintrc create mode 100644 exercises/practice/hexadecimal/eslint.config.mjs create mode 100644 exercises/practice/hexadecimal/jest.config.js delete mode 100644 exercises/practice/high-scores/.eslintrc create mode 100644 exercises/practice/high-scores/eslint.config.mjs create mode 100644 exercises/practice/high-scores/jest.config.js delete mode 100644 exercises/practice/house/.eslintrc create mode 100644 exercises/practice/house/eslint.config.mjs create mode 100644 exercises/practice/house/jest.config.js delete mode 100644 exercises/practice/isbn-verifier/.eslintrc create mode 100644 exercises/practice/isbn-verifier/eslint.config.mjs create mode 100644 exercises/practice/isbn-verifier/jest.config.js delete mode 100644 exercises/practice/isogram/.eslintrc create mode 100644 exercises/practice/isogram/eslint.config.mjs create mode 100644 exercises/practice/isogram/jest.config.js delete mode 100644 exercises/practice/kindergarten-garden/.eslintrc create mode 100644 exercises/practice/kindergarten-garden/eslint.config.mjs create mode 100644 exercises/practice/kindergarten-garden/jest.config.js delete mode 100644 exercises/practice/knapsack/.eslintrc create mode 100644 exercises/practice/knapsack/eslint.config.mjs create mode 100644 exercises/practice/knapsack/jest.config.js delete mode 100644 exercises/practice/largest-series-product/.eslintrc create mode 100644 exercises/practice/largest-series-product/eslint.config.mjs create mode 100644 exercises/practice/largest-series-product/jest.config.js delete mode 100644 exercises/practice/leap/.eslintrc create mode 100644 exercises/practice/leap/eslint.config.mjs create mode 100644 exercises/practice/leap/jest.config.js delete mode 100644 exercises/practice/ledger/.eslintrc create mode 100644 exercises/practice/ledger/eslint.config.mjs create mode 100644 exercises/practice/ledger/jest.config.js delete mode 100644 exercises/practice/lens-person/.eslintrc create mode 100644 exercises/practice/lens-person/eslint.config.mjs create mode 100644 exercises/practice/lens-person/jest.config.js delete mode 100644 exercises/practice/linked-list/.eslintrc create mode 100644 exercises/practice/linked-list/eslint.config.mjs create mode 100644 exercises/practice/linked-list/jest.config.js delete mode 100644 exercises/practice/list-ops/.eslintrc create mode 100644 exercises/practice/list-ops/eslint.config.mjs create mode 100644 exercises/practice/list-ops/jest.config.js delete mode 100644 exercises/practice/luhn/.eslintrc create mode 100644 exercises/practice/luhn/eslint.config.mjs create mode 100644 exercises/practice/luhn/jest.config.js delete mode 100644 exercises/practice/markdown/.eslintrc create mode 100644 exercises/practice/markdown/eslint.config.mjs create mode 100644 exercises/practice/markdown/jest.config.js delete mode 100644 exercises/practice/matching-brackets/.eslintrc create mode 100644 exercises/practice/matching-brackets/eslint.config.mjs create mode 100644 exercises/practice/matching-brackets/jest.config.js delete mode 100644 exercises/practice/matrix/.eslintrc create mode 100644 exercises/practice/matrix/eslint.config.mjs create mode 100644 exercises/practice/matrix/jest.config.js delete mode 100644 exercises/practice/meetup/.eslintrc create mode 100644 exercises/practice/meetup/eslint.config.mjs create mode 100644 exercises/practice/meetup/jest.config.js delete mode 100644 exercises/practice/micro-blog/.eslintrc create mode 100644 exercises/practice/micro-blog/eslint.config.mjs create mode 100644 exercises/practice/micro-blog/jest.config.js delete mode 100644 exercises/practice/minesweeper/.eslintrc create mode 100644 exercises/practice/minesweeper/eslint.config.mjs create mode 100644 exercises/practice/minesweeper/jest.config.js delete mode 100644 exercises/practice/nth-prime/.eslintrc create mode 100644 exercises/practice/nth-prime/eslint.config.mjs create mode 100644 exercises/practice/nth-prime/jest.config.js delete mode 100644 exercises/practice/nucleotide-count/.eslintrc create mode 100644 exercises/practice/nucleotide-count/eslint.config.mjs create mode 100644 exercises/practice/nucleotide-count/jest.config.js delete mode 100644 exercises/practice/ocr-numbers/.eslintrc create mode 100644 exercises/practice/ocr-numbers/eslint.config.mjs create mode 100644 exercises/practice/ocr-numbers/jest.config.js delete mode 100644 exercises/practice/octal/.eslintrc create mode 100644 exercises/practice/octal/eslint.config.mjs create mode 100644 exercises/practice/octal/jest.config.js delete mode 100644 exercises/practice/palindrome-products/.eslintrc create mode 100644 exercises/practice/palindrome-products/eslint.config.mjs create mode 100644 exercises/practice/palindrome-products/jest.config.js delete mode 100644 exercises/practice/pangram/.eslintrc create mode 100644 exercises/practice/pangram/eslint.config.mjs create mode 100644 exercises/practice/pangram/jest.config.js delete mode 100644 exercises/practice/parallel-letter-frequency/.eslintrc create mode 100644 exercises/practice/parallel-letter-frequency/eslint.config.mjs create mode 100644 exercises/practice/parallel-letter-frequency/jest.config.js delete mode 100644 exercises/practice/pascals-triangle/.eslintrc create mode 100644 exercises/practice/pascals-triangle/eslint.config.mjs create mode 100644 exercises/practice/pascals-triangle/jest.config.js delete mode 100644 exercises/practice/perfect-numbers/.eslintrc create mode 100644 exercises/practice/perfect-numbers/eslint.config.mjs create mode 100644 exercises/practice/perfect-numbers/jest.config.js delete mode 100644 exercises/practice/phone-number/.eslintrc create mode 100644 exercises/practice/phone-number/eslint.config.mjs create mode 100644 exercises/practice/phone-number/jest.config.js delete mode 100644 exercises/practice/pig-latin/.eslintrc create mode 100644 exercises/practice/pig-latin/eslint.config.mjs create mode 100644 exercises/practice/pig-latin/jest.config.js delete mode 100644 exercises/practice/point-mutations/.eslintrc create mode 100644 exercises/practice/point-mutations/eslint.config.mjs create mode 100644 exercises/practice/point-mutations/jest.config.js delete mode 100644 exercises/practice/poker/.eslintrc create mode 100644 exercises/practice/poker/eslint.config.mjs create mode 100644 exercises/practice/poker/jest.config.js delete mode 100644 exercises/practice/prime-factors/.eslintrc create mode 100644 exercises/practice/prime-factors/eslint.config.mjs create mode 100644 exercises/practice/prime-factors/jest.config.js delete mode 100644 exercises/practice/promises/.eslintrc create mode 100644 exercises/practice/promises/eslint.config.mjs create mode 100644 exercises/practice/promises/jest.config.js delete mode 100644 exercises/practice/protein-translation/.eslintrc create mode 100644 exercises/practice/protein-translation/eslint.config.mjs create mode 100644 exercises/practice/protein-translation/jest.config.js delete mode 100644 exercises/practice/proverb/.eslintrc create mode 100644 exercises/practice/proverb/eslint.config.mjs create mode 100644 exercises/practice/proverb/jest.config.js delete mode 100644 exercises/practice/pythagorean-triplet/.eslintrc create mode 100644 exercises/practice/pythagorean-triplet/eslint.config.mjs create mode 100644 exercises/practice/pythagorean-triplet/jest.config.js delete mode 100644 exercises/practice/queen-attack/.eslintrc create mode 100644 exercises/practice/queen-attack/eslint.config.mjs create mode 100644 exercises/practice/queen-attack/jest.config.js delete mode 100644 exercises/practice/rail-fence-cipher/.eslintrc create mode 100644 exercises/practice/rail-fence-cipher/eslint.config.mjs create mode 100644 exercises/practice/rail-fence-cipher/jest.config.js delete mode 100644 exercises/practice/raindrops/.eslintrc create mode 100644 exercises/practice/raindrops/eslint.config.mjs create mode 100644 exercises/practice/raindrops/jest.config.js delete mode 100644 exercises/practice/rational-numbers/.eslintrc create mode 100644 exercises/practice/rational-numbers/eslint.config.mjs create mode 100644 exercises/practice/rational-numbers/jest.config.js delete mode 100644 exercises/practice/react/.eslintrc create mode 100644 exercises/practice/react/eslint.config.mjs create mode 100644 exercises/practice/react/jest.config.js delete mode 100644 exercises/practice/rectangles/.eslintrc create mode 100644 exercises/practice/rectangles/eslint.config.mjs create mode 100644 exercises/practice/rectangles/jest.config.js delete mode 100644 exercises/practice/resistor-color-duo/.eslintrc create mode 100644 exercises/practice/resistor-color-duo/eslint.config.mjs create mode 100644 exercises/practice/resistor-color-duo/jest.config.js delete mode 100644 exercises/practice/resistor-color-trio/.eslintrc create mode 100644 exercises/practice/resistor-color-trio/eslint.config.mjs create mode 100644 exercises/practice/resistor-color-trio/jest.config.js delete mode 100644 exercises/practice/resistor-color/.eslintrc create mode 100644 exercises/practice/resistor-color/eslint.config.mjs create mode 100644 exercises/practice/resistor-color/jest.config.js delete mode 100644 exercises/practice/rest-api/.eslintrc create mode 100644 exercises/practice/rest-api/eslint.config.mjs create mode 100644 exercises/practice/rest-api/jest.config.js delete mode 100644 exercises/practice/reverse-string/.eslintrc create mode 100644 exercises/practice/reverse-string/eslint.config.mjs create mode 100644 exercises/practice/reverse-string/jest.config.js delete mode 100644 exercises/practice/rna-transcription/.eslintrc create mode 100644 exercises/practice/rna-transcription/eslint.config.mjs create mode 100644 exercises/practice/rna-transcription/jest.config.js delete mode 100644 exercises/practice/robot-name/.eslintrc create mode 100644 exercises/practice/robot-name/eslint.config.mjs create mode 100644 exercises/practice/robot-name/jest.config.js delete mode 100644 exercises/practice/robot-simulator/.eslintrc create mode 100644 exercises/practice/robot-simulator/eslint.config.mjs create mode 100644 exercises/practice/robot-simulator/jest.config.js delete mode 100644 exercises/practice/roman-numerals/.eslintrc create mode 100644 exercises/practice/roman-numerals/eslint.config.mjs create mode 100644 exercises/practice/roman-numerals/jest.config.js delete mode 100644 exercises/practice/rotational-cipher/.eslintrc create mode 100644 exercises/practice/rotational-cipher/eslint.config.mjs create mode 100644 exercises/practice/rotational-cipher/jest.config.js delete mode 100644 exercises/practice/run-length-encoding/.eslintrc create mode 100644 exercises/practice/run-length-encoding/eslint.config.mjs create mode 100644 exercises/practice/run-length-encoding/jest.config.js delete mode 100644 exercises/practice/saddle-points/.eslintrc create mode 100644 exercises/practice/saddle-points/eslint.config.mjs create mode 100644 exercises/practice/saddle-points/jest.config.js delete mode 100644 exercises/practice/satellite/.eslintrc create mode 100644 exercises/practice/satellite/eslint.config.mjs create mode 100644 exercises/practice/satellite/jest.config.js delete mode 100644 exercises/practice/say/.eslintrc create mode 100644 exercises/practice/say/eslint.config.mjs create mode 100644 exercises/practice/say/jest.config.js delete mode 100644 exercises/practice/scale-generator/.eslintrc create mode 100644 exercises/practice/scale-generator/eslint.config.mjs create mode 100644 exercises/practice/scale-generator/jest.config.js delete mode 100644 exercises/practice/scrabble-score/.eslintrc create mode 100644 exercises/practice/scrabble-score/eslint.config.mjs create mode 100644 exercises/practice/scrabble-score/jest.config.js delete mode 100644 exercises/practice/secret-handshake/.eslintrc create mode 100644 exercises/practice/secret-handshake/eslint.config.mjs create mode 100644 exercises/practice/secret-handshake/jest.config.js delete mode 100644 exercises/practice/series/.eslintrc create mode 100644 exercises/practice/series/eslint.config.mjs create mode 100644 exercises/practice/series/jest.config.js delete mode 100644 exercises/practice/sieve/.eslintrc create mode 100644 exercises/practice/sieve/eslint.config.mjs create mode 100644 exercises/practice/sieve/jest.config.js delete mode 100644 exercises/practice/simple-cipher/.eslintrc create mode 100644 exercises/practice/simple-cipher/eslint.config.mjs create mode 100644 exercises/practice/simple-cipher/jest.config.js delete mode 100644 exercises/practice/simple-linked-list/.eslintrc create mode 100644 exercises/practice/simple-linked-list/eslint.config.mjs create mode 100644 exercises/practice/simple-linked-list/jest.config.js delete mode 100644 exercises/practice/space-age/.eslintrc create mode 100644 exercises/practice/space-age/eslint.config.mjs create mode 100644 exercises/practice/space-age/jest.config.js delete mode 100644 exercises/practice/spiral-matrix/.eslintrc create mode 100644 exercises/practice/spiral-matrix/eslint.config.mjs create mode 100644 exercises/practice/spiral-matrix/jest.config.js delete mode 100644 exercises/practice/square-root/.eslintrc create mode 100644 exercises/practice/square-root/eslint.config.mjs create mode 100644 exercises/practice/square-root/jest.config.js delete mode 100644 exercises/practice/state-of-tic-tac-toe/.eslintrc create mode 100644 exercises/practice/state-of-tic-tac-toe/eslint.config.mjs create mode 100644 exercises/practice/state-of-tic-tac-toe/jest.config.js delete mode 100644 exercises/practice/strain/.eslintrc create mode 100644 exercises/practice/strain/eslint.config.mjs create mode 100644 exercises/practice/strain/jest.config.js delete mode 100644 exercises/practice/sublist/.eslintrc create mode 100644 exercises/practice/sublist/eslint.config.mjs create mode 100644 exercises/practice/sublist/jest.config.js delete mode 100644 exercises/practice/sum-of-multiples/.eslintrc create mode 100644 exercises/practice/sum-of-multiples/eslint.config.mjs create mode 100644 exercises/practice/sum-of-multiples/jest.config.js delete mode 100644 exercises/practice/tournament/.eslintrc create mode 100644 exercises/practice/tournament/eslint.config.mjs create mode 100644 exercises/practice/tournament/jest.config.js delete mode 100644 exercises/practice/transpose/.eslintrc create mode 100644 exercises/practice/transpose/eslint.config.mjs create mode 100644 exercises/practice/transpose/jest.config.js delete mode 100644 exercises/practice/triangle/.eslintrc create mode 100644 exercises/practice/triangle/eslint.config.mjs create mode 100644 exercises/practice/triangle/jest.config.js delete mode 100644 exercises/practice/trinary/.eslintrc create mode 100644 exercises/practice/trinary/eslint.config.mjs create mode 100644 exercises/practice/trinary/jest.config.js delete mode 100644 exercises/practice/twelve-days/.eslintrc create mode 100644 exercises/practice/twelve-days/eslint.config.mjs create mode 100644 exercises/practice/twelve-days/jest.config.js delete mode 100644 exercises/practice/two-bucket/.eslintrc create mode 100644 exercises/practice/two-bucket/eslint.config.mjs create mode 100644 exercises/practice/two-bucket/jest.config.js delete mode 100644 exercises/practice/two-fer/.eslintrc create mode 100644 exercises/practice/two-fer/eslint.config.mjs create mode 100644 exercises/practice/two-fer/jest.config.js delete mode 100644 exercises/practice/variable-length-quantity/.eslintrc create mode 100644 exercises/practice/variable-length-quantity/eslint.config.mjs create mode 100644 exercises/practice/variable-length-quantity/jest.config.js delete mode 100644 exercises/practice/word-count/.eslintrc create mode 100644 exercises/practice/word-count/eslint.config.mjs create mode 100644 exercises/practice/word-count/jest.config.js delete mode 100644 exercises/practice/word-search/.eslintrc create mode 100644 exercises/practice/word-search/eslint.config.mjs create mode 100644 exercises/practice/word-search/jest.config.js delete mode 100644 exercises/practice/wordy/.eslintrc create mode 100644 exercises/practice/wordy/eslint.config.mjs create mode 100644 exercises/practice/wordy/jest.config.js delete mode 100644 exercises/practice/yacht/.eslintrc create mode 100644 exercises/practice/yacht/eslint.config.mjs create mode 100644 exercises/practice/yacht/jest.config.js delete mode 100644 exercises/practice/zebra-puzzle/.eslintrc create mode 100644 exercises/practice/zebra-puzzle/eslint.config.mjs create mode 100644 exercises/practice/zebra-puzzle/jest.config.js delete mode 100644 exercises/practice/zipper/.eslintrc create mode 100644 exercises/practice/zipper/eslint.config.mjs create mode 100644 exercises/practice/zipper/jest.config.js diff --git a/exercise-package.json b/exercise-package.json new file mode 100644 index 0000000000..372df8dc6d --- /dev/null +++ b/exercise-package.json @@ -0,0 +1,37 @@ +{ + "name": "@exercism/javascript", + "description": "Exercism exercises in Javascript.", + "author": "Katrina Owen", + "contributors": [ + "Derk-Jan Karrenbeld (https://derk-jan.com)", + "Tejas Bubane (https://tejasbubane.github.io/)" + ], + "private": true, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/exercism/javascript" + }, + "devDependencies": { + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", + "jest": "^29.7.0" + }, + "dependencies": {}, + "scripts": { + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" +} diff --git a/exercises/concept/amusement-park/.eslintrc b/exercises/concept/amusement-park/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/amusement-park/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/amusement-park/.gitignore b/exercises/concept/amusement-park/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/amusement-park/.gitignore +++ b/exercises/concept/amusement-park/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/amusement-park/babel.config.js b/exercises/concept/amusement-park/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/amusement-park/babel.config.js +++ b/exercises/concept/amusement-park/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/amusement-park/eslint.config.mjs b/exercises/concept/amusement-park/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/amusement-park/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/amusement-park/jest.config.js b/exercises/concept/amusement-park/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/amusement-park/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/amusement-park/package.json b/exercises/concept/amusement-park/package.json index 0c90355077..1262d7b815 100644 --- a/exercises/concept/amusement-park/package.json +++ b/exercises/concept/amusement-park/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/amusement-park" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/annalyns-infiltration/.eslintrc b/exercises/concept/annalyns-infiltration/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/annalyns-infiltration/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/annalyns-infiltration/.gitignore b/exercises/concept/annalyns-infiltration/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/annalyns-infiltration/.gitignore +++ b/exercises/concept/annalyns-infiltration/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/annalyns-infiltration/babel.config.js b/exercises/concept/annalyns-infiltration/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/annalyns-infiltration/babel.config.js +++ b/exercises/concept/annalyns-infiltration/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/annalyns-infiltration/eslint.config.mjs b/exercises/concept/annalyns-infiltration/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/annalyns-infiltration/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/annalyns-infiltration/jest.config.js b/exercises/concept/annalyns-infiltration/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/annalyns-infiltration/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/annalyns-infiltration/package.json b/exercises/concept/annalyns-infiltration/package.json index 9b97ecff45..096d316536 100644 --- a/exercises/concept/annalyns-infiltration/package.json +++ b/exercises/concept/annalyns-infiltration/package.json @@ -13,20 +13,25 @@ "directory": "exercises/concept/annalyns-infiltration" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/bird-watcher/.eslintrc b/exercises/concept/bird-watcher/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/bird-watcher/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/bird-watcher/.gitignore b/exercises/concept/bird-watcher/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/bird-watcher/.gitignore +++ b/exercises/concept/bird-watcher/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/bird-watcher/babel.config.js b/exercises/concept/bird-watcher/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/bird-watcher/babel.config.js +++ b/exercises/concept/bird-watcher/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/bird-watcher/eslint.config.mjs b/exercises/concept/bird-watcher/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/bird-watcher/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/bird-watcher/jest.config.js b/exercises/concept/bird-watcher/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/bird-watcher/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/bird-watcher/package.json b/exercises/concept/bird-watcher/package.json index e1045d7ee1..3a146e13d7 100644 --- a/exercises/concept/bird-watcher/package.json +++ b/exercises/concept/bird-watcher/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/bird-watcher" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/coordinate-transformation/.eslintrc b/exercises/concept/coordinate-transformation/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/coordinate-transformation/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/coordinate-transformation/.gitignore b/exercises/concept/coordinate-transformation/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/coordinate-transformation/.gitignore +++ b/exercises/concept/coordinate-transformation/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/coordinate-transformation/babel.config.js b/exercises/concept/coordinate-transformation/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/coordinate-transformation/babel.config.js +++ b/exercises/concept/coordinate-transformation/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/coordinate-transformation/eslint.config.mjs b/exercises/concept/coordinate-transformation/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/coordinate-transformation/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/coordinate-transformation/jest.config.js b/exercises/concept/coordinate-transformation/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/coordinate-transformation/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/coordinate-transformation/package.json b/exercises/concept/coordinate-transformation/package.json index c0041f233b..210e580170 100644 --- a/exercises/concept/coordinate-transformation/package.json +++ b/exercises/concept/coordinate-transformation/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/coordinate-transformation" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/custom-signs/.eslintrc b/exercises/concept/custom-signs/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/custom-signs/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/custom-signs/.gitignore b/exercises/concept/custom-signs/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/custom-signs/.gitignore +++ b/exercises/concept/custom-signs/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/custom-signs/babel.config.js b/exercises/concept/custom-signs/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/custom-signs/babel.config.js +++ b/exercises/concept/custom-signs/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/custom-signs/eslint.config.mjs b/exercises/concept/custom-signs/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/custom-signs/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/custom-signs/jest.config.js b/exercises/concept/custom-signs/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/custom-signs/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/custom-signs/package.json b/exercises/concept/custom-signs/package.json index d905219baf..62d08a124a 100644 --- a/exercises/concept/custom-signs/package.json +++ b/exercises/concept/custom-signs/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/custom-signs" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/elyses-analytic-enchantments/.eslintrc b/exercises/concept/elyses-analytic-enchantments/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/elyses-analytic-enchantments/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/elyses-analytic-enchantments/.gitignore b/exercises/concept/elyses-analytic-enchantments/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/elyses-analytic-enchantments/.gitignore +++ b/exercises/concept/elyses-analytic-enchantments/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/elyses-analytic-enchantments/babel.config.js b/exercises/concept/elyses-analytic-enchantments/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/elyses-analytic-enchantments/babel.config.js +++ b/exercises/concept/elyses-analytic-enchantments/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/elyses-analytic-enchantments/eslint.config.mjs b/exercises/concept/elyses-analytic-enchantments/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/elyses-analytic-enchantments/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/elyses-analytic-enchantments/jest.config.js b/exercises/concept/elyses-analytic-enchantments/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/elyses-analytic-enchantments/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/elyses-analytic-enchantments/package.json b/exercises/concept/elyses-analytic-enchantments/package.json index 178cb9dadb..7656e70464 100644 --- a/exercises/concept/elyses-analytic-enchantments/package.json +++ b/exercises/concept/elyses-analytic-enchantments/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/elyses-analytic-enchantments" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/elyses-destructured-enchantments/.eslintrc b/exercises/concept/elyses-destructured-enchantments/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/elyses-destructured-enchantments/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/elyses-destructured-enchantments/.gitignore b/exercises/concept/elyses-destructured-enchantments/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/elyses-destructured-enchantments/.gitignore +++ b/exercises/concept/elyses-destructured-enchantments/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/elyses-destructured-enchantments/babel.config.js b/exercises/concept/elyses-destructured-enchantments/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/elyses-destructured-enchantments/babel.config.js +++ b/exercises/concept/elyses-destructured-enchantments/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/elyses-destructured-enchantments/eslint.config.mjs b/exercises/concept/elyses-destructured-enchantments/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/elyses-destructured-enchantments/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/elyses-destructured-enchantments/jest.config.js b/exercises/concept/elyses-destructured-enchantments/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/elyses-destructured-enchantments/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/elyses-destructured-enchantments/package.json b/exercises/concept/elyses-destructured-enchantments/package.json index a82a415bc4..1b73e3ddc2 100644 --- a/exercises/concept/elyses-destructured-enchantments/package.json +++ b/exercises/concept/elyses-destructured-enchantments/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/elyses-destructured-enchantments" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/elyses-enchantments/.eslintrc b/exercises/concept/elyses-enchantments/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/elyses-enchantments/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/elyses-enchantments/.gitignore b/exercises/concept/elyses-enchantments/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/elyses-enchantments/.gitignore +++ b/exercises/concept/elyses-enchantments/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/elyses-enchantments/babel.config.js b/exercises/concept/elyses-enchantments/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/elyses-enchantments/babel.config.js +++ b/exercises/concept/elyses-enchantments/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/elyses-enchantments/eslint.config.mjs b/exercises/concept/elyses-enchantments/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/elyses-enchantments/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/elyses-enchantments/jest.config.js b/exercises/concept/elyses-enchantments/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/elyses-enchantments/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/elyses-enchantments/package.json b/exercises/concept/elyses-enchantments/package.json index 2bc9caf1cd..073f1c4b00 100644 --- a/exercises/concept/elyses-enchantments/package.json +++ b/exercises/concept/elyses-enchantments/package.json @@ -13,20 +13,25 @@ "directory": "exercises/concept/elyses-enchantments" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/elyses-looping-enchantments/.eslintrc b/exercises/concept/elyses-looping-enchantments/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/elyses-looping-enchantments/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/elyses-looping-enchantments/.gitignore b/exercises/concept/elyses-looping-enchantments/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/elyses-looping-enchantments/.gitignore +++ b/exercises/concept/elyses-looping-enchantments/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/elyses-looping-enchantments/babel.config.js b/exercises/concept/elyses-looping-enchantments/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/elyses-looping-enchantments/babel.config.js +++ b/exercises/concept/elyses-looping-enchantments/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/elyses-looping-enchantments/eslint.config.mjs b/exercises/concept/elyses-looping-enchantments/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/elyses-looping-enchantments/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/elyses-looping-enchantments/jest.config.js b/exercises/concept/elyses-looping-enchantments/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/elyses-looping-enchantments/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/elyses-looping-enchantments/package.json b/exercises/concept/elyses-looping-enchantments/package.json index 5d8b8500d4..17b90262f9 100644 --- a/exercises/concept/elyses-looping-enchantments/package.json +++ b/exercises/concept/elyses-looping-enchantments/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/elyses-looping-enchantments" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/elyses-transformative-enchantments/.eslintrc b/exercises/concept/elyses-transformative-enchantments/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/elyses-transformative-enchantments/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/elyses-transformative-enchantments/.gitignore b/exercises/concept/elyses-transformative-enchantments/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/elyses-transformative-enchantments/.gitignore +++ b/exercises/concept/elyses-transformative-enchantments/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/elyses-transformative-enchantments/babel.config.js b/exercises/concept/elyses-transformative-enchantments/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/elyses-transformative-enchantments/babel.config.js +++ b/exercises/concept/elyses-transformative-enchantments/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/elyses-transformative-enchantments/eslint.config.mjs b/exercises/concept/elyses-transformative-enchantments/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/elyses-transformative-enchantments/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/elyses-transformative-enchantments/jest.config.js b/exercises/concept/elyses-transformative-enchantments/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/elyses-transformative-enchantments/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/elyses-transformative-enchantments/package.json b/exercises/concept/elyses-transformative-enchantments/package.json index b7c039d366..640ccb4f06 100644 --- a/exercises/concept/elyses-transformative-enchantments/package.json +++ b/exercises/concept/elyses-transformative-enchantments/package.json @@ -14,20 +14,25 @@ "directory": "exercises/concept/elyses-transformative-enchantments" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/factory-sensors/.eslintrc b/exercises/concept/factory-sensors/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/factory-sensors/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/factory-sensors/.gitignore b/exercises/concept/factory-sensors/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/factory-sensors/.gitignore +++ b/exercises/concept/factory-sensors/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/factory-sensors/babel.config.js b/exercises/concept/factory-sensors/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/factory-sensors/babel.config.js +++ b/exercises/concept/factory-sensors/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/factory-sensors/eslint.config.mjs b/exercises/concept/factory-sensors/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/factory-sensors/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/factory-sensors/jest.config.js b/exercises/concept/factory-sensors/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/factory-sensors/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/factory-sensors/package.json b/exercises/concept/factory-sensors/package.json index 6b58ee10a4..ddae5d117b 100644 --- a/exercises/concept/factory-sensors/package.json +++ b/exercises/concept/factory-sensors/package.json @@ -9,20 +9,25 @@ "directory": "exercises/concept/factory-sensors" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/freelancer-rates/.eslintrc b/exercises/concept/freelancer-rates/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/freelancer-rates/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/freelancer-rates/.gitignore b/exercises/concept/freelancer-rates/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/freelancer-rates/.gitignore +++ b/exercises/concept/freelancer-rates/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/freelancer-rates/babel.config.js b/exercises/concept/freelancer-rates/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/freelancer-rates/babel.config.js +++ b/exercises/concept/freelancer-rates/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/freelancer-rates/eslint.config.mjs b/exercises/concept/freelancer-rates/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/freelancer-rates/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/freelancer-rates/jest.config.js b/exercises/concept/freelancer-rates/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/freelancer-rates/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/freelancer-rates/package.json b/exercises/concept/freelancer-rates/package.json index a3942ea2ff..22f60823f7 100644 --- a/exercises/concept/freelancer-rates/package.json +++ b/exercises/concept/freelancer-rates/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/freelancer-rates" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/fruit-picker/.eslintrc b/exercises/concept/fruit-picker/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/fruit-picker/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/fruit-picker/.gitignore b/exercises/concept/fruit-picker/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/fruit-picker/.gitignore +++ b/exercises/concept/fruit-picker/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/fruit-picker/babel.config.js b/exercises/concept/fruit-picker/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/fruit-picker/babel.config.js +++ b/exercises/concept/fruit-picker/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/fruit-picker/eslint.config.mjs b/exercises/concept/fruit-picker/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/fruit-picker/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/fruit-picker/jest.config.js b/exercises/concept/fruit-picker/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/fruit-picker/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/fruit-picker/package.json b/exercises/concept/fruit-picker/package.json index 8217faec53..0fa869382c 100644 --- a/exercises/concept/fruit-picker/package.json +++ b/exercises/concept/fruit-picker/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/fruit-picker" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/high-score-board/.eslintrc b/exercises/concept/high-score-board/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/high-score-board/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/high-score-board/.gitignore b/exercises/concept/high-score-board/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/high-score-board/.gitignore +++ b/exercises/concept/high-score-board/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/high-score-board/babel.config.js b/exercises/concept/high-score-board/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/high-score-board/babel.config.js +++ b/exercises/concept/high-score-board/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/high-score-board/eslint.config.mjs b/exercises/concept/high-score-board/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/high-score-board/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/high-score-board/jest.config.js b/exercises/concept/high-score-board/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/high-score-board/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/high-score-board/package.json b/exercises/concept/high-score-board/package.json index 694a215948..a318862fd2 100644 --- a/exercises/concept/high-score-board/package.json +++ b/exercises/concept/high-score-board/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/high-score-board" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/lasagna-master/.eslintrc b/exercises/concept/lasagna-master/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/lasagna-master/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/lasagna-master/.gitignore b/exercises/concept/lasagna-master/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/lasagna-master/.gitignore +++ b/exercises/concept/lasagna-master/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/lasagna-master/babel.config.js b/exercises/concept/lasagna-master/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/lasagna-master/babel.config.js +++ b/exercises/concept/lasagna-master/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/lasagna-master/eslint.config.mjs b/exercises/concept/lasagna-master/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/lasagna-master/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/lasagna-master/jest.config.js b/exercises/concept/lasagna-master/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/lasagna-master/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/lasagna-master/package.json b/exercises/concept/lasagna-master/package.json index 22f4c5aa6f..5f15b86b67 100644 --- a/exercises/concept/lasagna-master/package.json +++ b/exercises/concept/lasagna-master/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/lasagna-master" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/lasagna/.eslintrc b/exercises/concept/lasagna/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/lasagna/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/lasagna/.gitignore b/exercises/concept/lasagna/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/lasagna/.gitignore +++ b/exercises/concept/lasagna/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/lasagna/babel.config.js b/exercises/concept/lasagna/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/lasagna/babel.config.js +++ b/exercises/concept/lasagna/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/lasagna/eslint.config.mjs b/exercises/concept/lasagna/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/lasagna/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/lasagna/jest.config.js b/exercises/concept/lasagna/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/lasagna/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/lasagna/package.json b/exercises/concept/lasagna/package.json index e461739ca4..08ed291475 100644 --- a/exercises/concept/lasagna/package.json +++ b/exercises/concept/lasagna/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/lasagna" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/lucky-numbers/.eslintrc b/exercises/concept/lucky-numbers/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/lucky-numbers/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/lucky-numbers/.gitignore b/exercises/concept/lucky-numbers/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/lucky-numbers/.gitignore +++ b/exercises/concept/lucky-numbers/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/lucky-numbers/babel.config.js b/exercises/concept/lucky-numbers/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/lucky-numbers/babel.config.js +++ b/exercises/concept/lucky-numbers/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/lucky-numbers/eslint.config.mjs b/exercises/concept/lucky-numbers/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/lucky-numbers/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/lucky-numbers/jest.config.js b/exercises/concept/lucky-numbers/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/lucky-numbers/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/lucky-numbers/package.json b/exercises/concept/lucky-numbers/package.json index 07f222b8db..96268d55ef 100644 --- a/exercises/concept/lucky-numbers/package.json +++ b/exercises/concept/lucky-numbers/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/lucky-numbers" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/mixed-juices/.eslintrc b/exercises/concept/mixed-juices/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/mixed-juices/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/mixed-juices/.gitignore b/exercises/concept/mixed-juices/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/mixed-juices/.gitignore +++ b/exercises/concept/mixed-juices/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/mixed-juices/babel.config.js b/exercises/concept/mixed-juices/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/mixed-juices/babel.config.js +++ b/exercises/concept/mixed-juices/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/mixed-juices/eslint.config.mjs b/exercises/concept/mixed-juices/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/mixed-juices/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/mixed-juices/jest.config.js b/exercises/concept/mixed-juices/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/mixed-juices/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/mixed-juices/package.json b/exercises/concept/mixed-juices/package.json index 9b0012f353..807ac21e34 100644 --- a/exercises/concept/mixed-juices/package.json +++ b/exercises/concept/mixed-juices/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/mixed-juices" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/nullability/.eslintrc b/exercises/concept/nullability/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/nullability/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/nullability/.gitignore b/exercises/concept/nullability/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/nullability/.gitignore +++ b/exercises/concept/nullability/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/nullability/babel.config.js b/exercises/concept/nullability/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/nullability/babel.config.js +++ b/exercises/concept/nullability/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/nullability/eslint.config.mjs b/exercises/concept/nullability/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/nullability/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/nullability/jest.config.js b/exercises/concept/nullability/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/nullability/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/nullability/package.json b/exercises/concept/nullability/package.json index dc5049b900..1c92b18c9a 100644 --- a/exercises/concept/nullability/package.json +++ b/exercises/concept/nullability/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/nullability" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/ozans-playlist/.eslintrc b/exercises/concept/ozans-playlist/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/ozans-playlist/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/ozans-playlist/.gitignore b/exercises/concept/ozans-playlist/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/ozans-playlist/.gitignore +++ b/exercises/concept/ozans-playlist/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/ozans-playlist/babel.config.js b/exercises/concept/ozans-playlist/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/ozans-playlist/babel.config.js +++ b/exercises/concept/ozans-playlist/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/ozans-playlist/eslint.config.mjs b/exercises/concept/ozans-playlist/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/ozans-playlist/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/ozans-playlist/jest.config.js b/exercises/concept/ozans-playlist/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/ozans-playlist/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/ozans-playlist/package.json b/exercises/concept/ozans-playlist/package.json index 68be55d6f2..4ec1af7558 100644 --- a/exercises/concept/ozans-playlist/package.json +++ b/exercises/concept/ozans-playlist/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/ozans-playlist" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/pizza-order/.eslintrc b/exercises/concept/pizza-order/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/pizza-order/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/pizza-order/.gitignore b/exercises/concept/pizza-order/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/pizza-order/.gitignore +++ b/exercises/concept/pizza-order/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/pizza-order/babel.config.js b/exercises/concept/pizza-order/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/pizza-order/babel.config.js +++ b/exercises/concept/pizza-order/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/pizza-order/eslint.config.mjs b/exercises/concept/pizza-order/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/pizza-order/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/pizza-order/jest.config.js b/exercises/concept/pizza-order/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/pizza-order/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/pizza-order/package.json b/exercises/concept/pizza-order/package.json index f8ab9ca4e5..c3bbd8e0bc 100644 --- a/exercises/concept/pizza-order/package.json +++ b/exercises/concept/pizza-order/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/pizza-order" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/poetry-club-door-policy/.eslintrc b/exercises/concept/poetry-club-door-policy/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/poetry-club-door-policy/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/poetry-club-door-policy/.gitignore b/exercises/concept/poetry-club-door-policy/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/poetry-club-door-policy/.gitignore +++ b/exercises/concept/poetry-club-door-policy/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/poetry-club-door-policy/babel.config.js b/exercises/concept/poetry-club-door-policy/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/poetry-club-door-policy/babel.config.js +++ b/exercises/concept/poetry-club-door-policy/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/poetry-club-door-policy/eslint.config.mjs b/exercises/concept/poetry-club-door-policy/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/poetry-club-door-policy/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/poetry-club-door-policy/jest.config.js b/exercises/concept/poetry-club-door-policy/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/poetry-club-door-policy/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/poetry-club-door-policy/package.json b/exercises/concept/poetry-club-door-policy/package.json index 6fcdd641e7..6109fbcf48 100644 --- a/exercises/concept/poetry-club-door-policy/package.json +++ b/exercises/concept/poetry-club-door-policy/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/poetry-club-door-policy" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/regular-chatbot/.eslintrc b/exercises/concept/regular-chatbot/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/regular-chatbot/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/regular-chatbot/.gitignore b/exercises/concept/regular-chatbot/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/regular-chatbot/.gitignore +++ b/exercises/concept/regular-chatbot/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/regular-chatbot/babel.config.js b/exercises/concept/regular-chatbot/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/regular-chatbot/babel.config.js +++ b/exercises/concept/regular-chatbot/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/regular-chatbot/eslint.config.mjs b/exercises/concept/regular-chatbot/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/regular-chatbot/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/regular-chatbot/jest.config.js b/exercises/concept/regular-chatbot/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/regular-chatbot/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/regular-chatbot/package.json b/exercises/concept/regular-chatbot/package.json index 66fbb4cf7e..a62c84a421 100644 --- a/exercises/concept/regular-chatbot/package.json +++ b/exercises/concept/regular-chatbot/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/regular-chatbot" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/translation-service/.eslintignore b/exercises/concept/translation-service/.eslintignore deleted file mode 100644 index 925cb98e75..0000000000 --- a/exercises/concept/translation-service/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -/global.d.ts -/env.d.ts diff --git a/exercises/concept/translation-service/.eslintrc b/exercises/concept/translation-service/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/translation-service/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/translation-service/.gitignore b/exercises/concept/translation-service/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/translation-service/.gitignore +++ b/exercises/concept/translation-service/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/translation-service/babel.config.js b/exercises/concept/translation-service/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/translation-service/babel.config.js +++ b/exercises/concept/translation-service/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/translation-service/eslint.config.mjs b/exercises/concept/translation-service/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/translation-service/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/translation-service/jest.config.js b/exercises/concept/translation-service/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/translation-service/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/translation-service/package.json b/exercises/concept/translation-service/package.json index dce9ed1268..7821aaa701 100644 --- a/exercises/concept/translation-service/package.json +++ b/exercises/concept/translation-service/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/translation-service" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/vehicle-purchase/.eslintrc b/exercises/concept/vehicle-purchase/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/vehicle-purchase/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/vehicle-purchase/.gitignore b/exercises/concept/vehicle-purchase/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/vehicle-purchase/.gitignore +++ b/exercises/concept/vehicle-purchase/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/vehicle-purchase/babel.config.js b/exercises/concept/vehicle-purchase/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/vehicle-purchase/babel.config.js +++ b/exercises/concept/vehicle-purchase/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/vehicle-purchase/eslint.config.mjs b/exercises/concept/vehicle-purchase/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/vehicle-purchase/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/vehicle-purchase/jest.config.js b/exercises/concept/vehicle-purchase/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/vehicle-purchase/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/vehicle-purchase/package.json b/exercises/concept/vehicle-purchase/package.json index 68d03c5384..534ade2558 100644 --- a/exercises/concept/vehicle-purchase/package.json +++ b/exercises/concept/vehicle-purchase/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/vehicle-purchase" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/concept/windowing-system/.eslintrc b/exercises/concept/windowing-system/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/concept/windowing-system/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/concept/windowing-system/.gitignore b/exercises/concept/windowing-system/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/concept/windowing-system/.gitignore +++ b/exercises/concept/windowing-system/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/concept/windowing-system/babel.config.js b/exercises/concept/windowing-system/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/concept/windowing-system/babel.config.js +++ b/exercises/concept/windowing-system/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/concept/windowing-system/eslint.config.mjs b/exercises/concept/windowing-system/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/concept/windowing-system/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/concept/windowing-system/jest.config.js b/exercises/concept/windowing-system/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/concept/windowing-system/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/concept/windowing-system/package.json b/exercises/concept/windowing-system/package.json index 7dfcdaa6d6..c5f6a5d336 100644 --- a/exercises/concept/windowing-system/package.json +++ b/exercises/concept/windowing-system/package.json @@ -10,20 +10,25 @@ "directory": "exercises/concept/windowing-system" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/accumulate/.eslintrc b/exercises/practice/accumulate/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/accumulate/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/accumulate/.gitignore b/exercises/practice/accumulate/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/accumulate/.gitignore +++ b/exercises/practice/accumulate/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/accumulate/babel.config.js b/exercises/practice/accumulate/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/accumulate/babel.config.js +++ b/exercises/practice/accumulate/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/accumulate/eslint.config.mjs b/exercises/practice/accumulate/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/accumulate/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/accumulate/jest.config.js b/exercises/practice/accumulate/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/accumulate/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/accumulate/package.json b/exercises/practice/accumulate/package.json index 04d06de706..4df1bb06e1 100644 --- a/exercises/practice/accumulate/package.json +++ b/exercises/practice/accumulate/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/accumulate" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/acronym/.eslintrc b/exercises/practice/acronym/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/acronym/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/acronym/.gitignore b/exercises/practice/acronym/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/acronym/.gitignore +++ b/exercises/practice/acronym/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/acronym/babel.config.js b/exercises/practice/acronym/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/acronym/babel.config.js +++ b/exercises/practice/acronym/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/acronym/eslint.config.mjs b/exercises/practice/acronym/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/acronym/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/acronym/jest.config.js b/exercises/practice/acronym/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/acronym/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/acronym/package.json b/exercises/practice/acronym/package.json index efb0dbf8bc..ee2470681f 100644 --- a/exercises/practice/acronym/package.json +++ b/exercises/practice/acronym/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/acronym" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/affine-cipher/.eslintrc b/exercises/practice/affine-cipher/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/affine-cipher/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/affine-cipher/.gitignore b/exercises/practice/affine-cipher/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/affine-cipher/.gitignore +++ b/exercises/practice/affine-cipher/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/affine-cipher/babel.config.js b/exercises/practice/affine-cipher/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/affine-cipher/babel.config.js +++ b/exercises/practice/affine-cipher/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/affine-cipher/eslint.config.mjs b/exercises/practice/affine-cipher/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/affine-cipher/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/affine-cipher/jest.config.js b/exercises/practice/affine-cipher/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/affine-cipher/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/affine-cipher/package.json b/exercises/practice/affine-cipher/package.json index 17eaee4818..040cf0d9b0 100644 --- a/exercises/practice/affine-cipher/package.json +++ b/exercises/practice/affine-cipher/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/affine-cipher" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/all-your-base/.eslintrc b/exercises/practice/all-your-base/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/all-your-base/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/all-your-base/.gitignore b/exercises/practice/all-your-base/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/all-your-base/.gitignore +++ b/exercises/practice/all-your-base/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/all-your-base/babel.config.js b/exercises/practice/all-your-base/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/all-your-base/babel.config.js +++ b/exercises/practice/all-your-base/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/all-your-base/eslint.config.mjs b/exercises/practice/all-your-base/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/all-your-base/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/all-your-base/jest.config.js b/exercises/practice/all-your-base/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/all-your-base/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/all-your-base/package.json b/exercises/practice/all-your-base/package.json index 4a612cfe3c..d053ee45e8 100644 --- a/exercises/practice/all-your-base/package.json +++ b/exercises/practice/all-your-base/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/all-your-base" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/allergies/.eslintrc b/exercises/practice/allergies/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/allergies/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/allergies/.gitignore b/exercises/practice/allergies/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/allergies/.gitignore +++ b/exercises/practice/allergies/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/allergies/babel.config.js b/exercises/practice/allergies/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/allergies/babel.config.js +++ b/exercises/practice/allergies/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/allergies/eslint.config.mjs b/exercises/practice/allergies/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/allergies/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/allergies/jest.config.js b/exercises/practice/allergies/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/allergies/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/allergies/package.json b/exercises/practice/allergies/package.json index 5f6c25a427..f4340a64c7 100644 --- a/exercises/practice/allergies/package.json +++ b/exercises/practice/allergies/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/allergies" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/alphametics/.eslintrc b/exercises/practice/alphametics/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/alphametics/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/alphametics/.gitignore b/exercises/practice/alphametics/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/alphametics/.gitignore +++ b/exercises/practice/alphametics/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/alphametics/babel.config.js b/exercises/practice/alphametics/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/alphametics/babel.config.js +++ b/exercises/practice/alphametics/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/alphametics/eslint.config.mjs b/exercises/practice/alphametics/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/alphametics/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/alphametics/jest.config.js b/exercises/practice/alphametics/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/alphametics/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/alphametics/package.json b/exercises/practice/alphametics/package.json index 7c4e40cefd..f2d62b79e7 100644 --- a/exercises/practice/alphametics/package.json +++ b/exercises/practice/alphametics/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/alphametics" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/anagram/.eslintrc b/exercises/practice/anagram/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/anagram/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/anagram/.gitignore b/exercises/practice/anagram/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/anagram/.gitignore +++ b/exercises/practice/anagram/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/anagram/babel.config.js b/exercises/practice/anagram/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/anagram/babel.config.js +++ b/exercises/practice/anagram/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/anagram/eslint.config.mjs b/exercises/practice/anagram/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/anagram/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/anagram/jest.config.js b/exercises/practice/anagram/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/anagram/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/anagram/package.json b/exercises/practice/anagram/package.json index 774b8d8e9c..1aa736b9ea 100644 --- a/exercises/practice/anagram/package.json +++ b/exercises/practice/anagram/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/anagram" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/armstrong-numbers/.eslintrc b/exercises/practice/armstrong-numbers/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/armstrong-numbers/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/armstrong-numbers/.gitignore b/exercises/practice/armstrong-numbers/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/armstrong-numbers/.gitignore +++ b/exercises/practice/armstrong-numbers/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/armstrong-numbers/babel.config.js b/exercises/practice/armstrong-numbers/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/armstrong-numbers/babel.config.js +++ b/exercises/practice/armstrong-numbers/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/armstrong-numbers/eslint.config.mjs b/exercises/practice/armstrong-numbers/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/armstrong-numbers/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/armstrong-numbers/jest.config.js b/exercises/practice/armstrong-numbers/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/armstrong-numbers/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/armstrong-numbers/package.json b/exercises/practice/armstrong-numbers/package.json index c779c9c429..c81656bd5f 100644 --- a/exercises/practice/armstrong-numbers/package.json +++ b/exercises/practice/armstrong-numbers/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/armstrong-numbers" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/atbash-cipher/.eslintrc b/exercises/practice/atbash-cipher/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/atbash-cipher/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/atbash-cipher/.gitignore b/exercises/practice/atbash-cipher/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/atbash-cipher/.gitignore +++ b/exercises/practice/atbash-cipher/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/atbash-cipher/babel.config.js b/exercises/practice/atbash-cipher/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/atbash-cipher/babel.config.js +++ b/exercises/practice/atbash-cipher/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/atbash-cipher/eslint.config.mjs b/exercises/practice/atbash-cipher/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/atbash-cipher/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/atbash-cipher/jest.config.js b/exercises/practice/atbash-cipher/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/atbash-cipher/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/atbash-cipher/package.json b/exercises/practice/atbash-cipher/package.json index 892f25fb3a..800c5bcb46 100644 --- a/exercises/practice/atbash-cipher/package.json +++ b/exercises/practice/atbash-cipher/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/atbash-cipher" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/bank-account/.eslintrc b/exercises/practice/bank-account/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/bank-account/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/bank-account/.gitignore b/exercises/practice/bank-account/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/bank-account/.gitignore +++ b/exercises/practice/bank-account/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/bank-account/babel.config.js b/exercises/practice/bank-account/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/bank-account/babel.config.js +++ b/exercises/practice/bank-account/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/bank-account/eslint.config.mjs b/exercises/practice/bank-account/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/bank-account/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/bank-account/jest.config.js b/exercises/practice/bank-account/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/bank-account/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/bank-account/package.json b/exercises/practice/bank-account/package.json index 52f9aadc70..d1de6f4d20 100644 --- a/exercises/practice/bank-account/package.json +++ b/exercises/practice/bank-account/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/bank-account" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/beer-song/.eslintrc b/exercises/practice/beer-song/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/beer-song/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/beer-song/.gitignore b/exercises/practice/beer-song/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/beer-song/.gitignore +++ b/exercises/practice/beer-song/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/beer-song/babel.config.js b/exercises/practice/beer-song/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/beer-song/babel.config.js +++ b/exercises/practice/beer-song/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/beer-song/eslint.config.mjs b/exercises/practice/beer-song/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/beer-song/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/beer-song/jest.config.js b/exercises/practice/beer-song/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/beer-song/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/beer-song/package.json b/exercises/practice/beer-song/package.json index f782c442b2..026171af02 100644 --- a/exercises/practice/beer-song/package.json +++ b/exercises/practice/beer-song/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/beer-song" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/binary-search-tree/.eslintrc b/exercises/practice/binary-search-tree/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/binary-search-tree/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/binary-search-tree/.gitignore b/exercises/practice/binary-search-tree/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/binary-search-tree/.gitignore +++ b/exercises/practice/binary-search-tree/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/binary-search-tree/babel.config.js b/exercises/practice/binary-search-tree/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/binary-search-tree/babel.config.js +++ b/exercises/practice/binary-search-tree/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/binary-search-tree/eslint.config.mjs b/exercises/practice/binary-search-tree/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/binary-search-tree/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/binary-search-tree/jest.config.js b/exercises/practice/binary-search-tree/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/binary-search-tree/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/binary-search-tree/package.json b/exercises/practice/binary-search-tree/package.json index e7dde4185c..b8a665a5d1 100644 --- a/exercises/practice/binary-search-tree/package.json +++ b/exercises/practice/binary-search-tree/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/binary-search-tree" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/binary-search/.eslintrc b/exercises/practice/binary-search/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/binary-search/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/binary-search/.gitignore b/exercises/practice/binary-search/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/binary-search/.gitignore +++ b/exercises/practice/binary-search/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/binary-search/babel.config.js b/exercises/practice/binary-search/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/binary-search/babel.config.js +++ b/exercises/practice/binary-search/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/binary-search/eslint.config.mjs b/exercises/practice/binary-search/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/binary-search/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/binary-search/jest.config.js b/exercises/practice/binary-search/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/binary-search/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/binary-search/package.json b/exercises/practice/binary-search/package.json index aa8586f0a0..bc4a3dacc9 100644 --- a/exercises/practice/binary-search/package.json +++ b/exercises/practice/binary-search/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/binary-search" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/binary/.eslintrc b/exercises/practice/binary/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/binary/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/binary/.gitignore b/exercises/practice/binary/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/binary/.gitignore +++ b/exercises/practice/binary/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/binary/babel.config.js b/exercises/practice/binary/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/binary/babel.config.js +++ b/exercises/practice/binary/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/binary/eslint.config.mjs b/exercises/practice/binary/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/binary/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/binary/jest.config.js b/exercises/practice/binary/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/binary/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/binary/package.json b/exercises/practice/binary/package.json index 4a7a1a2b99..cd0feb9aeb 100644 --- a/exercises/practice/binary/package.json +++ b/exercises/practice/binary/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/binary" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/bob/.eslintrc b/exercises/practice/bob/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/bob/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/bob/.gitignore b/exercises/practice/bob/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/bob/.gitignore +++ b/exercises/practice/bob/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/bob/babel.config.js b/exercises/practice/bob/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/bob/babel.config.js +++ b/exercises/practice/bob/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/bob/eslint.config.mjs b/exercises/practice/bob/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/bob/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/bob/jest.config.js b/exercises/practice/bob/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/bob/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/bob/package.json b/exercises/practice/bob/package.json index 6f825aca92..66b09b49d7 100644 --- a/exercises/practice/bob/package.json +++ b/exercises/practice/bob/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/bob" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/book-store/.eslintrc b/exercises/practice/book-store/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/book-store/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/book-store/.gitignore b/exercises/practice/book-store/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/book-store/.gitignore +++ b/exercises/practice/book-store/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/book-store/babel.config.js b/exercises/practice/book-store/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/book-store/babel.config.js +++ b/exercises/practice/book-store/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/book-store/eslint.config.mjs b/exercises/practice/book-store/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/book-store/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/book-store/jest.config.js b/exercises/practice/book-store/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/book-store/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/book-store/package.json b/exercises/practice/book-store/package.json index d5a8c92fc8..12ba3fdfb8 100644 --- a/exercises/practice/book-store/package.json +++ b/exercises/practice/book-store/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/book-store" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/bottle-song/.eslintrc b/exercises/practice/bottle-song/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/bottle-song/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/bottle-song/.gitignore b/exercises/practice/bottle-song/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/bottle-song/.gitignore +++ b/exercises/practice/bottle-song/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/bottle-song/babel.config.js b/exercises/practice/bottle-song/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/bottle-song/babel.config.js +++ b/exercises/practice/bottle-song/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/bottle-song/eslint.config.mjs b/exercises/practice/bottle-song/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/bottle-song/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/bottle-song/jest.config.js b/exercises/practice/bottle-song/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/bottle-song/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/bottle-song/package.json b/exercises/practice/bottle-song/package.json index a3a14fb3dc..cf281fe570 100644 --- a/exercises/practice/bottle-song/package.json +++ b/exercises/practice/bottle-song/package.json @@ -15,20 +15,25 @@ "directory": "exercises/practice/bottle-song" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/bowling/.eslintrc b/exercises/practice/bowling/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/bowling/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/bowling/.gitignore b/exercises/practice/bowling/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/bowling/.gitignore +++ b/exercises/practice/bowling/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/bowling/babel.config.js b/exercises/practice/bowling/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/bowling/babel.config.js +++ b/exercises/practice/bowling/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/bowling/eslint.config.mjs b/exercises/practice/bowling/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/bowling/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/bowling/jest.config.js b/exercises/practice/bowling/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/bowling/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/bowling/package.json b/exercises/practice/bowling/package.json index e8559f149c..c820b36326 100644 --- a/exercises/practice/bowling/package.json +++ b/exercises/practice/bowling/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/bowling" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/change/.eslintrc b/exercises/practice/change/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/change/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/change/.gitignore b/exercises/practice/change/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/change/.gitignore +++ b/exercises/practice/change/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/change/babel.config.js b/exercises/practice/change/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/change/babel.config.js +++ b/exercises/practice/change/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/change/eslint.config.mjs b/exercises/practice/change/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/change/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/change/jest.config.js b/exercises/practice/change/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/change/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/change/package.json b/exercises/practice/change/package.json index ab35774ffb..20caca64a7 100644 --- a/exercises/practice/change/package.json +++ b/exercises/practice/change/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/change" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/circular-buffer/.eslintrc b/exercises/practice/circular-buffer/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/circular-buffer/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/circular-buffer/.gitignore b/exercises/practice/circular-buffer/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/circular-buffer/.gitignore +++ b/exercises/practice/circular-buffer/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/circular-buffer/babel.config.js b/exercises/practice/circular-buffer/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/circular-buffer/babel.config.js +++ b/exercises/practice/circular-buffer/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/circular-buffer/eslint.config.mjs b/exercises/practice/circular-buffer/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/circular-buffer/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/circular-buffer/jest.config.js b/exercises/practice/circular-buffer/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/circular-buffer/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/circular-buffer/package.json b/exercises/practice/circular-buffer/package.json index 3dcc40d38a..a31269152e 100644 --- a/exercises/practice/circular-buffer/package.json +++ b/exercises/practice/circular-buffer/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/circular-buffer" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/clock/.eslintrc b/exercises/practice/clock/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/clock/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/clock/.gitignore b/exercises/practice/clock/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/clock/.gitignore +++ b/exercises/practice/clock/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/clock/babel.config.js b/exercises/practice/clock/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/clock/babel.config.js +++ b/exercises/practice/clock/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/clock/eslint.config.mjs b/exercises/practice/clock/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/clock/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/clock/jest.config.js b/exercises/practice/clock/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/clock/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/clock/package.json b/exercises/practice/clock/package.json index d28b1edf49..f54e9d56f1 100644 --- a/exercises/practice/clock/package.json +++ b/exercises/practice/clock/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/clock" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/collatz-conjecture/.eslintrc b/exercises/practice/collatz-conjecture/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/collatz-conjecture/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/collatz-conjecture/.gitignore b/exercises/practice/collatz-conjecture/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/collatz-conjecture/.gitignore +++ b/exercises/practice/collatz-conjecture/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/collatz-conjecture/babel.config.js b/exercises/practice/collatz-conjecture/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/collatz-conjecture/babel.config.js +++ b/exercises/practice/collatz-conjecture/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/collatz-conjecture/eslint.config.mjs b/exercises/practice/collatz-conjecture/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/collatz-conjecture/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/collatz-conjecture/jest.config.js b/exercises/practice/collatz-conjecture/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/collatz-conjecture/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/collatz-conjecture/package.json b/exercises/practice/collatz-conjecture/package.json index 0cb017b70e..f083fb4dfd 100644 --- a/exercises/practice/collatz-conjecture/package.json +++ b/exercises/practice/collatz-conjecture/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/collatz-conjecture" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/complex-numbers/.eslintrc b/exercises/practice/complex-numbers/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/complex-numbers/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/complex-numbers/.gitignore b/exercises/practice/complex-numbers/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/complex-numbers/.gitignore +++ b/exercises/practice/complex-numbers/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/complex-numbers/babel.config.js b/exercises/practice/complex-numbers/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/complex-numbers/babel.config.js +++ b/exercises/practice/complex-numbers/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/complex-numbers/eslint.config.mjs b/exercises/practice/complex-numbers/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/complex-numbers/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/complex-numbers/jest.config.js b/exercises/practice/complex-numbers/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/complex-numbers/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/complex-numbers/package.json b/exercises/practice/complex-numbers/package.json index e099b36f4b..d1d25d6e05 100644 --- a/exercises/practice/complex-numbers/package.json +++ b/exercises/practice/complex-numbers/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/complex-numbers" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/connect/.eslintrc b/exercises/practice/connect/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/connect/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/connect/.gitignore b/exercises/practice/connect/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/connect/.gitignore +++ b/exercises/practice/connect/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/connect/babel.config.js b/exercises/practice/connect/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/connect/babel.config.js +++ b/exercises/practice/connect/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/connect/eslint.config.mjs b/exercises/practice/connect/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/connect/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/connect/jest.config.js b/exercises/practice/connect/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/connect/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/connect/package.json b/exercises/practice/connect/package.json index 5b5b4051d6..82d9b65534 100644 --- a/exercises/practice/connect/package.json +++ b/exercises/practice/connect/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/connect" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/crypto-square/.eslintrc b/exercises/practice/crypto-square/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/crypto-square/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/crypto-square/.gitignore b/exercises/practice/crypto-square/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/crypto-square/.gitignore +++ b/exercises/practice/crypto-square/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/crypto-square/babel.config.js b/exercises/practice/crypto-square/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/crypto-square/babel.config.js +++ b/exercises/practice/crypto-square/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/crypto-square/eslint.config.mjs b/exercises/practice/crypto-square/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/crypto-square/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/crypto-square/jest.config.js b/exercises/practice/crypto-square/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/crypto-square/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/crypto-square/package.json b/exercises/practice/crypto-square/package.json index e705a69fe6..eb00bd920b 100644 --- a/exercises/practice/crypto-square/package.json +++ b/exercises/practice/crypto-square/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/crypto-square" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/custom-set/.eslintrc b/exercises/practice/custom-set/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/custom-set/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/custom-set/.gitignore b/exercises/practice/custom-set/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/custom-set/.gitignore +++ b/exercises/practice/custom-set/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/custom-set/babel.config.js b/exercises/practice/custom-set/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/custom-set/babel.config.js +++ b/exercises/practice/custom-set/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/custom-set/eslint.config.mjs b/exercises/practice/custom-set/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/custom-set/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/custom-set/jest.config.js b/exercises/practice/custom-set/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/custom-set/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/custom-set/package.json b/exercises/practice/custom-set/package.json index 384b5b5803..732bb0a7c8 100644 --- a/exercises/practice/custom-set/package.json +++ b/exercises/practice/custom-set/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/custom-set" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/darts/.eslintrc b/exercises/practice/darts/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/darts/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/darts/.gitignore b/exercises/practice/darts/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/darts/.gitignore +++ b/exercises/practice/darts/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/darts/babel.config.js b/exercises/practice/darts/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/darts/babel.config.js +++ b/exercises/practice/darts/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/darts/eslint.config.mjs b/exercises/practice/darts/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/darts/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/darts/jest.config.js b/exercises/practice/darts/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/darts/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/darts/package.json b/exercises/practice/darts/package.json index 5259675246..50f55771ba 100644 --- a/exercises/practice/darts/package.json +++ b/exercises/practice/darts/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/darts" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/diamond/.eslintrc b/exercises/practice/diamond/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/diamond/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/diamond/.gitignore b/exercises/practice/diamond/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/diamond/.gitignore +++ b/exercises/practice/diamond/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/diamond/babel.config.js b/exercises/practice/diamond/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/diamond/babel.config.js +++ b/exercises/practice/diamond/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/diamond/eslint.config.mjs b/exercises/practice/diamond/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/diamond/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/diamond/jest.config.js b/exercises/practice/diamond/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/diamond/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/diamond/package.json b/exercises/practice/diamond/package.json index 672ea3d5a6..38c5793f26 100644 --- a/exercises/practice/diamond/package.json +++ b/exercises/practice/diamond/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/diamond" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/difference-of-squares/.eslintrc b/exercises/practice/difference-of-squares/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/difference-of-squares/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/difference-of-squares/.gitignore b/exercises/practice/difference-of-squares/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/difference-of-squares/.gitignore +++ b/exercises/practice/difference-of-squares/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/difference-of-squares/babel.config.js b/exercises/practice/difference-of-squares/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/difference-of-squares/babel.config.js +++ b/exercises/practice/difference-of-squares/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/difference-of-squares/eslint.config.mjs b/exercises/practice/difference-of-squares/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/difference-of-squares/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/difference-of-squares/jest.config.js b/exercises/practice/difference-of-squares/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/difference-of-squares/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/difference-of-squares/package.json b/exercises/practice/difference-of-squares/package.json index 68a58c8bcd..1ddf0811d2 100644 --- a/exercises/practice/difference-of-squares/package.json +++ b/exercises/practice/difference-of-squares/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/difference-of-squares" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/diffie-hellman/.eslintrc b/exercises/practice/diffie-hellman/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/diffie-hellman/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/diffie-hellman/.gitignore b/exercises/practice/diffie-hellman/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/diffie-hellman/.gitignore +++ b/exercises/practice/diffie-hellman/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/diffie-hellman/babel.config.js b/exercises/practice/diffie-hellman/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/diffie-hellman/babel.config.js +++ b/exercises/practice/diffie-hellman/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/diffie-hellman/eslint.config.mjs b/exercises/practice/diffie-hellman/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/diffie-hellman/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/diffie-hellman/jest.config.js b/exercises/practice/diffie-hellman/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/diffie-hellman/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/diffie-hellman/package.json b/exercises/practice/diffie-hellman/package.json index 1d570e32da..c8a7077c02 100644 --- a/exercises/practice/diffie-hellman/package.json +++ b/exercises/practice/diffie-hellman/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/diffie-hellman" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/dnd-character/.eslintrc b/exercises/practice/dnd-character/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/dnd-character/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/dnd-character/.gitignore b/exercises/practice/dnd-character/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/dnd-character/.gitignore +++ b/exercises/practice/dnd-character/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/dnd-character/babel.config.js b/exercises/practice/dnd-character/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/dnd-character/babel.config.js +++ b/exercises/practice/dnd-character/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/dnd-character/eslint.config.mjs b/exercises/practice/dnd-character/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/dnd-character/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/dnd-character/jest.config.js b/exercises/practice/dnd-character/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/dnd-character/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/dnd-character/package.json b/exercises/practice/dnd-character/package.json index 5851599d6c..f161db17de 100644 --- a/exercises/practice/dnd-character/package.json +++ b/exercises/practice/dnd-character/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/dnd-character" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/dominoes/.eslintrc b/exercises/practice/dominoes/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/dominoes/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/dominoes/.gitignore b/exercises/practice/dominoes/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/dominoes/.gitignore +++ b/exercises/practice/dominoes/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/dominoes/babel.config.js b/exercises/practice/dominoes/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/dominoes/babel.config.js +++ b/exercises/practice/dominoes/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/dominoes/eslint.config.mjs b/exercises/practice/dominoes/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/dominoes/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/dominoes/jest.config.js b/exercises/practice/dominoes/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/dominoes/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/dominoes/package.json b/exercises/practice/dominoes/package.json index ea341ec60c..93ad1ca9ed 100644 --- a/exercises/practice/dominoes/package.json +++ b/exercises/practice/dominoes/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/dominoes" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/eliuds-eggs/.eslintrc b/exercises/practice/eliuds-eggs/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/eliuds-eggs/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/eliuds-eggs/.gitignore b/exercises/practice/eliuds-eggs/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/eliuds-eggs/.gitignore +++ b/exercises/practice/eliuds-eggs/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/eliuds-eggs/babel.config.js b/exercises/practice/eliuds-eggs/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/eliuds-eggs/babel.config.js +++ b/exercises/practice/eliuds-eggs/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/eliuds-eggs/eslint.config.mjs b/exercises/practice/eliuds-eggs/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/eliuds-eggs/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/eliuds-eggs/jest.config.js b/exercises/practice/eliuds-eggs/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/eliuds-eggs/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/eliuds-eggs/package.json b/exercises/practice/eliuds-eggs/package.json index 328dd340f0..00d67aa27d 100644 --- a/exercises/practice/eliuds-eggs/package.json +++ b/exercises/practice/eliuds-eggs/package.json @@ -15,20 +15,25 @@ "directory": "exercises/practice/eliuds-eggs" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/etl/.eslintrc b/exercises/practice/etl/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/etl/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/etl/.gitignore b/exercises/practice/etl/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/etl/.gitignore +++ b/exercises/practice/etl/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/etl/babel.config.js b/exercises/practice/etl/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/etl/babel.config.js +++ b/exercises/practice/etl/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/etl/eslint.config.mjs b/exercises/practice/etl/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/etl/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/etl/jest.config.js b/exercises/practice/etl/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/etl/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/etl/package.json b/exercises/practice/etl/package.json index b69e3bd038..0a9d5ef500 100644 --- a/exercises/practice/etl/package.json +++ b/exercises/practice/etl/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/etl" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/flatten-array/.eslintrc b/exercises/practice/flatten-array/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/flatten-array/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/flatten-array/.gitignore b/exercises/practice/flatten-array/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/flatten-array/.gitignore +++ b/exercises/practice/flatten-array/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/flatten-array/babel.config.js b/exercises/practice/flatten-array/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/flatten-array/babel.config.js +++ b/exercises/practice/flatten-array/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/flatten-array/eslint.config.mjs b/exercises/practice/flatten-array/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/flatten-array/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/flatten-array/jest.config.js b/exercises/practice/flatten-array/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/flatten-array/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/flatten-array/package.json b/exercises/practice/flatten-array/package.json index 8de9bb3cf0..ec2203f456 100644 --- a/exercises/practice/flatten-array/package.json +++ b/exercises/practice/flatten-array/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/flatten-array" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/food-chain/.eslintrc b/exercises/practice/food-chain/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/food-chain/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/food-chain/.gitignore b/exercises/practice/food-chain/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/food-chain/.gitignore +++ b/exercises/practice/food-chain/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/food-chain/babel.config.js b/exercises/practice/food-chain/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/food-chain/babel.config.js +++ b/exercises/practice/food-chain/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/food-chain/eslint.config.mjs b/exercises/practice/food-chain/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/food-chain/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/food-chain/jest.config.js b/exercises/practice/food-chain/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/food-chain/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/food-chain/package.json b/exercises/practice/food-chain/package.json index 02946f0244..8f17ec19ad 100644 --- a/exercises/practice/food-chain/package.json +++ b/exercises/practice/food-chain/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/food-chain" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/forth/.eslintrc b/exercises/practice/forth/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/forth/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/forth/.gitignore b/exercises/practice/forth/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/forth/.gitignore +++ b/exercises/practice/forth/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/forth/babel.config.js b/exercises/practice/forth/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/forth/babel.config.js +++ b/exercises/practice/forth/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/forth/eslint.config.mjs b/exercises/practice/forth/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/forth/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/forth/jest.config.js b/exercises/practice/forth/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/forth/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/forth/package.json b/exercises/practice/forth/package.json index 4b9ec7dff6..d8cef0f9a5 100644 --- a/exercises/practice/forth/package.json +++ b/exercises/practice/forth/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/forth" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/gigasecond/.eslintrc b/exercises/practice/gigasecond/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/gigasecond/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/gigasecond/.gitignore b/exercises/practice/gigasecond/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/gigasecond/.gitignore +++ b/exercises/practice/gigasecond/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/gigasecond/babel.config.js b/exercises/practice/gigasecond/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/gigasecond/babel.config.js +++ b/exercises/practice/gigasecond/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/gigasecond/eslint.config.mjs b/exercises/practice/gigasecond/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/gigasecond/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/gigasecond/jest.config.js b/exercises/practice/gigasecond/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/gigasecond/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/gigasecond/package.json b/exercises/practice/gigasecond/package.json index 6980fcf54e..2494607094 100644 --- a/exercises/practice/gigasecond/package.json +++ b/exercises/practice/gigasecond/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/gigasecond" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/go-counting/.eslintrc b/exercises/practice/go-counting/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/go-counting/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/go-counting/.gitignore b/exercises/practice/go-counting/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/go-counting/.gitignore +++ b/exercises/practice/go-counting/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/go-counting/babel.config.js b/exercises/practice/go-counting/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/go-counting/babel.config.js +++ b/exercises/practice/go-counting/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/go-counting/eslint.config.mjs b/exercises/practice/go-counting/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/go-counting/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/go-counting/jest.config.js b/exercises/practice/go-counting/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/go-counting/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/go-counting/package.json b/exercises/practice/go-counting/package.json index ec6ea1cc6c..a152642745 100644 --- a/exercises/practice/go-counting/package.json +++ b/exercises/practice/go-counting/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/go-counting" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/grade-school/.eslintrc b/exercises/practice/grade-school/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/grade-school/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/grade-school/.gitignore b/exercises/practice/grade-school/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/grade-school/.gitignore +++ b/exercises/practice/grade-school/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/grade-school/babel.config.js b/exercises/practice/grade-school/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/grade-school/babel.config.js +++ b/exercises/practice/grade-school/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/grade-school/eslint.config.mjs b/exercises/practice/grade-school/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/grade-school/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/grade-school/jest.config.js b/exercises/practice/grade-school/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/grade-school/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/grade-school/package.json b/exercises/practice/grade-school/package.json index 658294860a..7883f5bf98 100644 --- a/exercises/practice/grade-school/package.json +++ b/exercises/practice/grade-school/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/grade-school" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/grains/.eslintrc b/exercises/practice/grains/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/grains/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/grains/.gitignore b/exercises/practice/grains/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/grains/.gitignore +++ b/exercises/practice/grains/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/grains/babel.config.js b/exercises/practice/grains/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/grains/babel.config.js +++ b/exercises/practice/grains/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/grains/eslint.config.mjs b/exercises/practice/grains/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/grains/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/grains/jest.config.js b/exercises/practice/grains/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/grains/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/grains/package.json b/exercises/practice/grains/package.json index 9a22752ed1..bb3a6f209b 100644 --- a/exercises/practice/grains/package.json +++ b/exercises/practice/grains/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/grains" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/grep/.eslintrc b/exercises/practice/grep/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/grep/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/grep/.gitignore b/exercises/practice/grep/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/grep/.gitignore +++ b/exercises/practice/grep/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/grep/babel.config.js b/exercises/practice/grep/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/grep/babel.config.js +++ b/exercises/practice/grep/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/grep/eslint.config.mjs b/exercises/practice/grep/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/grep/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/grep/jest.config.js b/exercises/practice/grep/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/grep/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/grep/package.json b/exercises/practice/grep/package.json index 325baff27d..72d7436200 100644 --- a/exercises/practice/grep/package.json +++ b/exercises/practice/grep/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/grep" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/hamming/.eslintrc b/exercises/practice/hamming/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/hamming/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/hamming/.gitignore b/exercises/practice/hamming/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/hamming/.gitignore +++ b/exercises/practice/hamming/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/hamming/babel.config.js b/exercises/practice/hamming/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/hamming/babel.config.js +++ b/exercises/practice/hamming/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/hamming/eslint.config.mjs b/exercises/practice/hamming/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/hamming/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/hamming/jest.config.js b/exercises/practice/hamming/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/hamming/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/hamming/package.json b/exercises/practice/hamming/package.json index 218d31b19b..7f2f685e5f 100644 --- a/exercises/practice/hamming/package.json +++ b/exercises/practice/hamming/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/hamming" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/hello-world/.eslintrc b/exercises/practice/hello-world/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/hello-world/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/hello-world/.gitignore b/exercises/practice/hello-world/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/hello-world/.gitignore +++ b/exercises/practice/hello-world/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/hello-world/babel.config.js b/exercises/practice/hello-world/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/hello-world/babel.config.js +++ b/exercises/practice/hello-world/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/hello-world/eslint.config.mjs b/exercises/practice/hello-world/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/hello-world/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/hello-world/jest.config.js b/exercises/practice/hello-world/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/hello-world/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/hello-world/package.json b/exercises/practice/hello-world/package.json index c137745758..b28a99bf92 100644 --- a/exercises/practice/hello-world/package.json +++ b/exercises/practice/hello-world/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/hello-world" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/hexadecimal/.eslintrc b/exercises/practice/hexadecimal/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/hexadecimal/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/hexadecimal/.gitignore b/exercises/practice/hexadecimal/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/hexadecimal/.gitignore +++ b/exercises/practice/hexadecimal/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/hexadecimal/babel.config.js b/exercises/practice/hexadecimal/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/hexadecimal/babel.config.js +++ b/exercises/practice/hexadecimal/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/hexadecimal/eslint.config.mjs b/exercises/practice/hexadecimal/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/hexadecimal/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/hexadecimal/jest.config.js b/exercises/practice/hexadecimal/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/hexadecimal/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/hexadecimal/package.json b/exercises/practice/hexadecimal/package.json index e386cae705..ee759e7d31 100644 --- a/exercises/practice/hexadecimal/package.json +++ b/exercises/practice/hexadecimal/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/hexadecimal" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/high-scores/.eslintrc b/exercises/practice/high-scores/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/high-scores/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/high-scores/.gitignore b/exercises/practice/high-scores/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/high-scores/.gitignore +++ b/exercises/practice/high-scores/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/high-scores/babel.config.js b/exercises/practice/high-scores/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/high-scores/babel.config.js +++ b/exercises/practice/high-scores/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/high-scores/eslint.config.mjs b/exercises/practice/high-scores/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/high-scores/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/high-scores/jest.config.js b/exercises/practice/high-scores/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/high-scores/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/high-scores/package.json b/exercises/practice/high-scores/package.json index 57bd769f7c..bcb7f0b23a 100644 --- a/exercises/practice/high-scores/package.json +++ b/exercises/practice/high-scores/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/high-scores" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/house/.eslintrc b/exercises/practice/house/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/house/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/house/.gitignore b/exercises/practice/house/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/house/.gitignore +++ b/exercises/practice/house/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/house/babel.config.js b/exercises/practice/house/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/house/babel.config.js +++ b/exercises/practice/house/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/house/eslint.config.mjs b/exercises/practice/house/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/house/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/house/jest.config.js b/exercises/practice/house/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/house/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/house/package.json b/exercises/practice/house/package.json index 6527bb8bca..544e028e36 100644 --- a/exercises/practice/house/package.json +++ b/exercises/practice/house/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/house" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/isbn-verifier/.eslintrc b/exercises/practice/isbn-verifier/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/isbn-verifier/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/isbn-verifier/.gitignore b/exercises/practice/isbn-verifier/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/isbn-verifier/.gitignore +++ b/exercises/practice/isbn-verifier/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/isbn-verifier/babel.config.js b/exercises/practice/isbn-verifier/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/isbn-verifier/babel.config.js +++ b/exercises/practice/isbn-verifier/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/isbn-verifier/eslint.config.mjs b/exercises/practice/isbn-verifier/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/isbn-verifier/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/isbn-verifier/jest.config.js b/exercises/practice/isbn-verifier/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/isbn-verifier/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/isbn-verifier/package.json b/exercises/practice/isbn-verifier/package.json index 28c9cbf006..1f152eef5f 100644 --- a/exercises/practice/isbn-verifier/package.json +++ b/exercises/practice/isbn-verifier/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/isbn-verifier" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/isogram/.eslintrc b/exercises/practice/isogram/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/isogram/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/isogram/.gitignore b/exercises/practice/isogram/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/isogram/.gitignore +++ b/exercises/practice/isogram/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/isogram/babel.config.js b/exercises/practice/isogram/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/isogram/babel.config.js +++ b/exercises/practice/isogram/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/isogram/eslint.config.mjs b/exercises/practice/isogram/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/isogram/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/isogram/jest.config.js b/exercises/practice/isogram/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/isogram/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/isogram/package.json b/exercises/practice/isogram/package.json index 9de33a229a..bdde3ac438 100644 --- a/exercises/practice/isogram/package.json +++ b/exercises/practice/isogram/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/isogram" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/kindergarten-garden/.eslintrc b/exercises/practice/kindergarten-garden/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/kindergarten-garden/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/kindergarten-garden/.gitignore b/exercises/practice/kindergarten-garden/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/kindergarten-garden/.gitignore +++ b/exercises/practice/kindergarten-garden/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/kindergarten-garden/babel.config.js b/exercises/practice/kindergarten-garden/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/kindergarten-garden/babel.config.js +++ b/exercises/practice/kindergarten-garden/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/kindergarten-garden/eslint.config.mjs b/exercises/practice/kindergarten-garden/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/kindergarten-garden/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/kindergarten-garden/jest.config.js b/exercises/practice/kindergarten-garden/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/kindergarten-garden/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/kindergarten-garden/package.json b/exercises/practice/kindergarten-garden/package.json index 05da2e983b..f0ea96bdb6 100644 --- a/exercises/practice/kindergarten-garden/package.json +++ b/exercises/practice/kindergarten-garden/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/kindergarten-garden" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/knapsack/.eslintrc b/exercises/practice/knapsack/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/knapsack/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/knapsack/.gitignore b/exercises/practice/knapsack/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/knapsack/.gitignore +++ b/exercises/practice/knapsack/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/knapsack/babel.config.js b/exercises/practice/knapsack/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/knapsack/babel.config.js +++ b/exercises/practice/knapsack/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/knapsack/eslint.config.mjs b/exercises/practice/knapsack/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/knapsack/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/knapsack/jest.config.js b/exercises/practice/knapsack/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/knapsack/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/knapsack/package.json b/exercises/practice/knapsack/package.json index ae9df0b880..ca06966447 100644 --- a/exercises/practice/knapsack/package.json +++ b/exercises/practice/knapsack/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/knapsack" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/largest-series-product/.eslintrc b/exercises/practice/largest-series-product/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/largest-series-product/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/largest-series-product/.gitignore b/exercises/practice/largest-series-product/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/largest-series-product/.gitignore +++ b/exercises/practice/largest-series-product/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/largest-series-product/babel.config.js b/exercises/practice/largest-series-product/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/largest-series-product/babel.config.js +++ b/exercises/practice/largest-series-product/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/largest-series-product/eslint.config.mjs b/exercises/practice/largest-series-product/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/largest-series-product/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/largest-series-product/jest.config.js b/exercises/practice/largest-series-product/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/largest-series-product/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/largest-series-product/package.json b/exercises/practice/largest-series-product/package.json index 4cbb84a5ed..7c95f78899 100644 --- a/exercises/practice/largest-series-product/package.json +++ b/exercises/practice/largest-series-product/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/largest-series-product" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/leap/.eslintrc b/exercises/practice/leap/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/leap/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/leap/.gitignore b/exercises/practice/leap/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/leap/.gitignore +++ b/exercises/practice/leap/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/leap/babel.config.js b/exercises/practice/leap/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/leap/babel.config.js +++ b/exercises/practice/leap/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/leap/eslint.config.mjs b/exercises/practice/leap/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/leap/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/leap/jest.config.js b/exercises/practice/leap/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/leap/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/leap/package.json b/exercises/practice/leap/package.json index 973da93af6..50e75bb092 100644 --- a/exercises/practice/leap/package.json +++ b/exercises/practice/leap/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/leap" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/ledger/.eslintrc b/exercises/practice/ledger/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/ledger/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/ledger/.gitignore b/exercises/practice/ledger/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/ledger/.gitignore +++ b/exercises/practice/ledger/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/ledger/babel.config.js b/exercises/practice/ledger/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/ledger/babel.config.js +++ b/exercises/practice/ledger/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/ledger/eslint.config.mjs b/exercises/practice/ledger/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/ledger/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/ledger/jest.config.js b/exercises/practice/ledger/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/ledger/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/ledger/package.json b/exercises/practice/ledger/package.json index a1ba49265d..ebd03c714b 100644 --- a/exercises/practice/ledger/package.json +++ b/exercises/practice/ledger/package.json @@ -15,20 +15,25 @@ "directory": "exercises/practice/ledger" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/lens-person/.eslintrc b/exercises/practice/lens-person/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/lens-person/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/lens-person/.gitignore b/exercises/practice/lens-person/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/lens-person/.gitignore +++ b/exercises/practice/lens-person/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/lens-person/babel.config.js b/exercises/practice/lens-person/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/lens-person/babel.config.js +++ b/exercises/practice/lens-person/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/lens-person/eslint.config.mjs b/exercises/practice/lens-person/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/lens-person/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/lens-person/jest.config.js b/exercises/practice/lens-person/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/lens-person/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/lens-person/package.json b/exercises/practice/lens-person/package.json index c980871412..72cd57a035 100644 --- a/exercises/practice/lens-person/package.json +++ b/exercises/practice/lens-person/package.json @@ -16,20 +16,25 @@ "directory": "exercises/practice/lens-person" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/linked-list/.eslintrc b/exercises/practice/linked-list/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/linked-list/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/linked-list/.gitignore b/exercises/practice/linked-list/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/linked-list/.gitignore +++ b/exercises/practice/linked-list/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/linked-list/babel.config.js b/exercises/practice/linked-list/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/linked-list/babel.config.js +++ b/exercises/practice/linked-list/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/linked-list/eslint.config.mjs b/exercises/practice/linked-list/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/linked-list/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/linked-list/jest.config.js b/exercises/practice/linked-list/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/linked-list/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/linked-list/package.json b/exercises/practice/linked-list/package.json index 3a51e538aa..339d2587ff 100644 --- a/exercises/practice/linked-list/package.json +++ b/exercises/practice/linked-list/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/linked-list" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/list-ops/.eslintrc b/exercises/practice/list-ops/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/list-ops/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/list-ops/.gitignore b/exercises/practice/list-ops/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/list-ops/.gitignore +++ b/exercises/practice/list-ops/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/list-ops/babel.config.js b/exercises/practice/list-ops/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/list-ops/babel.config.js +++ b/exercises/practice/list-ops/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/list-ops/eslint.config.mjs b/exercises/practice/list-ops/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/list-ops/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/list-ops/jest.config.js b/exercises/practice/list-ops/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/list-ops/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/list-ops/package.json b/exercises/practice/list-ops/package.json index 30010c76e3..61a1e536b7 100644 --- a/exercises/practice/list-ops/package.json +++ b/exercises/practice/list-ops/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/list-ops" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/luhn/.eslintrc b/exercises/practice/luhn/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/luhn/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/luhn/.gitignore b/exercises/practice/luhn/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/luhn/.gitignore +++ b/exercises/practice/luhn/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/luhn/babel.config.js b/exercises/practice/luhn/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/luhn/babel.config.js +++ b/exercises/practice/luhn/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/luhn/eslint.config.mjs b/exercises/practice/luhn/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/luhn/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/luhn/jest.config.js b/exercises/practice/luhn/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/luhn/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/luhn/package.json b/exercises/practice/luhn/package.json index f9ad478056..32798255b8 100644 --- a/exercises/practice/luhn/package.json +++ b/exercises/practice/luhn/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/luhn" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/markdown/.eslintrc b/exercises/practice/markdown/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/markdown/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/markdown/.gitignore b/exercises/practice/markdown/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/markdown/.gitignore +++ b/exercises/practice/markdown/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/markdown/babel.config.js b/exercises/practice/markdown/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/markdown/babel.config.js +++ b/exercises/practice/markdown/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/markdown/eslint.config.mjs b/exercises/practice/markdown/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/markdown/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/markdown/jest.config.js b/exercises/practice/markdown/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/markdown/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/markdown/package.json b/exercises/practice/markdown/package.json index 7723c19cd3..a19065bd7e 100644 --- a/exercises/practice/markdown/package.json +++ b/exercises/practice/markdown/package.json @@ -15,20 +15,25 @@ "directory": "exercises/practice/markdown" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/matching-brackets/.eslintrc b/exercises/practice/matching-brackets/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/matching-brackets/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/matching-brackets/.gitignore b/exercises/practice/matching-brackets/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/matching-brackets/.gitignore +++ b/exercises/practice/matching-brackets/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/matching-brackets/babel.config.js b/exercises/practice/matching-brackets/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/matching-brackets/babel.config.js +++ b/exercises/practice/matching-brackets/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/matching-brackets/eslint.config.mjs b/exercises/practice/matching-brackets/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/matching-brackets/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/matching-brackets/jest.config.js b/exercises/practice/matching-brackets/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/matching-brackets/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/matching-brackets/package.json b/exercises/practice/matching-brackets/package.json index 106ba31fb2..373d2ad319 100644 --- a/exercises/practice/matching-brackets/package.json +++ b/exercises/practice/matching-brackets/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/matching-brackets" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/matrix/.eslintrc b/exercises/practice/matrix/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/matrix/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/matrix/.gitignore b/exercises/practice/matrix/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/matrix/.gitignore +++ b/exercises/practice/matrix/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/matrix/babel.config.js b/exercises/practice/matrix/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/matrix/babel.config.js +++ b/exercises/practice/matrix/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/matrix/eslint.config.mjs b/exercises/practice/matrix/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/matrix/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/matrix/jest.config.js b/exercises/practice/matrix/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/matrix/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/matrix/package.json b/exercises/practice/matrix/package.json index 782976aa5f..4562ca7eef 100644 --- a/exercises/practice/matrix/package.json +++ b/exercises/practice/matrix/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/matrix" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/meetup/.eslintrc b/exercises/practice/meetup/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/meetup/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/meetup/.gitignore b/exercises/practice/meetup/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/meetup/.gitignore +++ b/exercises/practice/meetup/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/meetup/babel.config.js b/exercises/practice/meetup/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/meetup/babel.config.js +++ b/exercises/practice/meetup/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/meetup/eslint.config.mjs b/exercises/practice/meetup/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/meetup/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/meetup/jest.config.js b/exercises/practice/meetup/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/meetup/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/meetup/package.json b/exercises/practice/meetup/package.json index 0132b7d15c..dd5ddb2c55 100644 --- a/exercises/practice/meetup/package.json +++ b/exercises/practice/meetup/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/meetup" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/micro-blog/.eslintrc b/exercises/practice/micro-blog/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/micro-blog/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/micro-blog/.gitignore b/exercises/practice/micro-blog/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/micro-blog/.gitignore +++ b/exercises/practice/micro-blog/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/micro-blog/babel.config.js b/exercises/practice/micro-blog/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/micro-blog/babel.config.js +++ b/exercises/practice/micro-blog/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/micro-blog/eslint.config.mjs b/exercises/practice/micro-blog/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/micro-blog/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/micro-blog/jest.config.js b/exercises/practice/micro-blog/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/micro-blog/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/micro-blog/package.json b/exercises/practice/micro-blog/package.json index e8147ae0ad..f116c876c7 100644 --- a/exercises/practice/micro-blog/package.json +++ b/exercises/practice/micro-blog/package.json @@ -15,20 +15,25 @@ "directory": "exercises/practice/micro-blog" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/minesweeper/.eslintrc b/exercises/practice/minesweeper/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/minesweeper/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/minesweeper/.gitignore b/exercises/practice/minesweeper/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/minesweeper/.gitignore +++ b/exercises/practice/minesweeper/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/minesweeper/babel.config.js b/exercises/practice/minesweeper/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/minesweeper/babel.config.js +++ b/exercises/practice/minesweeper/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/minesweeper/eslint.config.mjs b/exercises/practice/minesweeper/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/minesweeper/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/minesweeper/jest.config.js b/exercises/practice/minesweeper/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/minesweeper/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/minesweeper/package.json b/exercises/practice/minesweeper/package.json index 898956a8a2..1e2a167622 100644 --- a/exercises/practice/minesweeper/package.json +++ b/exercises/practice/minesweeper/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/minesweeper" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/nth-prime/.eslintrc b/exercises/practice/nth-prime/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/nth-prime/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/nth-prime/.gitignore b/exercises/practice/nth-prime/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/nth-prime/.gitignore +++ b/exercises/practice/nth-prime/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/nth-prime/babel.config.js b/exercises/practice/nth-prime/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/nth-prime/babel.config.js +++ b/exercises/practice/nth-prime/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/nth-prime/eslint.config.mjs b/exercises/practice/nth-prime/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/nth-prime/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/nth-prime/jest.config.js b/exercises/practice/nth-prime/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/nth-prime/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/nth-prime/package.json b/exercises/practice/nth-prime/package.json index bec543fb10..62b1f63097 100644 --- a/exercises/practice/nth-prime/package.json +++ b/exercises/practice/nth-prime/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/nth-prime" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/nucleotide-count/.eslintrc b/exercises/practice/nucleotide-count/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/nucleotide-count/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/nucleotide-count/.gitignore b/exercises/practice/nucleotide-count/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/nucleotide-count/.gitignore +++ b/exercises/practice/nucleotide-count/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/nucleotide-count/babel.config.js b/exercises/practice/nucleotide-count/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/nucleotide-count/babel.config.js +++ b/exercises/practice/nucleotide-count/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/nucleotide-count/eslint.config.mjs b/exercises/practice/nucleotide-count/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/nucleotide-count/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/nucleotide-count/jest.config.js b/exercises/practice/nucleotide-count/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/nucleotide-count/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/nucleotide-count/package.json b/exercises/practice/nucleotide-count/package.json index 118f79c391..6928e42efc 100644 --- a/exercises/practice/nucleotide-count/package.json +++ b/exercises/practice/nucleotide-count/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/nucleotide-count" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/ocr-numbers/.eslintrc b/exercises/practice/ocr-numbers/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/ocr-numbers/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/ocr-numbers/.gitignore b/exercises/practice/ocr-numbers/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/ocr-numbers/.gitignore +++ b/exercises/practice/ocr-numbers/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/ocr-numbers/babel.config.js b/exercises/practice/ocr-numbers/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/ocr-numbers/babel.config.js +++ b/exercises/practice/ocr-numbers/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/ocr-numbers/eslint.config.mjs b/exercises/practice/ocr-numbers/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/ocr-numbers/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/ocr-numbers/jest.config.js b/exercises/practice/ocr-numbers/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/ocr-numbers/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/ocr-numbers/package.json b/exercises/practice/ocr-numbers/package.json index 043beb5963..ecd3ca3cac 100644 --- a/exercises/practice/ocr-numbers/package.json +++ b/exercises/practice/ocr-numbers/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/ocr-numbers" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/octal/.eslintrc b/exercises/practice/octal/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/octal/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/octal/.gitignore b/exercises/practice/octal/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/octal/.gitignore +++ b/exercises/practice/octal/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/octal/babel.config.js b/exercises/practice/octal/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/octal/babel.config.js +++ b/exercises/practice/octal/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/octal/eslint.config.mjs b/exercises/practice/octal/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/octal/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/octal/jest.config.js b/exercises/practice/octal/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/octal/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/octal/package.json b/exercises/practice/octal/package.json index dec83d8c2a..a77a6dc1ab 100644 --- a/exercises/practice/octal/package.json +++ b/exercises/practice/octal/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/octal" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/palindrome-products/.eslintrc b/exercises/practice/palindrome-products/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/palindrome-products/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/palindrome-products/.gitignore b/exercises/practice/palindrome-products/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/palindrome-products/.gitignore +++ b/exercises/practice/palindrome-products/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/palindrome-products/babel.config.js b/exercises/practice/palindrome-products/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/palindrome-products/babel.config.js +++ b/exercises/practice/palindrome-products/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/palindrome-products/eslint.config.mjs b/exercises/practice/palindrome-products/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/palindrome-products/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/palindrome-products/jest.config.js b/exercises/practice/palindrome-products/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/palindrome-products/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/palindrome-products/package.json b/exercises/practice/palindrome-products/package.json index c710f6bb01..1605b50677 100644 --- a/exercises/practice/palindrome-products/package.json +++ b/exercises/practice/palindrome-products/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/palindrome-products" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/pangram/.eslintrc b/exercises/practice/pangram/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/pangram/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/pangram/.gitignore b/exercises/practice/pangram/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/pangram/.gitignore +++ b/exercises/practice/pangram/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/pangram/babel.config.js b/exercises/practice/pangram/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/pangram/babel.config.js +++ b/exercises/practice/pangram/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/pangram/eslint.config.mjs b/exercises/practice/pangram/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/pangram/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/pangram/jest.config.js b/exercises/practice/pangram/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/pangram/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/pangram/package.json b/exercises/practice/pangram/package.json index 9fa4fba607..33b52b98c7 100644 --- a/exercises/practice/pangram/package.json +++ b/exercises/practice/pangram/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/pangram" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/parallel-letter-frequency/.eslintrc b/exercises/practice/parallel-letter-frequency/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/parallel-letter-frequency/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/parallel-letter-frequency/.gitignore b/exercises/practice/parallel-letter-frequency/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/parallel-letter-frequency/.gitignore +++ b/exercises/practice/parallel-letter-frequency/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/parallel-letter-frequency/babel.config.js b/exercises/practice/parallel-letter-frequency/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/parallel-letter-frequency/babel.config.js +++ b/exercises/practice/parallel-letter-frequency/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/parallel-letter-frequency/eslint.config.mjs b/exercises/practice/parallel-letter-frequency/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/parallel-letter-frequency/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/parallel-letter-frequency/jest.config.js b/exercises/practice/parallel-letter-frequency/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/parallel-letter-frequency/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/parallel-letter-frequency/package.json b/exercises/practice/parallel-letter-frequency/package.json index ab26c93a56..14f5350f07 100644 --- a/exercises/practice/parallel-letter-frequency/package.json +++ b/exercises/practice/parallel-letter-frequency/package.json @@ -15,20 +15,25 @@ "directory": "exercises/practice/parallel-letter-frequency" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/pascals-triangle/.eslintrc b/exercises/practice/pascals-triangle/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/pascals-triangle/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/pascals-triangle/.gitignore b/exercises/practice/pascals-triangle/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/pascals-triangle/.gitignore +++ b/exercises/practice/pascals-triangle/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/pascals-triangle/babel.config.js b/exercises/practice/pascals-triangle/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/pascals-triangle/babel.config.js +++ b/exercises/practice/pascals-triangle/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/pascals-triangle/eslint.config.mjs b/exercises/practice/pascals-triangle/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/pascals-triangle/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/pascals-triangle/jest.config.js b/exercises/practice/pascals-triangle/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/pascals-triangle/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/pascals-triangle/package.json b/exercises/practice/pascals-triangle/package.json index 8bb4b88296..78b1964cc2 100644 --- a/exercises/practice/pascals-triangle/package.json +++ b/exercises/practice/pascals-triangle/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/pascals-triangle" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/perfect-numbers/.eslintrc b/exercises/practice/perfect-numbers/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/perfect-numbers/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/perfect-numbers/.gitignore b/exercises/practice/perfect-numbers/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/perfect-numbers/.gitignore +++ b/exercises/practice/perfect-numbers/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/perfect-numbers/babel.config.js b/exercises/practice/perfect-numbers/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/perfect-numbers/babel.config.js +++ b/exercises/practice/perfect-numbers/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/perfect-numbers/eslint.config.mjs b/exercises/practice/perfect-numbers/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/perfect-numbers/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/perfect-numbers/jest.config.js b/exercises/practice/perfect-numbers/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/perfect-numbers/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/perfect-numbers/package.json b/exercises/practice/perfect-numbers/package.json index bada7ea2fd..e4adca05aa 100644 --- a/exercises/practice/perfect-numbers/package.json +++ b/exercises/practice/perfect-numbers/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/perfect-numbers" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/phone-number/.eslintrc b/exercises/practice/phone-number/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/phone-number/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/phone-number/.gitignore b/exercises/practice/phone-number/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/phone-number/.gitignore +++ b/exercises/practice/phone-number/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/phone-number/babel.config.js b/exercises/practice/phone-number/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/phone-number/babel.config.js +++ b/exercises/practice/phone-number/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/phone-number/eslint.config.mjs b/exercises/practice/phone-number/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/phone-number/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/phone-number/jest.config.js b/exercises/practice/phone-number/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/phone-number/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/phone-number/package.json b/exercises/practice/phone-number/package.json index f5871f7946..b83b4ed27d 100644 --- a/exercises/practice/phone-number/package.json +++ b/exercises/practice/phone-number/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/phone-number" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/pig-latin/.eslintrc b/exercises/practice/pig-latin/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/pig-latin/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/pig-latin/.gitignore b/exercises/practice/pig-latin/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/pig-latin/.gitignore +++ b/exercises/practice/pig-latin/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/pig-latin/babel.config.js b/exercises/practice/pig-latin/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/pig-latin/babel.config.js +++ b/exercises/practice/pig-latin/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/pig-latin/eslint.config.mjs b/exercises/practice/pig-latin/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/pig-latin/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/pig-latin/jest.config.js b/exercises/practice/pig-latin/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/pig-latin/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/pig-latin/package.json b/exercises/practice/pig-latin/package.json index d4e2d25413..eef176664f 100644 --- a/exercises/practice/pig-latin/package.json +++ b/exercises/practice/pig-latin/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/pig-latin" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/point-mutations/.eslintrc b/exercises/practice/point-mutations/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/point-mutations/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/point-mutations/.gitignore b/exercises/practice/point-mutations/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/point-mutations/.gitignore +++ b/exercises/practice/point-mutations/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/point-mutations/babel.config.js b/exercises/practice/point-mutations/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/point-mutations/babel.config.js +++ b/exercises/practice/point-mutations/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/point-mutations/eslint.config.mjs b/exercises/practice/point-mutations/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/point-mutations/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/point-mutations/jest.config.js b/exercises/practice/point-mutations/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/point-mutations/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/point-mutations/package.json b/exercises/practice/point-mutations/package.json index 696cc60d18..0b46dc0ee5 100644 --- a/exercises/practice/point-mutations/package.json +++ b/exercises/practice/point-mutations/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/point-mutations" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/poker/.eslintrc b/exercises/practice/poker/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/poker/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/poker/.gitignore b/exercises/practice/poker/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/poker/.gitignore +++ b/exercises/practice/poker/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/poker/babel.config.js b/exercises/practice/poker/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/poker/babel.config.js +++ b/exercises/practice/poker/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/poker/eslint.config.mjs b/exercises/practice/poker/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/poker/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/poker/jest.config.js b/exercises/practice/poker/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/poker/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/poker/package.json b/exercises/practice/poker/package.json index 90ac1021cd..671f663434 100644 --- a/exercises/practice/poker/package.json +++ b/exercises/practice/poker/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/poker" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/prime-factors/.eslintrc b/exercises/practice/prime-factors/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/prime-factors/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/prime-factors/.gitignore b/exercises/practice/prime-factors/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/prime-factors/.gitignore +++ b/exercises/practice/prime-factors/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/prime-factors/babel.config.js b/exercises/practice/prime-factors/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/prime-factors/babel.config.js +++ b/exercises/practice/prime-factors/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/prime-factors/eslint.config.mjs b/exercises/practice/prime-factors/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/prime-factors/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/prime-factors/jest.config.js b/exercises/practice/prime-factors/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/prime-factors/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/prime-factors/package.json b/exercises/practice/prime-factors/package.json index 10f5f14d04..fb0ebffce6 100644 --- a/exercises/practice/prime-factors/package.json +++ b/exercises/practice/prime-factors/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/prime-factors" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/promises/.eslintrc b/exercises/practice/promises/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/promises/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/promises/.gitignore b/exercises/practice/promises/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/promises/.gitignore +++ b/exercises/practice/promises/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/promises/babel.config.js b/exercises/practice/promises/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/promises/babel.config.js +++ b/exercises/practice/promises/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/promises/eslint.config.mjs b/exercises/practice/promises/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/promises/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/promises/jest.config.js b/exercises/practice/promises/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/promises/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/promises/package.json b/exercises/practice/promises/package.json index e4eff09d88..a93a86b981 100644 --- a/exercises/practice/promises/package.json +++ b/exercises/practice/promises/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/promises" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/protein-translation/.eslintrc b/exercises/practice/protein-translation/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/protein-translation/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/protein-translation/.gitignore b/exercises/practice/protein-translation/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/protein-translation/.gitignore +++ b/exercises/practice/protein-translation/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/protein-translation/babel.config.js b/exercises/practice/protein-translation/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/protein-translation/babel.config.js +++ b/exercises/practice/protein-translation/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/protein-translation/eslint.config.mjs b/exercises/practice/protein-translation/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/protein-translation/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/protein-translation/jest.config.js b/exercises/practice/protein-translation/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/protein-translation/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/protein-translation/package.json b/exercises/practice/protein-translation/package.json index d619d27b19..7d18a8867d 100644 --- a/exercises/practice/protein-translation/package.json +++ b/exercises/practice/protein-translation/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/protein-translation" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/proverb/.eslintrc b/exercises/practice/proverb/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/proverb/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/proverb/.gitignore b/exercises/practice/proverb/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/proverb/.gitignore +++ b/exercises/practice/proverb/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/proverb/babel.config.js b/exercises/practice/proverb/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/proverb/babel.config.js +++ b/exercises/practice/proverb/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/proverb/eslint.config.mjs b/exercises/practice/proverb/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/proverb/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/proverb/jest.config.js b/exercises/practice/proverb/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/proverb/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/proverb/package.json b/exercises/practice/proverb/package.json index a67218c0af..e0a5bdae8d 100644 --- a/exercises/practice/proverb/package.json +++ b/exercises/practice/proverb/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/proverb" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/pythagorean-triplet/.eslintrc b/exercises/practice/pythagorean-triplet/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/pythagorean-triplet/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/pythagorean-triplet/.gitignore b/exercises/practice/pythagorean-triplet/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/pythagorean-triplet/.gitignore +++ b/exercises/practice/pythagorean-triplet/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/pythagorean-triplet/babel.config.js b/exercises/practice/pythagorean-triplet/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/pythagorean-triplet/babel.config.js +++ b/exercises/practice/pythagorean-triplet/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/pythagorean-triplet/eslint.config.mjs b/exercises/practice/pythagorean-triplet/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/pythagorean-triplet/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/pythagorean-triplet/jest.config.js b/exercises/practice/pythagorean-triplet/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/pythagorean-triplet/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/pythagorean-triplet/package.json b/exercises/practice/pythagorean-triplet/package.json index bd548bf15d..b04e7c5ea0 100644 --- a/exercises/practice/pythagorean-triplet/package.json +++ b/exercises/practice/pythagorean-triplet/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/pythagorean-triplet" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/queen-attack/.eslintrc b/exercises/practice/queen-attack/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/queen-attack/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/queen-attack/.gitignore b/exercises/practice/queen-attack/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/queen-attack/.gitignore +++ b/exercises/practice/queen-attack/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/queen-attack/babel.config.js b/exercises/practice/queen-attack/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/queen-attack/babel.config.js +++ b/exercises/practice/queen-attack/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/queen-attack/eslint.config.mjs b/exercises/practice/queen-attack/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/queen-attack/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/queen-attack/jest.config.js b/exercises/practice/queen-attack/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/queen-attack/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/queen-attack/package.json b/exercises/practice/queen-attack/package.json index 7fb98c20cd..5f12e256a5 100644 --- a/exercises/practice/queen-attack/package.json +++ b/exercises/practice/queen-attack/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/queen-attack" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/rail-fence-cipher/.eslintrc b/exercises/practice/rail-fence-cipher/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/rail-fence-cipher/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/rail-fence-cipher/.gitignore b/exercises/practice/rail-fence-cipher/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/rail-fence-cipher/.gitignore +++ b/exercises/practice/rail-fence-cipher/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/rail-fence-cipher/babel.config.js b/exercises/practice/rail-fence-cipher/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/rail-fence-cipher/babel.config.js +++ b/exercises/practice/rail-fence-cipher/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/rail-fence-cipher/eslint.config.mjs b/exercises/practice/rail-fence-cipher/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/rail-fence-cipher/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/rail-fence-cipher/jest.config.js b/exercises/practice/rail-fence-cipher/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/rail-fence-cipher/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/rail-fence-cipher/package.json b/exercises/practice/rail-fence-cipher/package.json index 35bf2dadf9..300016cb6d 100644 --- a/exercises/practice/rail-fence-cipher/package.json +++ b/exercises/practice/rail-fence-cipher/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/rail-fence-cipher" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/raindrops/.eslintrc b/exercises/practice/raindrops/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/raindrops/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/raindrops/.gitignore b/exercises/practice/raindrops/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/raindrops/.gitignore +++ b/exercises/practice/raindrops/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/raindrops/babel.config.js b/exercises/practice/raindrops/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/raindrops/babel.config.js +++ b/exercises/practice/raindrops/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/raindrops/eslint.config.mjs b/exercises/practice/raindrops/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/raindrops/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/raindrops/jest.config.js b/exercises/practice/raindrops/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/raindrops/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/raindrops/package.json b/exercises/practice/raindrops/package.json index 19d008746a..799ad378a0 100644 --- a/exercises/practice/raindrops/package.json +++ b/exercises/practice/raindrops/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/raindrops" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/rational-numbers/.eslintrc b/exercises/practice/rational-numbers/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/rational-numbers/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/rational-numbers/.gitignore b/exercises/practice/rational-numbers/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/rational-numbers/.gitignore +++ b/exercises/practice/rational-numbers/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/rational-numbers/babel.config.js b/exercises/practice/rational-numbers/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/rational-numbers/babel.config.js +++ b/exercises/practice/rational-numbers/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/rational-numbers/eslint.config.mjs b/exercises/practice/rational-numbers/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/rational-numbers/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/rational-numbers/jest.config.js b/exercises/practice/rational-numbers/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/rational-numbers/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/rational-numbers/package.json b/exercises/practice/rational-numbers/package.json index 5a30943850..22e2ec8e77 100644 --- a/exercises/practice/rational-numbers/package.json +++ b/exercises/practice/rational-numbers/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/rational-numbers" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/react/.eslintrc b/exercises/practice/react/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/react/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/react/.gitignore b/exercises/practice/react/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/react/.gitignore +++ b/exercises/practice/react/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/react/babel.config.js b/exercises/practice/react/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/react/babel.config.js +++ b/exercises/practice/react/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/react/eslint.config.mjs b/exercises/practice/react/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/react/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/react/jest.config.js b/exercises/practice/react/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/react/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/react/package.json b/exercises/practice/react/package.json index 64f92726c1..570d16340e 100644 --- a/exercises/practice/react/package.json +++ b/exercises/practice/react/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/react" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/rectangles/.eslintrc b/exercises/practice/rectangles/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/rectangles/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/rectangles/.gitignore b/exercises/practice/rectangles/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/rectangles/.gitignore +++ b/exercises/practice/rectangles/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/rectangles/babel.config.js b/exercises/practice/rectangles/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/rectangles/babel.config.js +++ b/exercises/practice/rectangles/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/rectangles/eslint.config.mjs b/exercises/practice/rectangles/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/rectangles/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/rectangles/jest.config.js b/exercises/practice/rectangles/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/rectangles/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/rectangles/package.json b/exercises/practice/rectangles/package.json index 9b4f0dd611..9a2f3bbe78 100644 --- a/exercises/practice/rectangles/package.json +++ b/exercises/practice/rectangles/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/rectangles" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/resistor-color-duo/.eslintrc b/exercises/practice/resistor-color-duo/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/resistor-color-duo/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/resistor-color-duo/.gitignore b/exercises/practice/resistor-color-duo/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/resistor-color-duo/.gitignore +++ b/exercises/practice/resistor-color-duo/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/resistor-color-duo/babel.config.js b/exercises/practice/resistor-color-duo/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/resistor-color-duo/babel.config.js +++ b/exercises/practice/resistor-color-duo/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/resistor-color-duo/eslint.config.mjs b/exercises/practice/resistor-color-duo/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/resistor-color-duo/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/resistor-color-duo/jest.config.js b/exercises/practice/resistor-color-duo/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/resistor-color-duo/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/resistor-color-duo/package.json b/exercises/practice/resistor-color-duo/package.json index 7c00269333..e8518f96f7 100644 --- a/exercises/practice/resistor-color-duo/package.json +++ b/exercises/practice/resistor-color-duo/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/resistor-color-duo" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/resistor-color-trio/.eslintrc b/exercises/practice/resistor-color-trio/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/resistor-color-trio/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/resistor-color-trio/.gitignore b/exercises/practice/resistor-color-trio/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/resistor-color-trio/.gitignore +++ b/exercises/practice/resistor-color-trio/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/resistor-color-trio/babel.config.js b/exercises/practice/resistor-color-trio/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/resistor-color-trio/babel.config.js +++ b/exercises/practice/resistor-color-trio/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/resistor-color-trio/eslint.config.mjs b/exercises/practice/resistor-color-trio/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/resistor-color-trio/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/resistor-color-trio/jest.config.js b/exercises/practice/resistor-color-trio/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/resistor-color-trio/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/resistor-color-trio/package.json b/exercises/practice/resistor-color-trio/package.json index e84a042b31..6467ba44ae 100644 --- a/exercises/practice/resistor-color-trio/package.json +++ b/exercises/practice/resistor-color-trio/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/resistor-color-trio" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/resistor-color/.eslintrc b/exercises/practice/resistor-color/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/resistor-color/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/resistor-color/.gitignore b/exercises/practice/resistor-color/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/resistor-color/.gitignore +++ b/exercises/practice/resistor-color/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/resistor-color/babel.config.js b/exercises/practice/resistor-color/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/resistor-color/babel.config.js +++ b/exercises/practice/resistor-color/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/resistor-color/eslint.config.mjs b/exercises/practice/resistor-color/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/resistor-color/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/resistor-color/jest.config.js b/exercises/practice/resistor-color/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/resistor-color/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/resistor-color/package.json b/exercises/practice/resistor-color/package.json index c372fdbcec..2ae72fed5d 100644 --- a/exercises/practice/resistor-color/package.json +++ b/exercises/practice/resistor-color/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/resistor-color" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/rest-api/.eslintrc b/exercises/practice/rest-api/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/rest-api/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/rest-api/.gitignore b/exercises/practice/rest-api/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/rest-api/.gitignore +++ b/exercises/practice/rest-api/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/rest-api/babel.config.js b/exercises/practice/rest-api/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/rest-api/babel.config.js +++ b/exercises/practice/rest-api/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/rest-api/eslint.config.mjs b/exercises/practice/rest-api/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/rest-api/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/rest-api/jest.config.js b/exercises/practice/rest-api/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/rest-api/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/rest-api/package.json b/exercises/practice/rest-api/package.json index f0b39a0c36..24cf2452f8 100644 --- a/exercises/practice/rest-api/package.json +++ b/exercises/practice/rest-api/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/rest-api" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/reverse-string/.eslintrc b/exercises/practice/reverse-string/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/reverse-string/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/reverse-string/.gitignore b/exercises/practice/reverse-string/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/reverse-string/.gitignore +++ b/exercises/practice/reverse-string/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/reverse-string/babel.config.js b/exercises/practice/reverse-string/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/reverse-string/babel.config.js +++ b/exercises/practice/reverse-string/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/reverse-string/eslint.config.mjs b/exercises/practice/reverse-string/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/reverse-string/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/reverse-string/jest.config.js b/exercises/practice/reverse-string/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/reverse-string/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/reverse-string/package.json b/exercises/practice/reverse-string/package.json index 6bb0ddc182..f7cfa62148 100644 --- a/exercises/practice/reverse-string/package.json +++ b/exercises/practice/reverse-string/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/reverse-string" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/rna-transcription/.eslintrc b/exercises/practice/rna-transcription/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/rna-transcription/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/rna-transcription/.gitignore b/exercises/practice/rna-transcription/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/rna-transcription/.gitignore +++ b/exercises/practice/rna-transcription/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/rna-transcription/babel.config.js b/exercises/practice/rna-transcription/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/rna-transcription/babel.config.js +++ b/exercises/practice/rna-transcription/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/rna-transcription/eslint.config.mjs b/exercises/practice/rna-transcription/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/rna-transcription/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/rna-transcription/jest.config.js b/exercises/practice/rna-transcription/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/rna-transcription/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/rna-transcription/package.json b/exercises/practice/rna-transcription/package.json index 0048a96bbb..02d99bddca 100644 --- a/exercises/practice/rna-transcription/package.json +++ b/exercises/practice/rna-transcription/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/rna-transcription" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/robot-name/.eslintrc b/exercises/practice/robot-name/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/robot-name/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/robot-name/.gitignore b/exercises/practice/robot-name/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/robot-name/.gitignore +++ b/exercises/practice/robot-name/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/robot-name/babel.config.js b/exercises/practice/robot-name/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/robot-name/babel.config.js +++ b/exercises/practice/robot-name/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/robot-name/eslint.config.mjs b/exercises/practice/robot-name/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/robot-name/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/robot-name/jest.config.js b/exercises/practice/robot-name/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/robot-name/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/robot-name/package.json b/exercises/practice/robot-name/package.json index db2e1d1d76..6a1963c128 100644 --- a/exercises/practice/robot-name/package.json +++ b/exercises/practice/robot-name/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/robot-name" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/robot-simulator/.eslintrc b/exercises/practice/robot-simulator/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/robot-simulator/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/robot-simulator/.gitignore b/exercises/practice/robot-simulator/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/robot-simulator/.gitignore +++ b/exercises/practice/robot-simulator/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/robot-simulator/babel.config.js b/exercises/practice/robot-simulator/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/robot-simulator/babel.config.js +++ b/exercises/practice/robot-simulator/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/robot-simulator/eslint.config.mjs b/exercises/practice/robot-simulator/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/robot-simulator/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/robot-simulator/jest.config.js b/exercises/practice/robot-simulator/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/robot-simulator/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/robot-simulator/package.json b/exercises/practice/robot-simulator/package.json index d8df028a79..06e71208a5 100644 --- a/exercises/practice/robot-simulator/package.json +++ b/exercises/practice/robot-simulator/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/robot-simulator" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/roman-numerals/.eslintrc b/exercises/practice/roman-numerals/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/roman-numerals/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/roman-numerals/.gitignore b/exercises/practice/roman-numerals/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/roman-numerals/.gitignore +++ b/exercises/practice/roman-numerals/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/roman-numerals/babel.config.js b/exercises/practice/roman-numerals/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/roman-numerals/babel.config.js +++ b/exercises/practice/roman-numerals/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/roman-numerals/eslint.config.mjs b/exercises/practice/roman-numerals/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/roman-numerals/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/roman-numerals/jest.config.js b/exercises/practice/roman-numerals/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/roman-numerals/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/roman-numerals/package.json b/exercises/practice/roman-numerals/package.json index ec4628855c..95e427a5ea 100644 --- a/exercises/practice/roman-numerals/package.json +++ b/exercises/practice/roman-numerals/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/roman-numerals" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/rotational-cipher/.eslintrc b/exercises/practice/rotational-cipher/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/rotational-cipher/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/rotational-cipher/.gitignore b/exercises/practice/rotational-cipher/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/rotational-cipher/.gitignore +++ b/exercises/practice/rotational-cipher/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/rotational-cipher/babel.config.js b/exercises/practice/rotational-cipher/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/rotational-cipher/babel.config.js +++ b/exercises/practice/rotational-cipher/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/rotational-cipher/eslint.config.mjs b/exercises/practice/rotational-cipher/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/rotational-cipher/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/rotational-cipher/jest.config.js b/exercises/practice/rotational-cipher/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/rotational-cipher/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/rotational-cipher/package.json b/exercises/practice/rotational-cipher/package.json index 8289ddbd06..02ab39b56b 100644 --- a/exercises/practice/rotational-cipher/package.json +++ b/exercises/practice/rotational-cipher/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/rotational-cipher" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/run-length-encoding/.eslintrc b/exercises/practice/run-length-encoding/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/run-length-encoding/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/run-length-encoding/.gitignore b/exercises/practice/run-length-encoding/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/run-length-encoding/.gitignore +++ b/exercises/practice/run-length-encoding/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/run-length-encoding/babel.config.js b/exercises/practice/run-length-encoding/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/run-length-encoding/babel.config.js +++ b/exercises/practice/run-length-encoding/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/run-length-encoding/eslint.config.mjs b/exercises/practice/run-length-encoding/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/run-length-encoding/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/run-length-encoding/jest.config.js b/exercises/practice/run-length-encoding/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/run-length-encoding/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/run-length-encoding/package.json b/exercises/practice/run-length-encoding/package.json index 8d1a15b9e9..571a982e23 100644 --- a/exercises/practice/run-length-encoding/package.json +++ b/exercises/practice/run-length-encoding/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/run-length-encoding" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/saddle-points/.eslintrc b/exercises/practice/saddle-points/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/saddle-points/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/saddle-points/.gitignore b/exercises/practice/saddle-points/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/saddle-points/.gitignore +++ b/exercises/practice/saddle-points/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/saddle-points/babel.config.js b/exercises/practice/saddle-points/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/saddle-points/babel.config.js +++ b/exercises/practice/saddle-points/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/saddle-points/eslint.config.mjs b/exercises/practice/saddle-points/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/saddle-points/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/saddle-points/jest.config.js b/exercises/practice/saddle-points/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/saddle-points/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/saddle-points/package.json b/exercises/practice/saddle-points/package.json index 6912ebf017..3f9ddbcdce 100644 --- a/exercises/practice/saddle-points/package.json +++ b/exercises/practice/saddle-points/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/saddle-points" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/satellite/.eslintrc b/exercises/practice/satellite/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/satellite/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/satellite/.gitignore b/exercises/practice/satellite/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/satellite/.gitignore +++ b/exercises/practice/satellite/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/satellite/babel.config.js b/exercises/practice/satellite/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/satellite/babel.config.js +++ b/exercises/practice/satellite/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/satellite/eslint.config.mjs b/exercises/practice/satellite/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/satellite/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/satellite/jest.config.js b/exercises/practice/satellite/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/satellite/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/satellite/package.json b/exercises/practice/satellite/package.json index 1d7b142744..11203acc3d 100644 --- a/exercises/practice/satellite/package.json +++ b/exercises/practice/satellite/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/satellite" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/say/.eslintrc b/exercises/practice/say/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/say/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/say/.gitignore b/exercises/practice/say/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/say/.gitignore +++ b/exercises/practice/say/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/say/babel.config.js b/exercises/practice/say/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/say/babel.config.js +++ b/exercises/practice/say/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/say/eslint.config.mjs b/exercises/practice/say/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/say/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/say/jest.config.js b/exercises/practice/say/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/say/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/say/package.json b/exercises/practice/say/package.json index e0fdf27211..14fc749571 100644 --- a/exercises/practice/say/package.json +++ b/exercises/practice/say/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/say" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/scale-generator/.eslintrc b/exercises/practice/scale-generator/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/scale-generator/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/scale-generator/.gitignore b/exercises/practice/scale-generator/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/scale-generator/.gitignore +++ b/exercises/practice/scale-generator/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/scale-generator/babel.config.js b/exercises/practice/scale-generator/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/scale-generator/babel.config.js +++ b/exercises/practice/scale-generator/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/scale-generator/eslint.config.mjs b/exercises/practice/scale-generator/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/scale-generator/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/scale-generator/jest.config.js b/exercises/practice/scale-generator/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/scale-generator/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/scale-generator/package.json b/exercises/practice/scale-generator/package.json index 7417e80370..8fb0dae0ce 100644 --- a/exercises/practice/scale-generator/package.json +++ b/exercises/practice/scale-generator/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/scale-generator" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/scrabble-score/.eslintrc b/exercises/practice/scrabble-score/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/scrabble-score/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/scrabble-score/.gitignore b/exercises/practice/scrabble-score/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/scrabble-score/.gitignore +++ b/exercises/practice/scrabble-score/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/scrabble-score/babel.config.js b/exercises/practice/scrabble-score/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/scrabble-score/babel.config.js +++ b/exercises/practice/scrabble-score/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/scrabble-score/eslint.config.mjs b/exercises/practice/scrabble-score/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/scrabble-score/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/scrabble-score/jest.config.js b/exercises/practice/scrabble-score/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/scrabble-score/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/scrabble-score/package.json b/exercises/practice/scrabble-score/package.json index fd72a0a847..2d91fda022 100644 --- a/exercises/practice/scrabble-score/package.json +++ b/exercises/practice/scrabble-score/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/scrabble-score" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/secret-handshake/.eslintrc b/exercises/practice/secret-handshake/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/secret-handshake/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/secret-handshake/.gitignore b/exercises/practice/secret-handshake/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/secret-handshake/.gitignore +++ b/exercises/practice/secret-handshake/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/secret-handshake/babel.config.js b/exercises/practice/secret-handshake/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/secret-handshake/babel.config.js +++ b/exercises/practice/secret-handshake/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/secret-handshake/eslint.config.mjs b/exercises/practice/secret-handshake/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/secret-handshake/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/secret-handshake/jest.config.js b/exercises/practice/secret-handshake/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/secret-handshake/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/secret-handshake/package.json b/exercises/practice/secret-handshake/package.json index 80a2d5afee..b5cd0040ec 100644 --- a/exercises/practice/secret-handshake/package.json +++ b/exercises/practice/secret-handshake/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/secret-handshake" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/series/.eslintrc b/exercises/practice/series/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/series/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/series/.gitignore b/exercises/practice/series/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/series/.gitignore +++ b/exercises/practice/series/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/series/babel.config.js b/exercises/practice/series/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/series/babel.config.js +++ b/exercises/practice/series/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/series/eslint.config.mjs b/exercises/practice/series/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/series/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/series/jest.config.js b/exercises/practice/series/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/series/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/series/package.json b/exercises/practice/series/package.json index bc3d751716..63f749406a 100644 --- a/exercises/practice/series/package.json +++ b/exercises/practice/series/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/series" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/sieve/.eslintrc b/exercises/practice/sieve/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/sieve/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/sieve/.gitignore b/exercises/practice/sieve/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/sieve/.gitignore +++ b/exercises/practice/sieve/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/sieve/babel.config.js b/exercises/practice/sieve/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/sieve/babel.config.js +++ b/exercises/practice/sieve/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/sieve/eslint.config.mjs b/exercises/practice/sieve/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/sieve/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/sieve/jest.config.js b/exercises/practice/sieve/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/sieve/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/sieve/package.json b/exercises/practice/sieve/package.json index 47550c3b80..2eb9a659cb 100644 --- a/exercises/practice/sieve/package.json +++ b/exercises/practice/sieve/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/sieve" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/simple-cipher/.eslintrc b/exercises/practice/simple-cipher/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/simple-cipher/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/simple-cipher/.gitignore b/exercises/practice/simple-cipher/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/simple-cipher/.gitignore +++ b/exercises/practice/simple-cipher/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/simple-cipher/babel.config.js b/exercises/practice/simple-cipher/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/simple-cipher/babel.config.js +++ b/exercises/practice/simple-cipher/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/simple-cipher/eslint.config.mjs b/exercises/practice/simple-cipher/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/simple-cipher/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/simple-cipher/jest.config.js b/exercises/practice/simple-cipher/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/simple-cipher/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/simple-cipher/package.json b/exercises/practice/simple-cipher/package.json index 66eb6feefe..e0570ce64a 100644 --- a/exercises/practice/simple-cipher/package.json +++ b/exercises/practice/simple-cipher/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/simple-cipher" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/simple-linked-list/.eslintrc b/exercises/practice/simple-linked-list/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/simple-linked-list/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/simple-linked-list/.gitignore b/exercises/practice/simple-linked-list/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/simple-linked-list/.gitignore +++ b/exercises/practice/simple-linked-list/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/simple-linked-list/babel.config.js b/exercises/practice/simple-linked-list/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/simple-linked-list/babel.config.js +++ b/exercises/practice/simple-linked-list/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/simple-linked-list/eslint.config.mjs b/exercises/practice/simple-linked-list/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/simple-linked-list/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/simple-linked-list/jest.config.js b/exercises/practice/simple-linked-list/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/simple-linked-list/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/simple-linked-list/package.json b/exercises/practice/simple-linked-list/package.json index e3ea8a82ca..63c9bfd184 100644 --- a/exercises/practice/simple-linked-list/package.json +++ b/exercises/practice/simple-linked-list/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/simple-linked-list" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/space-age/.eslintrc b/exercises/practice/space-age/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/space-age/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/space-age/.gitignore b/exercises/practice/space-age/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/space-age/.gitignore +++ b/exercises/practice/space-age/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/space-age/babel.config.js b/exercises/practice/space-age/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/space-age/babel.config.js +++ b/exercises/practice/space-age/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/space-age/eslint.config.mjs b/exercises/practice/space-age/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/space-age/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/space-age/jest.config.js b/exercises/practice/space-age/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/space-age/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/space-age/package.json b/exercises/practice/space-age/package.json index 816ef25b66..9d1eaeb182 100644 --- a/exercises/practice/space-age/package.json +++ b/exercises/practice/space-age/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/space-age" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/spiral-matrix/.eslintrc b/exercises/practice/spiral-matrix/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/spiral-matrix/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/spiral-matrix/.gitignore b/exercises/practice/spiral-matrix/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/spiral-matrix/.gitignore +++ b/exercises/practice/spiral-matrix/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/spiral-matrix/babel.config.js b/exercises/practice/spiral-matrix/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/spiral-matrix/babel.config.js +++ b/exercises/practice/spiral-matrix/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/spiral-matrix/eslint.config.mjs b/exercises/practice/spiral-matrix/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/spiral-matrix/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/spiral-matrix/jest.config.js b/exercises/practice/spiral-matrix/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/spiral-matrix/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/spiral-matrix/package.json b/exercises/practice/spiral-matrix/package.json index 7f26d46dfa..652e45af30 100644 --- a/exercises/practice/spiral-matrix/package.json +++ b/exercises/practice/spiral-matrix/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/spiral-matrix" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/square-root/.eslintrc b/exercises/practice/square-root/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/square-root/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/square-root/.gitignore b/exercises/practice/square-root/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/square-root/.gitignore +++ b/exercises/practice/square-root/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/square-root/babel.config.js b/exercises/practice/square-root/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/square-root/babel.config.js +++ b/exercises/practice/square-root/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/square-root/eslint.config.mjs b/exercises/practice/square-root/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/square-root/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/square-root/jest.config.js b/exercises/practice/square-root/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/square-root/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/square-root/package.json b/exercises/practice/square-root/package.json index f15dc421c8..ce4788330f 100644 --- a/exercises/practice/square-root/package.json +++ b/exercises/practice/square-root/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/square-root" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/state-of-tic-tac-toe/.eslintrc b/exercises/practice/state-of-tic-tac-toe/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/state-of-tic-tac-toe/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/state-of-tic-tac-toe/.gitignore b/exercises/practice/state-of-tic-tac-toe/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/state-of-tic-tac-toe/.gitignore +++ b/exercises/practice/state-of-tic-tac-toe/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/state-of-tic-tac-toe/babel.config.js b/exercises/practice/state-of-tic-tac-toe/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/state-of-tic-tac-toe/babel.config.js +++ b/exercises/practice/state-of-tic-tac-toe/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/state-of-tic-tac-toe/eslint.config.mjs b/exercises/practice/state-of-tic-tac-toe/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/state-of-tic-tac-toe/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/state-of-tic-tac-toe/jest.config.js b/exercises/practice/state-of-tic-tac-toe/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/state-of-tic-tac-toe/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/state-of-tic-tac-toe/package.json b/exercises/practice/state-of-tic-tac-toe/package.json index 79c44840b8..3d733c7210 100644 --- a/exercises/practice/state-of-tic-tac-toe/package.json +++ b/exercises/practice/state-of-tic-tac-toe/package.json @@ -15,20 +15,25 @@ "directory": "exercises/practice/state-of-tic-tac-toe" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/strain/.eslintrc b/exercises/practice/strain/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/strain/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/strain/.gitignore b/exercises/practice/strain/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/strain/.gitignore +++ b/exercises/practice/strain/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/strain/babel.config.js b/exercises/practice/strain/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/strain/babel.config.js +++ b/exercises/practice/strain/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/strain/eslint.config.mjs b/exercises/practice/strain/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/strain/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/strain/jest.config.js b/exercises/practice/strain/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/strain/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/strain/package.json b/exercises/practice/strain/package.json index a3815a8137..8a6a4cadc2 100644 --- a/exercises/practice/strain/package.json +++ b/exercises/practice/strain/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/strain" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/sublist/.eslintrc b/exercises/practice/sublist/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/sublist/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/sublist/.gitignore b/exercises/practice/sublist/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/sublist/.gitignore +++ b/exercises/practice/sublist/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/sublist/babel.config.js b/exercises/practice/sublist/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/sublist/babel.config.js +++ b/exercises/practice/sublist/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/sublist/eslint.config.mjs b/exercises/practice/sublist/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/sublist/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/sublist/jest.config.js b/exercises/practice/sublist/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/sublist/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/sublist/package.json b/exercises/practice/sublist/package.json index 15ce9925ae..034ef2f7e5 100644 --- a/exercises/practice/sublist/package.json +++ b/exercises/practice/sublist/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/sublist" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/sum-of-multiples/.eslintrc b/exercises/practice/sum-of-multiples/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/sum-of-multiples/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/sum-of-multiples/.gitignore b/exercises/practice/sum-of-multiples/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/sum-of-multiples/.gitignore +++ b/exercises/practice/sum-of-multiples/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/sum-of-multiples/babel.config.js b/exercises/practice/sum-of-multiples/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/sum-of-multiples/babel.config.js +++ b/exercises/practice/sum-of-multiples/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/sum-of-multiples/eslint.config.mjs b/exercises/practice/sum-of-multiples/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/sum-of-multiples/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/sum-of-multiples/jest.config.js b/exercises/practice/sum-of-multiples/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/sum-of-multiples/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/sum-of-multiples/package.json b/exercises/practice/sum-of-multiples/package.json index 3ea73e7715..c8d0e8269a 100644 --- a/exercises/practice/sum-of-multiples/package.json +++ b/exercises/practice/sum-of-multiples/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/sum-of-multiples" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/tournament/.eslintrc b/exercises/practice/tournament/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/tournament/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/tournament/.gitignore b/exercises/practice/tournament/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/tournament/.gitignore +++ b/exercises/practice/tournament/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/tournament/babel.config.js b/exercises/practice/tournament/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/tournament/babel.config.js +++ b/exercises/practice/tournament/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/tournament/eslint.config.mjs b/exercises/practice/tournament/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/tournament/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/tournament/jest.config.js b/exercises/practice/tournament/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/tournament/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/tournament/package.json b/exercises/practice/tournament/package.json index 0a2eb40548..a281860087 100644 --- a/exercises/practice/tournament/package.json +++ b/exercises/practice/tournament/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/tournament" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/transpose/.eslintrc b/exercises/practice/transpose/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/transpose/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/transpose/.gitignore b/exercises/practice/transpose/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/transpose/.gitignore +++ b/exercises/practice/transpose/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/transpose/babel.config.js b/exercises/practice/transpose/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/transpose/babel.config.js +++ b/exercises/practice/transpose/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/transpose/eslint.config.mjs b/exercises/practice/transpose/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/transpose/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/transpose/jest.config.js b/exercises/practice/transpose/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/transpose/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/transpose/package.json b/exercises/practice/transpose/package.json index 67426ae640..b769b3c7c3 100644 --- a/exercises/practice/transpose/package.json +++ b/exercises/practice/transpose/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/transpose" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/triangle/.eslintrc b/exercises/practice/triangle/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/triangle/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/triangle/.gitignore b/exercises/practice/triangle/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/triangle/.gitignore +++ b/exercises/practice/triangle/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/triangle/babel.config.js b/exercises/practice/triangle/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/triangle/babel.config.js +++ b/exercises/practice/triangle/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/triangle/eslint.config.mjs b/exercises/practice/triangle/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/triangle/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/triangle/jest.config.js b/exercises/practice/triangle/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/triangle/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/triangle/package.json b/exercises/practice/triangle/package.json index 11db01d7f7..f99f006148 100644 --- a/exercises/practice/triangle/package.json +++ b/exercises/practice/triangle/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/triangle" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/trinary/.eslintrc b/exercises/practice/trinary/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/trinary/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/trinary/.gitignore b/exercises/practice/trinary/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/trinary/.gitignore +++ b/exercises/practice/trinary/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/trinary/babel.config.js b/exercises/practice/trinary/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/trinary/babel.config.js +++ b/exercises/practice/trinary/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/trinary/eslint.config.mjs b/exercises/practice/trinary/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/trinary/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/trinary/jest.config.js b/exercises/practice/trinary/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/trinary/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/trinary/package.json b/exercises/practice/trinary/package.json index 25b020b2f5..05d667842c 100644 --- a/exercises/practice/trinary/package.json +++ b/exercises/practice/trinary/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/trinary" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/twelve-days/.eslintrc b/exercises/practice/twelve-days/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/twelve-days/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/twelve-days/.gitignore b/exercises/practice/twelve-days/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/twelve-days/.gitignore +++ b/exercises/practice/twelve-days/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/twelve-days/babel.config.js b/exercises/practice/twelve-days/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/twelve-days/babel.config.js +++ b/exercises/practice/twelve-days/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/twelve-days/eslint.config.mjs b/exercises/practice/twelve-days/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/twelve-days/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/twelve-days/jest.config.js b/exercises/practice/twelve-days/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/twelve-days/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/twelve-days/package.json b/exercises/practice/twelve-days/package.json index 2d7f27d838..4bc9a41db1 100644 --- a/exercises/practice/twelve-days/package.json +++ b/exercises/practice/twelve-days/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/twelve-days" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/two-bucket/.eslintrc b/exercises/practice/two-bucket/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/two-bucket/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/two-bucket/.gitignore b/exercises/practice/two-bucket/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/two-bucket/.gitignore +++ b/exercises/practice/two-bucket/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/two-bucket/babel.config.js b/exercises/practice/two-bucket/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/two-bucket/babel.config.js +++ b/exercises/practice/two-bucket/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/two-bucket/eslint.config.mjs b/exercises/practice/two-bucket/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/two-bucket/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/two-bucket/jest.config.js b/exercises/practice/two-bucket/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/two-bucket/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/two-bucket/package.json b/exercises/practice/two-bucket/package.json index 0938cf7ad4..7a01c0a431 100644 --- a/exercises/practice/two-bucket/package.json +++ b/exercises/practice/two-bucket/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/two-bucket" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/two-fer/.eslintrc b/exercises/practice/two-fer/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/two-fer/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/two-fer/.gitignore b/exercises/practice/two-fer/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/two-fer/.gitignore +++ b/exercises/practice/two-fer/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/two-fer/babel.config.js b/exercises/practice/two-fer/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/two-fer/babel.config.js +++ b/exercises/practice/two-fer/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/two-fer/eslint.config.mjs b/exercises/practice/two-fer/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/two-fer/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/two-fer/jest.config.js b/exercises/practice/two-fer/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/two-fer/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/two-fer/package.json b/exercises/practice/two-fer/package.json index 105457b83c..b90760b7da 100644 --- a/exercises/practice/two-fer/package.json +++ b/exercises/practice/two-fer/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/two-fer" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/variable-length-quantity/.eslintrc b/exercises/practice/variable-length-quantity/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/variable-length-quantity/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/variable-length-quantity/.gitignore b/exercises/practice/variable-length-quantity/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/variable-length-quantity/.gitignore +++ b/exercises/practice/variable-length-quantity/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/variable-length-quantity/babel.config.js b/exercises/practice/variable-length-quantity/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/variable-length-quantity/babel.config.js +++ b/exercises/practice/variable-length-quantity/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/variable-length-quantity/eslint.config.mjs b/exercises/practice/variable-length-quantity/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/variable-length-quantity/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/variable-length-quantity/jest.config.js b/exercises/practice/variable-length-quantity/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/variable-length-quantity/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/variable-length-quantity/package.json b/exercises/practice/variable-length-quantity/package.json index d75869b68e..221565f01c 100644 --- a/exercises/practice/variable-length-quantity/package.json +++ b/exercises/practice/variable-length-quantity/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/variable-length-quantity" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/word-count/.eslintrc b/exercises/practice/word-count/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/word-count/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/word-count/.gitignore b/exercises/practice/word-count/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/word-count/.gitignore +++ b/exercises/practice/word-count/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/word-count/babel.config.js b/exercises/practice/word-count/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/word-count/babel.config.js +++ b/exercises/practice/word-count/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/word-count/eslint.config.mjs b/exercises/practice/word-count/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/word-count/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/word-count/jest.config.js b/exercises/practice/word-count/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/word-count/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/word-count/package.json b/exercises/practice/word-count/package.json index c97ceb2240..065e71a198 100644 --- a/exercises/practice/word-count/package.json +++ b/exercises/practice/word-count/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/word-count" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/word-search/.eslintrc b/exercises/practice/word-search/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/word-search/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/word-search/.gitignore b/exercises/practice/word-search/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/word-search/.gitignore +++ b/exercises/practice/word-search/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/word-search/babel.config.js b/exercises/practice/word-search/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/word-search/babel.config.js +++ b/exercises/practice/word-search/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/word-search/eslint.config.mjs b/exercises/practice/word-search/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/word-search/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/word-search/jest.config.js b/exercises/practice/word-search/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/word-search/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/word-search/package.json b/exercises/practice/word-search/package.json index e85873c95c..db73fd477a 100644 --- a/exercises/practice/word-search/package.json +++ b/exercises/practice/word-search/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/word-search" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/wordy/.eslintrc b/exercises/practice/wordy/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/wordy/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/wordy/.gitignore b/exercises/practice/wordy/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/wordy/.gitignore +++ b/exercises/practice/wordy/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/wordy/babel.config.js b/exercises/practice/wordy/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/wordy/babel.config.js +++ b/exercises/practice/wordy/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/wordy/eslint.config.mjs b/exercises/practice/wordy/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/wordy/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/wordy/jest.config.js b/exercises/practice/wordy/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/wordy/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/wordy/package.json b/exercises/practice/wordy/package.json index 3424ab1d91..2a42108878 100644 --- a/exercises/practice/wordy/package.json +++ b/exercises/practice/wordy/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/wordy" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/yacht/.eslintrc b/exercises/practice/yacht/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/yacht/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/yacht/.gitignore b/exercises/practice/yacht/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/yacht/.gitignore +++ b/exercises/practice/yacht/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/yacht/babel.config.js b/exercises/practice/yacht/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/yacht/babel.config.js +++ b/exercises/practice/yacht/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/yacht/eslint.config.mjs b/exercises/practice/yacht/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/yacht/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/yacht/jest.config.js b/exercises/practice/yacht/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/yacht/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/yacht/package.json b/exercises/practice/yacht/package.json index d463a6f569..c9a33a5be0 100644 --- a/exercises/practice/yacht/package.json +++ b/exercises/practice/yacht/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/yacht" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/zebra-puzzle/.eslintrc b/exercises/practice/zebra-puzzle/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/zebra-puzzle/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/zebra-puzzle/.gitignore b/exercises/practice/zebra-puzzle/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/zebra-puzzle/.gitignore +++ b/exercises/practice/zebra-puzzle/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/zebra-puzzle/babel.config.js b/exercises/practice/zebra-puzzle/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/zebra-puzzle/babel.config.js +++ b/exercises/practice/zebra-puzzle/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/zebra-puzzle/eslint.config.mjs b/exercises/practice/zebra-puzzle/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/zebra-puzzle/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/zebra-puzzle/jest.config.js b/exercises/practice/zebra-puzzle/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/zebra-puzzle/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/zebra-puzzle/package.json b/exercises/practice/zebra-puzzle/package.json index d387ca86cb..7e852a427a 100644 --- a/exercises/practice/zebra-puzzle/package.json +++ b/exercises/practice/zebra-puzzle/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/zebra-puzzle" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } diff --git a/exercises/practice/zipper/.eslintrc b/exercises/practice/zipper/.eslintrc deleted file mode 100644 index 1d4446029c..0000000000 --- a/exercises/practice/zipper/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "extends": "@exercism/eslint-config-javascript", - "env": { - "jest": true - }, - "overrides": [ - { - "files": [".meta/proof.ci.js", ".meta/exemplar.js", "*.spec.js"], - "excludedFiles": ["custom.spec.js"], - "extends": "@exercism/eslint-config-javascript/maintainers" - } - ] -} diff --git a/exercises/practice/zipper/.gitignore b/exercises/practice/zipper/.gitignore index 31c57dd53a..0c88ff6ec3 100644 --- a/exercises/practice/zipper/.gitignore +++ b/exercises/practice/zipper/.gitignore @@ -1,5 +1,5 @@ /node_modules /bin/configlet /bin/configlet.exe -/pnpm-lock.yaml +/package-lock.json /yarn.lock diff --git a/exercises/practice/zipper/babel.config.js b/exercises/practice/zipper/babel.config.js index b781d5a667..bee6710c47 100644 --- a/exercises/practice/zipper/babel.config.js +++ b/exercises/practice/zipper/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['@exercism/babel-preset-javascript'], + presets: [['@exercism/babel-preset-javascript', { corejs: '3.39' }]], plugins: [], }; diff --git a/exercises/practice/zipper/eslint.config.mjs b/exercises/practice/zipper/eslint.config.mjs new file mode 100644 index 0000000000..ca517111ed --- /dev/null +++ b/exercises/practice/zipper/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import config from '@exercism/eslint-config-javascript'; +import maintainersConfig from '@exercism/eslint-config-javascript/maintainers.mjs'; + +import globals from 'globals'; + +export default [ + ...config, + ...maintainersConfig, + { + files: maintainersConfig[1].files, + rules: { + 'jest/expect-expect': ['warn', { assertFunctionNames: ['expect*'] }], + }, + }, + { + files: ['scripts/**/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // <> + { + ignores: [ + // # Protected or generated + '/.appends/**/*', + '/.github/**/*', + '/.vscode/**/*', + + // # Binaries + '/bin/*', + + // # Configuration + '/config', + '/babel.config.js', + + // # Typings + '/exercises/**/global.d.ts', + '/exercises/**/env.d.ts', + ], + }, +]; diff --git a/exercises/practice/zipper/jest.config.js b/exercises/practice/zipper/jest.config.js new file mode 100644 index 0000000000..ec8e908127 --- /dev/null +++ b/exercises/practice/zipper/jest.config.js @@ -0,0 +1,22 @@ +module.exports = { + verbose: true, + projects: [''], + testMatch: [ + '**/__tests__/**/*.[jt]s?(x)', + '**/test/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[jt]s?(x)', + ], + testPathIgnorePatterns: [ + '/(?:production_)?node_modules/', + '.d.ts$', + '/test/fixtures', + '/test/helpers', + '__mocks__', + ], + transform: { + '^.+\\.[jt]sx?$': 'babel-jest', + }, + moduleNameMapper: { + '^(\\.\\/.+)\\.js$': '$1', + }, +}; diff --git a/exercises/practice/zipper/package.json b/exercises/practice/zipper/package.json index b6273b50f2..0c99c8669e 100644 --- a/exercises/practice/zipper/package.json +++ b/exercises/practice/zipper/package.json @@ -10,20 +10,25 @@ "directory": "exercises/practice/zipper" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@exercism/babel-preset-javascript": "^0.2.1", - "@exercism/eslint-config-javascript": "^0.6.0", - "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", - "babel-jest": "^29.6.4", - "core-js": "~3.37.1", - "eslint": "^8.49.0", + "@exercism/babel-preset-javascript": "^0.5.1", + "@exercism/eslint-config-javascript": "^0.8.1", + "@jest/globals": "^29.7.0", + "@types/node": "^22.10.3", + "@types/shelljs": "^0.8.15", + "babel-jest": "^29.7.0", + "core-js": "~3.39.0", + "diff": "^7.0.0", + "eslint": "^9.17.0", + "expect": "^29.7.0", + "globals": "^15.14.0", "jest": "^29.7.0" }, "dependencies": {}, "scripts": { - "test": "jest ./*", - "watch": "jest --watch ./*", - "lint": "eslint ." - } + "lint": "corepack pnpm eslint .", + "test": "corepack pnpm jest", + "watch": "corepack pnpm jest --watch", + "format": "corepack pnpm prettier -w ." + }, + "packageManager": "pnpm@9.15.2" } From 55ef36cf5a3ed649fec4ab1b44c48e939e564be6 Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Thu, 2 Jan 2025 19:07:02 +0100 Subject: [PATCH 10/11] Update latent references --- CONTRIBUTING.md | 14 ++++++-- README.md | 12 ++++--- exercise-package.json | 37 -------------------- reference/implementing-a-concept-exercise.md | 6 ++-- scripts/checksum.mjs | 21 ++++++----- scripts/ci-check.mjs | 22 +++++++----- scripts/sync.mjs | 10 +++--- 7 files changed, 55 insertions(+), 67 deletions(-) delete mode 100644 exercise-package.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1f527611e8..4aa8847d1e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -214,7 +214,7 @@ We have various `scripts` to aid with maintaining and contributing to this repos ```js /* - * Run this script (from root directory): npx babel-node scripts/format + * Run this script (from root directory): corepack pnpm node scripts/format.mjs * * This runs `prettier` on all applicable files, FORCES using the same version * as the CI uses to check if the files have been formatted. @@ -239,7 +239,17 @@ If the `ASSIGNMENT` environment variable is set, only _that_ exercise is tested. For example, if you only want to lint `two-fer`, you may, depending on your environment use: ```shell -ASSIGNMENT=two-fer npx babel-node scripts/lint +ASSIGNMENT=practice/two-fer corepack pnpm node scripts/lint.mjs +``` + +Note: on Windows, if you're not in a POSIX style command line, you can use `cross-env` to make this work: + +```shell +# if installed globally +cross-env ASSIGNMENT=practice/two-fer corepack pnpm node scripts/lint.mjs + +# otherwise +corepack pnpm dlx cross-env ASSIGNMENT=practice/two-fer node scripts/lint.mjs ``` #### `test` diff --git a/README.md b/README.md index 99fb14e61d..0d83cd89f2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Configlet](https://github.com/exercism/javascript/actions/workflows/configlet.yml/badge.svg)](https://github.com/exercism/javascript/actions/workflows/configlet.yml) [![javascript / main](https://github.com/exercism/javascript/workflows/javascript%20/%20main/badge.svg)](https://github.com/exercism/javascript/actions?query=workflow%3A%22javascript+%2F+main%22) -> [!IMPORTANT] +> [!IMPORTANT] > We 💙 our community but **this repository does not accept community contributions at this time**.
> There are no active maintainers to review PRs.
> Please read this [community blog post][freeing-maintainers] for details. @@ -48,21 +48,25 @@ This runs `jest` tests for all sample solutions. This _does not_ use the regular way to run `jest`, because the example solution files must be renamed to be imported correctly into the test files. ```shell -npx babel-node scripts/test +corepack pnpm node scripts/test.mjs ``` If the `ASSIGNMENT` environment variable is set, only _that_ exercise is tested. For example, if you only want to test the `example.js` for the practice exercise `two-fer`, you may, depending on your environment, use: ```shell -ASSIGNMENT=practice/two-fer npx babel-node scripts/test +ASSIGNMENT=practice/two-fer corepack pnpm node scripts/test.mjs ``` > Running on Windows? Depending on your shell, environment variables are set differently. > You can use `cross-env` to normalize this. The following should work across environments: > > ```bash -> npx cross-env ASSIGNMENT=practice/two-fer babel-node scripts/test +> # if installed globally +> cross-env ASSIGNMENT=practice/two-fer corepack pnpm node scripts/test.mjs +> +> # otherwise +> corepack pnpm dlx cross-env ASSIGNMENT=practice/two-fer node scripts/test.mjs > ``` ## Related repositories diff --git a/exercise-package.json b/exercise-package.json deleted file mode 100644 index 372df8dc6d..0000000000 --- a/exercise-package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@exercism/javascript", - "description": "Exercism exercises in Javascript.", - "author": "Katrina Owen", - "contributors": [ - "Derk-Jan Karrenbeld (https://derk-jan.com)", - "Tejas Bubane (https://tejasbubane.github.io/)" - ], - "private": true, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/exercism/javascript" - }, - "devDependencies": { - "@exercism/babel-preset-javascript": "^0.5.1", - "@exercism/eslint-config-javascript": "^0.8.1", - "@jest/globals": "^29.7.0", - "@types/node": "^22.10.3", - "@types/shelljs": "^0.8.15", - "babel-jest": "^29.7.0", - "core-js": "~3.39.0", - "diff": "^7.0.0", - "eslint": "^9.17.0", - "expect": "^29.7.0", - "globals": "^15.14.0", - "jest": "^29.7.0" - }, - "dependencies": {}, - "scripts": { - "lint": "corepack pnpm eslint .", - "test": "corepack pnpm jest", - "watch": "corepack pnpm jest --watch", - "format": "corepack pnpm prettier -w ." - }, - "packageManager": "pnpm@9.15.2" -} diff --git a/reference/implementing-a-concept-exercise.md b/reference/implementing-a-concept-exercise.md index 0d7a76bdf4..5bccee7f3d 100644 --- a/reference/implementing-a-concept-exercise.md +++ b/reference/implementing-a-concept-exercise.md @@ -47,10 +47,11 @@ github/exercism | |── config.json | |── design.md | └── exemplar.js - ├── .eslintrc ├── .gitignore ├── babel.config.js + ├── eslint.config.mjs ├── global.d.ts (only if there are complex types required) + ├── jest.config.js ├── <slug>.js ├── <slug>.spec.js ├── package.json @@ -64,9 +65,10 @@ The configuration files may be copied from another exercise. We aim to keep thes > [!WARNING] > Just like with _practice_ exercises, we will provide a script for you to run. This script needs to be updated from its v2 version, which has not yet been done. -- `.eslintrc` - `.gitignore` - `babel.config.js` +- `eslint.config.mjs` +- `jest.config.js` - `package.json` - `yarn.lock` diff --git a/scripts/checksum.mjs b/scripts/checksum.mjs index 428662de4d..b162d11efe 100644 --- a/scripts/checksum.mjs +++ b/scripts/checksum.mjs @@ -99,9 +99,9 @@ function checksumAll(filename, rootFileName = filename) { `Checking integrity of ${filename} in all ${_assignments.length} exercises`, ); - _assignments.forEach((assignment) => - checksumAssignment(assignment, filename, rootFileName, expectedSha), - ); + _assignments.forEach((assignment) => { + checksumAssignment(assignment, filename, rootFileName, expectedSha); + }); } registerExitHandler(); @@ -109,10 +109,15 @@ createExercisePackageJson(true); checksumAll('package.json', 'exercise-package.json'); -['.eslintrc', '.npmrc', 'babel.config.js', 'LICENSE', '.gitignore'].forEach( - (fileToCheck) => { - checksumAll(fileToCheck); - }, -); +[ + '.gitignore', + '.npmrc', + 'babel.config.js', + 'eslint.config.mjs', + 'jest.config.js', + 'LICENSE', +].forEach((fileToCheck) => { + checksumAll(fileToCheck); +}); echo('All files passed the checksum test'); diff --git a/scripts/ci-check.mjs b/scripts/ci-check.mjs index 65d4cd5f54..b22651f2df 100644 --- a/scripts/ci-check.mjs +++ b/scripts/ci-check.mjs @@ -47,7 +47,9 @@ if (!envIsThruthy('SKIP_STUB', false)) { if (noStubs.length > 0) { echo(`[FAILURE] ${noStubs.length} missing a stub`); - noStubs.forEach((stub) => echo(`${stub} is missing a stub file`)); + noStubs.forEach((stub) => { + echo(`${stub} is missing a stub file`); + }); exit(-1); } else { echo('[SUCCES] All stubs are present'); @@ -61,7 +63,7 @@ if (!envIsThruthy('SKIP_INTEGRITY', false)) { // TODO: be able to pass in any amount of exercises at once if (exercises.length >= 8) { const checkResult = exec( - `npx babel-node ${join('scripts', 'checksum')}`, + `corepack pnpm node ${join('scripts', 'checksum.mjs')}`, ).code; if (checkResult !== 0) { @@ -69,7 +71,7 @@ if (!envIsThruthy('SKIP_INTEGRITY', false)) { } const nameCheckResult = exec( - `npx babel-node ${join('scripts', 'name-check')}`, + `corepack pnpm node ${join('scripts', 'name-check.mjs')}`, ).code; if (nameCheckResult !== 0) { @@ -80,7 +82,7 @@ if (!envIsThruthy('SKIP_INTEGRITY', false)) { env['ASSIGNMENT'] = exercise; const checkResult = exec( - `npx babel-node ${join('scripts', 'checksum')}`, + `corepack pnpm node ${join('scripts', 'checksum.mjs')}`, ).code; if (checkResult !== 0) { @@ -88,7 +90,7 @@ if (!envIsThruthy('SKIP_INTEGRITY', false)) { } const nameCheckResult = exec( - `npx babel-node ${join('scripts', 'name-check')}`, + `corepack pnpm node ${join('scripts', 'name-check.mjs')}`, ).code; if (nameCheckResult !== 0) { @@ -98,7 +100,7 @@ if (!envIsThruthy('SKIP_INTEGRITY', false)) { } const nameUniqResult = exec( - `npx babel-node ${join('scripts', 'name-uniq')}`, + `corepack pnpm node ${join('scripts', 'name-uniq.mjs')}`, ).code; if (nameUniqResult !== 0) { @@ -106,7 +108,7 @@ if (!envIsThruthy('SKIP_INTEGRITY', false)) { } const directoryResult = exec( - `npx babel-node ${join('scripts', 'directory-check')}`, + `corepack pnpm node ${join('scripts', 'directory-check.mjs')}`, ).code; if (directoryResult !== 0) { @@ -135,7 +137,9 @@ exercises.forEach(prepare); env['CLEANUP'] = true; -const checkResult = exec(`npx babel-node ${join('scripts', 'lint')}`).code; -if (checkResult != 0) { +const checkResult = exec( + `corepack pnpm node ${join('scripts', 'lint.mjs')}`, +).code; +if (checkResult !== 0) { exit(checkResult); } diff --git a/scripts/sync.mjs b/scripts/sync.mjs index d435fd2304..f870b3c576 100644 --- a/scripts/sync.mjs +++ b/scripts/sync.mjs @@ -21,7 +21,7 @@ import shell from 'shelljs'; import * as helpers from './helpers.mjs'; import path from 'node:path'; -const assignment = shell.env['ASSIGNMENT']; +const assignmentFromEnv = shell.env['ASSIGNMENT']; function copyConfigForAssignment(assignment) { const destination = path.join('exercises', assignment); @@ -82,13 +82,13 @@ function getCurrentPackageJson(assignmentPackageFilename) { helpers.registerExitHandler(); helpers.createExercisePackageJson(false); -if (assignment) { - if (!helpers.assertAssignment(assignment)) { +if (assignmentFromEnv) { + if (!helpers.assertAssignment(assignmentFromEnv)) { shell.exit(1); } - shell.echo('Syncing ' + assignment + '...'); - copyConfigForAssignment(assignment); + shell.echo('Syncing ' + assignmentFromEnv + '...'); + copyConfigForAssignment(assignmentFromEnv); } else { shell.echo('Syncing all assignments...'); helpers.assignments.forEach((assignment) => { From f8b5dee56c2d44f89735827807895ddff8e51c0e Mon Sep 17 00:00:00 2001 From: Derk-Jan Karrenbeld Date: Thu, 2 Jan 2025 19:12:42 +0100 Subject: [PATCH 11/11] Fix cleanups --- reference/implementing-a-concept-exercise.md | 4 ++-- scripts/ci-check.mjs | 2 +- scripts/ci.mjs | 2 +- scripts/helpers.mjs | 10 +++++----- scripts/lint.mjs | 2 +- scripts/pr-check.mjs | 6 ++++-- scripts/pr.mjs | 2 +- scripts/sync.mjs | 10 ++-------- 8 files changed, 17 insertions(+), 21 deletions(-) diff --git a/reference/implementing-a-concept-exercise.md b/reference/implementing-a-concept-exercise.md index 5bccee7f3d..a00f85310b 100644 --- a/reference/implementing-a-concept-exercise.md +++ b/reference/implementing-a-concept-exercise.md @@ -55,7 +55,7 @@ github/exercism ├── <slug>.js ├── <slug>.spec.js ├── package.json - └── yarn.lock + └── pnpm-lock.yaml ## Step 1: Add code files @@ -70,7 +70,7 @@ The configuration files may be copied from another exercise. We aim to keep thes - `eslint.config.mjs` - `jest.config.js` - `package.json` -- `yarn.lock` +- `pnpm-lock.yaml` The `package.json` file must be edited: diff --git a/scripts/ci-check.mjs b/scripts/ci-check.mjs index b22651f2df..8b6c2b614b 100644 --- a/scripts/ci-check.mjs +++ b/scripts/ci-check.mjs @@ -36,7 +36,7 @@ if (exercises.length === 1) { } } -registerExitHandler(); +registerExitHandler(false); if (!envIsThruthy('SKIP_STUB', false)) { echo('\n==========\nEnsure stubs are present\n'); diff --git a/scripts/ci.mjs b/scripts/ci.mjs index 9ad9104c4a..5828ff19f3 100644 --- a/scripts/ci.mjs +++ b/scripts/ci.mjs @@ -29,7 +29,7 @@ if (exercises.length === 0) { exit(0); } -registerExitHandler(); +registerExitHandler(false); env['PREPARE'] = false; env['CLEANUP'] = false; diff --git a/scripts/helpers.mjs b/scripts/helpers.mjs index 607787d62c..e6e425861c 100644 --- a/scripts/helpers.mjs +++ b/scripts/helpers.mjs @@ -186,9 +186,9 @@ export function createExercisePackageJson(writeSha = false) { const packageJson = JSON.parse(packageFile); // Filter out some unwanted packages and create package.json for exercises - SKIP_PACKAGES_FOR_CHECKSUM.forEach( - (pkg) => delete packageJson['devDependencies'][pkg], - ); + SKIP_PACKAGES_FOR_CHECKSUM.forEach((pkg) => { + delete packageJson['devDependencies'][pkg]; + }); const shellStr = new shell.ShellString( JSON.stringify(packageJson, undefined, 2) + '\n', @@ -375,9 +375,9 @@ export function prepare(assignment) { } } -export function registerExitHandler() { +export function registerExitHandler(forceCleanup = true) { function exitHandler(options, exitCode) { - if (shouldCleanup()) { + if (shouldCleanup() || forceCleanup) { cleanUp(); } diff --git a/scripts/lint.mjs b/scripts/lint.mjs index 2259f60772..47d1f75592 100644 --- a/scripts/lint.mjs +++ b/scripts/lint.mjs @@ -17,7 +17,7 @@ import { shouldPrepare, } from './helpers.mjs'; -registerExitHandler(); +registerExitHandler(false); const assignment = exercises.length === 0 ? exercises[0] : undefined; diff --git a/scripts/pr-check.mjs b/scripts/pr-check.mjs index 5527521407..6a266d8235 100644 --- a/scripts/pr-check.mjs +++ b/scripts/pr-check.mjs @@ -64,7 +64,7 @@ if (exercises.length === 0) { shell.exit(0); } -registerExitHandler(); +registerExitHandler(false); if (!envIsThruthy('SKIP_STUB', false)) { shell.echo('\n==========\nEnsure stubs are present\n'); @@ -75,7 +75,9 @@ if (!envIsThruthy('SKIP_STUB', false)) { if (noStubs.length > 0) { shell.echo(`[FAILURE] ${noStubs.length} missing a stub`); - noStubs.forEach((stub) => shell.echo(`${stub} is missing a stub file`)); + noStubs.forEach((stub) => { + shell.echo(`${stub} is missing a stub file`); + }); shell.exit(-1); } else { shell.echo('[SUCCES] All stubs are present'); diff --git a/scripts/pr.mjs b/scripts/pr.mjs index bcf634b6d1..f8ab927ff6 100644 --- a/scripts/pr.mjs +++ b/scripts/pr.mjs @@ -61,7 +61,7 @@ if (exercises.length === 0) { shell.exit(0); } -registerExitHandler(); +registerExitHandler(false); shell.env['PREPARE'] = false; shell.env['CLEANUP'] = false; diff --git a/scripts/sync.mjs b/scripts/sync.mjs index f870b3c576..dd01fcb401 100644 --- a/scripts/sync.mjs +++ b/scripts/sync.mjs @@ -3,15 +3,9 @@ /** * Run this script (from root directory): * - * $ corepack yarn sync + * $ corepack pnpm scripts/sync.mjs * - * This script is used to copy the following files to all exercises and keep - * them in sync: - * - * - .eslintrc - * - babel.config.js - * - package.json (modified version) - * - .npmrc + * This script is used to copy the required files. * * There is a CI step which checks that package.json in root & exercises match * (see checksum script for more info).