-
-
Notifications
You must be signed in to change notification settings - Fork 8
Upgrade deps 2026 1 #326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Upgrade deps 2026 1 #326
Conversation
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
|
Warning Rate limit exceeded
⌛ 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. WalkthroughThis PR migrates the project to ESM (removes CommonJS exports), introduces a new flat ESLint config, updates tooling and devDependencies, bumps version to 3.0.0, adjusts build scripts, updates docs to require Node >=20.19 and ESM usage, and updates packaging metadata. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
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 |
PR Summary
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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)
scripts/build.js (1)
123-123:⚠️ Potential issue | 🟡 MinorBuild target is inconsistent with Node.js version requirement.
The build target is set to
node18, but the PR states Node.js >= 20.19 is required for v3.0.0. Consider updating the target tonode20to align with the minimum supported version and enable newer Node.js features in the build output.🔧 Proposed fix
- target: config.target === 'browser' ? 'chrome70' : 'node18', + target: config.target === 'browser' ? 'chrome70' : 'node20',
🤖 Fix all issues with AI agents
In @.npmignore:
- Line 14: Remove the obsolete ignore entries from .npmignore: delete the lines
containing ".eslintrc.js" and "biome.json" (these were left over after moving to
eslint.config.js and renaming biome.json to biome.jsonc) so the .npmignore only
contains current, relevant ignore patterns; verify no other stale config
filenames remain in the file.
In `@docs/available-environments.md`:
- Around line 5-8: The top-level heading "Requirements:" is currently H1 and
should be H2 to satisfy markdownlint; update the markdown heading for the
"Requirements:" section from a single '#' to '##' (i.e., change the heading
level for the "Requirements:" line), then verify the heading hierarchy in
docs/available-environments.md so markdownlint no longer flags H1→H2 issues.
In `@eslint.config.js`:
- Line 50: Remove the deprecated rule entry '@typescript-eslint/no-var-requires'
from the ESLint configuration (in eslint.config.js) because typescript-eslint v8
removed that rule; locate the object or rules block where
'@typescript-eslint/no-var-requires': 'off' is defined and delete that key/value
pair so the config no longer references the nonexistent rule.
In `@package.json`:
- Around line 46-48: Update the package.json scripts "fmt", "lint", and
"lint:fix" to remove the explicit "./node_modules/.bin/" prefixes and replace
single quotes around glob patterns with double quotes for cross-platform
compatibility; specifically edit the "fmt" script (symbol "fmt") to call
prettier directly and use double-quoted globs, and update "lint" and "lint:fix"
(symbols "lint" and "lint:fix") to call eslint without the path prefix and use
double-quoted patterns so Windows cmd.exe and npm-installed binaries work
correctly.
- Around line 59-67: The lint-staged entries currently call binaries with
explicit paths like "./node_modules/.bin/prettier --write" and
"./node_modules/.bin/eslint --fix"; update the lint-staged config to use bare
command names instead (e.g., "prettier --write" and "eslint --fix") so
lint-staged resolves local binaries automatically and improves cross-platform
compatibility—apply this change to the arrays that target all files,
"*.{json,css,scss,gql}", and "*.{yaml,yml}" to replace any
"./node_modules/.bin/..." invocations with the corresponding "prettier" or
"eslint" commands.
In `@README.md`:
- Around line 52-57: Remove the trailing space at the end of the blockquote
line(s) that reference permafrost-dev/react-ray and permafrost-dev/vue-ray (the
lines beginning with ">" in the README blockquote) so the blockquote does not
have trailing whitespace; edit the two blockquote lines to end immediately after
the URL text with no extra space.
| @@ -12,19 +12,19 @@ | |||
| /coverage | |||
| .editorconfig | |||
| .eslintrc.js | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Consider removing obsolete ignore entries.
Since .eslintrc.cjs was removed in favor of eslint.config.js and biome.json was renamed to biome.jsonc, the ignore entries for .eslintrc.js (line 14) and biome.json (line 28) are now obsolete. While harmless, removing them would keep the file tidy.
Also applies to: 28-28
🤖 Prompt for AI Agents
In @.npmignore at line 14, Remove the obsolete ignore entries from .npmignore:
delete the lines containing ".eslintrc.js" and "biome.json" (these were left
over after moving to eslint.config.js and renaming biome.json to biome.jsonc) so
the .npmignore only contains current, relevant ignore patterns; verify no other
stale config filenames remain in the file.
| Requirements: | ||
| - Node.js >= 20.19 | ||
| - ESM-only (CommonJS `require` is not supported) | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix heading level to satisfy markdownlint (H1 → H2).
📝 Suggested diff
-Requirements:
-- Node.js >= 20.19
-- ESM-only (CommonJS `require` is not supported)
+## Requirements
+- Node.js >= 20.19
+- ESM-only (CommonJS `require` is not supported)📝 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.
| Requirements: | |
| - Node.js >= 20.19 | |
| - ESM-only (CommonJS `require` is not supported) | |
| ## Requirements | |
| - Node.js >= 20.19 | |
| - ESM-only (CommonJS `require` is not supported) |
🧰 Tools
🪛 markdownlint-cli2 (0.20.0)
[warning] 7-7: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents
In `@docs/available-environments.md` around lines 5 - 8, The top-level heading
"Requirements:" is currently H1 and should be H2 to satisfy markdownlint; update
the markdown heading for the "Requirements:" section from a single '#' to '##'
(i.e., change the heading level for the "Requirements:" line), then verify the
heading hierarchy in docs/available-environments.md so markdownlint no longer
flags H1→H2 issues.
| '@typescript-eslint/explicit-function-return-type': 'off', | ||
| '@typescript-eslint/no-explicit-any': 'off', | ||
| '@typescript-eslint/explicit-module-boundary-types': 'off', | ||
| '@typescript-eslint/no-var-requires': 'off', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
typescript-eslint v8 breaking changes no-var-requires removal
💡 Result:
In typescript-eslint v8 (released July 31, 2024), @typescript-eslint/no-var-requires was deprecated and removed from the preset configs (e.g. plugin:@typescript-eslint/recommended``), in favor of @typescript-eslint/no-require-imports. If you had `no-var-requires` enabled manually, the v8 migration is to remove it and enable `no-require-imports` instead. [1]
What changed (practically)
no-var-requiresonly banned assignments likeconst x = require('x'), while allowingimport x = require('x')andrequire('x')calls. [2]no-require-importsbans invokingrequire()(includingconst x = require('x')andimport x = require('x')by default). It’s enabled byplugin:@typescript-eslint/recommended``. [3]
Migration snippet
// before (v7/v8 but now deprecated)
rules: {
'@typescript-eslint/no-var-requires': 'error',
}
// after (v8+)
rules: {
'@typescript-eslint/no-require-imports': 'error',
}If you still rely on import x = require('x'), use:
rules: {
'@typescript-eslint/no-require-imports': ['error', { allowAsImport: true }],
}[3]
Sources: typescript-eslint v8 announcement (breaking changes + config diffs) [1], no-var-requires rule docs [2], no-require-imports rule docs [3].
🏁 Script executed:
# Check eslint.config.js file
cat -n eslint.config.js | head -60Repository: permafrost-dev/node-ray
Length of output: 2202
🏁 Script executed:
# Check package.json for typescript-eslint version
cat package.json | grep -A 5 -B 5 "typescript-eslint"Repository: permafrost-dev/node-ray
Length of output: 482
Remove deprecated TypeScript ESLint rule.
The @typescript-eslint/no-var-requires rule was removed in typescript-eslint v8. Since your project is already on v8.54.0, this configuration has no effect and should be removed.
Proposed fix
'@typescript-eslint/explicit-module-boundary-types': 'off',
- '@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-empty-function': 'off',📝 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.
| '@typescript-eslint/no-var-requires': 'off', | |
| '@typescript-eslint/explicit-module-boundary-types': 'off', | |
| '@typescript-eslint/no-empty-function': 'off', |
🤖 Prompt for AI Agents
In `@eslint.config.js` at line 50, Remove the deprecated rule entry
'@typescript-eslint/no-var-requires' from the ESLint configuration (in
eslint.config.js) because typescript-eslint v8 removed that rule; locate the
object or rules block where '@typescript-eslint/no-var-requires': 'off' is
defined and delete that key/value pair so the config no longer references the
nonexistent rule.
| "fmt": "./node_modules/.bin/prettier --write 'src/**/*.{js,ts,json}' 'tests/**/*.{js,ts,json}' './*.js'", | ||
| "lint": "./node_modules/.bin/eslint src tests scripts", | ||
| "lint:fix": "./node_modules/.bin/eslint src tests scripts --fix", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
cat package.jsonRepository: permafrost-dev/node-ray
Length of output: 3379
🌐 Web query:
npm script PATH injection node_modules .bin Windows shell compatibility
💡 Result:
What “PATH injection” means for npm run
When you run an npm script, npm prepends your project’s node_modules/.bin to the PATH for that script process. This is why you can write webpack (not ./node_modules/.bin/webpack) in package.json scripts. This PATH modification is explicit npm behavior. [1][2]
Security/behavior implication: any executable name you invoke in an npm script is resolved against node_modules/.bin first, so a dependency (or compromised dependency) can effectively “shadow” a system command with the same name (by providing a bin/shim in .bin). That’s often desired for tooling, but it’s also the core of the “PATH injection” concern. [1][2]
Why Windows behaves differently (shell compatibility)
npm runs scripts in a platform-dependent shell:
- POSIX: typically
/bin/sh - Windows:
cmd.exeby default [1]
So scripts that rely on POSIX shell features (e.g., VAR=1 cmd, $(...), single-quote rules, export, etc.) often break on Windows unless you adapt them.
You can change the shell npm uses via the script-shell config (e.g., PowerShell on Windows) if you need different shell semantics. [1]
Practical ways to make scripts cross-platform
- Avoid shell-specific syntax in
package.jsonscripts when possible; prefer Node-based CLIs and flags. - Use
cross-envfor portable environment variable setting in scripts. [3] - If you’re spawning processes from Node and need Windows reliability (PATHEXT, shebangs,
.cmdshims innode_modules/.bin, quoting), usecross-spawnrather than rawchild_process.spawnin many cases. [4]
Sources
[1] npm Docs: npm run-script (PATH includes node_modules/.bin; default shell; script-shell) (docs.npmjs.com)
[2] npm Docs: “scripts” (executables exported to PATH) (docs.npmjs.com)
[3] cross-env (portable env vars; notes about shell usage) (npmjs.com)
[4] cross-spawn (Windows spawning + .bin shim/quoting/shebang issues) (npmjs.com)
Citations:
- 1: https://docs.npmjs.com/cli/v9/commands/npm-run-script?utm_source=openai
- 2: https://docs.npmjs.com/cli/v11/using-npm/scripts/?utm_source=openai
- 3: https://www.npmjs.com/package/cross-env/v/5.1.5?utm_source=openai
- 4: https://www.npmjs.com/package/cross-spawn/v/7.0.6?utm_source=openai
Remove explicit node_modules/.bin paths and fix quoting for cross-platform compatibility.
npm automatically injects node_modules/.bin into the script's PATH, so explicit paths are unnecessary. Additionally, single quotes do not prevent glob expansion in Windows cmd.exe; use double quotes instead to ensure glob patterns are passed correctly to prettier and eslint.
🔧 Suggested diff
- "fmt": "./node_modules/.bin/prettier --write 'src/**/*.{js,ts,json}' 'tests/**/*.{js,ts,json}' './*.js'",
- "lint": "./node_modules/.bin/eslint src tests scripts",
- "lint:fix": "./node_modules/.bin/eslint src tests scripts --fix",
+ "fmt": "prettier --write \"src/**/*.{js,ts,json}\" \"tests/**/*.{js,ts,json}\" \"*.js\"",
+ "lint": "eslint src tests scripts",
+ "lint:fix": "eslint src tests scripts --fix",📝 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.
| "fmt": "./node_modules/.bin/prettier --write 'src/**/*.{js,ts,json}' 'tests/**/*.{js,ts,json}' './*.js'", | |
| "lint": "./node_modules/.bin/eslint src tests scripts", | |
| "lint:fix": "./node_modules/.bin/eslint src tests scripts --fix", | |
| "fmt": "prettier --write \"src/**/*.{js,ts,json}\" \"tests/**/*.{js,ts,json}\" \"*.js\"", | |
| "lint": "eslint src tests scripts", | |
| "lint:fix": "eslint src tests scripts --fix", |
🤖 Prompt for AI Agents
In `@package.json` around lines 46 - 48, Update the package.json scripts "fmt",
"lint", and "lint:fix" to remove the explicit "./node_modules/.bin/" prefixes
and replace single quotes around glob patterns with double quotes for
cross-platform compatibility; specifically edit the "fmt" script (symbol "fmt")
to call prettier directly and use double-quoted globs, and update "lint" and
"lint:fix" (symbols "lint" and "lint:fix") to call eslint without the path
prefix and use double-quoted patterns so Windows cmd.exe and npm-installed
binaries work correctly.
| "./node_modules/.bin/prettier --write", | ||
| "./node_modules/.bin/eslint --fix" | ||
| ], | ||
| "*.{json,css,scss,gql}": [ | ||
| "./node_modules/.bin/prettier --config prettier.config.cjs --write" | ||
| "./node_modules/.bin/prettier --write" | ||
| ], | ||
| "*.{yaml,yml}": [ | ||
| "./node_modules/.bin/prettier --config prettier.config.cjs --tab-width 2 --write" | ||
| "./node_modules/.bin/prettier --write" | ||
| ] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, check if the package.json exists and contains the mentioned paths
if [ -f "package.json" ]; then
echo "=== Checking package.json for lint-staged configuration ==="
sed -n '50,75p' package.json
else
echo "package.json not found at root"
fiRepository: permafrost-dev/node-ray
Length of output: 1194
🌐 Web query:
lint-staged PATH environment variable Windows compatibility documentation
💡 Result:
-
How
lint-stagedfinds commands: it can run any executable that’s installed locally/globally via npm or available on your$PATH. It resolves locally installed binaries (fromnode_modules/.bin) via its spawn helper (documented asnano-spawnin the repo README, and asexecaon npm). [1][2] -
Environment-variable expansion (important on Windows too): task strings do not expand environment variables like a normal shell would (e.g.,
%FOO%/$FOO). If you need that behavior, the docs recommend usingcross-env. [1] -
Windows-specific constraint you may hit: Windows has a relatively small maximum command-line length (documented in
lint-stagedas 8192 characters), solint-stagedmay need to split long file lists; themaxArgLengthoption exists for this. [1] -
If you’re debugging “command not found” on Windows: it usually means the Git hook process (often via Husky / a GUI Git client) is running with a different
PATHthan your interactive terminal. In that case, you typically need to ensure the hook sets/augmentsPATHbefore runninglint-staged(this is commonly reported with GUI Git integrations). [3]
Sources:
[1] lint-staged README (GitHub)
[2] lint-staged package docs (npm)
[3] Community report on hooks/GUI environments losing PATH (Zenn article)
🌐 Web query:
lint-staged bin paths node_modules .bin usage best practices
💡 Result:
Best practices for lint-staged + node_modules/.bin (bin paths)
-
Don’t hardcode
./node_modules/.bin/...inlint-stagedcommands. Configure tasks using the bare executable name (e.g.eslint,prettier).lint-stagedwill resolve locally installed binaries for you, and it explicitly discourages relying on globally installed tools. [1]
Example:{ "*.js": ["eslint --fix", "prettier --write"] } -
Prefer package-manager execution contexts over “manual PATH” tweaks.
npm runautomatically addsnode_modules/.bintoPATHfor scripts, soeslint,prettier, etc. work without prefixes. [2]- With pnpm, use
pnpm exec <cmd>(orpnpm <cmd>when not conflicting) which also addsnode_modules/.bintoPATH. [3]
-
Avoid referencing
node_modulesdirectly in day-to-day usage. Use an npm/pnpm script (or the package manager’s exec) instead of calling./node_modules/.bin/<tool>directly—this is a common maintainability guideline for teams and CI. [2] [4]
Practical rule of thumb
- Inside
lint-stagedconfig: use bare commands (eslint,prettier,stylelint, etc.). [1] - Inside
package.jsonscripts / CI: usenpm run <script>/pnpm run <script>(orpnpm exec <tool>for ad-hoc runs). [2] [3]
Sources: lint-staged docs [1], npm docs [2], pnpm docs [3], general JS tooling guidance [4].
[1] (github.com)
[2] (docs.npmjs.com)
[3] (pnpm.io)
[4] (julie.io)
Citations:
- 1: https://github.com/lint-staged/lint-staged
- 2: https://docs.npmjs.com/cli/v9/commands/npm-run-script?utm_source=openai
- 3: https://pnpm.io/cli/exec?utm_source=openai
- 4: https://julie.io/writing/javascript-node-modules/?utm_source=openai
Use bare command names in lint-staged instead of hard-coded bin paths.
lint-staged automatically resolves locally installed binaries—explicitly using ./node_modules/.bin/* is unnecessary and discouraged. The recommended approach is to use bare command names like eslint and prettier, which also improves cross-platform compatibility.
🔧 Suggested diff
- "./node_modules/.bin/prettier --write",
- "./node_modules/.bin/eslint --fix"
+ "prettier --write",
+ "eslint --fix"
@@
- "./node_modules/.bin/prettier --write"
+ "prettier --write"
@@
- "./node_modules/.bin/prettier --write"
+ "prettier --write"📝 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.
| "./node_modules/.bin/prettier --write", | |
| "./node_modules/.bin/eslint --fix" | |
| ], | |
| "*.{json,css,scss,gql}": [ | |
| "./node_modules/.bin/prettier --config prettier.config.cjs --write" | |
| "./node_modules/.bin/prettier --write" | |
| ], | |
| "*.{yaml,yml}": [ | |
| "./node_modules/.bin/prettier --config prettier.config.cjs --tab-width 2 --write" | |
| "./node_modules/.bin/prettier --write" | |
| ] | |
| "prettier --write", | |
| "eslint --fix" | |
| ], | |
| "*.{json,css,scss,gql}": [ | |
| "prettier --write" | |
| ], | |
| "*.{yaml,yml}": [ | |
| "prettier --write" | |
| ] |
🤖 Prompt for AI Agents
In `@package.json` around lines 59 - 67, The lint-staged entries currently call
binaries with explicit paths like "./node_modules/.bin/prettier --write" and
"./node_modules/.bin/eslint --fix"; update the lint-staged config to use bare
command names instead (e.g., "prettier --write" and "eslint --fix") so
lint-staged resolves local binaries automatically and improves cross-platform
compatibility—apply this change to the arrays that target all files,
"*.{json,css,scss,gql}", and "*.{yaml,yml}" to replace any
"./node_modules/.bin/..." invocations with the corresponding "prettier" or
"eslint" commands.
| `node-ray` offers several options to allow you to use it in either NodeJS, Web-based TypeScript or JavaScript projects, and browser environments. | ||
|
|
||
| >If you're using NextJs/React, take a look at [permafrost-dev/react-ray](https://github.com/permafrost-dev/react-ray). | ||
| > | ||
| >If you're using Vue, check out [permafrost-dev/vue-ray](https://github.com/permafrost-dev/vue-ray). | ||
| > If you're using NextJs/React, take a look at [permafrost-dev/react-ray](https://github.com/permafrost-dev/react-ray). | ||
| > | ||
| > If you're using Vue, check out [permafrost-dev/vue-ray](https://github.com/permafrost-dev/vue-ray). | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove trailing space in the blockquote to satisfy markdownlint.
📝 Suggested diff
->
+>📝 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.
| `node-ray` offers several options to allow you to use it in either NodeJS, Web-based TypeScript or JavaScript projects, and browser environments. | |
| >If you're using NextJs/React, take a look at [permafrost-dev/react-ray](https://github.com/permafrost-dev/react-ray). | |
| > | |
| >If you're using Vue, check out [permafrost-dev/vue-ray](https://github.com/permafrost-dev/vue-ray). | |
| > If you're using NextJs/React, take a look at [permafrost-dev/react-ray](https://github.com/permafrost-dev/react-ray). | |
| > | |
| > If you're using Vue, check out [permafrost-dev/vue-ray](https://github.com/permafrost-dev/vue-ray). | |
| `node-ray` offers several options to allow you to use it in either NodeJS, Web-based TypeScript or JavaScript projects, and browser environments. | |
| > If you're using NextJs/React, take a look at [permafrost-dev/react-ray](https://github.com/permafrost-dev/react-ray). | |
| > | |
| > If you're using Vue, check out [permafrost-dev/vue-ray](https://github.com/permafrost-dev/vue-ray). |
🧰 Tools
🪛 markdownlint-cli2 (0.20.0)
[warning] 55-55: Trailing spaces
Expected: 0 or 2; Actual: 1
(MD009, no-trailing-spaces)
🤖 Prompt for AI Agents
In `@README.md` around lines 52 - 57, Remove the trailing space at the end of the
blockquote line(s) that reference permafrost-dev/react-ray and
permafrost-dev/vue-ray (the lines beginning with ">" in the README blockquote)
so the blockquote does not have trailing whitespace; edit the two blockquote
lines to end immediately after the URL text with no extra space.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.github/workflows/run-tests.yml (1)
13-32:⚠️ Potential issue | 🔴 CriticalMatrix variable
node-versionis defined but never used.The workflow defines a
node-versionmatrix with values[22, 24], but no step actually sets up Node.js using this variable. All steps use Bun directly, so the tests run under Bun's bundled Node version rather than the specified matrix versions. This means CI is not actually validating compatibility with Node 22 and 24 as intended.Additionally, the minimum supported Node.js version (20.19 per the PR objectives) is not included in the test matrix.
🔧 Proposed fix: Add setup-node step and include minimum version
strategy: fail-fast: true matrix: - node-version: [22, 24] + node-version: [20, 22, 24] steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 1 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + - uses: oven-sh/setup-bun@v2 with: bun-version: latestAlternatively, if Bun is intentionally used as the sole runtime and Node.js version testing is not required, remove the unused matrix to avoid confusion:
♻️ Alternative: Remove unused matrix
tests: - runs-on: ubuntu-latest - strategy: - fail-fast: true - matrix: - node-version: [22, 24] steps:
This pull request introduces a new major release (v3.0.0) of
node-ray, focusing on a full transition to ESM-only modules, raising the minimum Node.js version to 20.19, and updating the project's dependencies and tooling. It also updates documentation and configuration files to reflect these changes, and removes all CommonJS-specific code and exports. The ESLint and Prettier configurations are modernized, and project metadata is updated accordingly.Major breaking changes and ESM transition:
require) support; package is now ESM-only. All CJS build outputs and export conditions have been removed frompackage.json, and documentation has been updated to instruct users to use ESM imports only. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]enginesfield inpackage.json. [1] [2] [3] [4] [5]Tooling and configuration updates:
.eslintrc.cjs,.eslintignore) with a new flat config (eslint.config.js), and updated.npmignoreaccordingly. [1] [2] [3] [4]prettier.config.js), and renamedbiome.jsontobiome.jsoncwith updated schema and rules. [1] [2] [3] [4] [5] [6]Dependency and script upgrades:
lint-stagedconfiguration. [1] [2] F37e4f28L37R37, [3]Documentation and metadata:
README.md,CHANGELOG.md, and docs to clarify ESM-only usage, Node.js requirements, and removed all CommonJS examples. [1] [2] [3] [4] [5] [6] [7] [8]LICENSEandpackage.json. [1] [2]These changes are breaking for users relying on CommonJS or older Node.js versions. All new usage must be ESM-based.
Summary by CodeRabbit
Breaking Changes
New Features
Documentation
Chores
✏️ Tip: You can customize this high-level summary in your review settings.