Skip to content

build(deps-dev): bump typescript-eslint from 8.58.1 to 8.60.0#2240

Merged
dscho merged 3 commits into
mainfrom
dependabot/npm_and_yarn/typescript-eslint-8.60.0
May 28, 2026
Merged

build(deps-dev): bump typescript-eslint from 8.58.1 to 8.60.0#2240
dscho merged 3 commits into
mainfrom
dependabot/npm_and_yarn/typescript-eslint-8.60.0

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 25, 2026

Bumps typescript-eslint from 8.58.1 to 8.60.0.

Release notes

Sourced from typescript-eslint's releases.

v8.60.0

8.60.0 (2026-05-25)

🚀 Features

  • rule-tester: added updates of RuleTester from upstream (#12291)

🩹 Fixes

  • playground TS version selector is not working (#12326, #12325)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.59.4

8.59.4 (2026-05-18)

🩹 Fixes

  • eslint-plugin: [no-floating-promises] stack overflow when using recursive types (#12294)
  • project-service: throw error cause in getParsedConfigFileFromTSServer (#12321)
  • typescript-eslint: export Compatible* types from typescript-eslint to resolve pnpm TS error (#12340)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.59.3

8.59.3 (2026-05-11)

This was a version bump only, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.59.2

8.59.2 (2026-05-04)

... (truncated)

Changelog

Sourced from typescript-eslint's changelog.

8.60.0 (2026-05-25)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.4 (2026-05-18)

🩹 Fixes

  • typescript-eslint: export Compatible* types from typescript-eslint to resolve pnpm TS error (#12340)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.3 (2026-05-11)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.2 (2026-05-04)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.1 (2026-04-27)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.0 (2026-04-20)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

... (truncated)

Commits
  • f891c29 chore(release): publish 8.60.0
  • ca6ca14 chore(release): publish 8.59.4
  • 4b927c6 fix(typescript-eslint): export Compatible* types from typescript-eslint to re...
  • 48e13c0 chore(release): publish 8.59.3
  • 44f9625 chore(deps): update vitest monorepo to v4.1.5 (#12307)
  • 2ec35f1 chore(release): publish 8.59.2
  • 5245793 chore(release): publish 8.59.1
  • ea9ae4f chore(release): publish 8.59.0
  • 90c2803 chore(release): publish 8.58.2
  • b3315fd chore: convert import eslint to import js - followup (#12100)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code labels May 25, 2026
github-actions[bot]
github-actions Bot previously approved these changes May 25, 2026
@webstech
Copy link
Copy Markdown
Contributor

@dscho Can you take a look? The git.ts change is odd. Not sure if it relates to Error being an object and an interface in node.

Comment thread lib/git.ts Outdated
Comment on lines +134 to +135
const error = reason as Error;
reject(error);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I interpreted the error as suggesting that the as Error is unnecessary, i.e. that reject(reason); should work?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It didn’t like that and it didn’t like typing on the catch either. The code compiled without the change so it is lint related.

dscho added a commit that referenced this pull request May 28, 2026
The typescript-eslint 8.60.0 bump in 766bdbd made
`@typescript-eslint/prefer-promise-reject-errors` flag the two
`reject(reason)` call sites in `git()`'s line handler: the `catch
(reason)` clause and the `linePromise.catch((reason) => ...)` callback.
In the former, modern TypeScript types the caught binding as `unknown`;
in the latter, the Promise.catch callback parameter is inferred as
`any`. Both fail the rule's default mode, which requires `reject` to
receive a value statically typed `Error`.

The fix-up commit 0d86e04 kept lint quiet by asserting `reason as
Error`, hoisted in the `try/catch` arm into a `const error = reason as
Error`. That tells the type checker something that need not be true at
runtime. A thrown string or rejected `null` ends up presented to
downstream consumers as `Error`, so any caller that relies on
`.message` or `instanceof Error` will see incorrect type information
without warning.

typescript-eslint ships an officially supported escape hatch for this
exact pattern. The `prefer-promise-reject-errors` rule accepts an
`allowThrowingUnknown` option
(https://typescript-eslint.io/rules/prefer-promise-reject-errors/),
which was added in response to
typescript-eslint/typescript-eslint#10375
and lets `reject(reason);` pass when `reason` is statically typed
`unknown`. A related proposal for a stricter "allow only re-throw"
variant for the same rule was declined in
typescript-eslint/typescript-eslint#11095,
though the equivalent `allowRethrowing` option did ship for
`only-throw-error` via
typescript-eslint/typescript-eslint#11075;
neither would have helped here, since both still demand the caught
value be statically `unknown` rather than `any`.

Enabling `allowThrowingUnknown` in `eslint.config.mjs` therefore
covers the `catch (reason)` arm directly. The `linePromise.catch`
arm still needs the callback parameter to be annotated `(reason:
unknown)` so that its inferred `any` widens to `unknown`; without
that annotation, `allowThrowingUnknown` does not apply and the rule
still fires. With both in place, the `as Error` casts disappear and
`reject(reason);` carries the original rejection value through
honestly.

A pure-TypeScript alternative that needed no eslint config change was
considered, namely `reject(reason instanceof Error ? reason : new
Error(String(reason)));`. It is runtime-safe and lint-clean, but it
silently wraps non-Error rejections in a synthetic Error built from
the value's `toString()`, which loses more information than it
preserves on a code path where the caught value is overwhelmingly
already an Error. The rule-option route is preferred because it
neither asserts a falsehood nor papers over one.

Resolves the discussion at
#2240 (comment).

Assisted-by: Claude Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho dscho force-pushed the dependabot/npm_and_yarn/typescript-eslint-8.60.0 branch from 0d86e04 to 33ac9c9 Compare May 28, 2026 17:02
dependabot Bot and others added 3 commits May 28, 2026 19:03
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.58.1 to 8.60.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.60.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The typescript-eslint 8.60.0 bump in 766bdbd made
`@typescript-eslint/prefer-promise-reject-errors` flag the two
`reject(reason)` call sites in `git()`'s line handler: the `catch
(reason)` clause and the `linePromise.catch((reason) => ...)` callback.
In the former, modern TypeScript types the caught binding as `unknown`;
in the latter, the Promise.catch callback parameter is inferred as
`any`. Both fail the rule's default mode, which requires `reject` to
receive a value statically typed `Error`.

The fix-up commit 0d86e04 kept lint quiet by asserting `reason as
Error`, hoisted in the `try/catch` arm into a `const error = reason as
Error`. That tells the type checker something that need not be true at
runtime. A thrown string or rejected `null` ends up presented to
downstream consumers as `Error`, so any caller that relies on
`.message` or `instanceof Error` will see incorrect type information
without warning.

typescript-eslint ships an officially supported escape hatch for this
exact pattern. The `prefer-promise-reject-errors` rule accepts an
`allowThrowingUnknown` option
(https://typescript-eslint.io/rules/prefer-promise-reject-errors/),
which was added in response to
typescript-eslint/typescript-eslint#10375
and lets `reject(reason);` pass when `reason` is statically typed
`unknown`. A related proposal for a stricter "allow only re-throw"
variant for the same rule was declined in
typescript-eslint/typescript-eslint#11095,
though the equivalent `allowRethrowing` option did ship for
`only-throw-error` via
typescript-eslint/typescript-eslint#11075;
neither would have helped here, since both still demand the caught
value be statically `unknown` rather than `any`.

Enabling `allowThrowingUnknown` in `eslint.config.mjs` therefore
covers the `catch (reason)` arm directly. The `linePromise.catch`
arm still needs the callback parameter to be annotated `(reason:
unknown)` so that its inferred `any` widens to `unknown`; without
that annotation, `allowThrowingUnknown` does not apply and the rule
still fires. With both in place, the `as Error` casts disappear and
`reject(reason);` carries the original rejection value through
honestly.

A pure-TypeScript alternative that needed no eslint config change was
considered, namely `reject(reason instanceof Error ? reason : new
Error(String(reason)));`. It is runtime-safe and lint-clean, but it
silently wraps non-Error rejections in a synthetic Error built from
the value's `toString()`, which loses more information than it
preserves on a code path where the caught value is overwhelmingly
already an Error. The rule-option route is preferred because it
neither asserts a falsehood nor papers over one.

Resolves the discussion at
#2240 (comment).

Assisted-by: Claude Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
There were some newly identified lint issues.

Signed-off-by: Chris. Webster <chris@webstech.net>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho dscho force-pushed the dependabot/npm_and_yarn/typescript-eslint-8.60.0 branch from 33ac9c9 to 805e2a2 Compare May 28, 2026 17:03
@dscho
Copy link
Copy Markdown
Member

dscho commented May 28, 2026

I think I've figured it out: 190e366 (Opus helped research this).

@dscho dscho enabled auto-merge May 28, 2026 17:03
@dscho dscho merged commit a83c55a into main May 28, 2026
4 checks passed
@dscho dscho deleted the dependabot/npm_and_yarn/typescript-eslint-8.60.0 branch May 28, 2026 17:06
github-actions Bot pushed a commit that referenced this pull request May 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants