Skip to content

chore(deps): update dependencies and hold typescript at 6.0.3 - #1062

Merged
prisis merged 9 commits into
mainfrom
chore/dependency-updates-typescript-6
Jul 20, 2026
Merged

chore(deps): update dependencies and hold typescript at 6.0.3#1062
prisis merged 9 commits into
mainfrom
chore/dependency-updates-typescript-6

Conversation

@prisis

@prisis prisis commented Jul 20, 2026

Copy link
Copy Markdown
Member

Summary

Reverts the TypeScript 7 upgrade, which the ecosystem cannot yet support, and adapts the workspace to the dependency bumps that were sitting in the working tree behind it.

nx run eslint-config:build was failing at ts.createProgram is not a function. That turned out to be the first of several independent breakages, each masked by the one before it — the && chain in build short-circuited before packem ever ran.

Why TypeScript 7 is reverted

TypeScript 7.0.2 is genuinely latest on npm, so the bump wasn't a mistaken prerelease pull. The ecosystem just hasn't caught up:

typescript-eslint@8.64.0          typescript: >=4.8.4 <6.1.0
typescript-eslint@8.64.1-alpha.12 typescript: >=4.8.4 <6.1.0   (canary — same cap)
@visulima/packem-rollup           typescript: ^5.0.0 || ^6.0.0

12 installed packages declare a typescript peer range excluding 7.x, including all 9 @typescript-eslint/* packages. TS 7 also drops the classic compiler API from the package root (exports: { ".": "./lib/version.cjs" }), so anything calling ts.createProgram breaks outright.

typescript is pinned back to 6.0.3 in both catalog entries — the newest version keeping the compiler API and inside typescript-eslint's <6.1.0 range. The prior pin was deliberate, not stale.

Breaking changes adapted

  • scripts/global-vitest.ts — extracts the vitest globals by scanning the declare global block instead of calling ts.createProgram. Same 19 globals, and it removes the repo's only compiler-API dependency, so it survives a future TS 7 attempt.
  • eslint-plugin-tailwindcss 3.18 → 4.2configs["flat/recommended"] renamed to configs.recommended and collapsed from a two-element array to a single flat config object.
  • eslint-plugin-unicorn 64 → 72prevent-abbreviationsname-replacements, no-array-for-eachno-for-each. The stale prevent-abbreviations overrides in both eslint.config.js files are renamed too; they had silently stopped applying.

Lint debt from the new rules

The plugin bumps raised 60 errors against this package's own source. 41 were mechanical (consistent-conditional-object-spread); the rest were boolean renames, redundant optional types, condition reordering, and a memoisation rewritten as a cache object so it no longer assigns to a top-level binding from inside a function.

Important

These rules arrive via ...pluginUnicorn.configs.recommended.rules, so adopting unicorn v72 ships them to every consumer of @anolilab/eslint-config. The 60 self-violations are a preview of what users hit on upgrade — worth a changelog note.

Also included

  • @visulima/fs 5.0.4 → 5.0.5
  • Reusable workflow pins → 8249d8e (v20.2.10), harden-runner → v2.20.0
  • Fixes a @anolilab/lint-staged-config bug: removeIgnoredFiles built a bare ESLint instance, resolving the nearest config per file rather than the configured one, so files ignored by the configured config survived the filter and then failed under --max-warnings=0
  • Fixes test scratch projects leaking into generated files — tmp_fixtures/ is gitignored but an install during a test run registered it as a 9th workspace project and the labeler emitted labels for it

Verification

Build, type check, lint and tests green across all packages — 6 build, 7 type check, 16 tests.

Known issues, not addressed here

  • CI lint:eslint will fail for commitlint-config, lint-staged-config, stylelint-config. They lint themselves via the published @anolilab/eslint-config@28.0.1, whose transitive sonarjs@4.0.3 crashes against the eslint 10.4.0 → 10.7.0 bump (Cannot read properties of undefined (reading 'FunctionType')). Standard self-hosting lag — clears once this branch releases.
  • 4 updates blocked by minimumReleaseAge: 1440@eslint-react/eslint-plugin 5.17.3, @tanstack/eslint-plugin-query 5.101.3, stylelint 17.14.1, eslint-plugin-jsdoc 63.2.0. All published within 24h. Not force-listed into minimumReleaseAgeExclude; they age out and a plain pnpm install picks them up.
  • vis.config.ts is committed but added to the root eslint ignores — @visulima/vis isn't installed, so defineConfig() has no resolvable type. Remove the ignore entry once the dependency lands.
  • lib: ["es2021"] puts e18e/prefer-object-has-own and @typescript-eslint/no-unsafe-call in direct conflict at packages/eslint-config/src/index.ts:1127. Left as key in options with a documented disable; bumping lib to es2022 resolves it but changes the compile target for every package.

Renovate

Supersedes 10 open Renovate PRs (#1051#1061); every target is met or exceeded. Best left to auto-close once this lands, rather than closed manually — a manual close reads as rejection to Renovate.

🤖 Generated with Claude Code

https://claude.ai/code/session_014Hm4zrh4o8w3Qcs24BvpV9

prisis and others added 6 commits July 20, 2026 15:36
Adapts the workspace to the dependency bumps and reverts the TypeScript 7
upgrade, which the ecosystem cannot yet support.

TypeScript is pinned back to 6.0.3 in both catalog entries. typescript-eslint
caps its peer range at <6.1.0 in every published release including canary, and
@visulima/packem-rollup at ^5 || ^6, so TS 7 breaks the build at
@typescript-eslint/typescript-estree. TS 7 also drops the classic compiler API
from the package root, which is what surfaced this.

Adapts to three breaking changes that were masked behind that failure:

- scripts/global-vitest.ts: extract the vitest globals by scanning the
  `declare global` block instead of calling ts.createProgram. Removes the only
  compiler-API dependency in the repo, so this survives a future TS 7 attempt.
- eslint-plugin-tailwindcss 4.x: configs["flat/recommended"] was renamed to
  configs.recommended and collapsed from a two-element array to a single flat
  config object.
- eslint-plugin-unicorn 72.x: prevent-abbreviations was renamed to
  name-replacements, and no-array-for-each to no-for-each. The latter stays
  "off" to preserve the existing intent, since it is "error" in the
  recommended config. The stale prevent-abbreviations overrides in both
  eslint.config.js files are renamed too; they had silently stopped applying.

Also updates @visulima/fs to 5.0.5 and fixes the 60 lint errors that the new
unicorn 72 and sonarjs 4.2 rules raised against this package's own source.
Most were mechanical (consistent-conditional-object-spread); the rest were
boolean renames, redundant optional types, and a memoisation rewritten as a
cache object so it no longer assigns to a top-level binding from inside a
function.

Fixes a lint-staged-config bug surfaced along the way: removeIgnoredFiles built
a bare ESLint instance, so it resolved the nearest config per file rather than
the configured one. Files ignored by the configured config survived the filter
and then failed the run with an "ignored file" warning under --max-warnings=0.

Updates the two *-with-formatters markdown fixtures: prettier 3.9.5 preserves
setext headings where 3.8.3 normalized them to ATX.

Build, type check, lint and tests are green across all packages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Moves the anolilab/workflows reusable workflows to 8249d8e (v20.2.10) and
step-security/harden-runner to v2.20.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
browserslist-config-anolilab to @anolilab/prettier-config 10.0.1 and
commitlint-config to @anolilab/eslint-config 28.0.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds the @visulima/vis security config with secure defaults from
defineConfig() and an empty allowBuilds list.

The package is not installed yet, so defineConfig() has no resolvable type and
trips @typescript-eslint/no-unsafe-call. The file is added to the root eslint
ignores alongside the other root tool configs until the dependency lands.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Peer resolution keys picked up supports-color@7.2.0; no version changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The eslint-config tests write generated projects into
packages/eslint-config/tmp_fixtures/<name>/, each with its own package.json.
The directory is gitignored, but its side effects were not: an install run
while tests were in flight registered tmp_fixtures/js as a workspace project,
and generate-labeler-config.js emitted labels for the scratch directories.
Both landed in tracked files as spurious diffs.

Excludes tmp_fixtures from the workspace globs, mirroring the existing
__fixtures__ exclusion, and adds it to the labeler generator's EXCLUDED_DIRS.

Verified by placing the artifacts on disk and re-running both: workspace scope
stays at 8 projects and neither tracked file changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@prisis, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 9 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1595b0d3-8c28-452d-af08-8aab2e5946e1

📥 Commits

Reviewing files that changed from the base of the PR and between 977b0f1 and 6c0072c.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (53)
  • .github/workflows/allo-allo.yaml
  • .github/workflows/cache-clear.yml
  • .github/workflows/codeql.yml
  • .github/workflows/comment-issue.yml
  • .github/workflows/dependency-review.yml
  • .github/workflows/labeler.yml
  • .github/workflows/lint.yml
  • .github/workflows/lock-file-maintenance.yml
  • .github/workflows/lock-issues.yaml
  • .github/workflows/preview-release.yaml
  • .github/workflows/scorecards.yml
  • .github/workflows/semantic-pull-request.yml
  • .github/workflows/semantic-release.yml
  • .github/workflows/stale-issues.yml
  • .github/workflows/test.yml
  • .github/workflows/zizmor.yml
  • eslint.config.js
  • packages/browserslist-config-anolilab/package.json
  • packages/commitlint-config/package.json
  • packages/eslint-config/__fixtures__/output/no-markdown-with-formatters/markdown.md
  • packages/eslint-config/__fixtures__/output/with-formatters/markdown.md
  • packages/eslint-config/eslint.config.js
  • packages/eslint-config/package.json
  • packages/eslint-config/scripts/global-vitest.ts
  • packages/eslint-config/src/config/ignores.ts
  • packages/eslint-config/src/config/plugins/astro.ts
  • packages/eslint-config/src/config/plugins/css.ts
  • packages/eslint-config/src/config/plugins/e18e.ts
  • packages/eslint-config/src/config/plugins/html.ts
  • packages/eslint-config/src/config/plugins/imports.ts
  • packages/eslint-config/src/config/plugins/jsdoc.ts
  • packages/eslint-config/src/config/plugins/jsonc.ts
  • packages/eslint-config/src/config/plugins/node.ts
  • packages/eslint-config/src/config/plugins/pnpm.ts
  • packages/eslint-config/src/config/plugins/react.ts
  • packages/eslint-config/src/config/plugins/stylistic.ts
  • packages/eslint-config/src/config/plugins/tailwindcss.ts
  • packages/eslint-config/src/config/plugins/testing-library.ts
  • packages/eslint-config/src/config/plugins/toml.ts
  • packages/eslint-config/src/config/plugins/typescript.ts
  • packages/eslint-config/src/config/plugins/unicorn.ts
  • packages/eslint-config/src/config/plugins/unocss.ts
  • packages/eslint-config/src/config/plugins/vitest.ts
  • packages/eslint-config/src/config/plugins/yml.ts
  • packages/eslint-config/src/config/style.ts
  • packages/eslint-config/src/index.ts
  • packages/eslint-config/src/types.ts
  • packages/lint-staged-config/package.json
  • packages/lint-staged-config/src/eslint/create-eslint-commands.ts
  • packages/stylelint-config/package.json
  • pnpm-workspace.yaml
  • scripts/generate-labeler-config.js
  • vis.config.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/dependency-updates-typescript-6

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Thank you for following the naming conventions! 🙏

@socket-security

socket-security Bot commented Jul 20, 2026

Copy link
Copy Markdown

@socket-security

socket-security Bot commented Jul 20, 2026

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm @emnapi/runtime is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/vite@8.1.5npm/@visulima/packem@2.0.0-alpha.98npm/@emnapi/runtime@1.11.1

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@emnapi/runtime@1.11.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm eslint-plugin-jsdoc is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: packages/eslint-config/package.jsonnpm/eslint-plugin-jsdoc@63.1.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/eslint-plugin-jsdoc@63.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm nx is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: package.jsonnpm/nx@23.1.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/nx@23.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@github-actions

Copy link
Copy Markdown
Contributor

Dependency Review

The following issues were found:

  • ❌ 1 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 4 package(s) with unknown licenses.
  • ⚠️ 3 packages with OpenSSF Scorecard issues.

View full job summary

prisis and others added 2 commits July 20, 2026 21:22
Three independent CI failures on this PR:

- lint: the published @anolilab/eslint-config pulls sonarjs 4.0.3 transitively,
  which reads AST_NODE_TYPES.FunctionType at load and crashes against the
  eslint 10.7 bump. The sibling packages lint themselves with the published
  config, so an override pins sonarjs to the 4.2.0 this workspace already uses.
  All four lint:eslint projects pass again.
- dependency-review: axios 1.16.1 carries GHSA-pmv8-rq9r-6j72,
  GHSA-xj6q-8x83-jv6g and GHSA-42h9-826w-cgv3, all patched in 1.18.0. Adds an
  override, following the existing pattern in this file. main is on 1.16.0 and
  equally affected; review only flagged it here because the version changed.
- preview-release: the job pinned node-version 20.x while the repo requires
  >=22.12.0, so the newer setup step's npm 12 refused to install. Raised to
  22.x, matching semantic-release and lock-file-maintenance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The lint job never reached attw before — nx bailed at an eslint task first — so
these three defects were latent. With eslint fixed they surface.

- stylelint-config: `files` shipped index.d.ts but not index.d.cts/index.d.mts,
  which is what `exports` points at. The published package therefore resolves to
  no types at all on every condition. Live in v11.0.5.
- browserslist-config-anolilab: `types` was hoisted to a single ./dist/index.d.cts
  covering both conditions, so ESM consumers got CJS declarations and attw
  reported it masquerading as CJS. Split into per-condition types; the build
  already emitted index.d.mts.
- eslint-config, lint-staged-config: genuinely ESM-only, no CJS entry or output.
  CJSResolvesToESM is the expected shape rather than a defect, so these declare
  --profile esm-only instead of being papered over.

All 7 attw projects pass. stylelint-config and browserslist now resolve types on
node10, node16 from CJS, node16 from ESM and bundler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Records the catalog:lint references for the @anolilab devDependencies and the
browserslist-config-anolilab catalog entry. No version changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@pkg-pr-new

pkg-pr-new Bot commented Jul 20, 2026

Copy link
Copy Markdown

Open in StackBlitz

browserslist-config-anolilab

npm i https://pkg.pr.new/browserslist-config-anolilab@1062

@anolilab/commitlint-config

npm i https://pkg.pr.new/@anolilab/commitlint-config@1062

@anolilab/eslint-config

npm i https://pkg.pr.new/@anolilab/eslint-config@1062

@anolilab/lint-staged-config

npm i https://pkg.pr.new/@anolilab/lint-staged-config@1062

@anolilab/stylelint-config

npm i https://pkg.pr.new/@anolilab/stylelint-config@1062

commit: 6c0072c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant