Increment package versions#96
Conversation
|
Warning Rate limit exceeded
To continue reviewing without waiting, purchase usage credits in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (22)
📝 WalkthroughWalkthroughThis PR coordinates a comprehensive upgrade of the monorepo's toolchain and dependencies. It introduces pre-release alpha configuration, upgrades Node.js and npm engine requirements, modernizes ESLint configuration, upgrades React from version 18 to 19 across multiple apps, and synchronizes build and testing tooling (Vite, TypeScript, Vitest, Wireit) to newer major versions throughout all packages and applications. ChangesMonorepo Toolchain & React 19 Upgrade
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. 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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/store-edit/package.json (1)
38-50:⚠️ Potential issue | 🟠 Major | ⚡ Quick win
peerDependencies.immeris stale and conflicts withdependencies.immer
dependencies.immerwas bumped to^11.1.7butpeerDependencies.immerstill declares"^9.0.16 || ^10.0.1". Consumers running npm/pnpm install with immer v11 will receive an unsatisfied peer dependency error; if they have an older immer version installed alongside, two separate immer instances end up in the dependency tree and Immer's internal singleton state will break runtime behavior.🛠️ Proposed fix
"peerDependencies": { "@watchable/store": "1.0.2", - "immer": "^9.0.16 || ^10.0.1" + "immer": "^9.0.16 || ^10.0.1 || ^11.0.0" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/store-edit/package.json` around lines 38 - 50, The peerDependencies entry for immer is out of sync with the package dependency: update the "peerDependencies".immer range to include the v11 release used in "dependencies" (e.g. change "peerDependencies".immer from "^9.0.16 || ^10.0.1" to a range that includes v11 such as "^9.0.16 || ^10.0.1 || ^11.0.0" or simply "^11.1.7") so consumers won't get peer dependency conflicts; modify the peerDependencies block in package.json (the immer entry) to match or accept the installed dependencies.
🧹 Nitpick comments (1)
eslint.config-ts.mjs (1)
1-17: ⚡ Quick win
eslint-plugin-react-hooksis absent from the flat config
rules-of-hooksandexhaustive-depsare no longer enforced after this rewrite. Per the provided React 19 documentation, React 19.2 requireseslint-plugin-react-hooksv6+ for new hook semantics.eslint-plugin-react-hooksv6 ships aflat/recommendedpreset that integrates cleanly with ESLint flat config, and arecommended-latestpreset for bleeding-edge compiler rules.🛠️ Proposed addition
import eslint from "@eslint/js"; import tseslint from "typescript-eslint"; import pluginReact from "eslint-plugin-react"; +import reactHooks from "eslint-plugin-react-hooks"; export default tseslint.config( + { + ignores: ["**/dist/**", "**/coverage/**", "**/playwright-report/**"], + }, eslint.configs.recommended, tseslint.configs.strict, pluginReact.configs.flat.recommended, pluginReact.configs.flat["jsx-runtime"], + reactHooks.configs.flat.recommended, { settings: { react: { version: "detect", }, }, } );Also add
eslint-plugin-react-hooksto the rootdevDependencies.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@eslint.config-ts.mjs` around lines 1 - 17, The flat ESLint config call (tseslint.config(...)) removed rules-of-hooks/exhaustive-deps; import and include eslint-plugin-react-hooks and its flat preset into the same config invocation: add an import like import pluginReactHooks from "eslint-plugin-react-hooks" and include pluginReactHooks.configs.flat.recommended (or pluginReactHooks.configs.flat["recommended-latest"] if you want bleeding-edge) alongside pluginReact.configs.flat.recommended and pluginReact.configs.flat["jsx-runtime"]; also add eslint-plugin-react-hooks v6+ to the root devDependencies so the plugin is installed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.nvmrc:
- Line 1: The repo pins Node to "26.1.0" in .nvmrc which is a Current (non-LTS)
release; change the version string "26.1.0" to a stable LTS release (e.g. "24"
or a specific Active LTS like "24.x" / "24.20.0") so CI and hosted runners
reliably support it; update any CI/workflow references that hardcode the 26.x
value to read .nvmrc or the new 24.x value and verify CI runners/tooling support
the chosen LTS before merging.
In `@apps/counter-dom-commonjs/package.json`:
- Around line 29-32: Remove the redundant CommonJS plugins and deprecated
config: delete the two dependencies "@rollup/plugin-commonjs" and
"vite-plugin-commonjs" from package.json and remove any imports and usage of
them in vite.config.ts (search for plugin names or references to
rollupPluginCommonjs/vitePluginCommonjs), and remove any build.commonjsOptions
configuration; after that, run a production build and if you encounter CJS
default-import runtime issues enable legacy.inconsistentCjsInterop: true under
the legacy config in vite.config.ts as a temporary workaround.
In `@apps/counter-preact-ts/package.json`:
- Around line 38-39: The devDependency entries "@types/react" and
"@types/react-dom" in package.json conflict with the project's use of
"npm:`@preact/compat`" and must be removed or aliased; either delete the
"@types/react" and "@types/react-dom" devDependencies, or add TypeScript path
aliases in tsconfig.json (under compilerOptions.paths) mapping "react",
"react-dom", and "react-dom/*" to preact/compat to ensure types resolve to
preact/compat instead of the React typings.
In `@eslint.config-ts.mjs`:
- Around line 5-17: Add an "ignores" block to the top-level tseslint.config call
so ESLint doesn't attempt to lint generated output; update the config passed to
tseslint.config (the object after pluginReact.configs.flat["jsx-runtime"]) to
include an ignores array containing at least "dist/**" and "coverage/**" (so the
exported config from tseslint.config and the settings.react.version="detect"
remain unchanged while ESLint skips those generated directories).
In `@packages/store/package.json`:
- Line 64: Update the shared and package TS configs to be TS6-ready: edit
tsconfig.build.json to remove the deprecated target "es5" (set a modern target
like "es2017" or omit it) and uncomment/populate the "types" array (e.g.,
["node"]) so inheriting configs retain type resolution; then update app tsconfig
files to remove deprecated esModuleInterop:false and change any
moduleResolution:"Node" to moduleResolution:"bundler"; finally ensure
package-level tsconfig.json files (e.g., the one extending tsconfig.build.json)
explicitly define a "types" array if they rely on node types so they won't be
dropped by TS6 defaults.
In `@packages/unpromise/package.json`:
- Line 47: The package.json currently pins the dev dependency "@types/node" to
"^25.6.0" which mismatches the project's Node 26 runtime; update the version
string for the "@types/node" entry in package.json to "^26.x" (e.g., "^26.0.0"
or "^26") and then run your package manager (npm/yarn/pnpm) to reinstall/lock
updated types so the TypeScript definitions align with Node 26 runtime APIs.
---
Outside diff comments:
In `@packages/store-edit/package.json`:
- Around line 38-50: The peerDependencies entry for immer is out of sync with
the package dependency: update the "peerDependencies".immer range to include the
v11 release used in "dependencies" (e.g. change "peerDependencies".immer from
"^9.0.16 || ^10.0.1" to a range that includes v11 such as "^9.0.16 || ^10.0.1 ||
^11.0.0" or simply "^11.1.7") so consumers won't get peer dependency conflicts;
modify the peerDependencies block in package.json (the immer entry) to match or
accept the installed dependencies.
---
Nitpick comments:
In `@eslint.config-ts.mjs`:
- Around line 1-17: The flat ESLint config call (tseslint.config(...)) removed
rules-of-hooks/exhaustive-deps; import and include eslint-plugin-react-hooks and
its flat preset into the same config invocation: add an import like import
pluginReactHooks from "eslint-plugin-react-hooks" and include
pluginReactHooks.configs.flat.recommended (or
pluginReactHooks.configs.flat["recommended-latest"] if you want bleeding-edge)
alongside pluginReact.configs.flat.recommended and
pluginReact.configs.flat["jsx-runtime"]; also add eslint-plugin-react-hooks v6+
to the root devDependencies so the plugin is installed.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0701247d-ab88-4acb-a1c2-b216fa592cd4
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (22)
.changeset/pre.json.nvmrcapps/counter-dom-commonjs/package.jsonapps/counter-dom-esm/package.jsonapps/counter-dom-tiny/package.jsonapps/counter-dom-ts/package.jsonapps/counter-preact-ts/package.jsonapps/counter-react-js/package.jsonapps/counter-react-ts-edit-context/package.jsonapps/counter-react-ts-edit/package.jsonapps/counter-react-ts/package.jsonapps/fast/package.jsonapps/tiny/package.jsoneslint.config-ts.mjspackage.jsonpackages/nevermore/package.jsonpackages/queue/package.jsonpackages/store-edit/package.jsonpackages/store-follow/package.jsonpackages/store-react/package.jsonpackages/store/package.jsonpackages/unpromise/package.json
| "@rollup/plugin-commonjs": "^29.0.2", | ||
| "@vitejs/plugin-legacy": "^8.0.1", | ||
| "vite": "^8.0.11", | ||
| "vite-plugin-commonjs": "^0.10.4", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check the Vite 8 / Rolldown migration guide for CJS plugin compatibility notes
echo "=== vite.config for counter-dom-commonjs ==="
fd 'vite.config' --search-path apps/counter-dom-commonjs --exec cat {}Repository: cefn/watchable
Length of output: 587
🌐 Web query:
Vite 8 Rolldown commonjs plugin compatibility @rollup/plugin-commonjs``
💡 Result:
In Vite 8, which uses Rolldown as the bundler instead of Rollup, CommonJS support is natively handled by Rolldown itself, replacing the previous reliance on @rollup/plugin-commonjs[1][2]. You do not need to install or configure @rollup/plugin-commonjs separately, as Rolldown provides built-in compatibility with the Rollup plugin API and handles CJS interop directly[3][1][4]. The Vite configuration option build.commonjsOptions, which passed options to @rollup/plugin-commonjs in earlier versions, is now deprecated and a no-op[5][6]. Rolldown enforces stricter and more consistent CommonJS semantics, particularly for default export resolution from CJS modules[7][6]. If you encounter runtime issues with CJS default imports (e.g., "X is not a function"), use the temporary legacy.inconsistentCjsInterop: true option in your vite.config to restore Vite 7 behavior while fixing upstream packages[7][6][8]. Rolldown maintains high compatibility with existing Vite/Rollup plugins, so most work out of the box, but test production builds thoroughly due to potential differences in chunk order or strict CJS handling[3][7]. For official details, see Vite's Rolldown integration guide and migration docs[3][1][6].
Citations:
- 1: https://vite.dev/guide/rolldown
- 2: https://vitejs.dev/guide/rolldown
- 3: https://vite.dev/blog/announcing-vite8-beta
- 4: https://vite.dev/blog/announcing-vite8
- 5: Rolldown-Vite vitejs/rolldown-vite#84
- 6: https://github.com/vitejs/vite/blob/8e05b61d/docs/guide/migration.md
- 7: https://thinkingthroughcode.medium.com/i-reproduced-every-commonjs-failure-introduced-in-vite-8-these-are-the-silent-killers-in-343b5232c833
- 8: https://byteiota.com/vite-8-0-rolldown-migration-guide-10-30x-faster-builds/
🏁 Script executed:
#!/bin/bash
# Check the package.json to understand dependencies and build setup
echo "=== Package.json for counter-dom-commonjs ==="
cat apps/counter-dom-commonjs/package.json
echo -e "\n=== Check for any build output or test configuration ==="
fd -e json -e js -e ts . apps/counter-dom-commonjs --search-path | head -20Repository: cefn/watchable
Length of output: 1859
🏁 Script executed:
#!/bin/bash
# Check for build output, test results, or CI logs
echo "=== Looking for dist or build output ==="
find apps/counter-dom-commonjs -name dist -o -name build 2>/dev/null | head -10
echo -e "\n=== Check if there are any test files or CI workflows ==="
find . -path "*counter-dom-commonjs*" -type f \( -name "*.test.*" -o -name "*.spec.*" \) 2>/dev/null
echo -e "\n=== Check vite.config file type to ensure it's typescript ==="
file apps/counter-dom-commonjs/vite.config.ts 2>/dev/null || ls -la apps/counter-dom-commonjs/vite.config* 2>/dev/nullRepository: cefn/watchable
Length of output: 310
🏁 Script executed:
#!/bin/bash
# Check if there are any known issues or comments about CJS plugin conflicts
echo "=== Search for any comments or issues about CJS plugins in the project ==="
rg -i "commonjs|cjs|rolldown" apps/counter-dom-commonjs/ -A 2 -B 2 --type=ts --type=jsRepository: cefn/watchable
Length of output: 1208
Remove redundant CommonJS plugins for Vite 8/Rolldown compatibility
Vite 8 uses Rolldown as its native bundler, which includes built-in CommonJS support. Both @rollup/plugin-commonjs and vite-plugin-commonjs are unnecessary and risk double-transformation or conflicts with Rolldown's native CJS handling. The build.commonjsOptions configuration option is also deprecated in Vite 8.
Remove both @rollup/plugin-commonjs and vite-plugin-commonjs from vite.config.ts and the corresponding package.json entries. Test the production build to ensure correct output, particularly for default imports from CommonJS modules. If runtime issues occur with CJS default exports, use legacy.inconsistentCjsInterop: true as a temporary workaround.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/counter-dom-commonjs/package.json` around lines 29 - 32, Remove the
redundant CommonJS plugins and deprecated config: delete the two dependencies
"@rollup/plugin-commonjs" and "vite-plugin-commonjs" from package.json and
remove any imports and usage of them in vite.config.ts (search for plugin names
or references to rollupPluginCommonjs/vitePluginCommonjs), and remove any
build.commonjsOptions configuration; after that, run a production build and if
you encounter CJS default-import runtime issues enable
legacy.inconsistentCjsInterop: true under the legacy config in vite.config.ts as
a temporary workaround.
| "@types/react": "^19.2.14", | ||
| "@types/react-dom": "^19.2.3", |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
For the currently used @preact/compatversion in this repo, is React 19 and@types/react@19 officially supported? Please include any caveats for TypeScript projects using vite + preact/compat.
💡 Result:
The currently used @preact/compat version aligns with React 18.3.2 (latest release Feb 26, 2026 [1]), not React 19. React 19 is not officially fully supported by preact/compat in stable Preact 10.x releases. Partial compatibility exists via a dedicated preact/compat/react-19 entry point for some APIs like react/server and react/client [2][3], but features like use(promise) [4], useActionState [3], and <Activity /> [5] lack full support or are open issues. Preact v11 (in development, no stable release by 2026-05-07 [3]) aims for better React 19 alignment. For TypeScript projects using Vite + preact/compat: - Do not use @types/react or @types/react-dom alongside preact/compat; types are intentionally incompatible due to runtime differences like VNode structure [6]. - Configure tsconfig.json paths to alias React imports to preact/compat for TypeScript resolution (Vite handles runtime aliases via @preact/preset-vite [7][8]): { "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "preact", "paths": { "react": ["./node_modules/preact/compat"], "react-dom": ["./node_modules/preact/compat"], "react-dom/*": ["./node_modules/preact/compat/*"] } } } - skipLibCheck: true may be needed if third-party React libs pull in @types/react [9]. - Use npm install react@npm:@preact/compat react-dom@npm:@preact/compat`` for peer deps [1].
Citations:
- 1: https://registry.npmjs.org/%40preact%2Fcompat
- 2: Ensure react 19 entry is tested with working imports preactjs/preact#4649
- 3: React 19 Support? preactjs/preact#4613
- 4: React 19 compatibility: Add support for
use(promise)topreact/compatpreactjs/preact#4756 - 5: Add compatibility with React 19 <Activity /> preactjs/preact#4977
- 6:
preact/compatis incompatible with@types/reactpreactjs/preact#4908 - 7: https://github.com/preactjs/preset-vite
- 8: TypeScript: "Cannot find module 'react-dom/client'" when using React syntax with Preact + Vite preactjs/create-preact#34
- 9: preact-ts preset with react specific libraries vitejs/vite#7662
🏁 Script executed:
# Check the `@preact/compat` version and full context
cd apps/counter-preact-ts && cat -n package.json | head -50Repository: cefn/watchable
Length of output: 2012
🏁 Script executed:
# Check if tsconfig.json exists and its type resolution setup
find apps/counter-preact-ts -name "tsconfig.json" -exec cat -n {} +Repository: cefn/watchable
Length of output: 740
🏁 Script executed:
# Check if there are any other type configuration files
fd -e "tsconfig" -e "vite.config" apps/counter-preact-tsRepository: cefn/watchable
Length of output: 452
🏁 Script executed:
# Verify `@preact/compat` version in lock file or check dependencies
cat apps/counter-preact-ts/package-lock.json | grep -A 5 '"@preact/compat"' | head -20Repository: cefn/watchable
Length of output: 131
🏁 Script executed:
# Check if there are any actual type errors or if jsxImportSource is needed
grep -r "jsxImportSource\|jsx.*import" apps/counter-preact-ts/src 2>/dev/null | head -5Repository: cefn/watchable
Length of output: 40
🏁 Script executed:
# Check what lock file exists (pnpm, yarn, etc)
ls -la | grep -E "pnpm-lock|yarn.lock|package-lock"Repository: cefn/watchable
Length of output: 40
🏁 Script executed:
# Check if `@preact/compat` is explicitly listed or inherited from workspaces
grep -r "@preact/compat\|preact" apps/counter-preact-ts/package.jsonRepository: cefn/watchable
Length of output: 437
🏁 Script executed:
# Check vite config to see how it handles preact
cat apps/counter-preact-ts/vite.config.ts 2>/dev/null || cat apps/counter-preact-ts/vite.config.js 2>/dev/null || echo "No vite config found"Repository: cefn/watchable
Length of output: 629
Remove @types/react and @types/react-dom or configure TypeScript path aliases for preact/compat types.
Using @types/react@^19 and @types/react-dom@^19 alongside npm:@preact/compat`` creates a type/runtime mismatch. These type packages are incompatible with preact/compat due to structural differences (e.g., VNode representation). Additionally, React 19 is not officially supported by preact/compat in stable releases.
Fix: Either:
- Remove
@types/reactand@types/react-domfrom devDependencies, or - Add
tsconfig.jsonpath aliases:
{
"compilerOptions": {
"jsxImportSource": "preact",
"paths": {
"react": ["./node_modules/preact/compat"],
"react-dom": ["./node_modules/preact/compat"],
"react-dom/*": ["./node_modules/preact/compat/*"]
}
}
}Option 1 is simpler for this preact-compat setup.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/counter-preact-ts/package.json` around lines 38 - 39, The devDependency
entries "@types/react" and "@types/react-dom" in package.json conflict with the
project's use of "npm:`@preact/compat`" and must be removed or aliased; either
delete the "@types/react" and "@types/react-dom" devDependencies, or add
TypeScript path aliases in tsconfig.json (under compilerOptions.paths) mapping
"react", "react-dom", and "react-dom/*" to preact/compat to ensure types resolve
to preact/compat instead of the React typings.
| export default tseslint.config( | ||
| eslint.configs.recommended, | ||
| tseslint.configs.strict, | ||
| pluginReact.configs.flat.recommended, | ||
| pluginReact.configs.flat["jsx-runtime"], | ||
| { | ||
| files: ["src/**/*.ts", "src/**/*.tsx"], | ||
| settings: { | ||
| react: { | ||
| version: "detect", | ||
| }, | ||
| }, | ||
| rules: { | ||
| "@typescript-eslint/semi": [2, "always"], | ||
| "@typescript-eslint/non-nullable-type-assertion-style": "off", | ||
| "@typescript-eslint/explicit-function-return-type": "off", | ||
| "@typescript-eslint/explicit-module-boundary-types": "off", | ||
| "@typescript-eslint/no-empty-interface": [ | ||
| "error", | ||
| { | ||
| allowSingleExtends: true, | ||
| }, | ||
| ], | ||
| "@typescript-eslint/no-unused-vars": [ | ||
| "error", | ||
| { | ||
| varsIgnorePattern: "^_", | ||
| argsIgnorePattern: "^_", | ||
| }, | ||
| ], | ||
| "@typescript-eslint/no-invalid-void-type": [ | ||
| "error", | ||
| { | ||
| allowAsThisParameter: true, | ||
| }, | ||
| ], | ||
| }, | ||
| }, | ||
| { | ||
| ignores: [ | ||
| "eslint.config.mjs", | ||
| "vite.config.ts", | ||
| "vite.config.ts*", | ||
| "test/examples/*.js", | ||
| "**/*.test.ts", | ||
| "dist", | ||
| "coverage", | ||
| ".wireit", | ||
| ], | ||
| }, | ||
| ]; | ||
| } | ||
| ); No newline at end of file |
There was a problem hiding this comment.
Missing ignores block: ESLint will attempt to lint dist/ and coverage/ directories
The previous FlatCompat-based config had an explicit ignores array for generated output directories. ESLint 9 flat config only ignores **/node_modules/** and .git/** by default — dist/ and coverage/ are not excluded. Running eslint . from any package will now try to parse compiled output files, causing parse errors (e.g., CJS wrappers, minified bundles) and likely breaking wireit lint tasks.
🛠️ Proposed fix
import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginReact from "eslint-plugin-react";
export default tseslint.config(
+ {
+ ignores: ["**/dist/**", "**/coverage/**", "**/playwright-report/**"],
+ },
eslint.configs.recommended,
tseslint.configs.strict,
pluginReact.configs.flat.recommended,
pluginReact.configs.flat["jsx-runtime"],
{
settings: {
react: {
version: "detect",
},
},
}
);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| export default tseslint.config( | |
| eslint.configs.recommended, | |
| tseslint.configs.strict, | |
| pluginReact.configs.flat.recommended, | |
| pluginReact.configs.flat["jsx-runtime"], | |
| { | |
| files: ["src/**/*.ts", "src/**/*.tsx"], | |
| settings: { | |
| react: { | |
| version: "detect", | |
| }, | |
| }, | |
| rules: { | |
| "@typescript-eslint/semi": [2, "always"], | |
| "@typescript-eslint/non-nullable-type-assertion-style": "off", | |
| "@typescript-eslint/explicit-function-return-type": "off", | |
| "@typescript-eslint/explicit-module-boundary-types": "off", | |
| "@typescript-eslint/no-empty-interface": [ | |
| "error", | |
| { | |
| allowSingleExtends: true, | |
| }, | |
| ], | |
| "@typescript-eslint/no-unused-vars": [ | |
| "error", | |
| { | |
| varsIgnorePattern: "^_", | |
| argsIgnorePattern: "^_", | |
| }, | |
| ], | |
| "@typescript-eslint/no-invalid-void-type": [ | |
| "error", | |
| { | |
| allowAsThisParameter: true, | |
| }, | |
| ], | |
| }, | |
| }, | |
| { | |
| ignores: [ | |
| "eslint.config.mjs", | |
| "vite.config.ts", | |
| "vite.config.ts*", | |
| "test/examples/*.js", | |
| "**/*.test.ts", | |
| "dist", | |
| "coverage", | |
| ".wireit", | |
| ], | |
| }, | |
| ]; | |
| } | |
| ); | |
| export default tseslint.config( | |
| { | |
| ignores: ["**/dist/**", "**/coverage/**", "**/playwright-report/**"], | |
| }, | |
| eslint.configs.recommended, | |
| tseslint.configs.strict, | |
| pluginReact.configs.flat.recommended, | |
| pluginReact.configs.flat["jsx-runtime"], | |
| { | |
| settings: { | |
| react: { | |
| version: "detect", | |
| }, | |
| }, | |
| } | |
| ); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@eslint.config-ts.mjs` around lines 5 - 17, Add an "ignores" block to the
top-level tseslint.config call so ESLint doesn't attempt to lint generated
output; update the config passed to tseslint.config (the object after
pluginReact.configs.flat["jsx-runtime"]) to include an ignores array containing
at least "dist/**" and "coverage/**" (so the exported config from
tseslint.config and the settings.react.version="detect" remain unchanged while
ESLint skips those generated directories).
| "wireit": "^0.14.4" | ||
| "@vitest/coverage-istanbul": "^4.1.5", | ||
| "@vitest/coverage-v8": "^4.1.5", | ||
| "typescript": "^6.0.3", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find all tsconfig files and check for deprecated options and missing "types" arrays
echo "=== tsconfig files without explicit 'types' array ==="
fd 'tsconfig.*\.json' --exclude 'node_modules' --exec grep -L '"types"' {}
echo ""
echo "=== tsconfig files using deprecated 'target: es5' ==="
rg -n --type=json '"target"\s*:\s*"es5"' --glob 'tsconfig*.json' --glob '!*node_modules*'
echo ""
echo "=== tsconfig files using deprecated moduleResolution: node ==="
rg -n --type=json '"moduleResolution"\s*:\s*"node"' --glob 'tsconfig*.json' --glob '!*node_modules*'
echo ""
echo "=== tsconfig files using deprecated baseUrl ==="
rg -n --type=json '"baseUrl"' --glob 'tsconfig*.json' --glob '!*node_modules*'Repository: cefn/watchable
Length of output: 1371
🏁 Script executed:
#!/bin/bash
echo "=== tsconfig files using deprecated 'esModuleInterop: false' ==="
rg -n --type=json '"esModuleInterop"\s*:\s*false' --glob 'tsconfig*.json' --glob '!*node_modules*'
echo ""
echo "=== Sample tsconfig files with 'types' array defined ==="
rg -n --type=json '"types"' --glob 'tsconfig*.json' --glob '!*node_modules*' -A 2
echo ""
echo "=== Check the main tsconfig.build.json for deprecated options ==="
head -50 tsconfig.build.jsonRepository: cefn/watchable
Length of output: 9286
🏁 Script executed:
#!/bin/bash
echo "=== Check extends field in package tsconfig files ==="
cat packages/store/tsconfig.json
echo ""
cat packages/store/tsconfig.test.json
echo ""
echo "=== Check extends in app tsconfig files without explicit types ==="
cat apps/counter-dom-ts/tsconfig.json
echo ""
echo "=== Check if main tsconfig.json extends base ==="
head -20 tsconfig.jsonRepository: cefn/watchable
Length of output: 1557
TypeScript 6.0 upgrade requires fixing deprecated options and type resolution in inherited configs
The monorepo is partially prepared for TypeScript 6.0, but several critical issues remain:
-
Base config (tsconfig.build.json): Uses deprecated
target: "es5", which will become a hard error in TypeScript 7.0. This affects all package configs that extend it. -
App configs: Six app tsconfig files use
esModuleInterop: false(deprecated). One or more use deprecatedmoduleResolution: "Node"instead of"bundler". -
Package production configs: Package
tsconfig.jsonfiles (e.g., packages/store/tsconfig.json) don't define explicit"types"arrays. They extend tsconfig.build.json, which has"types"commented out. With TypeScript 6.0's empty array default, these will lose implicit type resolution unless the inheritance chain is fixed.
Test configs are properly configured with explicit "types": ["node"], so no changes needed there.
Fix tsconfig.build.json first (remove es5, uncomment and populate types), then update app configs to remove deprecated options before upgrading to TypeScript 6.0.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/store/package.json` at line 64, Update the shared and package TS
configs to be TS6-ready: edit tsconfig.build.json to remove the deprecated
target "es5" (set a modern target like "es2017" or omit it) and
uncomment/populate the "types" array (e.g., ["node"]) so inheriting configs
retain type resolution; then update app tsconfig files to remove deprecated
esModuleInterop:false and change any moduleResolution:"Node" to
moduleResolution:"bundler"; finally ensure package-level tsconfig.json files
(e.g., the one extending tsconfig.build.json) explicitly define a "types" array
if they rely on node types so they won't be dropped by TS6 defaults.
| }, | ||
| "devDependencies": { | ||
| "@types/node": "^20.11.5", | ||
| "@types/node": "^25.6.0", |
There was a problem hiding this comment.
@types/node version ^25 doesn't match the Node 26 runtime pinned in .nvmrc
@types/node tracks Node.js major versions — ^25.6.0 types Node 25.x APIs. Node.js 26 ships a combination of JavaScript engine improvements, new platform APIs, and long-overdue cleanup of legacy internals. New APIs introduced in Node 26 (e.g. Temporal, updated stream behavior) won't be present in @types/node@^25. Update to ^26` to stay in sync with the runtime.
🛠️ Proposed fix
- "@types/node": "^25.6.0",
+ "@types/node": "^26.0.0",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "@types/node": "^25.6.0", | |
| "@types/node": "^26.0.0", |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/unpromise/package.json` at line 47, The package.json currently pins
the dev dependency "@types/node" to "^25.6.0" which mismatches the project's
Node 26 runtime; update the version string for the "@types/node" entry in
package.json to "^26.x" (e.g., "^26.0.0" or "^26") and then run your package
manager (npm/yarn/pnpm) to reinstall/lock updated types so the TypeScript
definitions align with Node 26 runtime APIs.
…ock. Update eslint config
Summary by CodeRabbit
Chores
Configuration