Skip to content

chore: update CLI dependencies#1294

Merged
sorccu merged 20 commits into
mainfrom
simo/sim-241-update-cli-dependencies-2026-05-07
May 8, 2026
Merged

chore: update CLI dependencies#1294
sorccu merged 20 commits into
mainfrom
simo/sim-241-update-cli-dependencies-2026-05-07

Conversation

@sorccu
Copy link
Copy Markdown
Member

@sorccu sorccu commented May 7, 2026

Summary

  • Remove unnecessary dependencies (@types/glob, duplicate simple-git-hooks, unused config/@types/config in create-cli)
  • Upgrade TypeScript from 5.3 to 6.0 with all required tsconfig adaptations
  • Upgrade ESLint from 9 to 10 and fix all new rule violations (preserve-caught-error, no-useless-assignment)
  • Update all semver-compatible dependencies to latest
  • Update major versions where safe: oclif packages, cross-env 7→10, commitlint 17→20, proxy-from-env 1→2, jwt-decode 3→4, @types/archiver 6→7, globals 16→17, @stylistic/eslint-plugin 5.2→5.10
  • Fix all known npm audit vulnerabilities in transitive dependencies
  • Move ts-node from devDependencies to optional peer dependency, replace with jiti in build scripts
  • Update vitest 3.1.2 → 3.2.4 (v4 has a Windows bug with file URL drive letters in Module Runner)

TypeScript 6 migration notes

TypeScript 6 required several adaptations:

  • rootDirsrootDir: TS 6 requires explicit rootDir when sources come from a single directory. This moved tsconfig.tsbuildinfo from dist/ to the project root, requiring updates to clean scripts and .gitignore.
  • types default changed to []: Added explicit types: ["node"] since @types/node is no longer auto-included.
  • skipLibCheck: true: Added to work around a transitive lru-cache types incompatibility (their Map iterator types use void instead of undefined). Will be resolved properly when we bump to glob@13 (requires Node 20+).
  • moduleResolution: "node10" deprecated: TS 6 errors on the implicit "node10" default when module: "commonjs". This breaks ts-node at runtime since it picks up the nearest tsconfig. Fixed with ignoreDeprecations: "6.0" in both the ts-node loader compilerOptions (conditionally, only when user's TS is >= 6) and create-cli's tsconfig. We'll handle this properly in the next major release by dropping ts-node entirely in favor of jiti.

Not updated — requires Node 20+ minimum version bump

These packages require node >= 20 which conflicts with our current ^18.19.0 || >=20.5.0 engine range:

  • config 3.3.12 → 4.4.1
  • glob 10.5.0 → 13.0.6
  • rimraf 5.0.10 → 6.1.3
  • lint-staged 15.5.2 → 16.4.0
  • minimatch 9.0.9 → 10.2.5
  • dotenv 16.6.1 → 17.4.2

Not updated — requires ESM migration

These packages went ESM-only in their latest major versions. They are blocked until we migrate the CLI to ESM output:

  • chalk 4.1.2 → 5.6.2
  • conf 10.2.0 → 15.1.0
  • indent-string 4.0.0 → 5.0.0
  • log-symbols 4.1.0 → 7.0.1
  • open 8.4.2 → 11.0.0
  • ora 5.4.1 → 9.4.0
  • p-queue 6.6.2 → 9.2.0
  • nanoid 3.3.12 → 5.1.11
  • execa 5.1.1 → 9.6.1 (create-cli)
  • passwd-user 3.0.0 → 4.0.0 (create-cli)
  • uuid 11.1.1 → 14.0.0

Not updated — upstream bug

  • vitest 3.2.4 → 4.1.5: Vitest 4's Module Runner generates incorrect file URLs on Windows (missing drive letter), breaking createRequire calls. Staying on latest v3 until fixed upstream.

Not updated — intentionally held

  • @types/node kept at v22 to match our supported Node runtime versions

Test plan

  • npm run lint passes
  • npm run test --workspace packages/cli — all tests pass
  • npm run prepare --workspace packages/create-cli builds successfully
  • npm audit — 0 vulnerabilities
  • CI — all checks passing (lint, unit tests, e2e tests on Ubuntu and Windows)

🤖 Generated with Claude Code

sorccu and others added 14 commits May 8, 2026 01:10
glob@10 ships its own TypeScript types, making @types/glob redundant.
Removing it also resolves an upcoming type conflict with newer minimatch
versions where @types/glob references removed IOptions/IMinimatch exports.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
simple-git-hooks is configured and used at the monorepo root level.
The copy in packages/cli was redundant.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…cies

Neither package is imported anywhere in create-checkly source code.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Upgrade typescript from 5.3.3 to 6.0.3 in both packages
- Upgrade @typescript-eslint/typescript-estree from 8.50.0 to 8.59.2
  (required for TS 6 peer dependency compatibility)
- Upgrade typescript-eslint from 8.30.0 to 8.59.2

Adapt to TypeScript 6 breaking changes:
- Change rootDirs to rootDir (TS 6 requires explicit rootDir)
- Add types: ["node"] (TS 6 defaults types to [] instead of all @types)
- Add skipLibCheck: true (transitive lru-cache types incompatibility)
- Include tsconfig.tsbuildinfo in clean scripts (now lives outside dist/)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- @oclif/core 4.8.0 → 4.11.1
- @oclif/plugin-help 6.2.36 → 6.2.46
- @oclif/plugin-not-found 3.2.73 → 3.2.82
- @oclif/plugin-warn-if-update-available 3.1.53 → 3.1.62
- oclif (dev) 4.22.56 → 4.23.0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- acorn 8.15.0 → 8.16.0
- acorn-walk 8.3.4 → 8.3.5

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- @types/debug 4.1.12 → 4.1.13
- @types/node 22.14.1 → 22.19.17

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- @playwright/test 1.57.0 → 1.59.1
- cross-env 7.0.3 → 10.1.0 (major, drop-in CLI replacement)
- nanoid 3.3.11 → 3.3.12
- tar 7.5.7 → 7.5.14
- vitest 3.1.2 → 4.1.5 (major, no config changes needed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- axios 1.13.5 → 1.16.0 (security fixes for SSRF, header injection)
- mqtt 5.14.1 → 5.15.1 (transitive security fixes)
- proxy-from-env 1.1.0 → 2.1.0 (major, same API, stricter URL parsing)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- eslint 9.32.0 → 10.0.1 (major, flat config only)
- @eslint/js 9.32.0 → 10.0.1
- @stylistic/eslint-plugin 5.2.2 → 5.10.0
- globals 16.0.0 → 17.6.0 (major, AudioWorklet globals split)
- @commitlint/cli 17.8.1 → 20.5.3 (major, ESM)
- @commitlint/config-conventional 17.8.1 → 20.5.3
- lint-staged 15.5.1 → 15.5.2
- simple-git-hooks 2.12.1 → 2.13.1

Fix new ESLint 10 recommended rule violations:
- preserve-caught-error: add { cause } to re-thrown errors
- no-useless-assignment: remove dead variable assignments
- @stylistic/indent: auto-fixed indentation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ci-info 4.3.1 → 4.4.0
- dotenv 16.5.0 → 16.6.1
- giget 3.1.2 → 3.2.0
- jiti 2.6.1 → 2.7.0
- minimatch 9.0.5 → 9.0.9

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Migrate from default import to named import per v4 API change.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sorccu sorccu force-pushed the simo/sim-241-update-cli-dependencies-2026-05-07 branch from 4c613e3 to 9fb26e7 Compare May 7, 2026 16:10
sorccu and others added 6 commits May 8, 2026 01:16
Patches brace-expansion, minimatch, picomatch, yaml, flatted,
and ip-address to resolve all 6 known vulnerabilities.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Change `.tsbuildinfo` to `*.tsbuildinfo` to match files like
`tsconfig.tsbuildinfo` which TS 6 places at the project root.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ts-node with TypeScript 6 errors on the implicit moduleResolution
"node10" default when module is "commonjs". Fix by:

- Adding ignoreDeprecations: "6.0" to ts-node compilerOptions in both
  CLI and create-CLI loaders
- Adding ignoreDeprecations to create-cli tsconfig.json (ts-node picks
  up this tsconfig when running from subdirectories)
- Moving ts-node from devDependencies to optional peerDependencies
  since it's a runtime fallback loader, not a build requirement
- Replacing ts-node with jiti in the prepare:ai-context build script

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These were added by a local create-checkly run during e2e debugging.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Vitest 4's Module Runner generates incorrect file URLs on Windows
(missing drive letter in createRequire calls), breaking tests that
use require() on fixture files. Rolling back to vitest 3.2.4 until
the upstream issue is resolved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The ignoreDeprecations compiler option is only needed for TS 6+ (which
deprecated moduleResolution "node10"). Detect the user's TypeScript
version at runtime and only set it when appropriate, avoiding
"Unknown compiler option" errors on older TS versions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sorccu sorccu merged commit aa0df63 into main May 8, 2026
6 checks passed
@sorccu sorccu deleted the simo/sim-241-update-cli-dependencies-2026-05-07 branch May 8, 2026 17:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant