diff --git a/crates/turborepo-lib/src/turbo_json/loader.rs b/crates/turborepo-lib/src/turbo_json/loader.rs index b01fb054babfc..603ec5297306c 100644 --- a/crates/turborepo-lib/src/turbo_json/loader.rs +++ b/crates/turborepo-lib/src/turbo_json/loader.rs @@ -356,9 +356,9 @@ mod test { use crate::{task_graph::TaskDefinition, turbo_json::CONFIG_FILE}; #[test_case(r"{}", TurboJson::default() ; "empty")] - #[test_case(r#"{ "globalDependencies": ["tsconfig.json", "jest.config.js"] }"#, + #[test_case(r#"{ "globalDependencies": ["tsconfig.json", "jest.config.ts"] }"#, TurboJson { - global_deps: vec!["jest.config.js".to_string(), "tsconfig.json".to_string()], + global_deps: vec!["jest.config.ts".to_string(), "tsconfig.json".to_string()], ..TurboJson::default() } ; "global dependencies (sorted)")] diff --git a/docs/repo-docs/reference/run.mdx b/docs/repo-docs/reference/run.mdx index e4f950669bd59..7b71f34025351 100644 --- a/docs/repo-docs/reference/run.mdx +++ b/docs/repo-docs/reference/run.mdx @@ -283,7 +283,7 @@ Specify glob of global filesystem dependencies to be hashed. Useful for `.env` a ```bash title="Terminal" turbo run build --global-deps=".env" -turbo run build --global-deps=".env.*" --global-deps=".eslintrc" --global-deps="jest.config.js" +turbo run build --global-deps=".env.*" --global-deps=".eslintrc" --global-deps="jest.config.ts" ``` diff --git a/examples/kitchen-sink/apps/api/package.json b/examples/kitchen-sink/apps/api/package.json index 9dbe81050df59..b62f2a2dc6a4b 100644 --- a/examples/kitchen-sink/apps/api/package.json +++ b/examples/kitchen-sink/apps/api/package.json @@ -22,13 +22,13 @@ "morgan": "^1.10.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "workspace:*", "@repo/jest-presets": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/body-parser": "^1.19.5", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", - "@types/jest": "^29.5.12", "@types/morgan": "^1.9.9", "@types/node": "^20.11.24", "@types/supertest": "^6.0.2", diff --git a/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts b/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts index e72e8886e015f..8d0bb06b95ea2 100644 --- a/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts +++ b/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts @@ -1,4 +1,5 @@ import supertest from "supertest"; +import { describe, it, expect } from "@jest/globals"; import { createServer } from "../server"; describe("Server", () => { diff --git a/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.js b/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.ts similarity index 74% rename from examples/kitchen-sink/packages/jest-presets/browser/jest-preset.js rename to examples/kitchen-sink/packages/jest-presets/browser/jest-preset.ts index 3173ffd6fbac0..86e7e0f7aedf5 100644 --- a/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.js +++ b/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], testEnvironment: "jsdom", transform: { @@ -11,4 +13,6 @@ module.exports = { "/dist", ], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/examples/kitchen-sink/packages/jest-presets/node/jest-preset.js b/examples/kitchen-sink/packages/jest-presets/node/jest-preset.ts similarity index 72% rename from examples/kitchen-sink/packages/jest-presets/node/jest-preset.js rename to examples/kitchen-sink/packages/jest-presets/node/jest-preset.ts index b6c259304707f..f043d01b500ab 100644 --- a/examples/kitchen-sink/packages/jest-presets/node/jest-preset.js +++ b/examples/kitchen-sink/packages/jest-presets/node/jest-preset.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], transform: { "^.+\\.tsx?$": "ts-jest", @@ -10,4 +12,6 @@ module.exports = { "/dist", ], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/examples/kitchen-sink/packages/jest-presets/package.json b/examples/kitchen-sink/packages/jest-presets/package.json index 3086e4107dbf3..e6567cc7dcd1b 100644 --- a/examples/kitchen-sink/packages/jest-presets/package.json +++ b/examples/kitchen-sink/packages/jest-presets/package.json @@ -4,13 +4,14 @@ "private": true, "license": "MIT", "files": [ - "browser/jest-preset.js", - "node/jest-preset.js" + "browser/jest-preset.ts", + "node/jest-preset.ts" ], "dependencies": { - "ts-jest": "^29.1.2" + "jest": "^29.7.0", + "ts-jest": "^29.2.5" }, "devDependencies": { "jest-environment-jsdom": "^29.7.0" } -} \ No newline at end of file +} diff --git a/examples/kitchen-sink/packages/logger/package.json b/examples/kitchen-sink/packages/logger/package.json index c2f53f4b7ffae..8f796e3f5c46d 100644 --- a/examples/kitchen-sink/packages/logger/package.json +++ b/examples/kitchen-sink/packages/logger/package.json @@ -18,10 +18,10 @@ "preset": "@repo/jest-presets/node" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "workspace:*", "@repo/jest-presets": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/jest": "^29.5.12", "@types/node": "^20.11.24", "jest": "^29.7.0", "tsup": "^8.0.2", diff --git a/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts b/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts index e196fcc99f77b..55fd698fa28a9 100644 --- a/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts +++ b/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect, jest } from "@jest/globals"; import { log } from ".."; jest.spyOn(global.console, "log"); diff --git a/examples/kitchen-sink/packages/ui/package.json b/examples/kitchen-sink/packages/ui/package.json index f205d17522fe3..c071dad4460d8 100644 --- a/examples/kitchen-sink/packages/ui/package.json +++ b/examples/kitchen-sink/packages/ui/package.json @@ -31,10 +31,10 @@ "preset": "@repo/jest-presets/browser" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "workspace:*", "@repo/jest-presets": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/jest": "^29.5.12", "@types/node": "^20.11.24", "@types/react": "^18.2.62", "@types/react-dom": "^18.2.19", diff --git a/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx b/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx index fc548077c7b36..7e3a16b41403d 100644 --- a/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx +++ b/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx @@ -1,3 +1,4 @@ +import { describe, it } from "@jest/globals"; import { createRoot } from "react-dom/client"; import { CounterButton } from "."; diff --git a/examples/kitchen-sink/packages/ui/src/link/index.test.tsx b/examples/kitchen-sink/packages/ui/src/link/index.test.tsx index d1a954e8a79fd..82a2e1a8fb6cd 100644 --- a/examples/kitchen-sink/packages/ui/src/link/index.test.tsx +++ b/examples/kitchen-sink/packages/ui/src/link/index.test.tsx @@ -1,3 +1,4 @@ +import { describe, it } from "@jest/globals"; import { createRoot } from "react-dom/client"; import { Link } from "."; diff --git a/examples/kitchen-sink/pnpm-lock.yaml b/examples/kitchen-sink/pnpm-lock.yaml index cfec1dc36b181..94a3a6c4ce7f0 100644 --- a/examples/kitchen-sink/pnpm-lock.yaml +++ b/examples/kitchen-sink/pnpm-lock.yaml @@ -67,6 +67,9 @@ importers: specifier: ^1.10.0 version: 1.10.0 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@repo/eslint-config': specifier: workspace:* version: link:../../packages/config-eslint @@ -85,9 +88,6 @@ importers: '@types/express': specifier: ^4.17.21 version: 4.17.21 - '@types/jest': - specifier: ^29.5.12 - version: 29.5.13 '@types/morgan': specifier: ^1.9.9 version: 1.9.9 @@ -236,8 +236,11 @@ importers: packages/jest-presets: dependencies: + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.16.5) ts-jest: - specifier: ^29.1.2 + specifier: ^29.2.5 version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.4.5) devDependencies: jest-environment-jsdom: @@ -246,6 +249,9 @@ importers: packages/logger: devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@repo/eslint-config': specifier: workspace:* version: link:../config-eslint @@ -255,9 +261,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../config-typescript - '@types/jest': - specifier: ^29.5.12 - version: 29.5.13 '@types/node': specifier: ^20.11.24 version: 20.16.5 @@ -273,6 +276,9 @@ importers: packages/ui: devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@repo/eslint-config': specifier: workspace:* version: link:../config-eslint @@ -282,9 +288,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../config-typescript - '@types/jest': - specifier: ^29.5.12 - version: 29.5.13 '@types/node': specifier: ^20.11.24 version: 20.16.5 @@ -2539,13 +2542,6 @@ packages: dependencies: '@types/istanbul-lib-report': 3.0.3 - /@types/jest@29.5.13: - resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: diff --git a/examples/with-docker/apps/api/package.json b/examples/with-docker/apps/api/package.json index 0831bd2aeec15..ea10e6d1a55d9 100644 --- a/examples/with-docker/apps/api/package.json +++ b/examples/with-docker/apps/api/package.json @@ -21,13 +21,13 @@ "morgan": "^1.10.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "*", "@repo/jest-presets": "*", "@repo/typescript-config": "*", "@types/body-parser": "^1.19.5", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", - "@types/jest": "^29.5.12", "@types/morgan": "^1.9.9", "@types/node": "^20.11.24", "@types/supertest": "^6.0.2", diff --git a/examples/with-docker/apps/api/src/__tests__/server.test.ts b/examples/with-docker/apps/api/src/__tests__/server.test.ts index 1385679fb36a5..55503bd86e8b4 100644 --- a/examples/with-docker/apps/api/src/__tests__/server.test.ts +++ b/examples/with-docker/apps/api/src/__tests__/server.test.ts @@ -1,4 +1,5 @@ import supertest from "supertest"; +import { describe, it, expect } from "@jest/globals"; import { createServer } from "../server"; describe("server", () => { diff --git a/examples/with-docker/packages/jest-presets/node/jest-preset.js b/examples/with-docker/packages/jest-presets/node/jest-preset.ts similarity index 72% rename from examples/with-docker/packages/jest-presets/node/jest-preset.js rename to examples/with-docker/packages/jest-presets/node/jest-preset.ts index b6c259304707f..f043d01b500ab 100644 --- a/examples/with-docker/packages/jest-presets/node/jest-preset.js +++ b/examples/with-docker/packages/jest-presets/node/jest-preset.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], transform: { "^.+\\.tsx?$": "ts-jest", @@ -10,4 +12,6 @@ module.exports = { "/dist", ], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/examples/with-docker/packages/jest-presets/package.json b/examples/with-docker/packages/jest-presets/package.json index 7457684ee21fe..6247a847d4a96 100644 --- a/examples/with-docker/packages/jest-presets/package.json +++ b/examples/with-docker/packages/jest-presets/package.json @@ -4,9 +4,10 @@ "private": true, "license": "MIT", "files": [ - "node/jest-preset.js" + "node/jest-preset.ts" ], "dependencies": { - "ts-jest": "^29.1.1" + "jest": "^29.7.0", + "ts-jest": "^29.2.5" } -} \ No newline at end of file +} diff --git a/examples/with-docker/packages/logger/package.json b/examples/with-docker/packages/logger/package.json index 2deb2618d1a0e..504e8e2f78fbb 100644 --- a/examples/with-docker/packages/logger/package.json +++ b/examples/with-docker/packages/logger/package.json @@ -18,10 +18,10 @@ "preset": "@repo/jest-presets/node" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "*", "@repo/jest-presets": "*", "@repo/typescript-config": "*", - "@types/jest": "^29.5.12", "@types/node": "^20.11.24", "eslint": "^8.57.0", "jest": "^29.7.0", diff --git a/examples/with-docker/packages/logger/src/__tests__/log.test.ts b/examples/with-docker/packages/logger/src/__tests__/log.test.ts index 0da12534d68e4..a31c4fc65c28d 100644 --- a/examples/with-docker/packages/logger/src/__tests__/log.test.ts +++ b/examples/with-docker/packages/logger/src/__tests__/log.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect, jest } from "@jest/globals"; import { log } from ".."; jest.spyOn(global.console, "log"); diff --git a/examples/with-docker/yarn.lock b/examples/with-docker/yarn.lock index c4f531eaacf78..ad143d2e1de25 100644 --- a/examples/with-docker/yarn.lock +++ b/examples/with-docker/yarn.lock @@ -988,14 +988,6 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^29.5.12": - version "29.5.12" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -1577,6 +1569,11 @@ ast-types-flow@^0.0.8: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + asynciterator.prototype@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" @@ -1733,7 +1730,7 @@ browserslist@^4.22.2: node-releases "^2.0.14" update-browserslist-db "^1.0.13" -bs-logger@0.x: +bs-logger@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== @@ -1807,7 +1804,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2127,6 +2124,13 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.4.648: version "1.4.652" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.652.tgz#1591c7542d43c990de786374c07a9d6ad2b63787" @@ -2642,7 +2646,7 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.0.0, expect@^29.7.0: +expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -2742,6 +2746,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3450,6 +3461,16 @@ jackspeak@^2.3.5: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -3946,7 +3967,7 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.memoize@4.x: +lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== @@ -3994,7 +4015,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x: +make-error@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -4085,6 +4106,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -4476,7 +4504,7 @@ prettier@^3.2.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== -pretty-format@^29.0.0, pretty-format@^29.7.0: +pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -4783,6 +4811,11 @@ semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -5201,19 +5234,20 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== -ts-jest@^29.1.1: - version "29.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" - integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== +ts-jest@^29.2.5: + version "29.2.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" + integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" + bs-logger "^0.2.6" + ejs "^3.1.10" + fast-json-stable-stringify "^2.1.0" jest-util "^29.0.0" json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" + lodash.memoize "^4.1.2" + make-error "^1.3.6" + semver "^7.6.3" + yargs-parser "^21.1.1" tsconfig-paths@^3.15.0: version "3.15.0" @@ -5545,7 +5579,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^21.0.1, yargs-parser@^21.1.1: +yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== diff --git a/examples/with-nestjs/apps/api/jest.config.js b/examples/with-nestjs/apps/api/jest.config.js deleted file mode 100644 index 755178fb43109..0000000000000 --- a/examples/with-nestjs/apps/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('jest').Config} */ -module.exports = { - ...require('@repo/jest-config/nest'), -}; diff --git a/examples/with-nestjs/apps/api/jest.config.ts b/examples/with-nestjs/apps/api/jest.config.ts new file mode 100644 index 0000000000000..ddfc984b6385c --- /dev/null +++ b/examples/with-nestjs/apps/api/jest.config.ts @@ -0,0 +1,3 @@ +import { config } from '@repo/jest-config/nest'; + +export default config; diff --git a/examples/with-nestjs/apps/api/package.json b/examples/with-nestjs/apps/api/package.json index a60e6a5b62900..26f0718bad3d1 100644 --- a/examples/with-nestjs/apps/api/package.json +++ b/examples/with-nestjs/apps/api/package.json @@ -23,6 +23,7 @@ "rxjs": "^7.8.1" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", @@ -30,15 +31,14 @@ "@repo/jest-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", "@types/node": "^20.3.1", "@types/supertest": "^6.0.0", - "jest": "^29.5.0", + "jest": "^29.7.0", "source-map-support": "^0.5.21", "supertest": "^6.3.3", - "ts-jest": "^29.1.0", + "ts-jest": "^29.2.5", "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "typescript": "5.4.5" } diff --git a/examples/with-nestjs/apps/api/src/app.controller.spec.ts b/examples/with-nestjs/apps/api/src/app.controller.spec.ts index d22f3890a380c..939c4ac913396 100644 --- a/examples/with-nestjs/apps/api/src/app.controller.spec.ts +++ b/examples/with-nestjs/apps/api/src/app.controller.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { describe, it, expect, beforeEach } from '@jest/globals'; import { AppController } from './app.controller'; import { AppService } from './app.service'; diff --git a/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts b/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts index fdff163822a7c..23368ce420c74 100644 --- a/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts +++ b/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { describe, it, expect, beforeEach } from '@jest/globals'; import { LinksController } from './links.controller'; import { LinksService } from './links.service'; diff --git a/examples/with-nestjs/apps/api/src/links/links.service.spec.ts b/examples/with-nestjs/apps/api/src/links/links.service.spec.ts index 7b1acd4266d9e..71cfcbccefb2f 100644 --- a/examples/with-nestjs/apps/api/src/links/links.service.spec.ts +++ b/examples/with-nestjs/apps/api/src/links/links.service.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { describe, it, expect, beforeEach } from '@jest/globals'; import { LinksService } from './links.service'; describe('LinksService', () => { diff --git a/examples/with-nestjs/apps/api/test/app.e2e-spec.ts b/examples/with-nestjs/apps/api/test/app.e2e-spec.ts index 9ceebc4bec55a..6e55bca0066b1 100644 --- a/examples/with-nestjs/apps/api/test/app.e2e-spec.ts +++ b/examples/with-nestjs/apps/api/test/app.e2e-spec.ts @@ -1,5 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; +import { describe, it, beforeEach } from '@jest/globals'; import request from 'supertest'; import { AppModule } from './../src/app.module'; diff --git a/examples/with-nestjs/apps/web/jest.config.js b/examples/with-nestjs/apps/web/jest.config.js deleted file mode 100644 index 40a0467550b96..0000000000000 --- a/examples/with-nestjs/apps/web/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const config = require('@repo/jest-config/next'); - -module.exports = config(); diff --git a/examples/with-nestjs/apps/web/jest.config.ts b/examples/with-nestjs/apps/web/jest.config.ts new file mode 100644 index 0000000000000..c348184f71bca --- /dev/null +++ b/examples/with-nestjs/apps/web/jest.config.ts @@ -0,0 +1,3 @@ +import config from '@repo/jest-config/next'; + +export default config; diff --git a/examples/with-nestjs/apps/web/package.json b/examples/with-nestjs/apps/web/package.json index a94cd0a8e9c1e..38ba0609562a1 100644 --- a/examples/with-nestjs/apps/web/package.json +++ b/examples/with-nestjs/apps/web/package.json @@ -18,6 +18,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@next/eslint-plugin-next": "^14.1.1", "@playwright/test": "^1.44.0", "@repo/api": "workspace:*", @@ -26,11 +27,10 @@ "@repo/typescript-config": "workspace:*", "@testing-library/jest-dom": "^6.4.5", "@testing-library/react": "^15.0.7", - "@types/jest": "^29.5.2", "@types/node": "^20.11.24", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", - "jest": "^29.5.0", + "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "typescript": "5.4.5" } diff --git a/examples/with-nestjs/apps/web/test/layout.spec.tsx b/examples/with-nestjs/apps/web/test/layout.spec.tsx index 483ad004a088d..82d6383e775ea 100644 --- a/examples/with-nestjs/apps/web/test/layout.spec.tsx +++ b/examples/with-nestjs/apps/web/test/layout.spec.tsx @@ -1,4 +1,5 @@ import { metadata } from '../app/layout'; +import { describe, it, expect } from '@jest/globals'; describe('Root layout', () => { describe('metadata', () => { diff --git a/examples/with-nestjs/apps/web/test/page.spec.tsx b/examples/with-nestjs/apps/web/test/page.spec.tsx index b2128288ea258..56c1a40ee7fcc 100644 --- a/examples/with-nestjs/apps/web/test/page.spec.tsx +++ b/examples/with-nestjs/apps/web/test/page.spec.tsx @@ -1,4 +1,5 @@ import { render } from '@testing-library/react'; +import { describe, it, expect, jest, afterAll } from '@jest/globals'; import RootPage from '../app/page'; @@ -6,12 +7,12 @@ window.fetch = jest.fn().mockImplementation(() => Promise.resolve({ ok: true, json: () => [], - }), + }) ); describe('Root page', () => { const { container, unmount } = render( - , + ); it('should match the snapshot', () => { diff --git a/examples/with-nestjs/packages/api/package.json b/examples/with-nestjs/packages/api/package.json index 3ec3c824e99c2..3a2b64cb30459 100644 --- a/examples/with-nestjs/packages/api/package.json +++ b/examples/with-nestjs/packages/api/package.json @@ -41,7 +41,7 @@ "@repo/typescript-config": "workspace:*", "@types/node": "^20.3.1", "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typescript": "5.4.5" } } diff --git a/examples/with-nestjs/packages/jest-config/base.js b/examples/with-nestjs/packages/jest-config/base.js deleted file mode 100644 index 31bff6b3ba381..0000000000000 --- a/examples/with-nestjs/packages/jest-config/base.js +++ /dev/null @@ -1,198 +0,0 @@ -/** - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -/** @type {import('jest').Config} */ -const config = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "cacheDirectory", - - // Automatically clear mock calls, instances, contexts and results before every test - // clearMocks: false, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "\\\\node_modules\\\\" - // ], - - // Indicates which provider should be used to instrument code for coverage - coverageProvider: 'v8', - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // The default configuration for fake timers - // fakeTimers: { - // "enableGlobally": false - // }, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - moduleFileExtensions: [ - 'js', - // "mjs", - // "cjs", - // "jsx", - 'ts', - // "tsx", - 'json', - // "node" - ], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - // preset: undefined, - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: 'jsdom', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "\\\\node_modules\\\\" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // A map from regular expressions to paths to transformers - // transform: undefined, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "\\\\node_modules\\\\", - // "\\.pnp\\.[^\\\\]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; - -module.exports = config; diff --git a/examples/with-nestjs/packages/jest-config/base.ts b/examples/with-nestjs/packages/jest-config/base.ts new file mode 100644 index 0000000000000..4e6320105fe40 --- /dev/null +++ b/examples/with-nestjs/packages/jest-config/base.ts @@ -0,0 +1,9 @@ +import type { Config } from 'jest'; + +export const config = { + collectCoverage: true, + coverageDirectory: 'coverage', + coverageProvider: 'v8', + moduleFileExtensions: ['js', 'ts', 'json'], + testEnvironment: 'jsdom', +} as const satisfies Config; diff --git a/examples/with-nestjs/packages/jest-config/nest.js b/examples/with-nestjs/packages/jest-config/nest.ts similarity index 57% rename from examples/with-nestjs/packages/jest-config/nest.js rename to examples/with-nestjs/packages/jest-config/nest.ts index 95fc615358378..c2345675ec11f 100644 --- a/examples/with-nestjs/packages/jest-config/nest.js +++ b/examples/with-nestjs/packages/jest-config/nest.ts @@ -1,6 +1,8 @@ -/** @type {import('jest').Config} */ -module.exports = { - ...require('./base'), +import type { Config } from 'jest'; +import { config as baseConfig } from './base'; + +export const config = { + ...baseConfig, rootDir: 'src', testRegex: '.*\\.spec\\.ts$', transform: { @@ -9,4 +11,4 @@ module.exports = { collectCoverageFrom: ['**/*.(t|j)s'], coverageDirectory: '../coverage', testEnvironment: 'node', -}; +} as const satisfies Config; diff --git a/examples/with-nestjs/packages/jest-config/next.js b/examples/with-nestjs/packages/jest-config/next.js deleted file mode 100644 index 3d9631da7c697..0000000000000 --- a/examples/with-nestjs/packages/jest-config/next.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @typedef {import('jest').Config} JestConfig - */ - -const nextJest = require('next/jest'); -const baseJest = require('./base'); - -const createJestConfig = nextJest({ - dir: './', -}); - -/** @type JestConfig */ -const config = { - ...baseJest, - moduleFileExtensions: [ - ...(baseJest.moduleFileExtensions ?? []), - 'jsx', - 'tsx', - ], -}; - -/** - * @type {(configOverwrite?: JestConfig) => Promise} - * - * @description Callable function. - * - * Can receive a `JestConfig` as value to overwrite the default values. - * - */ -module.exports = (configOverwrite) => - createJestConfig({ ...config, ...configOverwrite }); diff --git a/examples/with-nestjs/packages/jest-config/next.ts b/examples/with-nestjs/packages/jest-config/next.ts new file mode 100644 index 0000000000000..860c80916066a --- /dev/null +++ b/examples/with-nestjs/packages/jest-config/next.ts @@ -0,0 +1,16 @@ +import type { Config } from 'jest'; +// unfortunately, need to disambiguate the `Config` namespace @jest/types uses (via next/jest) and the `Config` type we want for typing our config here +import type { Config as ConfigNamespace } from '@jest/types'; +import nextJest from 'next/jest'; +import { config as baseConfig } from './base'; + +const createJestConfig = nextJest({ + dir: './', +}); + +const config = { + ...baseConfig, + moduleFileExtensions: [...baseConfig.moduleFileExtensions, 'jsx', 'tsx'], +} as const satisfies Config; + +export default createJestConfig(config); diff --git a/examples/with-nestjs/packages/jest-config/package.json b/examples/with-nestjs/packages/jest-config/package.json index de3eaa8e74ba8..4abb9616bbbc1 100644 --- a/examples/with-nestjs/packages/jest-config/package.json +++ b/examples/with-nestjs/packages/jest-config/package.json @@ -7,7 +7,8 @@ "access": "public" }, "devDependencies": { - "jest": "^29.5.0", + "@jest/types": "^29.6.3", + "jest": "^29.7.0", "next": "^14.1.1" } } diff --git a/examples/with-nestjs/pnpm-lock.yaml b/examples/with-nestjs/pnpm-lock.yaml index 6aad84f593522..4a14241853d38 100644 --- a/examples/with-nestjs/pnpm-lock.yaml +++ b/examples/with-nestjs/pnpm-lock.yaml @@ -42,6 +42,9 @@ importers: specifier: ^7.8.1 version: 7.8.1 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@nestjs/cli': specifier: ^10.0.0 version: 10.3.2 @@ -63,9 +66,6 @@ importers: '@types/express': specifier: ^4.17.17 version: 4.17.21 - '@types/jest': - specifier: ^29.5.2 - version: 29.5.12 '@types/node': specifier: ^20.3.1 version: 20.11.24 @@ -73,8 +73,8 @@ importers: specifier: ^6.0.0 version: 6.0.2 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) source-map-support: specifier: ^0.5.21 version: 0.5.21 @@ -82,14 +82,14 @@ importers: specifier: ^6.3.3 version: 6.3.4 ts-jest: - specifier: ^29.1.0 - version: 29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5) ts-loader: specifier: ^9.4.3 version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -112,6 +112,9 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@next/eslint-plugin-next': specifier: ^14.1.1 version: 14.1.1 @@ -132,13 +135,10 @@ importers: version: link:../../packages/typescript-config '@testing-library/jest-dom': specifier: ^6.4.5 - version: 6.4.5(@types/jest@29.5.12)(jest@29.7.0) + version: 6.4.5(@jest/globals@29.7.0)(jest@29.7.0) '@testing-library/react': specifier: ^15.0.7 version: 15.0.7(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) - '@types/jest': - specifier: ^29.5.2 - version: 29.5.12 '@types/node': specifier: ^20.11.24 version: 20.11.24 @@ -149,8 +149,8 @@ importers: specifier: ^18.2.19 version: 18.2.19 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -177,8 +177,8 @@ importers: specifier: ^9.4.3 version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -212,9 +212,12 @@ importers: packages/jest-config: devDependencies: + '@jest/types': + specifier: ^29.6.3 + version: 29.6.3 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) next: specifier: ^14.1.1 version: 14.1.1(@babel/core@7.24.5)(react-dom@18.2.0)(react@18.2.0) @@ -767,7 +770,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@29.7.0(ts-node@10.9.1): + /@jest/core@29.7.0(ts-node@10.9.2): resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -788,7 +791,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1407,7 +1410,7 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom@6.4.5(@types/jest@29.5.12)(jest@29.7.0): + /@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(jest@29.7.0): resolution: {integrity: sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} peerDependencies: @@ -1430,12 +1433,12 @@ packages: dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.23.2 - '@types/jest': 29.5.12 + '@jest/globals': 29.7.0 aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) lodash: 4.17.21 redent: 3.0.0 dev: true @@ -1496,7 +1499,7 @@ packages: minimatch: 9.0.3 node-plop: 0.26.3 proxy-agent: 6.3.0 - ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) update-check: 1.5.4 validate-npm-package-name: 5.0.0 transitivePeerDependencies: @@ -1658,13 +1661,6 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: @@ -2569,6 +2565,10 @@ packages: tslib: 2.6.2 dev: true + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: true + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -3129,7 +3129,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3138,7 +3138,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3435,6 +3435,14 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.9.2 + dev: true + /electron-to-chromium@1.4.768: resolution: {integrity: sha512-z2U3QcvNuxdkk33YV7R1bVMNq7fL23vq3WfO5BHcqrm4TnDGReouBfYKLEFh5umoK1XACjEwp8mmnhXk2EJigw==} @@ -4234,6 +4242,12 @@ packages: flat-cache: 3.0.4 dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -5255,6 +5269,17 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5293,7 +5318,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5303,14 +5328,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5321,7 +5346,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5356,7 +5381,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5677,7 +5702,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5687,10 +5712,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6063,6 +6088,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -7122,6 +7154,12 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -7752,12 +7790,13 @@ packages: typescript: 5.4.5 dev: true - /ts-jest@29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5): - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} + /ts-jest@29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 '@jest/types': ^29.0.0 babel-jest: ^29.0.0 esbuild: '*' @@ -7766,6 +7805,8 @@ packages: peerDependenciesMeta: '@babel/core': optional: true + '@jest/transform': + optional: true '@jest/types': optional: true babel-jest: @@ -7775,13 +7816,14 @@ packages: dependencies: '@babel/core': 7.24.5 bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 + semver: 7.6.3 typescript: 5.4.5 yargs-parser: 21.1.1 dev: true @@ -7802,8 +7844,8 @@ packages: webpack: 5.91.0 dev: true - /ts-node@10.9.1(@types/node@20.11.24)(typescript@5.4.5): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@20.11.24)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' diff --git a/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts b/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts index ef9d484256852..a6731f1d8d4e4 100644 --- a/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts +++ b/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts @@ -1,4 +1,4 @@ -import { suite, expect, test, beforeEach, vi } from "vitest"; +import { suite, expect, it, beforeEach, vi } from "vitest"; import { TodoService } from "../src/domain/todo/todo.service"; import { TodoRepository } from "../src/domain/todo/todo.repository"; import { Todo } from "../src/domain/todo/todo.entity"; @@ -27,7 +27,7 @@ suite("TodoService Unit Tests", () => { todoService = new TodoService(mockTodoRepo as TodoRepository); }); - test("Insert", async () => { + it("Insert", async () => { const newTodo = await todoService.add("Hello World"); expect(newTodo.content).toBe("Hello World"); @@ -35,26 +35,26 @@ suite("TodoService Unit Tests", () => { expect(mockTodoRepo.insert).toHaveBeenCalledWith("Hello World"); }); - test("Select", async () => { + it("Select", async () => { const todo = await todoService.findById(1); expect(todo?.content).toBe("Hello World"); expect(mockTodoRepo.findById).toHaveBeenCalledWith(1); }); - test("Update", async () => { + it("Update", async () => { await todoService.complete(1); expect(mockTodoRepo.update).toHaveBeenCalledWith(1); }); - test("Delete", async () => { + it("Delete", async () => { await todoService.deleteById(1); expect(mockTodoRepo.delete).toHaveBeenCalledWith(1); }); - test("Find All", async () => { + it("Find All", async () => { const todoList = await todoService.findAll(); expect(todoList).toEqual([mockTodo]); diff --git a/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts b/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts index 28aaa562dfed6..3b63db193f9d3 100755 --- a/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts +++ b/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts @@ -1,4 +1,4 @@ -import { suite, test, beforeEach, expect } from "vitest"; +import { suite, it, beforeEach, expect } from "vitest"; import "reflect-metadata"; import { DataSource, @@ -44,7 +44,7 @@ suite("typeorm with SQL.js", () => { todoRepo = dataSource.getRepository(Todo); }); - test("Insert", async () => { + it("Insert", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, @@ -53,7 +53,7 @@ suite("typeorm with SQL.js", () => { expect(newTodo.complete).toBeFalsy(); }); - test("Select", async () => { + it("Select", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, @@ -63,7 +63,7 @@ suite("typeorm with SQL.js", () => { expect(todo?.content).toBe("Hello World"); }); - test("Update", async () => { + it("Update", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, @@ -73,7 +73,7 @@ suite("typeorm with SQL.js", () => { expect(todo?.complete).toBeTruthy(); }); - test("Delete", async () => { + it("Delete", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, diff --git a/packages/create-turbo/__tests__/git.test.ts b/packages/create-turbo/__tests__/git.test.ts index 4c6b239b8af75..a78698f60d0cf 100644 --- a/packages/create-turbo/__tests__/git.test.ts +++ b/packages/create-turbo/__tests__/git.test.ts @@ -1,4 +1,7 @@ -import path from "path"; +import path from "node:path"; +import childProcess from "node:child_process"; +import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { DEFAULT_IGNORE, GIT_REPO_COMMAND, @@ -7,8 +10,6 @@ import { isInMercurialRepository, tryGitInit, } from "../src/utils/git"; -import childProcess from "child_process"; -import { setupTestFixtures } from "@turbo/test-utils"; describe("git", () => { // just to make sure this doesn't get lost diff --git a/packages/create-turbo/__tests__/index.test.ts b/packages/create-turbo/__tests__/index.test.ts index eb54a78b2541c..262e953240ae1 100644 --- a/packages/create-turbo/__tests__/index.test.ts +++ b/packages/create-turbo/__tests__/index.test.ts @@ -8,11 +8,12 @@ import type { PackageManager } from "@turbo/utils"; import * as turboWorkspaces from "@turbo/workspaces"; import { CreateTurboTelemetry, TelemetryConfig } from "@turbo/telemetry"; import * as turboUtils from "@turbo/utils"; +import { describe, it, expect, jest } from "@jest/globals"; import type { CreateCommandArgument } from "../src/commands/create/types"; import { create } from "../src/commands/create"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); @@ -41,7 +42,7 @@ describe("create-turbo", () => { }), }); - test.each<{ packageManager: PackageManager }>([ + it.each<{ packageManager: PackageManager }>([ { packageManager: "yarn" }, { packageManager: "npm" }, { packageManager: "pnpm" }, @@ -124,7 +125,7 @@ describe("create-turbo", () => { } ); - test.each<{ packageManager: PackageManager }>([ + it.each<{ packageManager: PackageManager }>([ { packageManager: "yarn" }, { packageManager: "npm" }, { packageManager: "pnpm" }, @@ -206,7 +207,7 @@ describe("create-turbo", () => { } ); - test("throws correct error message when a download error is encountered", async () => { + it("throws correct error message when a download error is encountered", async () => { const { root } = useFixture({ fixture: `create-turbo` }); const packageManager = "pnpm"; const mockAvailablePackageManagers = jest diff --git a/packages/create-turbo/jest.config.js b/packages/create-turbo/jest.config.ts similarity index 82% rename from packages/create-turbo/jest.config.js rename to packages/create-turbo/jest.config.ts index f81b1d034970b..69fb67e03cc6d 100644 --- a/packages/create-turbo/jest.config.js +++ b/packages/create-turbo/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["/__fixtures__/", "/__tests__/test-utils.ts"], @@ -9,4 +10,6 @@ module.exports = { collectCoverage: true, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index d6b854641bd2e..77b1f22533753 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -32,6 +32,7 @@ "update-check": "^1.5.4" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/telemetry": "workspace:*", "@turbo/test-utils": "workspace:*", @@ -40,11 +41,10 @@ "@turbo/workspaces": "workspace:*", "@types/fs-extra": "^9.0.13", "@types/inquirer": "^7.3.1", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "@types/semver": "^7.3.9", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "tsup": "^6.7.0", "typescript": "5.4.5" }, diff --git a/packages/eslint-config/library.js b/packages/eslint-config/library.js index eb796a199281e..04882e6e3d938 100644 --- a/packages/eslint-config/library.js +++ b/packages/eslint-config/library.js @@ -27,4 +27,23 @@ module.exports = { { peerDependencies: true, includeTypes: true }, ], }, + overrides: [ + { + files: ["*.test.ts"], + rules: { + "@typescript-eslint/consistent-type-imports": [ + "error", + { + disallowTypeAnnotations: false, // this is needed for `jest.mock` + }, + ], + }, + }, + { + files: ["jest.config.ts", "*/jest-config/*.ts", "jest-preset.ts"], + rules: { + "import/no-default-export": ["off"], + }, + }, + ], }; diff --git a/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json b/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json index fc022e93cc969..136760f7f1289 100644 --- a/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json +++ b/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json @@ -18,11 +18,11 @@ "@turbo/utils": "workspace:*", "@types/eslint": "^8.4.5", "@types/estree": "^1.0.0", - "@types/jest": "^27.4.0", + "@types/jest": "^29.5.13", "@types/node": "^16.11.12", - "jest": "^27.4.3", + "jest": "^29.7.0", "json5": "^2.2.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.2.0", "typescript": "5.3.3" }, @@ -45,11 +45,11 @@ "@turbo/utils": "workspace:*", "@types/eslint": "^8.4.5", "@types/estree": "^1.0.0", - "@types/jest": "^27.4.0", + "@types/jest": "^29.5.13", "@types/node": "^16.11.12", - "jest": "^27.4.3", + "jest": "^29.7.0", "json5": "^2.2.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.2.0", "typescript": "5.3.3" } diff --git a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts index 3901a1cbcd512..e7f32a3a15873 100644 --- a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts +++ b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts @@ -3,6 +3,7 @@ import { execSync } from "node:child_process"; import { type Schema } from "@turbo/types"; import { parse, stringify } from "json5"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; describe("eslint settings check", () => { const { useFixture } = setupTestFixtures({ diff --git a/packages/eslint-plugin-turbo/jest.config.js b/packages/eslint-plugin-turbo/jest.config.ts similarity index 79% rename from packages/eslint-plugin-turbo/jest.config.js rename to packages/eslint-plugin-turbo/jest.config.ts index 286c1a0613822..d0d72e5dd409f 100644 --- a/packages/eslint-plugin-turbo/jest.config.js +++ b/packages/eslint-plugin-turbo/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], transform: { "^.+\\.tsx?$": "ts-jest", @@ -11,4 +12,6 @@ module.exports = { preset: "ts-jest", verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 6789d85b3c8cb..78cb0120863ca 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -35,6 +35,7 @@ "dotenv": "16.0.3" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", @@ -42,11 +43,10 @@ "@turbo/utils": "workspace:*", "@types/eslint": "^8.4.5", "@types/estree": "^1.0.0", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", - "jest": "^27.4.3", + "jest": "^29.7.0", "json5": "^2.2.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.2.0", "typescript": "5.4.5" }, diff --git a/packages/turbo-benchmark/package.json b/packages/turbo-benchmark/package.json index 26b536f979c53..4c0ffeed86515 100644 --- a/packages/turbo-benchmark/package.json +++ b/packages/turbo-benchmark/package.json @@ -34,12 +34,15 @@ "vega": "^5.27.0" }, "devDependencies": { + "@jest/globals": "29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/tsconfig": "workspace:*", "@types/fs-extra": "^9.0.13", "@types/ndjson": "^2.0.2", "@types/node": "^18.17.4", "@types/node-fetch": "^2.6.6", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "typescript": "5.4.5" } } diff --git a/packages/turbo-benchmark/src/generate.mjs b/packages/turbo-benchmark/src/generate.mjs index 96cf2d72f88a3..926ae7aa1d8d4 100644 --- a/packages/turbo-benchmark/src/generate.mjs +++ b/packages/turbo-benchmark/src/generate.mjs @@ -238,9 +238,9 @@ module.exports = { types: "dist/index.d.ts", devDependencies: { typescript: "^4.6.3", - jest: "^27.0.0", - "ts-jest": "^27.0.0", - "@types/jest": "^27.0.0", + jest: "^29.7.0", + "ts-jest": "^29.2.5", + "@types/jest": "^29.5.13", }, scripts: { build: "tsc", diff --git a/packages/turbo-benchmark/src/templates/jest.config.js b/packages/turbo-benchmark/src/templates/jest.config.ts similarity index 72% rename from packages/turbo-benchmark/src/templates/jest.config.js rename to packages/turbo-benchmark/src/templates/jest.config.ts index 05483066e69d8..de524eda5d3fb 100644 --- a/packages/turbo-benchmark/src/templates/jest.config.js +++ b/packages/turbo-benchmark/src/templates/jest.config.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: ["/src"], transform: { "^.+\\.tsx?$": "ts-jest", @@ -7,4 +9,6 @@ module.exports = { moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], modulePathIgnorePatterns: ["/src/__fixtures__"], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts b/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts index 9a4831a645b0a..6a91522a3409b 100644 --- a/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts +++ b/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts @@ -1,4 +1,5 @@ import { sum } from "../."; +import { describe, it, expect } from "@jest/globals"; describe("Hello", () => { it("renders without crashing", () => { diff --git a/packages/turbo-codemod/__tests__/add-package-manager.test.ts b/packages/turbo-codemod/__tests__/add-package-manager.test.ts index 02dc3b16e360f..374997e222e69 100644 --- a/packages/turbo-codemod/__tests__/add-package-manager.test.ts +++ b/packages/turbo-codemod/__tests__/add-package-manager.test.ts @@ -2,12 +2,13 @@ import fs from "fs-extra"; import * as turboWorkspaces from "@turbo/workspaces"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { transformer } from "../src/transforms/add-package-manager"; import type { TransformerResults } from "../src/runner"; import type { TransformerOptions } from "../src/types"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); @@ -121,7 +122,7 @@ describe("add-package-manager-2", () => { test: "add-package-manager", }); - test.each(TEST_CASES)( + it.each(TEST_CASES)( "$fixture - $name with $packageManager@$packageManagerVersion using $options", async ({ fixture, @@ -193,7 +194,7 @@ describe("add-package-manager-2", () => { ); describe("errors", () => { - test("unable to determine workspace manager", async () => { + it("unable to determine workspace manager", async () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-manager" }); @@ -221,7 +222,7 @@ describe("add-package-manager-2", () => { mockGetWorkspaceDetails.mockRestore(); }); - test("unable to determine package manager version", async () => { + it("unable to determine package manager version", async () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-manager" }); @@ -265,7 +266,7 @@ describe("add-package-manager-2", () => { mockGetWorkspaceDetails.mockRestore(); }); - test("unable to write json", async () => { + it("unable to write json", async () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-manager" }); @@ -317,15 +318,15 @@ describe("add-package-manager-2", () => { "Encountered an error while transforming files" ); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { - "action": "error", - "additions": 1, - "deletions": 0, - "error": [Error: could not write file], - }, - } - `); + { + "package.json": { + "action": "error", + "additions": 1, + "deletions": 0, + "error": [Error: could not write file], + }, + } + `); mockWriteJsonSync.mockRestore(); mockGetAvailablePackageManagers.mockRestore(); diff --git a/packages/turbo-codemod/__tests__/add-package-names.test.ts b/packages/turbo-codemod/__tests__/add-package-names.test.ts index 603d6e5621751..bf66f60b9978a 100644 --- a/packages/turbo-codemod/__tests__/add-package-names.test.ts +++ b/packages/turbo-codemod/__tests__/add-package-names.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/add-package-names"; describe("add-package-names", () => { @@ -7,7 +8,7 @@ describe("add-package-names", () => { test: "add-package-names", }); - test("missing names", async () => { + it("missing names", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "missing-names", @@ -22,13 +23,13 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "packages/ui/package.json": Object { + { + "packages/ui/package.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/utils/package.json": Object { + "packages/utils/package.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -49,7 +50,7 @@ describe("add-package-names", () => { } }); - test("duplicate names", async () => { + it("duplicate names", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "duplicate-names", @@ -64,8 +65,8 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "packages/utils/package.json": Object { + { + "packages/utils/package.json": { "action": "modified", "additions": 1, "deletions": 1, @@ -86,7 +87,7 @@ describe("add-package-names", () => { } }); - test("correct names", async () => { + it("correct names", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "correct-names", @@ -100,7 +101,7 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); - expect(result.changes).toMatchInlineSnapshot(`Object {}`); + expect(result.changes).toMatchInlineSnapshot(`{}`); // validate unique names const names = new Set(); @@ -115,7 +116,7 @@ describe("add-package-names", () => { } }); - test("ignored packages", async () => { + it("ignored packages", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "ignored-packages", @@ -129,7 +130,7 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); - expect(result.changes).toMatchInlineSnapshot(`Object {}`); + expect(result.changes).toMatchInlineSnapshot(`{}`); // validate unique names const names = new Set(); diff --git a/packages/turbo-codemod/__tests__/clean-globs.test.ts b/packages/turbo-codemod/__tests__/clean-globs.test.ts index 67e4e03f6d2b3..63a9622fb4a23 100644 --- a/packages/turbo-codemod/__tests__/clean-globs.test.ts +++ b/packages/turbo-codemod/__tests__/clean-globs.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer, fixGlobPattern } from "../src/transforms/clean-globs"; describe("clean-globs", () => { @@ -7,7 +8,7 @@ describe("clean-globs", () => { test: "clean-globs", }); - test("basic", () => { + it("basic", () => { // load the fixture for the test const { root } = useFixture({ fixture: "clean-globs", @@ -22,8 +23,8 @@ describe("clean-globs", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 6, "deletions": 6, @@ -32,7 +33,7 @@ describe("clean-globs", () => { `); }); - test("collapses back-to-back doublestars", () => { + it("collapses back-to-back doublestars", () => { const badGlobPatterns = [ ["../../app-store/**/**", "../../app-store/**"], ["**/**/result.json", "**/result.json"], @@ -48,12 +49,12 @@ describe("clean-globs", () => { }); }); - test("doesn't update valid globs and prints a message", () => { + it("doesn't update valid globs and prints a message", () => { // Now let's test the function expect(fixGlobPattern("a/b/c/*")).toBe("a/b/c/*"); }); - test("transforms '**ext' to '**/*ext'", () => { + it("transforms '**ext' to '**/*ext'", () => { const badGlobPatterns = [ ["cypress/integration/**.test.ts", "cypress/integration/**/*.test.ts"], ["scripts/**.mjs", "scripts/**/*.mjs"], @@ -70,7 +71,7 @@ describe("clean-globs", () => { }); }); - test("transforms 'pre**' to pre*/**", () => { + it("transforms 'pre**' to pre*/**", () => { const badGlobPatterns = [ ["pre**", "pre*/**"], ["pre**/foo", "pre*/**/foo"], diff --git a/packages/turbo-codemod/__tests__/create-turbo-config.test.ts b/packages/turbo-codemod/__tests__/create-turbo-config.test.ts index d3165f07dac83..d7bf60e04fe08 100644 --- a/packages/turbo-codemod/__tests__/create-turbo-config.test.ts +++ b/packages/turbo-codemod/__tests__/create-turbo-config.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import fs from "fs-extra"; import { transformer } from "../src/transforms/create-turbo-config"; @@ -8,7 +9,7 @@ describe("create-turbo-config", () => { test: "create-turbo-config", }); - test("package.json config exists but no turbo.json config - basic", () => { + it("package.json config exists but no turbo.json config - basic", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -30,13 +31,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "modified", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -45,7 +46,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - repeat run", () => { + it("package.json config exists but no turbo.json config - repeat run", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -67,13 +68,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "modified", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -89,13 +90,13 @@ describe("create-turbo-config", () => { // result should be correct expect(repeatResult.fatalError).toBeUndefined(); expect(repeatResult.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -104,7 +105,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - dry", () => { + it("package.json config exists but no turbo.json config - dry", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -126,13 +127,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "skipped", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "skipped", "additions": 1, "deletions": 0, @@ -141,7 +142,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - print", () => { + it("package.json config exists but no turbo.json config - print", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -163,13 +164,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "modified", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -178,7 +179,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - dry & print", () => { + it("package.json config exists but no turbo.json config - dry & print", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -200,13 +201,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "skipped", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "skipped", "additions": 1, "deletions": 0, @@ -215,7 +216,7 @@ describe("create-turbo-config", () => { `); }); - test("no package.json config or turbo.json file exists", () => { + it("no package.json config or turbo.json file exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-json-config" }); @@ -241,13 +242,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -256,7 +257,7 @@ describe("create-turbo-config", () => { `); }); - test("no package.json file exists", () => { + it("no package.json file exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-json-file" }); @@ -278,7 +279,7 @@ describe("create-turbo-config", () => { ); }); - test("turbo.json file exists and no package.json config exists", () => { + it("turbo.json file exists and no package.json config exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "turbo-json-config" }); @@ -305,13 +306,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -320,7 +321,7 @@ describe("create-turbo-config", () => { `); }); - test("turbo.json file exists and package.json config exists", () => { + it("turbo.json file exists and package.json config exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "both-configs" }); @@ -348,13 +349,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError?.message).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -363,7 +364,7 @@ describe("create-turbo-config", () => { `); }); - test("errors when unable to write json", () => { + it("errors when unable to write json", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -395,14 +396,14 @@ describe("create-turbo-config", () => { "Encountered an error while transforming files" ); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "error", "additions": 0, "deletions": 1, "error": [Error: could not write file], }, - "turbo.json": Object { + "turbo.json": { "action": "error", "additions": 1, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/generate-package-name.test.ts b/packages/turbo-codemod/__tests__/generate-package-name.test.ts index 9a4e210471113..a42d120191181 100644 --- a/packages/turbo-codemod/__tests__/generate-package-name.test.ts +++ b/packages/turbo-codemod/__tests__/generate-package-name.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect } from "@jest/globals"; import { getNewPkgName } from "../src/transforms/add-package-names"; describe("getNewPkgName", () => { diff --git a/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts b/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts index f30cd9ea08cc6..e1ddf72ecaa38 100644 --- a/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts +++ b/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts @@ -1,7 +1,8 @@ +import { describe, it, expect } from "@jest/globals"; import { getTransformsForMigration } from "../src/commands/migrate/steps/getTransformsForMigration"; describe("get-transforms-for-migration", () => { - test("ordering", () => { + it("ordering", () => { const results = getTransformsForMigration({ fromVersion: "1.0.0", toVersion: "1.10.0", diff --git a/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts index 8bbee953f8c59..ac8b97dd4287c 100644 --- a/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts +++ b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts @@ -1,11 +1,12 @@ import * as turboWorkspaces from "@turbo/workspaces"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { getTurboUpgradeCommand } from "../src/commands/migrate/steps/getTurboUpgradeCommand"; import * as utils from "../src/commands/migrate/utils"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); @@ -430,7 +431,7 @@ describe("get-turbo-upgrade-command", () => { test: "get-turbo-upgrade-command", }); - test.each(LOCAL_INSTALL_COMMANDS)( + it.each(LOCAL_INSTALL_COMMANDS)( "returns correct upgrade command for local install of turbo@$version using $packageManager@$packageManagerVersion (fixture: $fixture)", async ({ version, @@ -492,7 +493,7 @@ describe("get-turbo-upgrade-command", () => { } ); - test.each(GLOBAL_INSTALL_COMMANDS)( + it.each(GLOBAL_INSTALL_COMMANDS)( "returns correct upgrade command for global install of turbo@$version using $packageManager@$packageManagerVersion (fixture: $fixture)", async ({ version, @@ -555,7 +556,7 @@ describe("get-turbo-upgrade-command", () => { ); describe("errors", () => { - test("fails gracefully if no package.json exists", async () => { + it("fails gracefully if no package.json exists", async () => { const { root } = useFixture({ fixture: "no-package", }); @@ -598,7 +599,7 @@ describe("get-turbo-upgrade-command", () => { mockGetWorkspaceDetails.mockRestore(); }); - test.each([ + it.each([ { fixture: "no-package", name: "fails gracefully if no package.json exists", diff --git a/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts b/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts index 0d299928ce740..9f4ec2c8a7843 100644 --- a/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts +++ b/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts @@ -1,5 +1,6 @@ import { setupTestFixtures } from "@turbo/test-utils"; import { type Schema } from "@turbo/types"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/migrate-dot-env"; describe("migrate-dot-env", () => { @@ -35,8 +36,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 3, "deletions": 3, @@ -100,23 +101,23 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -144,8 +145,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 3, "deletions": 3, @@ -182,8 +183,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 3, "deletions": 3, @@ -211,8 +212,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 3, "deletions": 3, @@ -241,8 +242,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -280,8 +281,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts b/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts index e9c047d21d6cb..d15031ef7b300 100644 --- a/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts +++ b/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts @@ -1,6 +1,7 @@ import merge from "deepmerge"; import type { SchemaV1, SchemaV2 } from "@turbo/types"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { hasLegacyEnvVarDependencies, migratePipeline, @@ -44,12 +45,12 @@ describe("migrate-env-var-dependencies", () => { const { hasKeys, envVars } = hasLegacyEnvVarDependencies(config); expect(hasKeys).toEqual(true); expect(envVars).toMatchInlineSnapshot(` - Array [ - "$GLOBAL_ENV_KEY", - "$TASK_ENV_KEY", - "$ANOTHER_ENV_KEY", - ] - `); + [ + "$GLOBAL_ENV_KEY", + "$TASK_ENV_KEY", + "$ANOTHER_ENV_KEY", + ] + `); }); it("finds env keys in legacy turbo.json - multiple pipeline keys", () => { @@ -59,13 +60,13 @@ describe("migrate-env-var-dependencies", () => { const { hasKeys, envVars } = hasLegacyEnvVarDependencies(config); expect(hasKeys).toEqual(true); expect(envVars).toMatchInlineSnapshot(` - Array [ - "$GLOBAL_ENV_KEY", - "$MY_ENV", - "$TASK_ENV_KEY", - "$ANOTHER_ENV_KEY", - ] - `); + [ + "$GLOBAL_ENV_KEY", + "$MY_ENV", + "$TASK_ENV_KEY", + "$ANOTHER_ENV_KEY", + ] + `); }); it("finds env keys in legacy turbo.json - no keys", () => { @@ -76,7 +77,7 @@ describe("migrate-env-var-dependencies", () => { }); const { hasKeys, envVars } = hasLegacyEnvVarDependencies(config); expect(hasKeys).toEqual(false); - expect(envVars).toMatchInlineSnapshot(`Array []`); + expect(envVars).toMatchInlineSnapshot(`[]`); }); it("finds env keys in turbo.json - no global", () => { @@ -85,7 +86,7 @@ describe("migrate-env-var-dependencies", () => { }); expect(hasKeys).toEqual(true); expect(envVars).toMatchInlineSnapshot(` - Array [ + [ "$cool", ] `); @@ -99,13 +100,13 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(build); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -117,7 +118,7 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline.env).toBeUndefined(); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -131,12 +132,12 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "$MY_ENV", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -152,13 +153,13 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "$MY_ENV", "SUPER_COOL", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -174,13 +175,13 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "$MY_ENV", "MY_ENV", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -192,37 +193,37 @@ describe("migrate-env-var-dependencies", () => { const config = getTestTurboConfig(); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "globalEnv": Array [ + "globalEnv": [ "GLOBAL_ENV_KEY", ], - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -240,30 +241,30 @@ describe("migrate-env-var-dependencies", () => { }); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -280,41 +281,41 @@ describe("migrate-env-var-dependencies", () => { }); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "globalEnv": Array [ + "globalEnv": [ "GLOBAL_ENV_KEY", ], - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "$MY_ENV", "SUPER_COOL", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -331,41 +332,41 @@ describe("migrate-env-var-dependencies", () => { }); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "globalEnv": Array [ + "globalEnv": [ "GLOBAL_ENV_KEY", ], - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "$MY_ENV", "MY_ENV", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -421,8 +422,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -495,18 +496,18 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/web/turbo.json": Object { + { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -555,8 +556,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -572,8 +573,8 @@ describe("migrate-env-var-dependencies", () => { expect(repeatResult.fatalError).toBeUndefined(); expect(repeatResult.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -601,8 +602,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 4, "deletions": 4, @@ -651,8 +652,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -680,8 +681,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 4, "deletions": 4, @@ -708,8 +709,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/migrate.test.ts b/packages/turbo-codemod/__tests__/migrate.test.ts index 021b5016fb8da..23b7acdd88c51 100644 --- a/packages/turbo-codemod/__tests__/migrate.test.ts +++ b/packages/turbo-codemod/__tests__/migrate.test.ts @@ -2,6 +2,7 @@ import childProcess from "node:child_process"; import * as turboUtils from "@turbo/utils"; import * as turboWorkspaces from "@turbo/workspaces"; import { setupTestFixtures, spyExit } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { migrate } from "../src/commands/migrate"; import * as checkGitStatus from "../src/utils/checkGitStatus"; import * as getCurrentVersion from "../src/commands/migrate/steps/getCurrentVersion"; @@ -9,7 +10,7 @@ import * as getLatestVersion from "../src/commands/migrate/steps/getLatestVersio import * as getTurboUpgradeCommand from "../src/commands/migrate/steps/getTurboUpgradeCommand"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); diff --git a/packages/turbo-codemod/__tests__/rename-output-mode.test.ts b/packages/turbo-codemod/__tests__/rename-output-mode.test.ts index caa422db48fc2..d54a597b495da 100644 --- a/packages/turbo-codemod/__tests__/rename-output-mode.test.ts +++ b/packages/turbo-codemod/__tests__/rename-output-mode.test.ts @@ -1,5 +1,6 @@ import { setupTestFixtures } from "@turbo/test-utils"; import { type Schema } from "@turbo/types"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/rename-output-mode"; describe("rename-output-mode", () => { @@ -34,8 +35,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -99,23 +100,23 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -143,8 +144,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 2, @@ -180,8 +181,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -209,8 +210,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 2, @@ -270,8 +271,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 10, "deletions": 10, @@ -300,8 +301,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -339,8 +340,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/rename-pipeline.ts b/packages/turbo-codemod/__tests__/rename-pipeline.ts index 18e2cec7e6798..38c197bcf5ff1 100644 --- a/packages/turbo-codemod/__tests__/rename-pipeline.ts +++ b/packages/turbo-codemod/__tests__/rename-pipeline.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/rename-pipeline"; describe("rename-pipeline", () => { @@ -31,8 +32,8 @@ describe("rename-pipeline", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 1, @@ -94,23 +95,23 @@ describe("rename-pipeline", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 1, diff --git a/packages/turbo-codemod/__tests__/set-default-outputs.test.ts b/packages/turbo-codemod/__tests__/set-default-outputs.test.ts index b6ef9e537bf58..60460ec21ea1a 100644 --- a/packages/turbo-codemod/__tests__/set-default-outputs.test.ts +++ b/packages/turbo-codemod/__tests__/set-default-outputs.test.ts @@ -1,5 +1,6 @@ import { setupTestFixtures } from "@turbo/test-utils"; import { type Schema } from "@turbo/types"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/set-default-outputs"; describe("set-default-outputs", () => { @@ -34,8 +35,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 1, @@ -99,23 +100,23 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 1, @@ -143,8 +144,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 1, @@ -180,8 +181,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 1, @@ -209,8 +210,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 1, @@ -270,8 +271,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 6, "deletions": 5, @@ -300,8 +301,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -341,8 +342,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts b/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts index 750646a2db078..d60af37412524 100644 --- a/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts +++ b/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/stabilize-env-mode"; describe("stabilize-env-mode", () => { @@ -34,8 +35,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 4, @@ -76,8 +77,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 6, @@ -110,8 +111,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -141,8 +142,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -175,8 +176,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -209,8 +210,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -270,18 +271,18 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "apps/website/turbo.json": Object { + "apps/website/turbo.json": { "action": "modified", "additions": 1, "deletions": 2, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 4, diff --git a/packages/turbo-codemod/__tests__/stabilize-ui.test.ts b/packages/turbo-codemod/__tests__/stabilize-ui.test.ts index 48f3e955010c6..4973b3cf8813b 100644 --- a/packages/turbo-codemod/__tests__/stabilize-ui.test.ts +++ b/packages/turbo-codemod/__tests__/stabilize-ui.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/stabilize-ui"; describe("stabilize-ui", () => { @@ -30,8 +31,8 @@ describe("stabilize-ui", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -63,8 +64,8 @@ describe("stabilize-ui", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 0, "deletions": 1, @@ -97,8 +98,8 @@ describe("stabilize-ui", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 1, diff --git a/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts b/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts index fd383e5d024e1..8e2e2b03b3dda 100644 --- a/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts +++ b/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/transform-env-literals-to-wildcards"; describe.only("transform-env-literals-to-wildcards", () => { @@ -33,8 +34,8 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -64,8 +65,8 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -100,8 +101,8 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -156,18 +157,18 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 2, "deletions": 2, }, - "apps/website/turbo.json": Object { + "apps/website/turbo.json": { "action": "modified", "additions": 2, "deletions": 2, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, diff --git a/packages/turbo-codemod/__tests__/transform.test.ts b/packages/turbo-codemod/__tests__/transform.test.ts index 84e68fb007f0e..3c2c7d8097d51 100644 --- a/packages/turbo-codemod/__tests__/transform.test.ts +++ b/packages/turbo-codemod/__tests__/transform.test.ts @@ -1,12 +1,13 @@ import * as turboWorkspaces from "@turbo/workspaces"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures, spyExit } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { transform } from "../src/commands/transform"; import * as checkGitStatus from "../src/utils/checkGitStatus"; import type { MigrateCommandArgument } from "../src/commands"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); diff --git a/packages/turbo-codemod/jest.config.js b/packages/turbo-codemod/jest.config.ts similarity index 87% rename from packages/turbo-codemod/jest.config.js rename to packages/turbo-codemod/jest.config.ts index e2d0aef7a2614..9028a4075459c 100644 --- a/packages/turbo-codemod/jest.config.js +++ b/packages/turbo-codemod/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", transformIgnorePatterns: ["node_modules/*", "packages/turbo-workspaces/*"], @@ -27,4 +28,6 @@ module.exports = { }, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index ba9e7cf2830b5..b1c96aeeffa6c 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -38,6 +38,7 @@ "update-check": "^1.5.4" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/gen": "workspace:*", "@turbo/test-utils": "workspace:*", @@ -49,15 +50,14 @@ "@types/fs-extra": "^9.0.13", "@types/gradient-string": "^1.1.2", "@types/inquirer": "^8.2.0", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "@types/semver": "^7.3.9", "@types/uuid": "^9.0.0", "deepmerge": "^4.2.2", - "jest": "^27.4.3", + "jest": "^29.7.0", "plop": "^3.1.1", "semver": "^7.3.5", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.7.0", "typescript": "5.4.5" }, diff --git a/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs b/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs index c63a9df4bf4ca..80df9d4d368eb 100644 --- a/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs +++ b/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs @@ -1,11 +1,12 @@ +import { describe, it, expect } from '@jest/globals'; import { transformer } from "../src/transforms/{{ name }}"; import { setupTestFixtures } from "./test-utils"; describe("{{ name }}", () => { - + const { useFixture } = setupTestFixtures({ test: "{{ name }}" }); - test("basic", () => { + it("basic", () => { // load the fixture for the test const { root, read, readJson } = useFixture({ fixture: "specific-fixture", diff --git a/packages/turbo-gen/__tests__/raw.test.ts b/packages/turbo-gen/__tests__/raw.test.ts index 48169ddcba541..127a03d15bace 100644 --- a/packages/turbo-gen/__tests__/raw.test.ts +++ b/packages/turbo-gen/__tests__/raw.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect, jest } from "@jest/globals"; import { raw } from "../src/commands/raw"; import * as run from "../src/commands/run"; import * as workspace from "../src/commands/workspace"; @@ -135,7 +136,7 @@ describe("raw", () => { }, }, ]; - test.each(testMatrix)( + it.each(testMatrix)( "$command and $options calls $target with $calledWith", async ({ command, options, target, calledWith }) => { // mock generation functions, we only care if they are called, diff --git a/packages/turbo-gen/jest.config.js b/packages/turbo-gen/jest.config.ts similarity index 82% rename from packages/turbo-gen/jest.config.js rename to packages/turbo-gen/jest.config.ts index 9e9d6c5f19aab..6e4b65153f944 100644 --- a/packages/turbo-gen/jest.config.js +++ b/packages/turbo-gen/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["__fixtures__/", "/__tests__/test-utils.ts"], @@ -9,4 +10,6 @@ module.exports = { collectCoverage: true, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 5839d18ad5d1d..d61ef8a87f868 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -29,22 +29,22 @@ "node-plop": "^0.26.3", "picocolors": "1.0.1", "proxy-agent": "^6.2.2", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "update-check": "^1.5.4", "validate-npm-package-name": "^5.0.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", "@turbo/utils": "workspace:*", "@types/fs-extra": "^9.0.13", "@types/inquirer": "^8.2.5", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "@types/validate-npm-package-name": "^4.0.0", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "tsup": "^6.7.0", "typescript": "5.4.5" }, diff --git a/packages/turbo-ignore/__tests__/checkCommit.test.ts b/packages/turbo-ignore/__tests__/checkCommit.test.ts index a5a94da80d112..f5e8881e75077 100644 --- a/packages/turbo-ignore/__tests__/checkCommit.test.ts +++ b/packages/turbo-ignore/__tests__/checkCommit.test.ts @@ -1,6 +1,7 @@ // eslint-disable-next-line camelcase -- this is a good exception to this rule import child_process from "node:child_process"; import { mockEnv } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { checkCommit } from "../src/checkCommit"; describe("checkCommit()", () => { diff --git a/packages/turbo-ignore/__tests__/errors.test.ts b/packages/turbo-ignore/__tests__/errors.test.ts index 02e40b52cd97b..da8e3b47ec329 100644 --- a/packages/turbo-ignore/__tests__/errors.test.ts +++ b/packages/turbo-ignore/__tests__/errors.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect } from "@jest/globals"; import { shouldWarn, NON_FATAL_ERRORS } from "../src/errors"; describe("shouldWarn()", () => { diff --git a/packages/turbo-ignore/__tests__/getComparison.test.ts b/packages/turbo-ignore/__tests__/getComparison.test.ts index 8635964a53aa5..7a194353e364f 100644 --- a/packages/turbo-ignore/__tests__/getComparison.test.ts +++ b/packages/turbo-ignore/__tests__/getComparison.test.ts @@ -1,6 +1,7 @@ // eslint-disable-next-line camelcase -- This is a test file import child_process from "node:child_process"; import { spyConsole, mockEnv, validateLogs } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { getComparison } from "../src/getComparison"; describe("getComparison()", () => { @@ -9,37 +10,38 @@ describe("getComparison()", () => { it("uses headRelative comparison when not running Vercel CI", () => { expect(getComparison({ workspace: "test-workspace" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^", - "type": "headRelative", - } - `); + { + "ref": "HEAD^", + "type": "headRelative", + } + `); expect(mockConsole.log).toHaveBeenCalledTimes(0); }); it("uses fallback comparison if provided when not running Vercel CI", () => { expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); - validateLogs(["Falling back to ref HEAD^2"], mockConsole.log, { - prefix: "≫ ", - }); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + "Falling back to ref HEAD^2" + ); }); it("returns null when running in Vercel CI with no VERCEL_GIT_PREVIOUS_SHA", () => { process.env.VERCEL = "1"; process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace" })).toBeNull(); - validateLogs( - [ - 'No previous deployments found for "test-workspace" on branch "my-branch"', - ], - mockConsole.log, - { prefix: "≫ " } + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'No previous deployments found for "test-workspace" on branch "my-branch"' ); }); @@ -48,40 +50,35 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", 'No previous deployments found for "test-workspace" on branch "my-branch"', - "Falling back to ref HEAD^2", ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "Falling back to ref HEAD^2"], + ]); }); it("modifies output when running in Vercel CI with no VERCEL_GIT_PREVIOUS_SHA and no VERCEL_GIT_COMMIT_REF", () => { process.env.VERCEL = "1"; expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); - - validateLogs( - [ - 'No previous deployments found for "test-workspace"', - "Falling back to ref HEAD^2", - ], - mockConsole.log, - { prefix: "≫ " } - ); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); + + validateLogs(mockConsole.log, [ + ["≫ ", 'No previous deployments found for "test-workspace"'], + ["≫ ", "Falling back to ref HEAD^2"], + ]); }); it("uses previousDeploy when running in Vercel CI with VERCEL_GIT_PREVIOUS_SHA", () => { @@ -94,18 +91,16 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace" })) .toMatchInlineSnapshot(` - Object { - "ref": "mygitsha", - "type": "previousDeploy", - } - `); - - validateLogs( - [ - 'Found previous deployment ("mygitsha") for "test-workspace" on branch "my-branch"', - ], - mockConsole.log, - { prefix: "≫ " } + { + "ref": "mygitsha", + "type": "previousDeploy", + } + `); + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Found previous deployment ("mygitsha") for "test-workspace" on branch "my-branch"' ); mockExec.mockRestore(); @@ -123,20 +118,19 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", 'Previous deployment ("mygitsha") for "test-workspace" on branch "my-branch" is unreachable.', - "Falling back to ref HEAD^2", ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "Falling back to ref HEAD^2"], + ]); mockExec.mockRestore(); }); @@ -153,12 +147,10 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace" })).toBeNull(); - validateLogs( - [ - 'Previous deployment ("mygitsha") for "test-workspace" on branch "my-branch" is unreachable.', - ], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Previous deployment ("mygitsha") for "test-workspace" on branch "my-branch" is unreachable.' ); mockExec.mockRestore(); @@ -173,16 +165,16 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_PREVIOUS_SHA = "mygitsha"; expect(getComparison({ workspace: "test-workspace" })) .toMatchInlineSnapshot(` - Object { - "ref": "mygitsha", - "type": "previousDeploy", - } - `); - - validateLogs( - ['Found previous deployment ("mygitsha") for "test-workspace"'], - mockConsole.log, - { prefix: "≫ " } + { + "ref": "mygitsha", + "type": "previousDeploy", + } + `); + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Found previous deployment ("mygitsha") for "test-workspace"' ); mockExec.mockRestore(); @@ -199,10 +191,10 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_PREVIOUS_SHA = "mygitsha"; expect(getComparison({ workspace: "test-workspace" })).toBeNull(); - validateLogs( - ['Previous deployment ("mygitsha") for "test-workspace" is unreachable.'], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Previous deployment ("mygitsha") for "test-workspace" is unreachable.' ); mockExec.mockRestore(); diff --git a/packages/turbo-ignore/__tests__/getTask.test.ts b/packages/turbo-ignore/__tests__/getTask.test.ts index e5040b41c089c..7c23eb3b16576 100644 --- a/packages/turbo-ignore/__tests__/getTask.test.ts +++ b/packages/turbo-ignore/__tests__/getTask.test.ts @@ -1,14 +1,15 @@ -import { spyConsole, validateLogs } from "@turbo/test-utils"; +import { spyConsole } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getTask } from "../src/getTask"; describe("getWorkspace()", () => { const mockConsole = spyConsole(); it("getTask defaults to build", () => { expect(getTask({})).toEqual("build"); - validateLogs( - ['Using "build" as the task as it was unspecified'], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using "build" as the task as it was unspecified' ); }); @@ -18,10 +19,11 @@ describe("getWorkspace()", () => { task: "workspace#task", }) ).toEqual(`"workspace#task"`); - validateLogs( - ['Using "workspace#task" as the task from the arguments'], - mockConsole.log, - { prefix: "≫ " } + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using "workspace#task" as the task from the arguments' ); }); }); diff --git a/packages/turbo-ignore/__tests__/getTurboVersion.test.ts b/packages/turbo-ignore/__tests__/getTurboVersion.test.ts index 5852abd19114e..0e41c42fd7fd5 100644 --- a/packages/turbo-ignore/__tests__/getTurboVersion.test.ts +++ b/packages/turbo-ignore/__tests__/getTurboVersion.test.ts @@ -1,4 +1,5 @@ -import { spyConsole, validateLogs } from "@turbo/test-utils"; +import { spyConsole } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getTurboVersion } from "../src/getTurboVersion"; describe("getWorkspace()", () => { @@ -12,10 +13,11 @@ describe("getWorkspace()", () => { "./__fixtures__/app" ) ).toEqual("1.2.3"); - validateLogs( - ['Using turbo version "1.2.3" from arguments'], - mockConsole.log, - { prefix: "≫ " } + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using turbo version "1.2.3" from arguments' ); }); diff --git a/packages/turbo-ignore/__tests__/getWorkspace.test.ts b/packages/turbo-ignore/__tests__/getWorkspace.test.ts index 7384ce8efd79f..42a4f693a6722 100644 --- a/packages/turbo-ignore/__tests__/getWorkspace.test.ts +++ b/packages/turbo-ignore/__tests__/getWorkspace.test.ts @@ -1,4 +1,5 @@ -import { spyConsole, validateLogs } from "@turbo/test-utils"; +import { spyConsole } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getWorkspace } from "../src/getWorkspace"; describe("getWorkspace()", () => { @@ -9,10 +10,10 @@ describe("getWorkspace()", () => { workspace: "test-workspace", }) ).toEqual("test-workspace"); - validateLogs( - ['Using "test-workspace" as workspace from arguments'], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using "test-workspace" as workspace from arguments' ); }); diff --git a/packages/turbo-ignore/__tests__/ignore.test.ts b/packages/turbo-ignore/__tests__/ignore.test.ts index a21268d3ea613..b5fe5f42a9b1b 100644 --- a/packages/turbo-ignore/__tests__/ignore.test.ts +++ b/packages/turbo-ignore/__tests__/ignore.test.ts @@ -10,6 +10,7 @@ import { mockEnv, validateLogs, } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { TurboIgnoreTelemetry, TelemetryConfig } from "@turbo/telemetry"; import { turboIgnore } from "../src/ignore"; @@ -64,9 +65,11 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs(["UNKNOWN_ERROR: error details"], mockConsole.error, { - prefix: "≫ ", - }); + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + "UNKNOWN_ERROR: error details" + ); expectBuild(mockExit); mockExec.mockRestore(); @@ -97,12 +100,10 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs( - [ - `turbo-ignore could not complete - no package manager detected, please commit a lockfile, or set "packageManager" in your root "package.json"`, - ], - mockConsole.warn, - { prefix: "≫ " } + expect(mockConsole.warn).toHaveBeenNthCalledWith( + 1, + "≫ ", + `turbo-ignore could not complete - no package manager detected, please commit a lockfile, or set "packageManager" in your root "package.json"` ); expectBuild(mockExit); @@ -142,12 +143,10 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs( - [ - `turbo-ignore could not complete - a ref or SHA is invalid. It could have been removed from the branch history via a force push, or this could be a shallow clone with insufficient history`, - ], - mockConsole.warn, - { prefix: "≫ " } + expect(mockConsole.warn).toHaveBeenNthCalledWith( + 1, + "≫ ", + `turbo-ignore could not complete - a ref or SHA is invalid. It could have been removed from the branch history via a force push, or this could be a shallow clone with insufficient history` ); expectBuild(mockExit); @@ -180,12 +179,10 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs( - [ - `turbo-ignore could not complete - parent commit does not exist or is unreachable`, - ], - mockConsole.warn, - { prefix: "≫ " } + expect(mockConsole.warn).toHaveBeenNthCalledWith( + 1, + "≫ ", + `turbo-ignore could not complete - parent commit does not exist or is unreachable` ); expectBuild(mockExit); @@ -194,32 +191,23 @@ describe("turboIgnore()", () => { it("skips checks and allows build when no workspace can be found", () => { turboIgnore(undefined, { directory: "__fixtures__/no-app" }); - validateLogs( - [ - () => [ - "≫ ", - expect.stringContaining( - " could not be found. turbo-ignore inferencing failed" - ), - ], - ], - mockConsole.error, - { prefix: "≫ " } + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + expect.stringContaining( + " could not be found. turbo-ignore inferencing failed" + ) ); + expectBuild(mockExit); }); it("skips checks and allows build when a workspace with no name is found", () => { turboIgnore(undefined, { directory: "__fixtures__/invalid-app" }); - validateLogs( - [ - () => [ - "≫ ", - expect.stringContaining(' is missing the "name" field (required).'), - ], - ], - mockConsole.error, - { prefix: "≫ " } + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + expect.stringContaining(' is missing the "name" field (required).') ); expectBuild(mockExit); }); @@ -227,7 +215,8 @@ describe("turboIgnore()", () => { it("skips checks and allows build when no monorepo root can be found", () => { turboIgnore(undefined, { directory: "/" }); expectBuild(mockExit); - expect(mockConsole.error).toHaveBeenLastCalledWith( + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, "≫ ", "Monorepo root not found. turbo-ignore inferencing failed" ); @@ -279,20 +268,25 @@ describe("turboIgnore()", () => { return {} as unknown as ChildProcess; }); turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", `Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"`, + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', - "This project and its dependencies are not affected", - () => expect.stringContaining("⏭ Ignoring the change"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "This project and its dependencies are not affected"], + [expect.stringContaining("⏭ Ignoring the change")], + ]); expectIgnore(mockExit); mockExecSync.mockRestore(); @@ -324,20 +318,25 @@ describe("turboIgnore()", () => { task: "workspace#build", directory: "__fixtures__/app", }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "workspace#build" as the task from the arguments', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "workspace#build" as the task from the arguments'], + [ + "≫ ", 'Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"', + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run "workspace#build" --filter="test-app...[last-deployed-sha]" --dry=json`', - 'This commit affects "test-app"', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'This commit affects "test-app"'], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -366,20 +365,25 @@ describe("turboIgnore()", () => { return {} as unknown as ChildProcess; }); turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", 'Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"', + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', - 'This commit affects "test-app" and 1 dependency (ui)', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'This commit affects "test-app" and 1 dependency (ui)'], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -408,20 +412,28 @@ describe("turboIgnore()", () => { return {} as unknown as ChildProcess; }); turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", 'Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"', + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', + ], + [ + "≫ ", 'This commit affects "test-app" and 2 dependencies (ui, tsconfig)', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -459,21 +471,26 @@ describe("turboIgnore()", () => { fallback: "HEAD^2", directory: "__fixtures__/app", }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "workspace#build" as the task from the arguments', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "workspace#build" as the task from the arguments'], + [ + "≫ ", 'Previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch" is unreachable.', - "Falling back to ref HEAD^2", + ], + ["≫ ", "Falling back to ref HEAD^2"], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run "workspace#build" --filter="test-app...[HEAD^2]" --dry=json`', - 'This commit affects "test-app"', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'This commit affects "test-app"'], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -497,12 +514,11 @@ describe("turboIgnore()", () => { expect.anything(), expect.anything() ); - validateLogs( - [ - 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.', - ], - mockConsole.error, - { prefix: "≫ " } + + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.' ); expectBuild(mockExit); @@ -530,12 +546,11 @@ describe("turboIgnore()", () => { expect.anything(), expect.anything() ); - validateLogs( - [ - 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.', - ], - mockConsole.error, - { prefix: "≫ " } + + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.' ); expectBuild(mockExit); @@ -548,18 +563,17 @@ describe("turboIgnore()", () => { turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', - "Found commit message: [vercel skip]", - () => expect.stringContaining("⏭ Ignoring the change"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + ["≫ ", "Found commit message: [vercel skip]"], + [expect.stringContaining("⏭ Ignoring the change")], + ]); expectIgnore(mockExit); }); @@ -570,18 +584,17 @@ describe("turboIgnore()", () => { turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', - "Found commit message: [vercel deploy]", - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + ["≫ ", "Found commit message: [vercel deploy]"], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); }); @@ -611,21 +624,29 @@ describe("turboIgnore()", () => { turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", "Conflicting commit messages found: [vercel deploy] and [vercel skip]", + ], + [ + "≫ ", `Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"`, + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', - "This project and its dependencies are not affected", - () => expect.stringContaining("⏭ Ignoring the change"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "This project and its dependencies are not affected"], + [expect.stringContaining("Ignoring the change")], + ]); expectIgnore(mockExit); mockExecSync.mockRestore(); diff --git a/packages/turbo-ignore/jest.config.js b/packages/turbo-ignore/jest.config.ts similarity index 83% rename from packages/turbo-ignore/jest.config.js rename to packages/turbo-ignore/jest.config.ts index 2b8bd07645c8c..63247ca62bd95 100644 --- a/packages/turbo-ignore/jest.config.js +++ b/packages/turbo-ignore/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["/__fixtures__/"], @@ -17,4 +18,6 @@ module.exports = { transformIgnorePatterns: ["node_modules/*"], verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 096c22c423d1a..1c3db20a114b1 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -29,17 +29,17 @@ "json5": "^2.2.3" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/telemetry": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", "@turbo/types": "workspace:*", "@turbo/utils": "workspace:*", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "commander": "^11.0.0", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "tsup": "^5.12.1", "typescript": "5.4.5" } diff --git a/packages/turbo-repository/__tests__/affected-packages.test.ts b/packages/turbo-repository/__tests__/affected-packages.test.ts index b91115a37ada9..9885078fd6ecb 100644 --- a/packages/turbo-repository/__tests__/affected-packages.test.ts +++ b/packages/turbo-repository/__tests__/affected-packages.test.ts @@ -1,4 +1,4 @@ -import { describe, test } from "node:test"; +import { describe, it } from "node:test"; import { strict as assert } from "node:assert"; import * as path from "node:path"; import { Workspace, Package, PackageManager } from "../js/dist/index.js"; @@ -43,7 +43,7 @@ describe("affectedPackages", () => { ]; for (const { description, files, expected } of tests) { - test(description, async () => { + it(description, async () => { const dir = path.resolve(__dirname, "./fixtures/monorepo"); const workspace = await Workspace.find(dir); diff --git a/packages/turbo-telemetry/src/config.test.ts b/packages/turbo-telemetry/src/config.test.ts index 2410ff83e758f..e1ad778cb1afa 100644 --- a/packages/turbo-telemetry/src/config.test.ts +++ b/packages/turbo-telemetry/src/config.test.ts @@ -1,4 +1,4 @@ -import { describe, test, mock, afterEach, beforeEach } from "node:test"; +import { describe, it, mock, afterEach, beforeEach } from "node:test"; import { strict as assert } from "node:assert"; import fs from "node:fs"; import { TelemetryConfig } from "./config"; @@ -28,7 +28,7 @@ describe("TelemetryConfig", () => { }); describe("fromDefaultConfig", () => { - test("should create TelemetryConfig instance from default config", async (t) => { + it("should create TelemetryConfig instance from default config", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const mockFileContent = JSON.stringify({ telemetry_enabled: true, @@ -53,7 +53,7 @@ describe("TelemetryConfig", () => { assert.equal(result?.id, "654321"); }); - test("should generate new config if default config doesn't exist", async (t) => { + it("should generate new config if default config doesn't exist", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const mockDefaultConfigPath = mock.fn(() => mockConfigPath); const mockReadFileSync = mock.fn(() => { @@ -102,7 +102,7 @@ describe("TelemetryConfig", () => { assert.equal(result?.config.telemetry_enabled, true); }); - test("should not throw if default config is missing a key", async (t) => { + it("should not throw if default config is missing a key", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const id = "654321"; const mockFileContent = JSON.stringify({ @@ -152,7 +152,7 @@ describe("TelemetryConfig", () => { assert.equal(result?.config.telemetry_enabled, true); }); - test("should not throw if default config has a key of the wrong type", async (t) => { + it("should not throw if default config has a key of the wrong type", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const salt = "default-salt"; const mockFileContent = JSON.stringify({ @@ -204,7 +204,7 @@ describe("TelemetryConfig", () => { }); describe("write", () => { - test("should write the config to the file", (t) => { + it("should write the config to the file", (t) => { const mockWriteFileSync = mock.fn(); t.mock.method(fs, "writeFileSync", mockWriteFileSync); @@ -217,7 +217,7 @@ describe("TelemetryConfig", () => { ]); }); - test("should not throw if write fails", (t) => { + it("should not throw if write fails", (t) => { const mockWriteFileSync = t.mock.method(fs, "writeFileSync", () => { throw new Error("Write error"); }); @@ -233,7 +233,7 @@ describe("TelemetryConfig", () => { }); describe("hasSeenAlert", () => { - test("should return true if telemetry_alerted is defined", () => { + it("should return true if telemetry_alerted is defined", () => { telemetryConfig = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -249,7 +249,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should return false if telemetry_alerted key exists but is undefined", () => { + it("should return false if telemetry_alerted key exists but is undefined", () => { telemetryConfig = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -264,7 +264,7 @@ describe("TelemetryConfig", () => { assert.equal(result, false); }); - test("should return false if telemetry_alerted is undefined", () => { + it("should return false if telemetry_alerted is undefined", () => { const result = telemetryConfig.hasSeenAlert(); assert.equal(result, false); @@ -284,7 +284,7 @@ describe("TelemetryConfig", () => { { envVar: null, value: null, expectedResult: true }, ]; for (const { envVar, value, expectedResult } of testCases) { - test(`should return ${expectedResult} when ${envVar} is set to '${value}'`, () => { + it(`should return ${expectedResult} when ${envVar} is set to '${value}'`, () => { const config = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -305,7 +305,7 @@ describe("TelemetryConfig", () => { }); describe("isTelemetryWarningEnabled", () => { - test("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to '1'", () => { + it("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to '1'", () => { process.env.TURBO_TELEMETRY_MESSAGE_DISABLED = "1"; const result = telemetryConfig.isTelemetryWarningEnabled(); @@ -313,7 +313,7 @@ describe("TelemetryConfig", () => { assert.equal(result, false); }); - test("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to 'true'", () => { + it("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to 'true'", () => { process.env.TURBO_TELEMETRY_MESSAGE_DISABLED = "true"; const result = telemetryConfig.isTelemetryWarningEnabled(); @@ -321,7 +321,7 @@ describe("TelemetryConfig", () => { assert.equal(result, false); }); - test("should return true if TURBO_TELEMETRY_MESSAGE_DISABLED is not set", () => { + it("should return true if TURBO_TELEMETRY_MESSAGE_DISABLED is not set", () => { const result = telemetryConfig.isTelemetryWarningEnabled(); assert.equal(result, true); @@ -329,13 +329,13 @@ describe("TelemetryConfig", () => { }); describe("showAlert", () => { - test("should log the telemetry alert if conditions are met", (t) => { + it("should log the telemetry alert if conditions are met", (t) => { const mockLog = t.mock.method(console, "log"); telemetryConfig.showAlert(); assert.equal(mockLog.mock.calls.length, 6); }); - test("should not log the telemetry alert if conditions are not met", (t) => { + it("should not log the telemetry alert if conditions are not met", (t) => { const mockLog = t.mock.method(console, "log"); telemetryConfig = new TelemetryConfig({ @@ -354,7 +354,7 @@ describe("TelemetryConfig", () => { }); describe("enable", () => { - test("should set telemetry_enabled to true and write the config", (t) => { + it("should set telemetry_enabled to true and write the config", (t) => { const mockWriteFileSync = t.mock.method(fs, "writeFileSync"); telemetryConfig.enable(); @@ -368,7 +368,7 @@ describe("TelemetryConfig", () => { }); describe("disable", () => { - test("should set telemetry_enabled to false and write the config", (t) => { + it("should set telemetry_enabled to false and write the config", (t) => { const mockWriteFileSync = t.mock.method(fs, "writeFileSync"); telemetryConfig.disable(); @@ -382,7 +382,7 @@ describe("TelemetryConfig", () => { }); describe("alertShown", () => { - test("should return true if telemetry_alerted is defined", () => { + it("should return true if telemetry_alerted is defined", () => { telemetryConfig = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -398,7 +398,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should set telemetry_alerted to current date and write the config if telemetry_alerted is undefined", (t) => { + it("should set telemetry_alerted to current date and write the config if telemetry_alerted is undefined", (t) => { const mockWriteFileSync = mock.fn(); t.mock.method(fs, "writeFileSync", mockWriteFileSync); const result = telemetryConfig.alertShown(); @@ -414,7 +414,7 @@ describe("TelemetryConfig", () => { }); describe("oneWayHash", () => { - test("should call oneWayHashWithSalt with the input and telemetry_salt from the config", (t) => { + it("should call oneWayHashWithSalt with the input and telemetry_salt from the config", (t) => { const mockOneWayHashWithSalt = mock.fn(() => "hashed-value"); t.mock.method(utils, "oneWayHashWithSalt", mockOneWayHashWithSalt); @@ -430,7 +430,7 @@ describe("TelemetryConfig", () => { }); describe("isDebug", () => { - test("should return true if TURBO_TELEMETRY_DEBUG is set to '1'", () => { + it("should return true if TURBO_TELEMETRY_DEBUG is set to '1'", () => { process.env.TURBO_TELEMETRY_DEBUG = "1"; const result = TelemetryConfig.isDebug(); @@ -438,7 +438,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should return true if TURBO_TELEMETRY_DEBUG is set to 'true'", () => { + it("should return true if TURBO_TELEMETRY_DEBUG is set to 'true'", () => { process.env.TURBO_TELEMETRY_DEBUG = "true"; const result = TelemetryConfig.isDebug(); @@ -446,7 +446,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should return false if TURBO_TELEMETRY_DEBUG is not set", () => { + it("should return false if TURBO_TELEMETRY_DEBUG is not set", () => { const result = TelemetryConfig.isDebug(); assert.equal(result, false); diff --git a/packages/turbo-telemetry/src/utils.test.ts b/packages/turbo-telemetry/src/utils.test.ts index ce62f367b69b9..81d4861beb842 100644 --- a/packages/turbo-telemetry/src/utils.test.ts +++ b/packages/turbo-telemetry/src/utils.test.ts @@ -1,10 +1,10 @@ -import { describe, test } from "node:test"; +import { describe, it } from "node:test"; import { strict as assert } from "node:assert"; import utils from "./utils"; describe("utils", () => { describe("oneWayHashWithSalt", () => { - test("should return the hashed value with salt", () => { + it("should return the hashed value with salt", () => { const input = "a-sensitive-value"; const salt = "private-salt"; @@ -15,7 +15,7 @@ describe("utils", () => { ); }); - test("should return consistent length", () => { + it("should return consistent length", () => { const input = "a-sensitive-value"; const salt = "private-salt"; @@ -30,7 +30,7 @@ describe("utils", () => { }); describe("defaultConfigPath", () => { - test("supports overriding by env var", async () => { + it("supports overriding by env var", async () => { process.env.TURBO_CONFIG_DIR_PATH = "/tmp"; const result = await utils.defaultConfigPath(); assert.equal(result, "/tmp/turborepo/telemetry.json"); diff --git a/packages/turbo-test-utils/package.json b/packages/turbo-test-utils/package.json index a459513c39228..482be4027d6e2 100644 --- a/packages/turbo-test-utils/package.json +++ b/packages/turbo-test-utils/package.json @@ -22,14 +22,15 @@ "lint:prettier": "prettier -c . --cache --ignore-path=../../.prettier-ignore" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/tsconfig": "workspace:*", "@types/fs-extra": "^9.0.13", - "@types/jest": "^27.4.0", "@types/js-yaml": "^4.0.5", "@types/node": "^18.17.2", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "jest-mock": "^29.7.0", + "ts-jest": "^29.2.5", "typescript": "5.4.5" }, "dependencies": { diff --git a/packages/turbo-test-utils/src/mockEnv.ts b/packages/turbo-test-utils/src/mockEnv.ts index ee8be377e683a..0104925cec3b7 100644 --- a/packages/turbo-test-utils/src/mockEnv.ts +++ b/packages/turbo-test-utils/src/mockEnv.ts @@ -1,3 +1,5 @@ +import { afterAll, beforeEach, jest } from "@jest/globals"; + export function mockEnv() { const OLD_ENV = process.env; diff --git a/packages/turbo-test-utils/src/spyConsole.ts b/packages/turbo-test-utils/src/spyConsole.ts index 9f5fee2fa9a74..e0728b652f387 100644 --- a/packages/turbo-test-utils/src/spyConsole.ts +++ b/packages/turbo-test-utils/src/spyConsole.ts @@ -1,9 +1,10 @@ -export type Spy = jest.SpyInstance | undefined; +import { afterAll, afterEach, jest, beforeEach } from "@jest/globals"; +import type { SpyInstance } from "jest-mock"; export interface SpyConsole { - log: Spy; - error: Spy; - warn: Spy; + log: SpyInstance | undefined; + error: SpyInstance | undefined; + warn: SpyInstance | undefined; } export function spyConsole() { diff --git a/packages/turbo-test-utils/src/spyExit.ts b/packages/turbo-test-utils/src/spyExit.ts index a8e6c19ececd4..78d9ca721e906 100644 --- a/packages/turbo-test-utils/src/spyExit.ts +++ b/packages/turbo-test-utils/src/spyExit.ts @@ -1,7 +1,8 @@ -type Spy = jest.SpyInstance | undefined; +import { afterAll, afterEach, beforeEach, jest } from "@jest/globals"; +import type { MockInstance } from "jest-mock"; export interface SpyExit { - exit: Spy; + exit: MockInstance<(code?: number) => never> | undefined; } export function spyExit() { diff --git a/packages/turbo-test-utils/src/useFixtures.ts b/packages/turbo-test-utils/src/useFixtures.ts index 37b43fa49548a..1d87a5aa9d7fa 100644 --- a/packages/turbo-test-utils/src/useFixtures.ts +++ b/packages/turbo-test-utils/src/useFixtures.ts @@ -10,6 +10,7 @@ import { } from "fs-extra"; import yaml from "js-yaml"; import { parse as JSON5Parse } from "json5"; +import { afterAll, afterEach } from "@jest/globals"; interface SetupTextFixtures { directory: string; diff --git a/packages/turbo-test-utils/src/validateLogs.ts b/packages/turbo-test-utils/src/validateLogs.ts index ca52ad3383526..8e11015fa7568 100644 --- a/packages/turbo-test-utils/src/validateLogs.ts +++ b/packages/turbo-test-utils/src/validateLogs.ts @@ -1,21 +1,13 @@ -import type { Spy } from "./spyConsole"; +import { expect } from "@jest/globals"; +import type { SpyConsole } from "./spyConsole"; + +type Matcher = ReturnType; export function validateLogs( - logs: Array boolean | Array)>, - mockConsole: Spy, - options: { prefix?: string } = {} + spy: SpyConsole[keyof SpyConsole], + args: Array> ) { - logs.forEach((log, idx) => { - if (typeof log === "function") { - const expected = log(); - expect(mockConsole).toHaveBeenNthCalledWith( - idx + 1, - ...(Array.isArray(expected) ? expected : [expected]) - ); - } else if (options.prefix) { - expect(mockConsole).toHaveBeenNthCalledWith(idx + 1, options.prefix, log); - } else { - expect(mockConsole).toHaveBeenNthCalledWith(idx + 1, log); - } + args.forEach((arg, idx) => { + expect(spy).toHaveBeenNthCalledWith(idx + 1, ...arg); }); } diff --git a/packages/turbo-types/schemas/schema.json b/packages/turbo-types/schemas/schema.json index a9cb513e7a1c1..86fdcf0476344 100644 --- a/packages/turbo-types/schemas/schema.json +++ b/packages/turbo-types/schemas/schema.json @@ -33,7 +33,7 @@ "items": { "type": "string" }, - "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", + "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", "default": [] }, "globalEnv": { diff --git a/packages/turbo-types/schemas/schema.v1.json b/packages/turbo-types/schemas/schema.v1.json index eba389b8be596..1844f9a329dfb 100644 --- a/packages/turbo-types/schemas/schema.v1.json +++ b/packages/turbo-types/schemas/schema.v1.json @@ -170,7 +170,7 @@ "items": { "type": "string" }, - "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", + "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", "default": [] }, "globalEnv": { diff --git a/packages/turbo-types/schemas/schema.v2.json b/packages/turbo-types/schemas/schema.v2.json index a9cb513e7a1c1..86fdcf0476344 100644 --- a/packages/turbo-types/schemas/schema.v2.json +++ b/packages/turbo-types/schemas/schema.v2.json @@ -33,7 +33,7 @@ "items": { "type": "string" }, - "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", + "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", "default": [] }, "globalEnv": { diff --git a/packages/turbo-types/src/types/config-v1.ts b/packages/turbo-types/src/types/config-v1.ts index e3c24f591b683..d0e82503f89c2 100644 --- a/packages/turbo-types/src/types/config-v1.ts +++ b/packages/turbo-types/src/types/config-v1.ts @@ -221,7 +221,7 @@ export interface RootSchemaV1 extends BaseSchemaV1 { * * - any root level file that impacts package tasks * that are not represented in the traditional dependency graph - * (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.) + * (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.) * * Documentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies * diff --git a/packages/turbo-types/src/types/config-v2.ts b/packages/turbo-types/src/types/config-v2.ts index 910383bf5ac5d..1be725d352404 100644 --- a/packages/turbo-types/src/types/config-v2.ts +++ b/packages/turbo-types/src/types/config-v2.ts @@ -67,7 +67,7 @@ export interface RootSchema extends BaseSchema { * * - any root level file that impacts package tasks * that are not represented in the traditional dependency graph - * (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.) + * (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.) * * Documentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies * diff --git a/packages/turbo-utils/__tests__/convertCase.test.ts b/packages/turbo-utils/__tests__/convertCase.test.ts index a52ccfd180160..487714ade5218 100644 --- a/packages/turbo-utils/__tests__/convertCase.test.ts +++ b/packages/turbo-utils/__tests__/convertCase.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect } from "@jest/globals"; import { convertCase, type CaseOptions } from "../src/convertCase"; interface TestCase { diff --git a/packages/turbo-utils/__tests__/examples.test.ts b/packages/turbo-utils/__tests__/examples.test.ts index 9386b9415eb77..b607c40d6f05d 100644 --- a/packages/turbo-utils/__tests__/examples.test.ts +++ b/packages/turbo-utils/__tests__/examples.test.ts @@ -1,8 +1,9 @@ import got from "got"; import * as Got from "got"; +import { describe, it, expect, jest } from "@jest/globals"; import { isUrlOk, getRepoInfo, hasRepo } from "../src/examples"; -jest.mock("got", () => ({ +jest.mock("got", () => ({ __esModule: true, ...jest.requireActual("got"), })); @@ -37,7 +38,7 @@ describe("examples", () => { }); describe("getRepoInfo", () => { - test.each([ + it.each([ { repoUrl: "https://github.com/vercel/turborepo/", examplePath: undefined, @@ -104,7 +105,7 @@ describe("examples", () => { }); describe("hasRepo", () => { - test.each([ + it.each([ { repoInfo: { username: "vercel", diff --git a/packages/turbo-utils/__tests__/getTurboConfigs.test.ts b/packages/turbo-utils/__tests__/getTurboConfigs.test.ts index 27b0e458e6917..de4bc8a0d3885 100644 --- a/packages/turbo-utils/__tests__/getTurboConfigs.test.ts +++ b/packages/turbo-utils/__tests__/getTurboConfigs.test.ts @@ -1,5 +1,6 @@ import path from "node:path"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getTurboConfigs } from "../src/getTurboConfigs"; describe("getTurboConfigs", () => { @@ -14,40 +15,40 @@ describe("getTurboConfigs", () => { expect(configs).toHaveLength(1); expect(configs[0].isRootConfig).toBe(true); expect(configs[0].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "globalEnv": Array [ + "globalEnv": [ "UNORDERED", "CI", ], - "tasks": Object { - "build": Object { - "dependsOn": Array [ + "tasks": { + "build": { + "dependsOn": [ "^build", ], }, - "deploy": Object { - "dependsOn": Array [ + "deploy": { + "dependsOn": [ "build", "test", "lint", ], - "outputs": Array [], + "outputs": [], }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "build", ], - "inputs": Array [ + "inputs": [ "src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx", ], - "outputs": Array [], + "outputs": [], }, }, } @@ -61,14 +62,14 @@ describe("getTurboConfigs", () => { expect(configs).toHaveLength(3); expect(configs[0].isRootConfig).toBe(true); expect(configs[0].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "globalEnv": Array [ + "globalEnv": [ "CI", ], - "tasks": Object { - "build": Object { - "env": Array [ + "tasks": { + "build": { + "env": [ "ENV_1", ], }, @@ -77,14 +78,14 @@ describe("getTurboConfigs", () => { `); expect(configs[1].isRootConfig).toBe(false); expect(configs[1].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "extends": Array [ + "extends": [ "//", ], - "tasks": Object { - "build": Object { - "env": Array [ + "tasks": { + "build": { + "env": [ "ENV_2", ], }, @@ -94,14 +95,14 @@ describe("getTurboConfigs", () => { expect(configs[2].isRootConfig).toBe(false); expect(configs[2].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "extends": Array [ + "extends": [ "//", ], - "tasks": Object { - "build": Object { - "env": Array [ + "tasks": { + "build": { + "env": [ "IS_SERVER", ], }, @@ -117,23 +118,23 @@ describe("getTurboConfigs", () => { expect(configs).toHaveLength(1); expect(configs[0].isRootConfig).toBe(true); expect(configs[0].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "globalDependencies": Array [ + "globalDependencies": [ "**/.env.*local", ], - "tasks": Object { - "build": Object { - "outputs": Array [ + "tasks": { + "build": { + "outputs": [ ".next/**", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, "persistent": true, }, - "lint": Object {}, + "lint": {}, }, } `); diff --git a/packages/turbo-utils/__tests__/getTurboRoot.test.ts b/packages/turbo-utils/__tests__/getTurboRoot.test.ts index 94dffc38905eb..4ff3d0631b758 100644 --- a/packages/turbo-utils/__tests__/getTurboRoot.test.ts +++ b/packages/turbo-utils/__tests__/getTurboRoot.test.ts @@ -1,6 +1,7 @@ -import path from "path"; -import { getTurboRoot } from "../src/getTurboRoot"; +import path from "node:path"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; +import { getTurboRoot } from "../src/getTurboRoot"; describe("getTurboConfigs", () => { const { useFixture } = setupTestFixtures({ @@ -8,7 +9,7 @@ describe("getTurboConfigs", () => { test: "common", }); - test.each([[""], ["child"]])( + it.each([[""], ["child"]])( "finds the root in a non-monorepo (%s)", (repoPath) => { const { root } = useFixture({ fixture: `single-package` }); @@ -17,7 +18,7 @@ describe("getTurboConfigs", () => { } ); - test.each([ + it.each([ [""], ["apps"], ["apps/docs"], diff --git a/packages/turbo-utils/__tests__/isFolderEmpty.test.ts b/packages/turbo-utils/__tests__/isFolderEmpty.test.ts index b766f8278c690..80e8a1c3c487d 100644 --- a/packages/turbo-utils/__tests__/isFolderEmpty.test.ts +++ b/packages/turbo-utils/__tests__/isFolderEmpty.test.ts @@ -1,7 +1,8 @@ +import path from "node:path"; import fs from "fs-extra"; -import path from "path"; -import { isFolderEmpty } from "../src/isFolderEmpty"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; +import { isFolderEmpty } from "../src/isFolderEmpty"; describe("isFolderEmpty", () => { const { useFixture } = setupTestFixtures({ diff --git a/packages/turbo-utils/__tests__/isWritable.test.ts b/packages/turbo-utils/__tests__/isWritable.test.ts index 1544cbcb5b48c..de0b6d93f8686 100644 --- a/packages/turbo-utils/__tests__/isWritable.test.ts +++ b/packages/turbo-utils/__tests__/isWritable.test.ts @@ -1,7 +1,8 @@ -import path from "path"; -import { isWriteable } from "../src/isWriteable"; -import { setupTestFixtures } from "@turbo/test-utils"; +import path from "node:path"; import fs from "fs-extra"; +import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; +import { isWriteable } from "../src/isWriteable"; describe("isWriteable", () => { const { useFixture } = setupTestFixtures({ diff --git a/packages/turbo-utils/jest.config.js b/packages/turbo-utils/jest.config.ts similarity index 73% rename from packages/turbo-utils/jest.config.js rename to packages/turbo-utils/jest.config.ts index f109e6b44fa1f..5e62c50688bcb 100644 --- a/packages/turbo-utils/jest.config.js +++ b/packages/turbo-utils/jest.config.ts @@ -1,9 +1,12 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", modulePathIgnorePatterns: ["/node_modules", "/dist"], transformIgnorePatterns: ["/node_modules/(?!(ansi-regex)/)"], verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-utils/package.json b/packages/turbo-utils/package.json index 1c7adffe460d2..5ae64a8dbfdf0 100644 --- a/packages/turbo-utils/package.json +++ b/packages/turbo-utils/package.json @@ -25,6 +25,7 @@ "lint:prettier": "prettier -c . --cache --ignore-path=../../.prettierignore" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@manypkg/find-root": "^1.1.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", @@ -33,7 +34,6 @@ "@types/async-retry": "^1.4.5", "@types/fs-extra": "^9.0.13", "@types/gradient-string": "^1.1.2", - "@types/jest": "^27.4.0", "@types/js-yaml": "^4.0.5", "@types/node": "^20.5.7", "@types/tar": "^6.1.4", @@ -43,13 +43,13 @@ "fs-extra": "^11.1.1", "got": "^11.8.6", "gradient-string": "^2.0.0", - "jest": "^27.4.3", + "jest": "^29.7.0", "js-yaml": "^4.1.0", "json5": "^2.2.3", "ora": "4.1.1", "picocolors": "1.0.1", "tar": "6.1.13", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "typescript": "5.4.5" } } diff --git a/packages/turbo-workspaces/__tests__/index.test.ts b/packages/turbo-workspaces/__tests__/index.test.ts index 623ea72aed569..7efa709643958 100644 --- a/packages/turbo-workspaces/__tests__/index.test.ts +++ b/packages/turbo-workspaces/__tests__/index.test.ts @@ -1,9 +1,10 @@ -import path from "path"; +import path from "node:path"; +import execa from "execa"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { getWorkspaceDetails, convert } from "../src"; import { generateConvertMatrix } from "./test-utils"; -import execa from "execa"; jest.mock("execa", () => jest.fn()); @@ -13,7 +14,7 @@ describe("Node entrypoint", () => { }); describe("convert", () => { - test.each(generateConvertMatrix())( + it.each(generateConvertMatrix())( "detects $fixtureType project using $fixtureManager and converts to $toManager (interactive=$interactive dry=$dry install=$install)", async ({ fixtureManager, diff --git a/packages/turbo-workspaces/__tests__/managers.test.ts b/packages/turbo-workspaces/__tests__/managers.test.ts index 734b42d2fa6cd..84c09eef77742 100644 --- a/packages/turbo-workspaces/__tests__/managers.test.ts +++ b/packages/turbo-workspaces/__tests__/managers.test.ts @@ -2,6 +2,7 @@ import path from "node:path"; import { ensureDirSync, existsSync } from "fs-extra"; import { setupTestFixtures } from "@turbo/test-utils"; import type { PackageJson } from "@turbo/utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { Logger } from "../src/logger"; import { MANAGERS } from "../src/managers"; import { @@ -21,7 +22,7 @@ describe("managers", () => { }); describe("detect", () => { - test.each(generateDetectMatrix())( + it.each(generateDetectMatrix())( "$project $type project detected by $manager manager - (expect: $result)", async ({ project, manager, type, result }) => { const { root } = useFixture({ fixture: `./${project}/${type}` }); @@ -36,7 +37,7 @@ describe("managers", () => { }); describe("create", () => { - test.each(generateCreateMatrix())( + it.each(generateCreateMatrix())( "creates $manager project from $project $type project (interactive=$interactive, dry=$dry)", async ({ project, manager, type, interactive, dry }) => { expect.assertions(2); @@ -72,7 +73,7 @@ describe("managers", () => { }); describe("remove", () => { - test.each(generateRemoveMatrix())( + it.each(generateRemoveMatrix())( "removes $fixtureManager from $fixtureManager $fixtureType project when moving to $toManager (withNodeModules=$withNodeModules, interactive=$interactive, dry=$dry)", async ({ fixtureManager, @@ -154,7 +155,7 @@ describe("managers", () => { }); describe("read", () => { - test.each(generateReadMatrix())( + it.each(generateReadMatrix())( "reads $toManager workspaces from $fixtureManager $fixtureType project - (shouldThrow: $shouldThrow)", async ({ fixtureManager, fixtureType, toManager, shouldThrow }) => { const { root, directoryName } = useFixture({ @@ -226,7 +227,7 @@ describe("managers", () => { }); describe("read - alternate workspace format", () => { - test.each(generateReadMatrix())( + it.each(generateReadMatrix())( "reads $toManager workspaces using alternate format from $fixtureManager $fixtureType project - (shouldThrow: $shouldThrow)", async ({ fixtureManager, fixtureType, toManager, shouldThrow }) => { const { root, directoryName, readJson, write } = useFixture({ @@ -308,7 +309,7 @@ describe("managers", () => { }); describe("clean", () => { - test.each(generateCleanMatrix())( + it.each(generateCleanMatrix())( "cleans $fixtureManager $fixtureType project (interactive=$interactive, dry=$dry)", async ({ fixtureManager, fixtureType, interactive, dry }) => { const { root } = useFixture({ @@ -336,7 +337,7 @@ describe("managers", () => { }); describe("convertLock", () => { - test.each(generateConvertLockMatrix())( + it.each(generateConvertLockMatrix())( "converts lockfile for $fixtureManager $fixtureType project to $toManager format (interactive=$interactive, dry=$dry)", async ({ fixtureManager, fixtureType, toManager, interactive, dry }) => { const { root, exists } = useFixture({ diff --git a/packages/turbo-workspaces/__tests__/utils.test.ts b/packages/turbo-workspaces/__tests__/utils.test.ts index 868f0802c0d8c..a3d10cc7d814e 100644 --- a/packages/turbo-workspaces/__tests__/utils.test.ts +++ b/packages/turbo-workspaces/__tests__/utils.test.ts @@ -1,9 +1,10 @@ +import { describe, it, expect } from "@jest/globals"; import type { Project } from "../src/types"; import { isCompatibleWithBunWorkspaces } from "../src/utils"; describe("utils", () => { describe("isCompatibleWithBunWorkspace", () => { - test.each([ + it.each([ { globs: ["apps/*"], expected: true }, { globs: ["apps/*", "packages/*"], expected: true }, { globs: ["*"], expected: true }, diff --git a/packages/turbo-workspaces/jest.config.js b/packages/turbo-workspaces/jest.config.ts similarity index 84% rename from packages/turbo-workspaces/jest.config.js rename to packages/turbo-workspaces/jest.config.ts index e79e95c8e9560..5415633a08ee9 100644 --- a/packages/turbo-workspaces/jest.config.js +++ b/packages/turbo-workspaces/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["/__fixtures__/", "/__tests__/test-utils.ts"], @@ -17,4 +18,6 @@ module.exports = { }, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 75ecd8a42315a..68acc961195c2 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -39,6 +39,7 @@ "update-check": "^1.5.4" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", @@ -46,15 +47,14 @@ "@types/fs-extra": "^9.0.13", "@types/gradient-string": "^1.1.2", "@types/inquirer": "^7.3.1", - "@types/jest": "^27.4.0", "@types/js-yaml": "^4.0.5", "@types/node": "^18.17.2", "@types/rimraf": "^3.0.2", "@types/semver": "^7.3.9", - "jest": "^27.4.3", + "jest": "^29.7.0", "semver": "^7.3.5", "strip-ansi": "^6.0.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^5.10.3", "typescript": "5.4.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14577d7577066..63e0fe08675d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,6 +115,9 @@ importers: specifier: ^1.5.4 version: 1.5.4 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -139,9 +142,6 @@ importers: '@types/inquirer': specifier: ^7.3.1 version: 7.3.3 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -149,14 +149,14 @@ importers: specifier: ^7.3.9 version: 7.3.12 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -192,6 +192,9 @@ importers: specifier: '>6.6.0' version: 8.47.0 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -213,24 +216,21 @@ importers: '@types/estree': specifier: ^1.0.0 version: 1.0.0 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) json5: specifier: ^2.2.1 version: 2.2.3 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.2.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -287,6 +287,9 @@ importers: specifier: ^5.27.0 version: 5.27.0 devDependencies: + '@jest/globals': + specifier: 29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -305,6 +308,12 @@ importers: '@types/node-fetch': specifier: ^2.6.6 version: 2.6.6 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) + ts-jest: + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -354,6 +363,9 @@ importers: specifier: ^1.5.4 version: 1.5.4 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -387,9 +399,6 @@ importers: '@types/inquirer': specifier: ^8.2.0 version: 8.2.5 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -403,17 +412,17 @@ importers: specifier: ^4.2.2 version: 4.2.2 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) plop: specifier: ^3.1.1 version: 3.1.1 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -447,8 +456,8 @@ importers: specifier: ^6.2.2 version: 6.2.2 ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) update-check: specifier: ^1.5.4 version: 1.5.4 @@ -456,6 +465,9 @@ importers: specifier: ^5.0.0 version: 5.0.0 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -474,9 +486,6 @@ importers: '@types/inquirer': specifier: ^8.2.5 version: 8.2.5 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -484,14 +493,14 @@ importers: specifier: ^4.0.0 version: 4.0.0 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -502,6 +511,9 @@ importers: specifier: ^2.2.3 version: 2.2.3 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -520,9 +532,6 @@ importers: '@turbo/utils': specifier: workspace:* version: link:../turbo-utils - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -530,11 +539,11 @@ importers: specifier: ^11.0.0 version: 11.0.0 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^5.12.1 version: 5.12.9(typescript@5.4.5) @@ -618,6 +627,9 @@ importers: specifier: ^2.2.3 version: 2.2.3 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -627,9 +639,6 @@ importers: '@types/fs-extra': specifier: ^9.0.13 version: 9.0.13 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/js-yaml': specifier: ^4.0.5 version: 4.0.5 @@ -637,11 +646,14 @@ importers: specifier: ^18.17.2 version: 18.17.4 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) + jest-mock: + specifier: ^29.7.0 + version: 29.7.0 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -666,6 +678,9 @@ importers: packages/turbo-utils: devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@manypkg/find-root': specifier: ^1.1.0 version: 1.1.0 @@ -690,9 +705,6 @@ importers: '@types/gradient-string': specifier: ^1.1.2 version: 1.1.2 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/js-yaml': specifier: ^4.0.5 version: 4.0.5 @@ -721,8 +733,8 @@ importers: specifier: ^2.0.0 version: 2.0.1 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.5.7) js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -739,8 +751,8 @@ importers: specifier: 6.1.13 version: 6.1.13 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -806,6 +818,9 @@ importers: specifier: ^1.5.4 version: 1.5.4 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -827,9 +842,6 @@ importers: '@types/inquirer': specifier: ^7.3.1 version: 7.3.3 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/js-yaml': specifier: ^4.0.5 version: 4.0.5 @@ -843,14 +855,14 @@ importers: specifier: ^7.3.9 version: 7.3.12 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) strip-ansi: specifier: ^6.0.1 version: 6.0.1 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^5.10.3 version: 5.12.9(typescript@5.4.5) @@ -1063,11 +1075,24 @@ packages: chalk: 2.4.2 dev: true + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + dev: true + /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core@7.23.6: resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} engines: {node: '>=6.9.0'} @@ -1091,6 +1116,29 @@ packages: - supports-color dev: true + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/eslint-parser@7.22.11(@babel/core@7.23.6)(eslint@8.55.0): resolution: {integrity: sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -1115,6 +1163,16 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator@7.25.6: + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true + /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} @@ -1126,6 +1184,17 @@ packages: semver: 6.3.1 dev: true + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -1153,6 +1222,16 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} @@ -1167,11 +1246,31 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@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.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-plugin-utils@7.24.8: + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} @@ -1179,6 +1278,16 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} @@ -1186,13 +1295,13 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} dev: true @@ -1206,11 +1315,21 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helpers@7.23.8: resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} @@ -1222,6 +1341,14 @@ packages: - supports-color dev: true + /@babel/helpers@7.25.6: + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + dev: true + /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -1231,6 +1358,16 @@ packages: js-tokens: 4.0.0 dev: true + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + dev: true + /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} @@ -1239,6 +1376,14 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/parser@7.25.6: + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.25.6 + dev: true + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -1284,6 +1429,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.23.6): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.24.8 + dev: true + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1382,6 +1537,15 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + dev: true + /@babel/traverse@7.23.7: resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} @@ -1400,13 +1564,19 @@ packages: - supports-color dev: true - /@babel/types@7.22.11: - resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} + /@babel/traverse@7.25.6: + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/types@7.23.6: @@ -1418,6 +1588,15 @@ packages: to-fast-properties: 2.0.0 dev: true + /@babel/types@7.25.6: + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + dev: true + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -2188,97 +2367,115 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console@27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/node': 20.11.30 chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 + jest-message-util: 29.7.0 + jest-util: 29.7.0 slash: 3.0.0 dev: true - /@jest/core@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/core@29.7.0(ts-node@10.9.2): + 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 dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@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': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 - emittery: 0.8.1 + ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.1) - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.11.30)(ts-node@10.9.2) + 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.5 - rimraf: 3.0.2 + pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: - - bufferutil - - canvas + - babel-plugin-macros - supports-color - ts-node - - utf-8-validate dev: true - /@jest/environment@27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 - jest-mock: 27.5.1 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color dev: true - /@jest/fake-timers@27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 '@types/node': 20.11.30 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true - /@jest/globals@27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color dev: true - /@jest/reporters@27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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: @@ -2286,10 +2483,11 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@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': 20.11.30 chalk: 4.1.2 collect-v8-coverage: 1.0.1 @@ -2297,85 +2495,89 @@ packages: glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.1 + istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 slash: 3.0.0 - source-map: 0.6.1 string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color dev: true - /@jest/source-map@27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 - source-map: 0.6.1 dev: true - /@jest/test-result@27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer@27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/test-result': 27.5.1 + '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color + jest-haste-map: 29.7.0 + slash: 3.0.0 dev: true - /@jest/transform@27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.23.6 - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 - convert-source-map: 1.9.0 + convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color dev: true - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: + '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 20.11.30 - '@types/yargs': 16.0.5 + '@types/yargs': 17.0.33 chalk: 4.1.2 dev: true @@ -2396,6 +2598,15 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} @@ -2405,6 +2616,11 @@ packages: engines: {node: '>=6.0.0'} dev: true + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -2415,6 +2631,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -2584,20 +2807,24 @@ packages: resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@sindresorhus/is@4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - /@sinonjs/commons@1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 1.8.6 + '@sinonjs/commons': 3.0.1 dev: true /@szmarczak/http-timer@4.0.6: @@ -2611,11 +2838,6 @@ packages: hasBin: true dev: true - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} @@ -2660,7 +2882,7 @@ packages: /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.6 dev: true /@types/cacheable-request@6.0.3: @@ -2781,13 +3003,6 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} - dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 - dev: true - /@types/js-yaml@4.0.5: resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} dev: true @@ -2879,10 +3094,6 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/prettier@2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} - dev: true - /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true @@ -2966,8 +3177,8 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs@16.0.5: - resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: '@types/yargs-parser': 21.0.0 dev: true @@ -3231,17 +3442,6 @@ packages: - supports-color dev: true - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: true - - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3249,40 +3449,15 @@ packages: dependencies: acorn: 8.10.0 - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} - engines: {node: '>=0.4.0'} - hasBin: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} @@ -3527,6 +3702,10 @@ packages: dependencies: retry: 0.13.1 + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: true + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -3567,18 +3746,17 @@ packages: dequal: 2.0.3 dev: true - /babel-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /babel-jest@29.7.0(@babel/core@7.23.6): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@jest/transform': 29.7.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.23.6) + babel-preset-jest: 29.6.3(@babel/core@7.23.6) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3599,9 +3777,9 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /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} dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.6 @@ -3629,14 +3807,14 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) dev: true - /babel-preset-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /babel-preset-jest@29.6.3(@babel/core@7.23.6): + 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 dependencies: '@babel/core': 7.23.6 - babel-plugin-jest-hoist: 27.5.1 + babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) dev: true @@ -3739,10 +3917,6 @@ packages: dependencies: fill-range: 7.0.1 - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - /browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3754,6 +3928,17 @@ packages: update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001660 + electron-to-chromium: 1.5.24 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + dev: true + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -3902,6 +4087,10 @@ packages: resolution: {integrity: sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==} dev: true + /caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + dev: true + /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: @@ -4081,8 +4270,9 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -4216,10 +4406,6 @@ packages: upper-case: 2.0.2 dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true @@ -4254,6 +4440,44 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false + /create-jest@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + 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@18.17.4)(ts-node@10.9.2) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /create-jest@29.7.0(@types/node@20.5.7): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + 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@20.5.7) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -4281,21 +4505,6 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true @@ -4433,15 +4642,6 @@ packages: engines: {node: '>= 14'} dev: false - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: true - /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -4475,10 +4675,6 @@ packages: dependencies: ms: 2.1.2 - /decimal.js@10.4.0: - resolution: {integrity: sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==} - dev: true - /decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: @@ -4496,8 +4692,13 @@ packages: dependencies: mimic-response: 3.1.0 - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true dev: true /deep-extend@0.6.0: @@ -4671,9 +4872,9 @@ packages: dequal: 2.0.3 dev: false - /diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /diff@4.0.2: @@ -4708,13 +4909,6 @@ packages: dependencies: esutils: 2.0.3 - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - dependencies: - webidl-conversions: 5.0.0 - dev: true - /dot-case@2.1.1: resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} dependencies: @@ -4737,13 +4931,25 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.9.2 + dev: true + /electron-to-chromium@1.4.626: resolution: {integrity: sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg==} dev: true - /emittery@0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} + /electron-to-chromium@1.5.24: + resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} + dev: true + + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} dev: true /emoji-regex@8.0.0: @@ -5367,6 +5573,11 @@ packages: engines: {node: '>=6'} dev: true + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -5393,19 +5604,6 @@ packages: source-map: 0.6.1 dev: false - /escodegen@2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - /eslint-config-prettier@9.0.0(eslint@8.55.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true @@ -5922,14 +6120,15 @@ packages: homedir-polyfill: 1.0.3 dev: true - /expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 + '@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 dev: true /extend-shallow@2.0.1: @@ -6030,6 +6229,12 @@ packages: dependencies: flat-cache: 3.0.4 + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.0 + dev: true + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -6131,15 +6336,6 @@ packages: signal-exit: 4.1.0 dev: true - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -6658,13 +6854,6 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: true - /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -6676,17 +6865,6 @@ packages: /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /http-proxy-agent@7.0.0: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} @@ -6704,16 +6882,6 @@ packages: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /https-proxy-agent@7.0.1: resolution: {integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==} engines: {node: '>= 14'} @@ -7193,10 +7361,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true - /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -7257,10 +7421,6 @@ packages: which-typed-array: 1.1.11 dev: true - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - /is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} @@ -7355,6 +7515,19 @@ packages: - supports-color dev: true + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} @@ -7401,45 +7574,58 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true - /jest-changed-files@27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 execa: 5.1.1 - throat: 6.0.1 + jest-util: 29.7.0 + p-limit: 3.1.0 dev: true - /jest-circus@27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 chalk: 4.1.2 co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 + dedent: 1.5.3 is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 + 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 - throat: 6.0.1 transitivePeerDependencies: + - babel-plugin-macros - supports-color dev: true - /jest-cli@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-cli@29.7.0(@types/node@18.17.4): + 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 @@ -7447,217 +7633,309 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) exit: 0.1.2 - graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 + jest-config: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-cli@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-cli@29.7.0(@types/node@20.5.7): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.5.7) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.5.7) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 transitivePeerDependencies: - - bufferutil - - canvas + - '@types/node' + - babel-plugin-macros - supports-color - ts-node - - utf-8-validate dev: true - /jest-config@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-config@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + 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 dependencies: '@babel/core': 7.23.6 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.23.6) + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.17.4 + babel-jest: 29.7.0(@babel/core@7.23.6) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 + 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.5 parse-json: 5.2.0 - pretty-format: 27.5.1 + pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) transitivePeerDependencies: - - bufferutil - - canvas + - babel-plugin-macros - supports-color - - utf-8-validate dev: true - /jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-config@29.7.0(@types/node@20.11.30)(ts-node@10.9.2): + 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 dependencies: + '@babel/core': 7.23.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.30 + babel-jest: 29.7.0(@babel/core@7.23.6) chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + ci-info: 3.8.0 + deepmerge: 4.2.2 + 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.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color dev: true - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-config@29.7.0(@types/node@20.5.7): + 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 dependencies: - detect-newline: 3.1.0 + '@babel/core': 7.23.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.5.7 + babel-jest: 29.7.0(@babel/core@7.23.6) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.2.2 + 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.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color dev: true - /jest-each@27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-environment-jsdom@27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.11.30 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate + detect-newline: 3.1.0 + dev: true + + /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} + 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 dev: true - /jest-environment-node@27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 - jest-mock: 27.5.1 - jest-util: 27.5.1 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true - /jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map@27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 '@types/node': 20.11.30 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 dev: true - /jest-jasmine2@27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.11.30 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-leak-detector@27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: '@babel/code-frame': 7.23.5 - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 27.5.1 + pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/node': 20.11.30 + jest-util: 29.7.0 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -7666,146 +7944,131 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 27.5.1 + jest-resolve: 29.7.0 dev: true - /jest-regex-util@27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color dev: true - /jest-resolve@27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 + 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: 1.1.1 + resolve.exports: 2.0.2 slash: 3.0.0 dev: true - /jest-runner@27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@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': 20.11.30 chalk: 4.1.2 - emittery: 0.8.1 + emittery: 0.13.1 graceful-fs: 4.2.11 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.1 + 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: - - bufferutil - - canvas - supports-color - - utf-8-validate dev: true - /jest-runtime@27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@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': 20.11.30 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 - execa: 5.1.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 + 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 dev: true - /jest-serializer@27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 20.11.30 - graceful-fs: 4.2.11 - dev: true - - /jest-snapshot@27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: '@babel/core': 7.23.6 '@babel/generator': 7.23.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.23.6) '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.23.6) - '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) chalk: 4.1.2 - expect: 27.5.1 + expect: 29.7.0 graceful-fs: 4.2.11 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 + 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: 27.5.1 + pretty-format: 29.7.0 semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true - /jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/node': 20.11.30 chalk: 4.1.2 ci-info: 3.8.0 @@ -7813,43 +8076,87 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate@27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 27.5.1 + jest-get-type: 29.6.3 leven: 3.1.0 - pretty-format: 27.5.1 + pretty-format: 29.7.0 dev: true - /jest-watcher@27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 - jest-util: 27.5.1 + emittery: 0.13.1 + jest-util: 29.7.0 string-length: 4.0.2 dev: true - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/node': 20.11.30 + jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest@29.7.0(@types/node@18.17.4): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.17.4) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest@29.7.0(@types/node@20.5.7): + 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 @@ -7857,15 +8164,15 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 27.5.1(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.5.7) transitivePeerDependencies: - - bufferutil - - canvas + - '@types/node' + - babel-plugin-macros - supports-color - ts-node - - utf-8-validate dev: true /jju@1.4.0: @@ -7894,48 +8201,6 @@ packages: dependencies: argparse: 2.0.1 - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.10.0 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.0 - domexception: 2.0.1 - escodegen: 2.0.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.1 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.2 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -8060,6 +8325,7 @@ packages: dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 + dev: false /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -8591,7 +8857,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: false /minimatch@9.0.0: resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} @@ -8830,6 +9095,10 @@ packages: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: true + /noop2@2.0.0: resolution: {integrity: sha512-2bu7Pfpf6uNqashWV8P7yYeutQ3XkLY9MBSYI5sOAFZxuWcW/uJfLbKj5m6SvMDT9U1Y0C+7UFG+7VSiIdXjtA==} dev: false @@ -8872,10 +9141,6 @@ packages: path-key: 4.0.0 dev: true - /nwsapi@2.2.1: - resolution: {integrity: sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==} - dev: true - /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -9024,6 +9289,7 @@ packages: prelude-ls: 1.1.2 type-check: 0.3.2 word-wrap: 1.2.3 + dev: false /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -9199,10 +9465,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - /parse5@7.2.0: resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} dependencies: @@ -9340,7 +9602,7 @@ packages: engines: {node: '>=0.10.0'} dev: false - /postcss-load-config@3.1.4(ts-node@10.9.1): + /postcss-load-config@3.1.4(ts-node@10.9.2): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -9353,13 +9615,14 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) yaml: 1.10.2 dev: true /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} + dev: false /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -9390,13 +9653,13 @@ packages: hasBin: true dev: true - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - ansi-regex: 5.0.1 + '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 17.0.2 + react-is: 18.3.1 dev: true /process-nextick-args@2.0.1: @@ -9447,10 +9710,6 @@ packages: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: false - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true - /pump@1.0.3: resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} dependencies: @@ -9468,8 +9727,8 @@ packages: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} dev: true /queue-microtask@1.2.3: @@ -9493,8 +9752,8 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: true /read-pkg-up@7.0.1: @@ -9684,10 +9943,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true - /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -9724,8 +9979,8 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: false - /resolve.exports@1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true @@ -9904,13 +10159,6 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: true - /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -9943,6 +10191,12 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + /sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} dependencies: @@ -10176,8 +10430,8 @@ packages: urix: 0.1.0 dev: false - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 @@ -10197,11 +10451,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true - /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -10441,14 +10690,6 @@ packages: has-flag: 4.0.0 dev: true - /supports-hyperlinks@2.2.0: - resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -10460,10 +10701,6 @@ packages: upper-case: 1.1.3 dev: false - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true - /synckit@0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -10489,14 +10726,6 @@ packages: yallist: 4.0.0 dev: true - /terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.2.0 - dev: true - /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -10522,10 +10751,6 @@ packages: any-promise: 1.3.0 dev: true - /throat@6.0.1: - resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} - dev: true - /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: @@ -10622,16 +10847,6 @@ packages: commander: 2.20.3 dev: false - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.1.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: true - /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false @@ -10642,13 +10857,6 @@ packages: punycode: 2.1.1 dev: true - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.1.1 - dev: true - /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -10675,76 +10883,121 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5): - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' + jest: ^29.0.0 + typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': optional: true - '@types/jest': + '@jest/transform': + optional: true + '@jest/types': optional: true babel-jest: optional: true esbuild: optional: true dependencies: - '@babel/core': 7.23.6 - '@types/jest': 27.5.2 + '@babel/core': 7.25.2 bs-logger: 0.2.6 + ejs: 3.1.10 esbuild: 0.14.49 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 + jest: 29.7.0(@types/node@18.17.4) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 + semver: 7.6.3 typescript: 5.4.5 - yargs-parser: 20.2.9 + yargs-parser: 21.1.1 dev: true - /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5): - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' + jest: ^29.0.0 + typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': optional: true - '@types/jest': + '@jest/transform': + optional: true + '@jest/types': optional: true babel-jest: optional: true esbuild: optional: true dependencies: - '@babel/core': 7.23.6 - '@types/jest': 27.5.2 + '@babel/core': 7.25.2 bs-logger: 0.2.6 + ejs: 3.1.10 + esbuild: 0.15.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@18.17.4) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.4.5 + yargs-parser: 21.1.1 + dev: true + + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.25.2 + bs-logger: 0.2.6 + ejs: 3.1.10 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 + jest: 29.7.0(@types/node@18.17.4) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 + semver: 7.6.3 typescript: 5.4.5 - yargs-parser: 20.2.9 + yargs-parser: 21.1.1 dev: true /ts-json-schema-generator@2.3.0: @@ -10762,8 +11015,8 @@ packages: typescript: 5.4.5 dev: true - /ts-node@10.9.1(@types/node@18.17.4)(typescript@5.4.5): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@18.17.4)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -10782,7 +11035,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 18.17.4 - acorn: 8.8.1 + acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -10834,7 +11087,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(ts-node@10.9.1) + postcss-load-config: 3.1.4(ts-node@10.9.2) resolve-from: 5.0.0 rollup: 2.78.0 source-map: 0.8.0-beta.0 @@ -10846,7 +11099,7 @@ packages: - ts-node dev: true - /tsup@6.7.0(ts-node@10.9.1)(typescript@5.4.5): + /tsup@6.7.0(ts-node@10.9.2)(typescript@5.4.5): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -10870,7 +11123,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(ts-node@10.9.1) + postcss-load-config: 3.1.4(ts-node@10.9.2) resolve-from: 5.0.0 rollup: 3.21.5 source-map: 0.8.0-beta.0 @@ -10913,6 +11166,7 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 + dev: false /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -10981,12 +11235,6 @@ packages: is-typed-array: 1.1.12 dev: true - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -11090,11 +11338,6 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: true - /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -11123,6 +11366,17 @@ packages: picocolors: 1.0.1 dev: true + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.0.1 + dev: true + /update-check@1.5.4: resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} dependencies: @@ -11162,13 +11416,6 @@ packages: deprecated: Please see https://github.com/lydell/urix#deprecated dev: false - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: true - /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -11185,13 +11432,13 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - /v8-to-istanbul@8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 - source-map: 0.7.4 + convert-source-map: 2.0.0 dev: true /v8flags@4.0.0: @@ -11593,20 +11840,6 @@ packages: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} dev: false - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: true - /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -11630,26 +11863,6 @@ packages: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true - - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true - - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: true - - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true - /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -11665,15 +11878,6 @@ packages: webidl-conversions: 4.0.2 dev: true - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: true - /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -11738,6 +11942,7 @@ packages: /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} + dev: false /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -11771,34 +11976,12 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + /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} dependencies: imurmurhash: 0.1.4 - is-typedarray: 1.0.0 signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true /xtend@4.0.2: @@ -11832,22 +12015,22 @@ packages: engines: {node: '>= 14'} dev: true - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} dependencies: - cliui: 7.0.4 + 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.8 - yargs-parser: 20.2.9 + yargs-parser: 21.1.1 dev: true /yn@3.1.1: diff --git a/turborepo-tests/integration/package.json b/turborepo-tests/integration/package.json index 252724245b068..0ab6e4fad6cb6 100644 --- a/turborepo-tests/integration/package.json +++ b/turborepo-tests/integration/package.json @@ -2,6 +2,7 @@ "name": "turborepo-tests-integration", "scripts": { "test": "prysk tests", + "clean": "rm -rf tests/**/*.t.err", "test:interactive": "PRYSK_INTERACTIVE=true prysk tests", "test:parallel": ".cram_env/bin/pytest -n auto tests --prysk-shell=`which bash`", "pretest:parallel": ".cram_env/bin/pip3 install --quiet pytest \"prysk[pytest-plugin]\" pytest-xdist"