From bca26c076d843533490ec2d2df2a3cc10b6f9c69 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 18:12:51 +0000 Subject: [PATCH 01/11] chore(deps): update dependency nodemon to v3.1.5 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e06cd7ec..c7d97669 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "husky": "9.1.6", "jest": "29.7.0", "node-mocks-http": "1.16.0", - "nodemon": "3.1.4", + "nodemon": "3.1.5", "rimraf": "6.0.1", "stryker-cli": "1.0.2", "supertest": "7.0.0", diff --git a/yarn.lock b/yarn.lock index a6587385..14aab700 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8643,10 +8643,10 @@ node-source-walk@^7.0.0: dependencies: "@babel/parser" "^7.24.4" -nodemon@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.4.tgz#c34dcd8eb46a05723ccde60cbdd25addcc8725e4" - integrity sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ== +nodemon@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.5.tgz#43d2a07d88a3778a3ba35b0dbdf505dcc5b3b5ad" + integrity sha512-V5UtfYc7hjFD4SI3EzD5TR8ChAHEZ+Ns7Z5fBk8fAbTVAj+q3G+w7sHJrHxXBkVn6ApLVTljau8wfHwqmGUjMw== dependencies: chokidar "^3.5.2" debug "^4" From 67abe4eca9c5e790f8b05be46c86d69804ec5645 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 12:14:14 +0000 Subject: [PATCH 02/11] chore(deps): update dependency nodemon to v3.1.6 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c7d97669..b874c8c0 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "husky": "9.1.6", "jest": "29.7.0", "node-mocks-http": "1.16.0", - "nodemon": "3.1.5", + "nodemon": "3.1.6", "rimraf": "6.0.1", "stryker-cli": "1.0.2", "supertest": "7.0.0", diff --git a/yarn.lock b/yarn.lock index 14aab700..1532fabd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8643,10 +8643,10 @@ node-source-walk@^7.0.0: dependencies: "@babel/parser" "^7.24.4" -nodemon@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.5.tgz#43d2a07d88a3778a3ba35b0dbdf505dcc5b3b5ad" - integrity sha512-V5UtfYc7hjFD4SI3EzD5TR8ChAHEZ+Ns7Z5fBk8fAbTVAj+q3G+w7sHJrHxXBkVn6ApLVTljau8wfHwqmGUjMw== +nodemon@3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.6.tgz#15bd79dca6849aa27b2689d1dbe02dc28bcc1a1c" + integrity sha512-C8ymJbXpTTinxjWuMfMxw0rZhTn/r7ypSGldQyqPEgDEaVwAthqC0aodsMwontnAInN9TuPwRLeBoyhmfv+iSA== dependencies: chokidar "^3.5.2" debug "^4" From 6854c391224e45fda08f63cc97d55f25d872ecc8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:58:19 +0000 Subject: [PATCH 03/11] chore(deps): update dependency eslint to v9.11.0 --- package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index b874c8c0..a989a986 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@types/koa-static": "4.0.4", "@types/lodash": "4.17.7", "copyfiles": "2.4.1", - "eslint": "9.10.0", + "eslint": "9.11.0", "eslint-config-hardcore": "47.0.1", "eslint-formatter-github-annotations": "0.1.0", "eslint-import-resolver-typescript": "3.6.3", diff --git a/yarn.lock b/yarn.lock index 1532fabd..48c99105 100644 --- a/yarn.lock +++ b/yarn.lock @@ -827,10 +827,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.10.0": - version "9.10.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.10.0.tgz#eaa3cb0baec497970bb29e43a153d0d5650143c6" - integrity sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g== +"@eslint/js@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.11.0.tgz#fca7533ef33aa608770734786e02f1041847f9bb" + integrity sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ== "@eslint/js@^9.2.0": version "9.8.0" @@ -842,10 +842,10 @@ resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== -"@eslint/plugin-kit@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz#809b95a0227ee79c3195adfb562eb94352e77974" - integrity sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ== +"@eslint/plugin-kit@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz#8712dccae365d24e9eeecb7b346f85e750ba343d" + integrity sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig== dependencies: levn "^0.4.1" @@ -5739,17 +5739,17 @@ eslint-visitor-keys@^4.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== -eslint@9.10.0: - version "9.10.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.10.0.tgz#0bd74d7fe4db77565d0e7f57c7df6d2b04756806" - integrity sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw== +eslint@9.11.0: + version "9.11.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.11.0.tgz#f7a7bf305a4d77f23be0c1e4537b9aa1617219be" + integrity sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.11.0" "@eslint/config-array" "^0.18.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.10.0" - "@eslint/plugin-kit" "^0.1.0" + "@eslint/js" "9.11.0" + "@eslint/plugin-kit" "^0.2.0" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" From 8e14e1674332e4b817d375461d0fed1812510b78 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 22:09:07 +0000 Subject: [PATCH 04/11] chore(deps): update dependency nodemon to v3.1.7 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a989a986..0aff5817 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "husky": "9.1.6", "jest": "29.7.0", "node-mocks-http": "1.16.0", - "nodemon": "3.1.6", + "nodemon": "3.1.7", "rimraf": "6.0.1", "stryker-cli": "1.0.2", "supertest": "7.0.0", diff --git a/yarn.lock b/yarn.lock index 48c99105..f92296f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8643,10 +8643,10 @@ node-source-walk@^7.0.0: dependencies: "@babel/parser" "^7.24.4" -nodemon@3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.6.tgz#15bd79dca6849aa27b2689d1dbe02dc28bcc1a1c" - integrity sha512-C8ymJbXpTTinxjWuMfMxw0rZhTn/r7ypSGldQyqPEgDEaVwAthqC0aodsMwontnAInN9TuPwRLeBoyhmfv+iSA== +nodemon@3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.7.tgz#07cb1f455f8bece6a499e0d72b5e029485521a54" + integrity sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ== dependencies: chokidar "^3.5.2" debug "^4" From 565149ff6519038e6408ddcd8058948f0458631c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 18:47:18 +0000 Subject: [PATCH 05/11] chore(deps): update dependency @types/lodash to v4.17.9 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0aff5817..238a4fcd 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@types/koa-bodyparser": "4.3.12", "@types/koa-proxy": "1.0.7", "@types/koa-static": "4.0.4", - "@types/lodash": "4.17.7", + "@types/lodash": "4.17.9", "copyfiles": "2.4.1", "eslint": "9.11.0", "eslint-config-hardcore": "47.0.1", diff --git a/yarn.lock b/yarn.lock index f92296f1..9688469a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2912,10 +2912,10 @@ "@types/koa-compose" "*" "@types/node" "*" -"@types/lodash@4.17.7": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" - integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== +"@types/lodash@4.17.9": + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.9.tgz#0dc4902c229f6b8e2ac5456522104d7b1a230290" + integrity sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w== "@types/mdast@^4.0.0": version "4.0.4" From 412bb8b607317f63155f45e15ca9a19fe2be45ec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 00:57:08 +0000 Subject: [PATCH 06/11] chore(deps): update dependency eslint to v9.11.1 --- package.json | 2 +- yarn.lock | 31 ++++++++++++++++++++++--------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 238a4fcd..442d242f 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@types/koa-static": "4.0.4", "@types/lodash": "4.17.9", "copyfiles": "2.4.1", - "eslint": "9.11.0", + "eslint": "9.11.1", "eslint-config-hardcore": "47.0.1", "eslint-formatter-github-annotations": "0.1.0", "eslint-import-resolver-typescript": "3.6.3", diff --git a/yarn.lock b/yarn.lock index 9688469a..977fadf7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -812,6 +812,11 @@ debug "^4.3.1" minimatch "^3.1.2" +"@eslint/core@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.6.0.tgz#9930b5ba24c406d67a1760e94cdbac616a6eb674" + integrity sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg== + "@eslint/eslintrc@^3.0.0", "@eslint/eslintrc@^3.0.2", "@eslint/eslintrc@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" @@ -827,10 +832,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.11.0.tgz#fca7533ef33aa608770734786e02f1041847f9bb" - integrity sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ== +"@eslint/js@9.11.1": + version "9.11.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.11.1.tgz#8bcb37436f9854b3d9a561440daf916acd940986" + integrity sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA== "@eslint/js@^9.2.0": version "9.8.0" @@ -2771,6 +2776,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/express-serve-static-core@^4.17.33": version "4.19.5" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" @@ -5739,20 +5749,23 @@ eslint-visitor-keys@^4.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== -eslint@9.11.0: - version "9.11.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.11.0.tgz#f7a7bf305a4d77f23be0c1e4537b9aa1617219be" - integrity sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA== +eslint@9.11.1: + version "9.11.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.11.1.tgz#701e5fc528990153f9cef696d8427003b5206567" + integrity sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.11.0" "@eslint/config-array" "^0.18.0" + "@eslint/core" "^0.6.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.11.0" + "@eslint/js" "9.11.1" "@eslint/plugin-kit" "^0.2.0" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" From dc0862d02efc337e65cf9fd3e71921e8300a376b Mon Sep 17 00:00:00 2001 From: Patrick McElhaney Date: Wed, 2 Oct 2024 11:07:52 -0400 Subject: [PATCH 07/11] fix the docs for quickstart --- docs/quick-start.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/quick-start.md b/docs/quick-start.md index 367e84d3..cd124fad 100644 --- a/docs/quick-start.md +++ b/docs/quick-start.md @@ -3,7 +3,7 @@ Copy the following command into your terminal. The only prerequisite is Node 16+. ```sh copy -npx counterfact@latest https://petstore3.swagger.io/api/v3/openapi.json api --open +npx counterfact@latest https://petstore3.swagger.io/api/v3/openapi.json api ``` ## What does that command do? @@ -12,8 +12,7 @@ npx counterfact@latest https://petstore3.swagger.io/api/v3/openapi.json api --op 2. reads an [OpenAPI 3](https://oai.github.io/Documentation/) document (`https://petstore3.swagger.io/api/v3/openapi.json`) 3. generates TypeScript files in the `api` directory 4. starts a server which implements the API -5. opens your browser to [Swagger UI](https://swagger.io/tools/swagger-ui/) (`--open`) -You can use Swagger to try out the auto-generated API. Out of the box, it returns random responses using metadata from the OpenAPI document. Edit the files under `./api/routes` to add more realistic behavior. There's no need to restart the server. +You can use [Swagger UI](https://swagger.io/tools/swagger-ui/) to try out the auto-generated API. Out of the box, it returns random responses using metadata from the OpenAPI document. Edit the files under `./api/routes` to add more realistic behavior. There's no need to restart the server. To learn more, see the [Usage Guide](./usage.md). From 2748fa27219a6abe62d9802a1142eb22902aa800 Mon Sep 17 00:00:00 2001 From: Patrick McElhaney Date: Wed, 2 Oct 2024 13:41:49 -0400 Subject: [PATCH 08/11] fix an issue where request body type is not found when consumes is in the root --- .changeset/quiet-planets-exercise.md | 5 ++ .../operation-type-coder.js | 18 +++--- .../operation-type-coder.test.js.snap | 63 +++++++++++++++++++ .../operation-type-coder.test.js | 46 ++++++++++++++ 4 files changed, 125 insertions(+), 7 deletions(-) create mode 100644 .changeset/quiet-planets-exercise.md diff --git a/.changeset/quiet-planets-exercise.md b/.changeset/quiet-planets-exercise.md new file mode 100644 index 00000000..f1b05c6d --- /dev/null +++ b/.changeset/quiet-planets-exercise.md @@ -0,0 +1,5 @@ +--- +"counterfact": patch +--- + +fix: request body type is not found in OpenAPI 2 when consumes is in the root diff --git a/src/typescript-generator/operation-type-coder.js b/src/typescript-generator/operation-type-coder.js index edd3aafe..d93424cd 100644 --- a/src/typescript-generator/operation-type-coder.js +++ b/src/typescript-generator/operation-type-coder.js @@ -114,13 +114,17 @@ export class OperationTypeCoder extends TypeCoder { script, ); - const bodyRequirement = this.requirement.get("consumes") - ? parameters - .find((parameter) => - ["body", "formData"].includes(parameter.get("in").data), - ) - .get("schema") - : this.requirement.select("requestBody/content/application~1json/schema"); + const bodyRequirement = + this.requirement.get("consumes") || + this.requirement.specification?.rootRequirement?.get("consumes") + ? parameters + ?.find((parameter) => + ["body", "formData"].includes(parameter.get("in").data), + ) + ?.get("schema") + : this.requirement.select( + "requestBody/content/application~1json/schema", + ); const bodyType = bodyRequirement === undefined diff --git a/test/typescript-generator/__snapshots__/operation-type-coder.test.js.snap b/test/typescript-generator/__snapshots__/operation-type-coder.test.js.snap index 82f63163..d19be651 100644 --- a/test/typescript-generator/__snapshots__/operation-type-coder.test.js.snap +++ b/test/typescript-generator/__snapshots__/operation-type-coder.test.js.snap @@ -161,6 +161,69 @@ exports[`an OperationTypeCoder generates a complex post operation (OpenAPI 2) 1` " `; +exports[`an OperationTypeCoder generates a complex post operation (OpenAPI 2, consumes in root) 1`] = ` +"type TestType = ( + $: OmitValueWhenNever<{ + query: { name?: string }; + path: { id?: string }; + header: { name?: string }; + body: Type; + context: ExternalType; + response: ResponseBuilderFactory<{ + 200: { + headers: never; + requiredHeaders: never; + content: { + "application/json": { + schema: Type; + }; + }; + }; + 400: { + headers: never; + requiredHeaders: never; + content: { + "application/json": { + schema: Type; + }; + }; + }; + [statusCode in Exclude]: { + headers: never; + requiredHeaders: never; + content: { + "application/json": { + schema: Type; + }; + }; + }; + }>; + x: SharedType; + proxy: (url: string) => COUNTERFACT_RESPONSE; + user: never; + }>, +) => + | { + status: 200; + contentType?: "application/json"; + body?: Type; + } + | { + status: 400; + contentType?: "application/json"; + body?: Type; + } + | { + status: number | undefined; + contentType?: "application/json"; + body?: Type; + } + | { status: 415; contentType: "text/plain"; body: string } + | COUNTERFACT_RESPONSE + | { ALL_REMAINING_HEADERS_ARE_OPTIONAL: COUNTERFACT_RESPONSE }; +" +`; + exports[`an OperationTypeCoder generates a complex post operation 1`] = ` "type TestType = ( $: OmitValueWhenNever<{ diff --git a/test/typescript-generator/operation-type-coder.test.js b/test/typescript-generator/operation-type-coder.test.js index ad55efbc..6d3f353f 100644 --- a/test/typescript-generator/operation-type-coder.test.js +++ b/test/typescript-generator/operation-type-coder.test.js @@ -172,6 +172,52 @@ describe("an OperationTypeCoder", () => { ).resolves.toMatchSnapshot(); }); + it("generates a complex post operation (OpenAPI 2, consumes in root)", async () => { + const requirement = new Requirement( + { + parameters: [ + { in: "path", name: "id", type: "string" }, + { in: "query", name: "name", type: "string" }, + { in: "header", name: "name", type: "string" }, + { + in: "body", + name: "body", + schema: { $ref: "#/components/schemas/Example" }, + }, + ], + + produces: ["application/json"], + + responses: { + 200: { + schema: { $ref: "#/components/schemas/Example" }, + }, + + 400: { + schema: { $ref: "#/components/schemas/Error" }, + }, + + default: { + schema: { $ref: "#/components/schemas/Error" }, + }, + }, + }, + "#/paths/hello/post", + ); + + requirement.specification = { + rootRequirement: new Requirement({ + consumes: ["application/json"], + }), + }; + + const coder = new OperationTypeCoder(requirement, "get"); + + await expect( + format(`type TestType = ${coder.write(dummyScript)}`), + ).resolves.toMatchSnapshot(); + }); + it("generates a complex post operation (OpenAPI 2 with produces at the root)", async () => { const specification = new Specification(); From ef0c00e8a1d7de347c22d784f2a6fdf456947eeb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 2 Oct 2024 17:55:02 +0000 Subject: [PATCH 09/11] Version Packages --- .changeset/quiet-planets-exercise.md | 5 ----- CHANGELOG.md | 6 ++++++ package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/quiet-planets-exercise.md diff --git a/.changeset/quiet-planets-exercise.md b/.changeset/quiet-planets-exercise.md deleted file mode 100644 index f1b05c6d..00000000 --- a/.changeset/quiet-planets-exercise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"counterfact": patch ---- - -fix: request body type is not found in OpenAPI 2 when consumes is in the root diff --git a/CHANGELOG.md b/CHANGELOG.md index b932f11a..f7964f6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # counterfact +## 1.0.2 + +### Patch Changes + +- 2748fa2: fix: request body type is not found in OpenAPI 2 when consumes is in the root + ## 1.0.1 ### Patch Changes diff --git a/package.json b/package.json index 442d242f..d08c479b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "counterfact", - "version": "1.0.1", + "version": "1.0.2", "description": "a library for building a fake REST API for testing", "type": "module", "main": "./src/server/counterfact.js", From e4e10094afad807984f188961fd107f3c8cf151b Mon Sep 17 00:00:00 2001 From: Patrick McElhaney Date: Wed, 2 Oct 2024 15:55:16 -0400 Subject: [PATCH 10/11] map index.ts to / -- fixes #1056 --- .changeset/fast-toys-exercise.md | 5 + docs/usage.md | 4 +- openapi-example.yaml | 14 + src/server/module-loader.ts | 1 + src/typescript-generator/generate.js | 3 +- src/typescript-generator/operation-coder.js | 1 + .../operation-type-coder.js | 2 +- test/server/module-loader.test.ts | 24 ++ .../__snapshots__/generate.test.ts.snap | 319 ++++++++++++++++++ test/typescript-generator/generate.test.ts | 35 +- .../operation-type-coder.test.js | 9 + 11 files changed, 411 insertions(+), 6 deletions(-) create mode 100644 .changeset/fast-toys-exercise.md diff --git a/.changeset/fast-toys-exercise.md b/.changeset/fast-toys-exercise.md new file mode 100644 index 00000000..68464c59 --- /dev/null +++ b/.changeset/fast-toys-exercise.md @@ -0,0 +1,5 @@ +--- +"counterfact": minor +--- + +If a path is defined at the root (/) it's mapped to index.ts diff --git a/docs/usage.md b/docs/usage.md index 3ad1deb2..2515dd2c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -83,7 +83,7 @@ See [Generated Code FAQ](./faq-generated-code.md) for details. ## Routing is where it's at 🔀 -In the `routes` directory, you should find TypeScript files with code like the following. +In the `routes` directory, you should find a TypeScript file corresponding to each of the paths in your OpenAPI file. For example "/users/{userid}" will create `./routes/users/{userid}.ts`. (If you have a path for the root, "/", it will map to `./routes/index.ts`.) The contents of each file will look something like this: ```ts export const GET: HTTP_GET = ($) => { @@ -95,7 +95,7 @@ export const POST: HTTP_POST = ($) => { }; ``` -The TypeScript file's path corresponds to the endpoint's URL. Each of the exported functions implements an HTTP request method (GET, POST, PUT, etc.). Each of these functions takes one argument -- `$` -- which is used to access request information, build a response, and interact with the server's state. +Each of the exported functions implements an HTTP request method (GET, POST, PUT, etc.). Each of these functions takes one argument -- `$` -- which is used to access request information, build a response, and interact with the server's state. > [!TIP] > If you're familiar with Express, `$` is sort of a combination of `req` and `res` with type safety and extra super powers. diff --git a/openapi-example.yaml b/openapi-example.yaml index 16e7baaa..c3885bdf 100644 --- a/openapi-example.yaml +++ b/openapi-example.yaml @@ -4,6 +4,20 @@ info: title: Sample API description: A sample API to illustrate OpenAPI concepts paths: + /: + get: + description: the root + responses: + default: + description: root + content: + text/plain: + schema: + type: string + examples: + root: + value: This is the root. + /count: get: description: outputs the number of time each URL was visited diff --git a/src/server/module-loader.ts b/src/server/module-loader.ts index f10da42f..539cc4c4 100644 --- a/src/server/module-loader.ts +++ b/src/server/module-loader.ts @@ -184,6 +184,7 @@ export class ModuleLoader extends EventTarget { ); } } else { + if (url === "/index") this.registry.add("/", endpoint as Module); this.registry.add(url, endpoint as Module); } } catch (error: unknown) { diff --git a/src/typescript-generator/generate.js b/src/typescript-generator/generate.js index 497d20df..77ebd20b 100644 --- a/src/typescript-generator/generate.js +++ b/src/typescript-generator/generate.js @@ -81,9 +81,10 @@ export async function generate( paths.forEach((pathDefinition, key) => { debug("processing path %s", key); + const path = key === "/" ? "/index" : key; pathDefinition.forEach((operation, requestMethod) => { repository - .get(`routes${key}.ts`) + .get(`routes${path}.ts`) .export(new OperationCoder(operation, requestMethod, securitySchemes)); }); }); diff --git a/src/typescript-generator/operation-coder.js b/src/typescript-generator/operation-coder.js index 8638ee26..e27b4430 100644 --- a/src/typescript-generator/operation-coder.js +++ b/src/typescript-generator/operation-coder.js @@ -2,6 +2,7 @@ import nodePath from "node:path"; import { Coder } from "./coder.js"; import { OperationTypeCoder } from "./operation-type-coder.js"; +import path from "node:path"; export class OperationCoder extends Coder { constructor(requirement, requestMethod, securitySchemes = {}) { diff --git a/src/typescript-generator/operation-type-coder.js b/src/typescript-generator/operation-type-coder.js index d93424cd..ffe581ac 100644 --- a/src/typescript-generator/operation-type-coder.js +++ b/src/typescript-generator/operation-type-coder.js @@ -73,7 +73,7 @@ export class OperationTypeCoder extends TypeCoder { .replaceAll("~1", "/"); return `${nodePath - .join("types/paths", pathString) + .join("types/paths", pathString === "/" ? "/index" : pathString) .replaceAll("\\", "/")}.types.ts`; } diff --git a/test/server/module-loader.test.ts b/test/server/module-loader.test.ts index 2838f929..0bf6de4f 100644 --- a/test/server/module-loader.test.ts +++ b/test/server/module-loader.test.ts @@ -41,6 +41,30 @@ describe("a module loader", () => { expect(registry.exists("GET", "/a/b/c")).toBe(true); }); }); + + it("maps /index to /", async () => { + await usingTemporaryFiles(async ($) => { + await $.add( + "index.js", + `export function GET() { + return { + body: "GET from a/b/c" + }; + }`, + ); + + await $.add("package.json", '{ "type": "module" }'); + + const registry: Registry = new Registry(); + const loader: ModuleLoader = new ModuleLoader($.path(""), registry); + + await loader.load(); + + expect(registry.exists("GET", "/index")).toBe(true); + expect(registry.exists("GET", "/")).toBe(true); + }); + }); + it("updates the registry when a file is deleted", async () => { await usingTemporaryFiles(async ($) => { await $.add( diff --git a/test/typescript-generator/__snapshots__/generate.test.ts.snap b/test/typescript-generator/__snapshots__/generate.test.ts.snap index b7f98645..f83e22e3 100644 --- a/test/typescript-generator/__snapshots__/generate.test.ts.snap +++ b/test/typescript-generator/__snapshots__/generate.test.ts.snap @@ -1186,3 +1186,322 @@ exports[`end-to-end test generates the same code for pet store that it did on th "This directory contains compiled JS files from the paths directory. Do not edit these files directly. " `; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 1`] = ` +"routes/index.ts:import type { HTTP_GET } from "../types/paths/index.types.js"; + +export const GET: HTTP_GET = ($) => { + return $.response[200].random(); +}; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 2`] = ` +"types/paths/index.types.ts:// This code was automatically generated from an OpenAPI description. +// Do not edit this file. Edit the OpenAPI file instead. +// For more information, see https://github.com/pmcelhaney/counterfact/blob/main/docs/faq-generated-code.md + +import type { WideOperationArgument } from "../../types.ts"; +import type { OmitValueWhenNever } from "../../types.ts"; +import type { COUNTERFACT_RESPONSE } from "../../types.ts"; +import type { Context } from "@@CONTEXT_FILE_TOKEN@@"; +import type { ResponseBuilderFactory } from "../../types.ts"; +import type { HttpStatusCode } from "../../types.ts"; + +export type HTTP_GET = ( + $: OmitValueWhenNever<{ + query: never; + path: never; + header: never; + body: never; + context: Context; + response: ResponseBuilderFactory<{ + [statusCode in HttpStatusCode]: { + headers: never; + requiredHeaders: never; + content: { + "text/plain": { + schema: string; + }; + }; + }; + }>; + x: WideOperationArgument; + proxy: (url: string) => COUNTERFACT_RESPONSE; + user: { username?: string; password?: string }; + }>, +) => + | { + status: number | undefined; + contentType?: "text/plain"; + body?: string; + } + | { status: 415; contentType: "text/plain"; body: string } + | COUNTERFACT_RESPONSE + | { ALL_REMAINING_HEADERS_ARE_OPTIONAL: COUNTERFACT_RESPONSE }; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 3`] = ` +"routes/count.ts:import type { HTTP_GET } from "../types/paths/count.types.js"; + +export const GET: HTTP_GET = ($) => { + return $.response[200].random(); +}; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 4`] = ` +"types/paths/count.types.ts:// This code was automatically generated from an OpenAPI description. +// Do not edit this file. Edit the OpenAPI file instead. +// For more information, see https://github.com/pmcelhaney/counterfact/blob/main/docs/faq-generated-code.md + +import type { WideOperationArgument } from "../../types.ts"; +import type { OmitValueWhenNever } from "../../types.ts"; +import type { COUNTERFACT_RESPONSE } from "../../types.ts"; +import type { Context } from "@@CONTEXT_FILE_TOKEN@@"; +import type { ResponseBuilderFactory } from "../../types.ts"; +import type { HttpStatusCode } from "../../types.ts"; + +export type HTTP_GET = ( + $: OmitValueWhenNever<{ + query: never; + path: never; + header: never; + body: never; + context: Context; + response: ResponseBuilderFactory<{ + [statusCode in HttpStatusCode]: { + headers: never; + requiredHeaders: never; + content: { + "application/json": { + schema: string; + }; + }; + }; + }>; + x: WideOperationArgument; + proxy: (url: string) => COUNTERFACT_RESPONSE; + user: { username?: string; password?: string }; + }>, +) => + | { + status: number | undefined; + contentType?: "application/json"; + body?: string; + } + | { status: 415; contentType: "text/plain"; body: string } + | COUNTERFACT_RESPONSE + | { ALL_REMAINING_HEADERS_ARE_OPTIONAL: COUNTERFACT_RESPONSE }; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 5`] = ` +"routes/hello/kitty.ts:import type { HTTP_GET } from "../../types/paths/hello/kitty.types.js"; + +export const GET: HTTP_GET = ($) => { + return $.response[200].random(); +}; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 6`] = ` +"types/paths/hello/kitty.types.ts:// This code was automatically generated from an OpenAPI description. +// Do not edit this file. Edit the OpenAPI file instead. +// For more information, see https://github.com/pmcelhaney/counterfact/blob/main/docs/faq-generated-code.md + +import type { WideOperationArgument } from "../../../types.ts"; +import type { OmitValueWhenNever } from "../../../types.ts"; +import type { COUNTERFACT_RESPONSE } from "../../../types.ts"; +import type { Context } from "@@CONTEXT_FILE_TOKEN@@"; +import type { ResponseBuilderFactory } from "../../../types.ts"; +import type { HttpStatusCode } from "../../../types.ts"; + +export type HTTP_GET = ( + $: OmitValueWhenNever<{ + query: never; + path: never; + header: never; + body: never; + context: Context; + response: ResponseBuilderFactory<{ + [statusCode in HttpStatusCode]: { + headers: never; + requiredHeaders: never; + content: { + "application/json": { + schema: string; + }; + }; + }; + }>; + x: WideOperationArgument; + proxy: (url: string) => COUNTERFACT_RESPONSE; + user: { username?: string; password?: string }; + }>, +) => + | { + status: number | undefined; + contentType?: "application/json"; + body?: string; + } + | { status: 415; contentType: "text/plain"; body: string } + | COUNTERFACT_RESPONSE + | { ALL_REMAINING_HEADERS_ARE_OPTIONAL: COUNTERFACT_RESPONSE }; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 7`] = ` +"routes/hello/{name}.ts:import type { HTTP_GET } from "../../types/paths/hello/{name}.types.js"; + +export const GET: HTTP_GET = ($) => { + return $.response[200].random(); +}; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 8`] = ` +"types/paths/hello/{name}.types.ts:// This code was automatically generated from an OpenAPI description. +// Do not edit this file. Edit the OpenAPI file instead. +// For more information, see https://github.com/pmcelhaney/counterfact/blob/main/docs/faq-generated-code.md + +import type { WideOperationArgument } from "../../../types.ts"; +import type { OmitValueWhenNever } from "../../../types.ts"; +import type { COUNTERFACT_RESPONSE } from "../../../types.ts"; +import type { Context } from "@@CONTEXT_FILE_TOKEN@@"; +import type { ResponseBuilderFactory } from "../../../types.ts"; +import type { HttpStatusCode } from "../../../types.ts"; + +export type HTTP_GET = ( + $: OmitValueWhenNever<{ + query: never; + path: { name: string }; + header: never; + body: never; + context: Context; + response: ResponseBuilderFactory<{ + [statusCode in HttpStatusCode]: { + headers: { + "x-test": { schema: string }; + }; + requiredHeaders: never; + content: { + "application/json": { + schema: string; + }; + }; + }; + }>; + x: WideOperationArgument; + proxy: (url: string) => COUNTERFACT_RESPONSE; + user: { username?: string; password?: string }; + }>, +) => + | { + status: number | undefined; + contentType?: "application/json"; + body?: string; + } + | { status: 415; contentType: "text/plain"; body: string } + | COUNTERFACT_RESPONSE + | { ALL_REMAINING_HEADERS_ARE_OPTIONAL: COUNTERFACT_RESPONSE }; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 9`] = ` +"routes/path-one.ts:import type { HTTP_GET } from "../types/paths/path-one.types.js"; + +export const GET: HTTP_GET = ($) => { + return $.response[200].random(); +}; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 10`] = ` +"types/paths/path-one.types.ts:// This code was automatically generated from an OpenAPI description. +// Do not edit this file. Edit the OpenAPI file instead. +// For more information, see https://github.com/pmcelhaney/counterfact/blob/main/docs/faq-generated-code.md + +import type { WideOperationArgument } from "../../types.ts"; +import type { OmitValueWhenNever } from "../../types.ts"; +import type { COUNTERFACT_RESPONSE } from "../../types.ts"; +import type { Context } from "@@CONTEXT_FILE_TOKEN@@"; +import type { ResponseBuilderFactory } from "../../types.ts"; +import type { Recursive } from "../components/schemas/Recursive.js"; +import type { BadRequest } from "../#/components/responses/BadRequest.js"; + +export type HTTP_GET = ( + $: OmitValueWhenNever<{ + query: never; + path: never; + header: never; + body: never; + context: Context; + response: ResponseBuilderFactory<{ + 200: { + headers: never; + requiredHeaders: never; + content: { + "application/json": { + schema: Recursive; + }; + }; + }; + 400: BadRequest; + }>; + x: WideOperationArgument; + proxy: (url: string) => COUNTERFACT_RESPONSE; + user: { username?: string; password?: string }; + }>, +) => + | { + status: 200; + contentType?: "application/json"; + body?: Recursive; + } + | { + status: 400; + } + | { status: 415; contentType: "text/plain"; body: string } + | COUNTERFACT_RESPONSE + | { ALL_REMAINING_HEADERS_ARE_OPTIONAL: COUNTERFACT_RESPONSE }; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 11`] = ` +"types/components/schemas/Recursive.ts:import type { Recursive } from "./Recursive.js"; + +export type Recursive = Recursive; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 12`] = ` +"types/#/components/responses/BadRequest.ts:import type { Error } from "../../../components/schemas/Error.js"; + +export type BadRequest = { + headers: never; + requiredHeaders: never; + content: { + "application/json": { + schema: Error; + }; + }; +}; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 13`] = ` +"types/components/schemas/Error.ts:export type Error = { code?: string; message: string }; +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 14`] = ` +".cache +" +`; + +exports[`end-to-end test generates the same code for the example that it did on the last test run 15`] = ` +"This directory contains compiled JS files from the paths directory. Do not edit these files directly. +" +`; diff --git a/test/typescript-generator/generate.test.ts b/test/typescript-generator/generate.test.ts index 4722acb6..1385a1f3 100644 --- a/test/typescript-generator/generate.test.ts +++ b/test/typescript-generator/generate.test.ts @@ -6,8 +6,6 @@ import { Repository } from "../../src/typescript-generator/repository.js"; import { withTemporaryFiles } from "../lib/with-temporary-files.js"; describe("end-to-end test", () => { - // Skip because it fails on Windows and I can't figure out why - it("generates the same code for pet store that it did on the last test run", async () => { await withTemporaryFiles({}, async (basePath) => { const repository = new Repository(); @@ -40,4 +38,37 @@ describe("end-to-end test", () => { ).toMatchSnapshot(); }); }); + + it("generates the same code for the example that it did on the last test run", async () => { + await withTemporaryFiles({}, async (basePath) => { + const repository = new Repository(); + + repository.writeFiles = async () => { + await Promise.resolve(undefined); + }; + + await generate( + "./openapi-example.yaml", + basePath, + { routes: true, types: true }, + repository, + ); + await repository.finished(); + + for (const [scriptPath, script] of repository.scripts.entries()) { + expect(`${scriptPath}:${await script.contents()}`).toMatchSnapshot(); + } + + expect( + await fs.readFile(nodePath.join(basePath, ".gitignore"), "utf8"), + ).toMatchSnapshot(); + + expect( + await fs.readFile( + nodePath.join(basePath, ".cache", "README.md"), + "utf8", + ), + ).toMatchSnapshot(); + }); + }); }); diff --git a/test/typescript-generator/operation-type-coder.test.js b/test/typescript-generator/operation-type-coder.test.js index 6d3f353f..55fa81a3 100644 --- a/test/typescript-generator/operation-type-coder.test.js +++ b/test/typescript-generator/operation-type-coder.test.js @@ -67,6 +67,15 @@ describe("an OperationTypeCoder", () => { expect(coder.modulePath()).toBe("types/paths/hello/world.types.ts"); }); + it("returns the module path for / ", () => { + const coder = new OperationTypeCoder( + new Requirement({}, "#/paths/~1/get"), + "get", + ); + + expect(coder.modulePath()).toBe("types/paths/index.types.ts"); + }); + it("generates a complex post operation", async () => { const requirement = new Requirement( { From a585b912209a2f4ab574d1f7c72ca085dae11b79 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 21:43:18 +0000 Subject: [PATCH 11/11] chore(deps): update stryker-js monorepo to v8.6.0 --- package.json | 6 +- yarn.lock | 392 +++++++++++++++++++++++++++------------------------ 2 files changed, 210 insertions(+), 188 deletions(-) diff --git a/package.json b/package.json index d08c479b..01f9ac13 100644 --- a/package.json +++ b/package.json @@ -45,9 +45,9 @@ }, "devDependencies": { "@changesets/cli": "2.27.8", - "@stryker-mutator/core": "8.5.0", - "@stryker-mutator/jest-runner": "8.5.0", - "@stryker-mutator/typescript-checker": "8.5.0", + "@stryker-mutator/core": "8.6.0", + "@stryker-mutator/jest-runner": "8.6.0", + "@stryker-mutator/typescript-checker": "8.6.0", "@swc/core": "1.7.26", "@swc/jest": "0.2.36", "@testing-library/dom": "10.4.0", diff --git a/yarn.lock b/yarn.lock index 977fadf7..11c19921 100644 --- a/yarn.lock +++ b/yarn.lock @@ -901,37 +901,36 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570" integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== -"@inquirer/checkbox@^2.4.7": - version "2.4.7" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-2.4.7.tgz#0a2867a3a8c5853c79e43e99634e80c1721934ca" - integrity sha512-5YwCySyV1UEgqzz34gNsC38eKxRBtlRDpJLlKcRtTjlYA/yDKuc1rfw+hjw+2WJxbAZtaDPsRl5Zk7J14SBoBw== - dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/figures" "^1.0.5" - "@inquirer/type" "^1.5.2" +"@inquirer/checkbox@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-3.0.1.tgz#0a57f704265f78c36e17f07e421b98efb4b9867b" + integrity sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/confirm@^3.1.22": - version "3.1.22" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.1.22.tgz#23990624c11f60c6f7a5b0558c7505c35076a037" - integrity sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg== +"@inquirer/confirm@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-4.0.1.tgz#9106d6bffa0b2fdd0e4f60319b6f04f2e06e6e25" + integrity sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" -"@inquirer/core@^9.0.10": - version "9.0.10" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.0.10.tgz#4270191e2ad3bea6223530a093dd9479bcbc7dd0" - integrity sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA== +"@inquirer/core@^9.2.1": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" + integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== dependencies: - "@inquirer/figures" "^1.0.5" - "@inquirer/type" "^1.5.2" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" "@types/mute-stream" "^0.0.4" - "@types/node" "^22.1.0" + "@types/node" "^22.5.5" "@types/wrap-ansi" "^3.0.0" ansi-escapes "^4.3.2" - cli-spinners "^2.9.2" cli-width "^4.1.0" mute-stream "^1.0.0" signal-exit "^4.1.0" @@ -939,104 +938,104 @@ wrap-ansi "^6.2.0" yoctocolors-cjs "^2.1.2" -"@inquirer/editor@^2.1.22": - version "2.1.22" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-2.1.22.tgz#f97eda20954da1dab47df9f4c3ae11604d56360c" - integrity sha512-K1QwTu7GCK+nKOVRBp5HY9jt3DXOfPGPr6WRDrPImkcJRelG9UTx2cAtK1liXmibRrzJlTWOwqgWT3k2XnS62w== +"@inquirer/editor@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-3.0.1.tgz#d109f21e050af6b960725388cb1c04214ed7c7bc" + integrity sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" external-editor "^3.1.0" -"@inquirer/expand@^2.1.22": - version "2.1.22" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-2.1.22.tgz#7593e93a516a49434629c41f3738479c8234d2df" - integrity sha512-wTZOBkzH+ItPuZ3ZPa9lynBsdMp6kQ9zbjVPYEtSBG7UulGjg2kQiAnUjgyG4SlntpTce5bOmXAPvE4sguXjpA== +"@inquirer/expand@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-3.0.1.tgz#aed9183cac4d12811be47a4a895ea8e82a17e22c" + integrity sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" yoctocolors-cjs "^2.1.2" -"@inquirer/figures@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.5.tgz#57f9a996d64d3e3345d2a3ca04d36912e94f8790" - integrity sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA== +"@inquirer/figures@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.6.tgz#1a562f916da39888c56b65b78259d2261bd7d40b" + integrity sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ== -"@inquirer/input@^2.2.9": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-2.2.9.tgz#08fdf9a48e4f6fc64c2d508b9d10afac843f9bd8" - integrity sha512-7Z6N+uzkWM7+xsE+3rJdhdG/+mQgejOVqspoW+w0AbSZnL6nq5tGMEVASaYVWbkoSzecABWwmludO2evU3d31g== +"@inquirer/input@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-3.0.1.tgz#de63d49e516487388508d42049deb70f2cb5f28e" + integrity sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" -"@inquirer/number@^1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-1.0.10.tgz#ac2b440ca57b5de5a231e4898c12d4453683c055" - integrity sha512-kWTxRF8zHjQOn2TJs+XttLioBih6bdc5CcosXIzZsrTY383PXI35DuhIllZKu7CdXFi2rz2BWPN9l0dPsvrQOA== +"@inquirer/number@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-2.0.1.tgz#b9863080d02ab7dc2e56e16433d83abea0f2a980" + integrity sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" -"@inquirer/password@^2.1.22": - version "2.1.22" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-2.1.22.tgz#ec7ee5709923cf285b3e0ae53eed4fdc3c05b422" - integrity sha512-5Fxt1L9vh3rAKqjYwqsjU4DZsEvY/2Gll+QkqR4yEpy6wvzLxdSgFhUcxfDAOtO4BEoTreWoznC0phagwLU5Kw== +"@inquirer/password@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-3.0.1.tgz#2a9a9143591088336bbd573bcb05d5bf080dbf87" + integrity sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" ansi-escapes "^4.3.2" -"@inquirer/prompts@^5.3.6": - version "5.3.8" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-5.3.8.tgz#f394050d95076c2f1b046be324f06f619b257c3e" - integrity sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA== - dependencies: - "@inquirer/checkbox" "^2.4.7" - "@inquirer/confirm" "^3.1.22" - "@inquirer/editor" "^2.1.22" - "@inquirer/expand" "^2.1.22" - "@inquirer/input" "^2.2.9" - "@inquirer/number" "^1.0.10" - "@inquirer/password" "^2.1.22" - "@inquirer/rawlist" "^2.2.4" - "@inquirer/search" "^1.0.7" - "@inquirer/select" "^2.4.7" - -"@inquirer/rawlist@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-2.2.4.tgz#73d5d4fafa2ca012e6cfb9eb1d8ddf33bab2dde0" - integrity sha512-pb6w9pWrm7EfnYDgQObOurh2d2YH07+eDo3xQBsNAM2GRhliz6wFXGi1thKQ4bN6B0xDd6C3tBsjdr3obsCl3Q== - dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/type" "^1.5.2" +"@inquirer/prompts@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-6.0.1.tgz#43f5c0ed35c5ebfe52f1d43d46da2d363d950071" + integrity sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A== + dependencies: + "@inquirer/checkbox" "^3.0.1" + "@inquirer/confirm" "^4.0.1" + "@inquirer/editor" "^3.0.1" + "@inquirer/expand" "^3.0.1" + "@inquirer/input" "^3.0.1" + "@inquirer/number" "^2.0.1" + "@inquirer/password" "^3.0.1" + "@inquirer/rawlist" "^3.0.1" + "@inquirer/search" "^2.0.1" + "@inquirer/select" "^3.0.1" + +"@inquirer/rawlist@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-3.0.1.tgz#729def358419cc929045f264131878ed379e0af3" + integrity sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" yoctocolors-cjs "^2.1.2" -"@inquirer/search@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-1.0.7.tgz#72ab9ccfb57f05dd81a8b2df26214588e048be18" - integrity sha512-p1wpV+3gd1eST/o5N3yQpYEdFNCzSP0Klrl+5bfD3cTTz8BGG6nf4Z07aBW0xjlKIj1Rp0y3x/X4cZYi6TfcLw== +"@inquirer/search@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721" + integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/figures" "^1.0.5" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" yoctocolors-cjs "^2.1.2" -"@inquirer/select@^2.4.7": - version "2.4.7" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-2.4.7.tgz#6a23742b4f76d228186dfd42571d973def378ffa" - integrity sha512-JH7XqPEkBpNWp3gPCqWqY8ECbyMoFcCZANlL6pV9hf59qK6dGmkOlx1ydyhY+KZ0c5X74+W6Mtp+nm2QX0/MAQ== +"@inquirer/select@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-3.0.1.tgz#1df9ed27fb85a5f526d559ac5ce7cc4e9dc4e7ec" + integrity sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q== dependencies: - "@inquirer/core" "^9.0.10" - "@inquirer/figures" "^1.0.5" - "@inquirer/type" "^1.5.2" + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/type@^1.5.2": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.2.tgz#15f5e4a4dae02c4203650cb07c8a000cdd423939" - integrity sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA== +"@inquirer/type@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" + integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== dependencies: mute-stream "^1.0.0" @@ -2438,53 +2437,53 @@ dependencies: lodash "^4.17.15" -"@stryker-mutator/api@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@stryker-mutator/api/-/api-8.5.0.tgz#b58b0c15c4c525541a9a6bb78cf1ec469de4beb2" - integrity sha512-dhz6BAbNr6LW96UjJFyxVnGOvJqo+7GdIBJl3Cckg3/Bakn0jL61xZ0ca9pcrbVHivy9vlzMs+dCv2pr9QV9rg== +"@stryker-mutator/api@8.6.0": + version "8.6.0" + resolved "https://registry.yarnpkg.com/@stryker-mutator/api/-/api-8.6.0.tgz#a4e6556b4704b218415fdb0947e67640e66c2805" + integrity sha512-iEZYV40zpSJBDXombffbLuEVr0j/rJseEgmDcfGJQfSc0yxuEg7+MEFRweUQCaJICXu+2A10o9TnCWTyqK5OKg== dependencies: - mutation-testing-metrics "3.2.0" - mutation-testing-report-schema "3.1.1" - tslib "~2.6.3" + mutation-testing-metrics "3.3.0" + mutation-testing-report-schema "3.3.0" + tslib "~2.7.0" typed-inject "~4.0.0" -"@stryker-mutator/core@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@stryker-mutator/core/-/core-8.5.0.tgz#6b6173716e15d99bcbd900063c5917afcbe9a065" - integrity sha512-1bmX0+BImAWK+w9kPl83VchsYgYBMXHngD5i8Se2AEFMP5jj4J4uPOya45fAEVJcY4ooIIuwY3zkFwX6T1Crsw== +"@stryker-mutator/core@8.6.0": + version "8.6.0" + resolved "https://registry.yarnpkg.com/@stryker-mutator/core/-/core-8.6.0.tgz#374ce32b16287081e571cf4bbaa8031c420e9e4a" + integrity sha512-ZuXDf/qd9UBSmqRybbnHKm8FGkYJH6tSY0yZ6LRezWknpHlNX+rQ1NMqVaT8i+Ay1BIZUArVUSRcbI8DOwIdlQ== dependencies: - "@inquirer/prompts" "^5.3.6" - "@stryker-mutator/api" "8.5.0" - "@stryker-mutator/instrumenter" "8.5.0" - "@stryker-mutator/util" "8.5.0" + "@inquirer/prompts" "^6.0.0" + "@stryker-mutator/api" "8.6.0" + "@stryker-mutator/instrumenter" "8.6.0" + "@stryker-mutator/util" "8.6.0" ajv "~8.17.1" chalk "~5.3.0" commander "~12.1.0" diff-match-patch "1.0.5" - emoji-regex "~10.3.0" - execa "~9.3.0" + emoji-regex "~10.4.0" + execa "~9.4.0" file-url "~4.0.0" get-port "~7.1.0" lodash.groupby "~4.6.0" log4js "~6.9.1" minimatch "~9.0.5" - mutation-testing-elements "3.2.0" - mutation-testing-metrics "3.2.0" - mutation-testing-report-schema "3.1.1" - npm-run-path "~5.3.0" + mutation-testing-elements "3.3.0" + mutation-testing-metrics "3.3.0" + mutation-testing-report-schema "3.3.0" + npm-run-path "~6.0.0" progress "~2.0.3" rxjs "~7.8.1" semver "^7.6.3" source-map "~0.7.4" tree-kill "~1.2.2" - tslib "2.6.3" + tslib "2.7.0" typed-inject "~4.0.0" - typed-rest-client "~2.0.2" + typed-rest-client "~2.1.0" -"@stryker-mutator/instrumenter@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@stryker-mutator/instrumenter/-/instrumenter-8.5.0.tgz#868b3aa9ad452d1cf8e63aaa7c14dd60f5ac3a10" - integrity sha512-sA+jXiGxeFuWJjAAJm8XvwpI1z2lxh2+CzpLyTR2d089fnEUoiqFsVHy2NsYxR9xZ5uqDu5FlnBlafXgLui1bw== +"@stryker-mutator/instrumenter@8.6.0": + version "8.6.0" + resolved "https://registry.yarnpkg.com/@stryker-mutator/instrumenter/-/instrumenter-8.6.0.tgz#8acc9b9a24007c98f6831faa90c6a5382e4feac8" + integrity sha512-ynRfpURhuUu9aJLDw2osfnzCTfPGou8hZnqpPuYv6m5UbiGX5+YKC4U35uYSBYA7hlwGqsSTOdClhypi1ASrKg== dependencies: "@babel/core" "~7.25.2" "@babel/generator" "~7.25.0" @@ -2492,35 +2491,35 @@ "@babel/plugin-proposal-decorators" "~7.24.7" "@babel/plugin-proposal-explicit-resource-management" "^7.24.7" "@babel/preset-typescript" "~7.24.7" - "@stryker-mutator/api" "8.5.0" - "@stryker-mutator/util" "8.5.0" + "@stryker-mutator/api" "8.6.0" + "@stryker-mutator/util" "8.6.0" angular-html-parser "~6.0.2" semver "~7.6.3" weapon-regex "~1.3.2" -"@stryker-mutator/jest-runner@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@stryker-mutator/jest-runner/-/jest-runner-8.5.0.tgz#3464105e4d92aec7b3346b8fdc0fd300a5614ade" - integrity sha512-6UmieXl/6NJ6YtQHWY97O9jdtcQ2OHw4JLE0VMgPPSrrSyXHhU4V1CPYK2gHGPdu87YRGYg3A4BpIDny00fUlg== +"@stryker-mutator/jest-runner@8.6.0": + version "8.6.0" + resolved "https://registry.yarnpkg.com/@stryker-mutator/jest-runner/-/jest-runner-8.6.0.tgz#e3e496984573003056801e10f96a2d32db512174" + integrity sha512-j7QHDSYL4S/jbGzCNtf/TtoIL49lJwyV1EkXQmprVlFJiOxoKmXV+j/vhut6lFeJlaZacb+7jVGbx9XVyvw0Jw== dependencies: - "@stryker-mutator/api" "8.5.0" - "@stryker-mutator/util" "8.5.0" + "@stryker-mutator/api" "8.6.0" + "@stryker-mutator/util" "8.6.0" semver "~7.6.3" - tslib "~2.6.3" + tslib "~2.7.0" -"@stryker-mutator/typescript-checker@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@stryker-mutator/typescript-checker/-/typescript-checker-8.5.0.tgz#8b69594368d189588acb7822222cf64f9ec3b120" - integrity sha512-GvJDltWbqalcKIctlo0fBTILa7zqqKZPFRCmWCa68Ea31rDqNs4pB5h99m7+mExVuklsCPddPLcq2KYM1qmCYQ== +"@stryker-mutator/typescript-checker@8.6.0": + version "8.6.0" + resolved "https://registry.yarnpkg.com/@stryker-mutator/typescript-checker/-/typescript-checker-8.6.0.tgz#2f61136b4ef4617bda248167af65b2737a4b9f4d" + integrity sha512-P+/6yVD4cH3xosNw+MKl+lTXpbqqPWYuMoRhYOudhufDdIofyULyj8Apc4lOceJ857VXp0hWyDjwEs+kN88row== dependencies: - "@stryker-mutator/api" "8.5.0" - "@stryker-mutator/util" "8.5.0" + "@stryker-mutator/api" "8.6.0" + "@stryker-mutator/util" "8.6.0" semver "~7.6.3" -"@stryker-mutator/util@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@stryker-mutator/util/-/util-8.5.0.tgz#66bccae7aedebb96bde6738aac55cce8e81c7f09" - integrity sha512-T1ElpGUDqESKcwuRnfEuroE7N2pEMLTqieWRLIJZsP2ubEfnoHp4aGVL6IjPRdiZr4jetZOLfjlTzddrqrbsvg== +"@stryker-mutator/util@8.6.0": + version "8.6.0" + resolved "https://registry.yarnpkg.com/@stryker-mutator/util/-/util-8.6.0.tgz#caa9baeae352e80f8b05ba538204d13e7e2721bc" + integrity sha512-SruyNDhioBTR7Eq1sSxr9YYBLGHF5s999W63xcOJ+4RdRwyLwNUX1H8DiYnjQC5vs5X/Ap/UsmGwyVnv1ObSnQ== "@stylistic/eslint-plugin-js@2.6.2", "@stylistic/eslint-plugin-js@^2.1.0", "@stylistic/eslint-plugin-js@^2.6.2": version "2.6.2" @@ -2951,7 +2950,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^22.1.0": +"@types/node@*": version "22.2.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.2.0.tgz#7cf046a99f0ba4d628ad3088cb21f790df9b0c5b" integrity sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ== @@ -2963,6 +2962,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/node@^22.5.5": + version "22.7.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" + integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== + dependencies: + undici-types "~6.19.2" + "@types/normalize-package-data@^2.4.0": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" @@ -4061,11 +4067,6 @@ cli-progress@^3.8.2: dependencies: string-width "^4.2.3" -cli-spinners@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -4695,7 +4696,7 @@ emittery@^0.13.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== -emoji-regex@^10.0.0, emoji-regex@^10.0.1, emoji-regex@~10.3.0: +emoji-regex@^10.0.0, emoji-regex@^10.0.1: version "10.3.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== @@ -4710,6 +4711,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +emoji-regex@~10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== + encodeurl@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -5883,19 +5889,19 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@~9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-9.3.0.tgz#b10b70f52c1a978985e8492cc1fa74795c59963c" - integrity sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg== +execa@~9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.4.0.tgz#071ff6516c46eb82af9a559dba3c891637a10f3f" + integrity sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw== dependencies: "@sindresorhus/merge-streams" "^4.0.0" cross-spawn "^7.0.3" figures "^6.1.0" get-stream "^9.0.0" - human-signals "^7.0.0" + human-signals "^8.0.0" is-plain-obj "^4.1.0" is-stream "^4.0.1" - npm-run-path "^5.2.0" + npm-run-path "^6.0.0" pretty-ms "^9.0.0" signal-exit "^4.1.0" strip-final-newline "^4.0.0" @@ -6641,10 +6647,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-7.0.0.tgz#93e58e0c19cfec1dded4af10cd4969f5ab75f6c8" - integrity sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q== +human-signals@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.0.tgz#2d3d63481c7c2319f0373428b01ffe30da6df852" + integrity sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA== husky@9.1.6: version "9.1.6" @@ -8530,22 +8536,22 @@ ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mutation-testing-elements@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mutation-testing-elements/-/mutation-testing-elements-3.2.0.tgz#61870f83f52f77d8d89d15d96bb8214583313746" - integrity sha512-zOwr/DGzEv9WW03Sj5IROgsGpOGbKz1ktx0tbCtJArE0VKhPXDtYKi/uKUv8AIUjHHXWGkGvU5WMfyZ/ckRglw== +mutation-testing-elements@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/mutation-testing-elements/-/mutation-testing-elements-3.3.0.tgz#b50721a2523a8205ac291a92b751cef8d3bd2a91" + integrity sha512-YMBF+pfOHklpQebOYB/vgd5RXjcRy4TfrSMXaQbUGActfWvXQPJoN6TUtGw/oSv+12rfxXIQhsEd6MNi96yWew== -mutation-testing-metrics@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mutation-testing-metrics/-/mutation-testing-metrics-3.2.0.tgz#b89feed6257eee5e8e36b00a56a16736902fa74d" - integrity sha512-PheogUIwu8g4jN6uF9PM5sskBWcZlTSYnANxxYBFvZi3n+2lcd3hLOj+JdHqNEAY1uTsgkmR9Vkh4RtVp8QwSw== +mutation-testing-metrics@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/mutation-testing-metrics/-/mutation-testing-metrics-3.3.0.tgz#113930f2d5b197becbb70381426d107f00b929c1" + integrity sha512-vZEJ84SpK3Rwyk7k28SORS5o6ZDtehwifLPH6fQULrozJqlz2Nj8vi52+CjA+aMZCyyKB+9eYUh1HtiWVo4o/A== dependencies: - mutation-testing-report-schema "3.1.1" + mutation-testing-report-schema "3.3.0" -mutation-testing-report-schema@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/mutation-testing-report-schema/-/mutation-testing-report-schema-3.1.1.tgz#3695a4932955f7eb4e05a00342bd94c3b445143b" - integrity sha512-lWIbgUEnMEdsY2yymC7SZRBO+6dbZa5tY/Bmw+xjXYPdBxTVlnd2mjKRPZ6FUxgHJ9vMQmQnktMNAKCWZp1H0A== +mutation-testing-report-schema@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/mutation-testing-report-schema/-/mutation-testing-report-schema-3.3.0.tgz#6c8bec975649dbd63deba1753058dd2e9f93ede0" + integrity sha512-DF56q0sb0GYzxYUYNdzlfQzyE5oJBEasz8zL76bt3OFJU8q4iHSdUDdihPWWJD+4JLxSs3neM/R968zYdy0SWQ== mute-stream@0.0.7: version "0.0.7" @@ -8702,12 +8708,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-run-path@^5.2.0, npm-run-path@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== +npm-run-path@^6.0.0, npm-run-path@~6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" + integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== dependencies: path-key "^4.0.0" + unicorn-magic "^0.3.0" nth-check@^2.1.1: version "2.1.1" @@ -11059,16 +11066,21 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.6.3, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.2, tslib@~2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tslib@2.7.0, tslib@~2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" @@ -11188,10 +11200,10 @@ typed-inject@~4.0.0: resolved "https://registry.yarnpkg.com/typed-inject/-/typed-inject-4.0.0.tgz#133c00ad7ed9d129aeedf4e102fd07cc530d26cb" integrity sha512-OuBL3G8CJlS/kjbGV/cN8Ni32+ktyyi6ADDZpKvksbX0fYBV5WcukhRCYa7WqLce7dY/Br2dwtmJ9diiadLFpg== -typed-rest-client@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-2.0.2.tgz#82d451b9a219bf8fa688b698b2581327be4b920d" - integrity sha512-rmAQM2gZw/PQpK5+5aSs+I6ZBv4PFC2BT1o+0ADS1SgSejA+14EmbI2Lt8uXwkX7oeOMkwFmg0pHKwe8D9IT5A== +typed-rest-client@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-2.1.0.tgz#f04c6cfcabc6012c2d036b806eaac455604f1598" + integrity sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA== dependencies: des.js "^1.1.0" js-md4 "^0.3.2" @@ -11244,11 +11256,21 @@ undici-types@~6.13.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + unicorn-magic@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + unified-lint-rule@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz#75f8d7fbd9664e198a65f1399ab06c3950b54a70"