From 3a391363204fb1f97658de7f6ece64a9b5575e1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Oct 2025 06:02:10 +0000 Subject: [PATCH 1/6] chore(dev-deps): bump eslint-config-oclif from 6.0.108 to 6.0.110 Bumps [eslint-config-oclif](https://github.com/oclif/eslint-config-oclif) from 6.0.108 to 6.0.110. - [Release notes](https://github.com/oclif/eslint-config-oclif/releases) - [Changelog](https://github.com/oclif/eslint-config-oclif/blob/main/CHANGELOG.md) - [Commits](https://github.com/oclif/eslint-config-oclif/compare/6.0.108...6.0.110) --- updated-dependencies: - dependency-name: eslint-config-oclif dependency-version: 6.0.110 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 150 +++++++++++++++++++++++++++--------------------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/yarn.lock b/yarn.lock index 978319aa..7babb07f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1377,39 +1377,39 @@ resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== -"@typescript-eslint/eslint-plugin@8.46.0", "@typescript-eslint/eslint-plugin@^8": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz#fc90b35d8025b5eaa66b2f6c3859cd5381a1e751" - integrity sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA== +"@typescript-eslint/eslint-plugin@8.46.1", "@typescript-eslint/eslint-plugin@^8": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.1.tgz#20876354024140aabc8b400bc95735fdcade17d5" + integrity sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.46.0" - "@typescript-eslint/type-utils" "8.46.0" - "@typescript-eslint/utils" "8.46.0" - "@typescript-eslint/visitor-keys" "8.46.0" + "@typescript-eslint/scope-manager" "8.46.1" + "@typescript-eslint/type-utils" "8.46.1" + "@typescript-eslint/utils" "8.46.1" + "@typescript-eslint/visitor-keys" "8.46.1" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.46.0", "@typescript-eslint/parser@^8": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.46.0.tgz#9186f28c59f6e477ab8919312d2654f4f27d45c1" - integrity sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ== +"@typescript-eslint/parser@8.46.1", "@typescript-eslint/parser@^8": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.46.1.tgz#81751f46800fc6b01ce1a72760cd17f06e7f395b" + integrity sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA== dependencies: - "@typescript-eslint/scope-manager" "8.46.0" - "@typescript-eslint/types" "8.46.0" - "@typescript-eslint/typescript-estree" "8.46.0" - "@typescript-eslint/visitor-keys" "8.46.0" + "@typescript-eslint/scope-manager" "8.46.1" + "@typescript-eslint/types" "8.46.1" + "@typescript-eslint/typescript-estree" "8.46.1" + "@typescript-eslint/visitor-keys" "8.46.1" debug "^4.3.4" -"@typescript-eslint/project-service@8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.46.0.tgz#1190dcc0d3494d46a85773e0c3a2838cbb2b45a7" - integrity sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ== +"@typescript-eslint/project-service@8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.46.1.tgz#07be0e6f27fa90a17d8e5f6996ee02329c9a8c2e" + integrity sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.46.0" - "@typescript-eslint/types" "^8.46.0" + "@typescript-eslint/tsconfig-utils" "^8.46.1" + "@typescript-eslint/types" "^8.46.1" debug "^4.3.4" "@typescript-eslint/scope-manager@8.22.0": @@ -1420,27 +1420,27 @@ "@typescript-eslint/types" "8.22.0" "@typescript-eslint/visitor-keys" "8.22.0" -"@typescript-eslint/scope-manager@8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz#a41833fe387044075cb2d4cfab490a7f1dd19b61" - integrity sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw== +"@typescript-eslint/scope-manager@8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.46.1.tgz#590dd2e65e95af646bdaf50adeae9af39e25e8c1" + integrity sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A== dependencies: - "@typescript-eslint/types" "8.46.0" - "@typescript-eslint/visitor-keys" "8.46.0" + "@typescript-eslint/types" "8.46.1" + "@typescript-eslint/visitor-keys" "8.46.1" -"@typescript-eslint/tsconfig-utils@8.46.0", "@typescript-eslint/tsconfig-utils@^8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz#3e33019e0b94838d37d7cc61341fbcc5bf791007" - integrity sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw== +"@typescript-eslint/tsconfig-utils@8.46.1", "@typescript-eslint/tsconfig-utils@^8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.1.tgz#24405888560175c6c209c39df11ac06a2efef9d7" + integrity sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g== -"@typescript-eslint/type-utils@8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz#815efeb11b9533da68fd825628cecf283ac79829" - integrity sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg== +"@typescript-eslint/type-utils@8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.1.tgz#14d4307dd6045f6b48a888cde1513d6ec305537f" + integrity sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw== dependencies: - "@typescript-eslint/types" "8.46.0" - "@typescript-eslint/typescript-estree" "8.46.0" - "@typescript-eslint/utils" "8.46.0" + "@typescript-eslint/types" "8.46.1" + "@typescript-eslint/typescript-estree" "8.46.1" + "@typescript-eslint/utils" "8.46.1" debug "^4.3.4" ts-api-utils "^2.1.0" @@ -1459,10 +1459,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.22.0.tgz#d9dec7116479ad03aeb6c8ac9c5223c4c79cf360" integrity sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A== -"@typescript-eslint/types@8.46.0", "@typescript-eslint/types@^8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.0.tgz#20af6b332f9cd55a15fcd862fdb07d47a6131bf4" - integrity sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA== +"@typescript-eslint/types@8.46.1", "@typescript-eslint/types@^8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.1.tgz#4c5479538ec10b5508b8e982e172911c987446d8" + integrity sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ== "@typescript-eslint/types@^8.11.0": version "8.33.1" @@ -1488,15 +1488,15 @@ semver "^7.6.0" ts-api-utils "^2.0.0" -"@typescript-eslint/typescript-estree@8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz#f45a0d5f5e99b26f0280e8cff3ed3380658fd720" - integrity sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg== +"@typescript-eslint/typescript-estree@8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.1.tgz#1c146573b942ebe609c156c217ceafdc7a88e6ed" + integrity sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg== dependencies: - "@typescript-eslint/project-service" "8.46.0" - "@typescript-eslint/tsconfig-utils" "8.46.0" - "@typescript-eslint/types" "8.46.0" - "@typescript-eslint/visitor-keys" "8.46.0" + "@typescript-eslint/project-service" "8.46.1" + "@typescript-eslint/tsconfig-utils" "8.46.1" + "@typescript-eslint/types" "8.46.1" + "@typescript-eslint/visitor-keys" "8.46.1" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -1530,15 +1530,15 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.46.0.tgz#27025c5ed7cbc928440d6a30edd6ba34cc5b927a" - integrity sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g== +"@typescript-eslint/utils@8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.46.1.tgz#c572184d9227d66b10a954b90249a20c48b22452" + integrity sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.46.0" - "@typescript-eslint/types" "8.46.0" - "@typescript-eslint/typescript-estree" "8.46.0" + "@typescript-eslint/scope-manager" "8.46.1" + "@typescript-eslint/types" "8.46.1" + "@typescript-eslint/typescript-estree" "8.46.1" "@typescript-eslint/utils@^8.13.0", "@typescript-eslint/utils@^8.21.0": version "8.22.0" @@ -1574,12 +1574,12 @@ "@typescript-eslint/types" "8.22.0" eslint-visitor-keys "^4.2.0" -"@typescript-eslint/visitor-keys@8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz#23936809054c511f703713c56ddd2f46dc197845" - integrity sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q== +"@typescript-eslint/visitor-keys@8.46.1": + version "8.46.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.1.tgz#da35f1d58ec407419d68847cfd358b32746ac315" + integrity sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA== dependencies: - "@typescript-eslint/types" "8.46.0" + "@typescript-eslint/types" "8.46.1" eslint-visitor-keys "^4.2.1" "@unrs/resolver-binding-darwin-arm64@1.7.11": @@ -3377,9 +3377,9 @@ eslint-config-oclif@^5.2.2: eslint-plugin-unicorn "^48.0.1" eslint-config-oclif@^6: - version "6.0.108" - resolved "https://registry.yarnpkg.com/eslint-config-oclif/-/eslint-config-oclif-6.0.108.tgz#54d7b5c46d87bf2699b5f87c4df165b041e3fef9" - integrity sha512-FagAOpTrEQ9aKIlCFjkeo3kj0C7WCDv754Fx6un+NGfxVmmKQq5AS0jF00LTtaW6UzOrihQKDG6HsKuL0lXRKg== + version "6.0.110" + resolved "https://registry.yarnpkg.com/eslint-config-oclif/-/eslint-config-oclif-6.0.110.tgz#d0a4cf4fb8cf94eab5a0793ce06130cdbd55ab54" + integrity sha512-rSabSewuQudsmSSYjUnYuzROlObc4ESjPYS7L5HS9yUR7VXhX2l/jX2e5C6K6x650Mj/Q0/bd8LEbZyO4AvvCQ== dependencies: "@eslint/compat" "^1.4.0" "@eslint/eslintrc" "^3.3.1" @@ -3397,7 +3397,7 @@ eslint-config-oclif@^6: eslint-plugin-n "^17.22.0" eslint-plugin-perfectionist "^4" eslint-plugin-unicorn "^56.0.1" - typescript-eslint "^8.45.0" + typescript-eslint "^8.46.0" eslint-config-prettier@^10: version "10.1.8" @@ -8416,15 +8416,15 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript-eslint@^8.45.0: - version "8.46.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.46.0.tgz#fb1c37a90fadf42fe1c8f8b192b974b6d9c439cc" - integrity sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw== +typescript-eslint@^8.46.0: + version "8.46.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.46.1.tgz#baeb322ee83ca566a8cf1f6403847694a3acd44a" + integrity sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA== dependencies: - "@typescript-eslint/eslint-plugin" "8.46.0" - "@typescript-eslint/parser" "8.46.0" - "@typescript-eslint/typescript-estree" "8.46.0" - "@typescript-eslint/utils" "8.46.0" + "@typescript-eslint/eslint-plugin" "8.46.1" + "@typescript-eslint/parser" "8.46.1" + "@typescript-eslint/typescript-estree" "8.46.1" + "@typescript-eslint/utils" "8.46.1" typescript@^3.9.10, typescript@^3.9.7: version "3.9.10" From c5a1820bc432a569af075321359234219727cffa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Oct 2025 08:35:08 +0000 Subject: [PATCH 2/6] chore(dev-deps): bump eslint from 9.37.0 to 9.38.0 Bumps [eslint](https://github.com/eslint/eslint) from 9.37.0 to 9.38.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/compare/v9.37.0...v9.38.0) --- updated-dependencies: - dependency-name: eslint dependency-version: 9.38.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7babb07f..643949e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -442,19 +442,19 @@ dependencies: "@eslint/core" "^0.16.0" -"@eslint/config-array@^0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" - integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== dependencies: - "@eslint/object-schema" "^2.1.6" + "@eslint/object-schema" "^2.1.7" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/config-helpers@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.0.tgz#e9f94ba3b5b875e32205cb83fece18e64486e9e6" - integrity sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog== +"@eslint/config-helpers@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.1.tgz#7d173a1a35fe256f0989a0fdd8d911ebbbf50037" + integrity sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw== dependencies: "@eslint/core" "^0.16.0" @@ -511,10 +511,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.37.0", "@eslint/js@^9.34.0": - version "9.37.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.37.0.tgz#0cfd5aa763fe5d1ee60bedf84cd14f54bcf9e21b" - integrity sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg== +"@eslint/js@9.38.0", "@eslint/js@^9.34.0": + version "9.38.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.38.0.tgz#f7aa9c7577577f53302c1d795643589d7709ebd1" + integrity sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A== "@eslint/json@^0.13.1": version "0.13.2" @@ -526,10 +526,10 @@ "@humanwhocodes/momoa" "^3.3.9" natural-compare "^1.4.0" -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== "@eslint/plugin-kit@^0.3.1", "@eslint/plugin-kit@^0.3.5": version "0.3.5" @@ -3668,23 +3668,22 @@ eslint-visitor-keys@^4.2.0, eslint-visitor-keys@^4.2.1: integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@^9: - version "9.37.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.37.0.tgz#ac0222127f76b09c0db63036f4fe289562072d74" - integrity sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig== + version "9.38.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.38.0.tgz#3957d2af804e5cf6cc503c618f60acc71acb2e7e" + integrity sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw== dependencies: "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.4.0" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.1" "@eslint/core" "^0.16.0" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.37.0" + "@eslint/js" "9.38.0" "@eslint/plugin-kit" "^0.4.0" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.6" From 95366b625e95cfb74fea368729ebcb99bcbe3b82 Mon Sep 17 00:00:00 2001 From: Thodoris Greasidis Date: Mon, 20 Oct 2025 17:29:08 +0300 Subject: [PATCH 3/6] test: correct optional one-way exclusive field test case (#1486) As suggested by https://github.com/oclif/core/pull/1461#issuecomment-3390921329 --- test/help/docopts.test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/help/docopts.test.ts b/test/help/docopts.test.ts index 480c7124..a3102cb9 100644 --- a/test/help/docopts.test.ts +++ b/test/help/docopts.test.ts @@ -207,7 +207,7 @@ describe('doc opts', () => { expect(usage).to.contain(' (-f | -s )') }) - it('shows option one-way exclusive field on optional field', () => { + it('shows optional one-way exclusive field on optional field', () => { const usage = DocOpts.generate({ flags: { testFlag: Flags.url({ @@ -219,12 +219,11 @@ describe('doc opts', () => { name: 'testFlag2', description: 'test', char: 'f', - required: true, exclusive: ['testFlag'], }), }, } as any) - expect(usage).to.contain(' (-f | -s )') + expect(usage).to.contain(' [-f | -s ]') }) it('shows optional exclusive fields defined twice', () => { From da2d311c756869e531b15ab4b9a5f3ed65c44051 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 08:36:49 -0600 Subject: [PATCH 4/6] chore(dev-deps): bump @oclif/plugin-plugins from 5.4.49 to 5.4.50 (#1484) Bumps [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins) from 5.4.49 to 5.4.50. - [Release notes](https://github.com/oclif/plugin-plugins/releases) - [Changelog](https://github.com/oclif/plugin-plugins/blob/main/CHANGELOG.md) - [Commits](https://github.com/oclif/plugin-plugins/compare/5.4.49...5.4.50) --- updated-dependencies: - dependency-name: "@oclif/plugin-plugins" dependency-version: 5.4.50 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 643949e0..3fd6ae66 100644 --- a/yarn.lock +++ b/yarn.lock @@ -980,9 +980,9 @@ "@oclif/core" "^4" "@oclif/plugin-plugins@^5": - version "5.4.49" - resolved "https://registry.yarnpkg.com/@oclif/plugin-plugins/-/plugin-plugins-5.4.49.tgz#4ad135cbadfed212badb7cce1184e9362521e35f" - integrity sha512-OeDLxEjbfEj5AN/wEKXzSY4VC+svBVdjrlHjxm4/e1ZnK3ZuSe1MeABmJc4mXmWwG/zagtNtSAKmTOWhe+WmmA== + version "5.4.50" + resolved "https://registry.yarnpkg.com/@oclif/plugin-plugins/-/plugin-plugins-5.4.50.tgz#0749200c71d9e9e36cd11cb97c441927dd3ad6b2" + integrity sha512-HNhmmgxH0xoFsYKubtWWhgSasbDEyoT+o/q5QDljiytNvqWP3wWiP6cqqWvGpKG2El7+g17crdWpv4jzrf3Lyg== dependencies: "@oclif/core" "^4.5.4" ansis "^3.17.0" @@ -991,7 +991,7 @@ npm-package-arg "^11.0.3" npm-run-path "^5.3.0" object-treeify "^4.0.1" - semver "^7.7.2" + semver "^7.7.3" validate-npm-package-name "^5.0.1" which "^4.0.0" yarn "^1.22.22" From d13b448f229f182b065e0847cf4b761b8f2cbbd8 Mon Sep 17 00:00:00 2001 From: Mike Donnalley Date: Mon, 20 Oct 2025 11:45:38 -0600 Subject: [PATCH 5/6] feat: support the 'combinable' & 'only' flag relationships (#1487) (#1488) This new flag relationship aims to ease defining that a specific flag is ONLY compatible with just a few other ones. Currently users would have to enumerate all other incompatible flags in the exclusive relationship, which leads to some repetition, doesn't capture exactly the original intention, and could lead to oversights if more flags are added to that command later. I realized this use case while working on a balena-cli PR, where we had to define that --config is allowed to be combined with the --yes flag and is incompatible with all other flags. The workaround that we ended up having to use, was to use an IIFE and define the compatible flags in a separate array and reference that in the exclusive property. https://github.com/balena-io/balena-cli/pull/2979/commits/692e70d51883204217fb0d5bdebb976807c94a85 Co-authored-by: Thodoris Greasidis --- src/help/docopts.ts | 18 +++- src/interfaces/parser.ts | 6 +- src/parser/validate.ts | 29 +++++++ src/util/cache-command.ts | 1 + test/help/docopts.test.ts | 148 ++++++++++++++++++++++++++++++++ test/parser/parse.test.ts | 63 ++++++++++++++ test/util/cache-command.test.ts | 6 ++ 7 files changed, 269 insertions(+), 2 deletions(-) diff --git a/src/help/docopts.ts b/src/help/docopts.ts index 9274c4ec..620b95a9 100644 --- a/src/help/docopts.ts +++ b/src/help/docopts.ts @@ -194,8 +194,24 @@ export class DocOpts { this.combineElementsToFlag(elementMap, flag.name, flag.dependsOn, ' ') } + let exclusive: Set | undefined if (Array.isArray(flag.exclusive)) { - this.combineElementsToFlag(elementMap, flag.name, flag.exclusive, ' | ') + exclusive = new Set(flag.exclusive) + } + + if (Array.isArray(flag.combinable)) { + const combinableFlags = new Set(flag.combinable) + exclusive ??= new Set() + for (const item of this.flagList) { + // each flag not in the "combinable" list, is equivalent to an "exclusive" flag + if (flag !== item && !combinableFlags.has(item.name)) { + exclusive.add(item.name) + } + } + } + + if (exclusive !== undefined && exclusive.size > 0) { + this.combineElementsToFlag(elementMap, flag.name, [...exclusive], ' | ') } } diff --git a/src/interfaces/parser.ts b/src/interfaces/parser.ts index f88a5668..b50392d1 100644 --- a/src/interfaces/parser.ts +++ b/src/interfaces/parser.ts @@ -89,7 +89,7 @@ export type ArgDefaultHelp = export type FlagRelationship = string | {name: string; when: (flags: Record) => Promise} export type Relationship = { - type: 'all' | 'some' | 'none' + type: 'all' | 'some' | 'none' | 'only' flags: FlagRelationship[] } @@ -142,6 +142,10 @@ export type FlagProps = { * List of flags that cannot be used with this flag. */ exclusive?: string[] + /** + * List of the only flags that can be used with this flag. + */ + combinable?: string[] /** * Exactly one of these flags must be provided. */ diff --git a/src/parser/validate.ts b/src/parser/validate.ts index 98ee8e4d..01921f86 100644 --- a/src/parser/validate.ts +++ b/src/parser/validate.ts @@ -71,6 +71,7 @@ export async function validate(parse: {input: ParserInput; output: ParserOutput} ...(flag.relationships ? validateRelationships(name, flag) : []), ...(flag.dependsOn ? [validateDependsOn(name, flag.dependsOn)] : []), ...(flag.exclusive ? [validateExclusive(name, flag.exclusive)] : []), + ...(flag.combinable ? [validateCombinable(name, flag.combinable)] : []), ...(flag.exactlyOne ? [validateExactlyOne(name, flag.exactlyOne)] : []), ] } @@ -172,6 +173,30 @@ export async function validate(parse: {input: ParserInput; output: ParserOutput} return {...base, status: 'success'} } + async function validateCombinable(name: string, flags: FlagRelationship[]): Promise { + const base = {name, validationFn: 'validateCombinable'} + const combinableFlags = new Set(flags.map((flag) => (typeof flag === 'string' ? flag : flag.name))) + const resolved = await resolveFlags(flags) + + for (const flag of Object.keys(parse.output.flags)) { + // do not enforce exclusivity for flags that were defaulted + if (parse.output.metadata.flags && parse.output.metadata.flags[flag]?.setFromDefault) continue + if (parse.output.metadata.flags && parse.output.metadata.flags[name]?.setFromDefault) continue + if (flag !== name && parse.output.flags[flag] !== undefined && !combinableFlags.has(flag)) { + const formattedFlags = Object.keys(resolved) + .map((f) => `--${f}`) + .join(', ') + return { + ...base, + reason: `Only the following can be provided when using --${name}: ${formattedFlags}`, + status: 'failed', + } + } + } + + return {...base, status: 'success'} + } + async function validateExactlyOne(name: string, flags: FlagRelationship[]): Promise { const base = {name, validationFn: 'validateExactlyOne'} @@ -235,6 +260,10 @@ export async function validate(parse: {input: ParserInput; output: ParserOutput} return validateExclusive(name, relationship.flags) } + case 'only': { + return validateCombinable(name, relationship.flags) + } + case 'some': { return validateSome(name, relationship.flags) } diff --git a/src/util/cache-command.ts b/src/util/cache-command.ts index 85c859fb..fde10d8c 100644 --- a/src/util/cache-command.ts +++ b/src/util/cache-command.ts @@ -25,6 +25,7 @@ async function cacheFlags( aliases: flag.aliases, char: flag.char, charAliases: flag.charAliases, + combinable: flag.combinable, dependsOn: flag.dependsOn, deprecateAliases: flag.deprecateAliases, deprecated: flag.deprecated, diff --git a/test/help/docopts.test.ts b/test/help/docopts.test.ts index a3102cb9..78a6ab43 100644 --- a/test/help/docopts.test.ts +++ b/test/help/docopts.test.ts @@ -246,6 +246,154 @@ describe('doc opts', () => { expect(usage).to.contain(' [-s | -f ]') }) + it('shows optional one-way combinable fields', () => { + const usage = DocOpts.generate({ + flags: { + testFlag: Flags.url({ + name: 'testFlag', + description: 'test', + char: 's', + }), + testFlag2: Flags.string({ + name: 'testFlag2', + description: 'test', + char: 'f', + combinable: ['testFlag3'], + }), + testFlag3: Flags.string({ + name: 'testFlag3', + description: 'test', + char: 'd', + }), + }, + } as any) + expect(usage).to.contain(' [-f | -s ]') + }) + + it('shows one-way combinable field on required field', () => { + const usage = DocOpts.generate({ + flags: { + testFlag: Flags.url({ + name: 'testFlag', + description: 'test', + char: 's', + required: true, + }), + testFlag2: Flags.string({ + name: 'testFlag2', + description: 'test', + char: 'f', + combinable: ['testFlag3'], + }), + testFlag3: Flags.string({ + name: 'testFlag3', + description: 'test', + char: 'd', + }), + }, + } as any) + expect(usage).to.contain(' (-f | -s )') + }) + + it('shows required one-way combinable field on optional field', () => { + const usage = DocOpts.generate({ + flags: { + testFlag: Flags.url({ + name: 'testFlag', + description: 'test', + char: 's', + }), + testFlag2: Flags.string({ + name: 'testFlag2', + description: 'test', + char: 'f', + required: true, + combinable: ['testFlag3'], + }), + testFlag3: Flags.string({ + name: 'testFlag3', + description: 'test', + char: 'd', + }), + }, + } as any) + expect(usage).to.contain(' (-f | -s )') + }) + + it('shows optional combinable field on optional field', () => { + const usage = DocOpts.generate({ + flags: { + testFlag: Flags.url({ + name: 'testFlag', + description: 'test', + char: 's', + }), + testFlag2: Flags.string({ + name: 'testFlag2', + description: 'test', + char: 'f', + combinable: ['testFlag3'], + }), + testFlag3: Flags.string({ + name: 'testFlag3', + description: 'test', + char: 'd', + }), + }, + } as any) + expect(usage).to.contain(' [-f | -s ]') + }) + + it('shows optional combinable fields defined twice', () => { + const usage = DocOpts.generate({ + flags: { + testFlag: Flags.url({ + name: 'testFlag', + description: 'test', + char: 's', + combinable: ['testFlag3'], + }), + testFlag2: Flags.string({ + name: 'testFlag2', + description: 'test', + char: 'f', + combinable: ['testFlag3'], + }), + testFlag3: Flags.string({ + name: 'testFlag3', + description: 'test', + char: 'd', + }), + }, + } as any) + expect(usage).to.contain(' [-s | -f ]') + }) + + it('shows optional combinable - exclusive fields defined twice', () => { + const usage = DocOpts.generate({ + flags: { + testFlag: Flags.url({ + name: 'testFlag', + description: 'test', + char: 's', + exclusive: ['testFlag2'], + }), + testFlag2: Flags.string({ + name: 'testFlag2', + description: 'test', + char: 'f', + combinable: ['testFlag3'], + }), + testFlag3: Flags.string({ + name: 'testFlag3', + description: 'test', + char: 'd', + }), + }, + } as any) + expect(usage).to.contain(' [-s | -f ]') + }) + it('shows optional two-way depended fields', () => { const usage = DocOpts.generate({ flags: { diff --git a/test/parser/parse.test.ts b/test/parser/parse.test.ts index 51e513b5..254f8beb 100644 --- a/test/parser/parse.test.ts +++ b/test/parser/parse.test.ts @@ -1544,6 +1544,69 @@ See more help with --help`) }) }) + describe('combinable', () => { + it('ignores', async () => { + await parse([], { + flags: { + foo: Flags.string({combinable: ['yes', 'force']}), + bar: Flags.string({char: 'b'}), + config: Flags.string({char: 'c'}), + dir: Flags.string({char: 'd'}), + yes: Flags.boolean({char: 'y'}), + force: Flags.boolean({char: 'f'}), + }, + }) + }) + + it('succeeds when no combinable flag is provided', async () => { + const out = await parse(['--foo', 'a'], { + flags: { + foo: Flags.string({combinable: ['yes', 'force']}), + bar: Flags.string({char: 'b'}), + config: Flags.string({char: 'c'}), + dir: Flags.string({char: 'd'}), + yes: Flags.boolean({char: 'y'}), + force: Flags.boolean({char: 'f'}), + }, + }) + expect(out.flags.foo).to.equal('a') + }) + + it('succeeds when a combinable flag is provided', async () => { + const out = await parse(['--foo', 'a', '--yes'], { + flags: { + foo: Flags.string({combinable: ['yes', 'force']}), + bar: Flags.string({char: 'b'}), + config: Flags.string({char: 'c'}), + dir: Flags.string({char: 'd'}), + yes: Flags.boolean({char: 'y'}), + force: Flags.boolean({char: 'f'}), + }, + }) + expect(out.flags.foo).to.equal('a') + }) + + it('fails', async () => { + let message = '' + try { + await parse(['--foo', 'a', '--bar', 'b'], { + flags: { + foo: Flags.string({combinable: ['yes', 'force']}), + bar: Flags.string({char: 'b'}), + config: Flags.string({char: 'c'}), + dir: Flags.string({char: 'd'}), + yes: Flags.boolean({char: 'y'}), + force: Flags.boolean({char: 'f'}), + }, + }) + } catch (error: any) { + message = error.message + } + + expect(message).to.include(`Only the following can be provided when using --foo: --yes, --force`) + }) + }) + describe('exactlyOne', () => { it('throws if neither is set', async () => { let message = '' diff --git a/test/util/cache-command.test.ts b/test/util/cache-command.test.ts index 3ff71c56..2c9e5a5e 100644 --- a/test/util/cache-command.test.ts +++ b/test/util/cache-command.test.ts @@ -80,6 +80,7 @@ describe('cacheCommand', () => { deprecateAliases: undefined, deprecated: undefined, env: undefined, + combinable: undefined, exclusive: undefined, helpGroup: undefined, helpLabel: undefined, @@ -101,6 +102,7 @@ describe('cacheCommand', () => { deprecateAliases: undefined, deprecated: undefined, env: undefined, + combinable: undefined, exclusive: undefined, helpGroup: undefined, helpLabel: undefined, @@ -129,6 +131,7 @@ describe('cacheCommand', () => { deprecated: undefined, description: 'flagc desc', env: 'FLAGC', + combinable: undefined, exclusive: undefined, helpGroup: undefined, helpLabel: undefined, @@ -219,6 +222,7 @@ describe('cacheCommand', () => { allowNo: false, dependsOn: undefined, relationships: undefined, + combinable: undefined, exclusive: undefined, deprecated: undefined, deprecateAliases: undefined, @@ -240,6 +244,7 @@ describe('cacheCommand', () => { allowNo: false, dependsOn: undefined, relationships: undefined, + combinable: undefined, exclusive: undefined, deprecated: undefined, deprecateAliases: undefined, @@ -261,6 +266,7 @@ describe('cacheCommand', () => { allowNo: false, dependsOn: undefined, relationships: undefined, + combinable: undefined, exclusive: undefined, deprecated: undefined, deprecateAliases: undefined, From 8a32cc52d34ff500e81b9a5167384fb70b6f93ee Mon Sep 17 00:00:00 2001 From: svc-cli-bot Date: Mon, 20 Oct 2025 17:45:58 +0000 Subject: [PATCH 6/6] chore(release): 4.6.0 [skip ci] --- CHANGELOG.md | 9 +++++++++ package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fce17f2b..eb65b393 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# [4.6.0](https://github.com/oclif/core/compare/4.5.6...4.6.0) (2025-10-20) + + +### Features + +* support the 'combinable' & 'only' flag relationships ([#1487](https://github.com/oclif/core/issues/1487)) ([#1488](https://github.com/oclif/core/issues/1488)) ([d13b448](https://github.com/oclif/core/commit/d13b448f229f182b065e0847cf4b761b8f2cbbd8)) + + + ## [4.5.6](https://github.com/oclif/core/compare/4.5.5...4.5.6) (2025-10-15) diff --git a/package.json b/package.json index a4c326a1..f58e92da 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@oclif/core", "description": "base library for oclif CLIs", - "version": "4.5.6", + "version": "4.6.0", "author": "Salesforce", "bugs": "https://github.com/oclif/core/issues", "dependencies": {