Skip to content

chore(ZMSKVR): Bump eslint to 10.0.1 and bump container environment to node 22#2007

Open
ThomasAFink wants to merge 4 commits intonextfrom
chore-zmskvr-bump-eslint-from-9-to-10
Open

chore(ZMSKVR): Bump eslint to 10.0.1 and bump container environment to node 22#2007
ThomasAFink wants to merge 4 commits intonextfrom
chore-zmskvr-bump-eslint-from-9-to-10

Conversation

@ThomasAFink
Copy link
Member

@ThomasAFink ThomasAFink commented Feb 22, 2026

Pull Request Checklist (Feature Branch to next):

  • Ich habe die neuesten Änderungen aus dem next Branch in meinen Feature-Branch gemergt.
  • Das Code-Review wurde abgeschlossen.
  • Fachliche Tests wurden durchgeführt und sind abgeschlossen.

Summary by CodeRabbit

  • Chores
    • Updated Node.js runtime from 18 to 22 in dev and container environments.
    • Upgraded ESLint from v9 to v10 across several packages.
    • Added dompurify and prettier; removed webfontloader in one module.
    • Added support and build configuration for the zmscitizenview module.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 22, 2026

📝 Walkthrough

Walkthrough

Bumped Node.js version from 18 → 22 in dev container and DDEV config; added zmscitizenview to CLI module loop and build mapping; upgraded ESLint to ^10.0.1 across packages; zmscitizenview/package.json adds dompurify, removes webfontloader, and adds prettier.

Changes

Cohort / File(s) Summary
Node.js Version Updates
\.ddev/config.yaml, \.devcontainer/Containerfile
Updated Node.js version literals and setup script target from 18 → 22.
CLI Module Support
cli
Registered new module zmscitizenview in modules loop and added corresponding build command (npm run build).
ESLint Upgrades
zmsadmin/package.json, zmscalldisplay/package.json, zmsstatistic/package.json, zmsticketprinter/package.json, zmscitizenview/package.json
Bumped devDependency eslint to ^10.0.1 in multiple package manifests.
zmscitizenview manifest changes
zmscitizenview/package.json
Added dependency dompurify, removed webfontloader, and added devDependency prettier: ^3.8.1 (in addition to ESLint upgrade).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

I’m a rabbit in the repo, hopping through the day,
Node leapt up to twenty‑two and lint rules found their way.
A citizen view joined the hop with dompurify in tow,
Prettier trims the edges—how the tidy changes glow! 🐇✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the two main objectives of this PR: upgrading ESLint to 10.0.1 and updating the Node.js container environment to version 22.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore-zmskvr-bump-eslint-from-9-to-10

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 and usage tips.

@ThomasAFink
Copy link
Member Author

@coderabbitai

Run it-at-m/lhm_actions/action-templates/actions/action-npm-build@e012d3bda6f9d5511415e2d885f32826049284a4
Run actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444
Found in cache @ /opt/hostedtoolcache/node/22.22.0/x64
(node:2277) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
Environment details
/opt/hostedtoolcache/node/22.22.0/x64/bin/npm config get cache
/home/runner/.npm
npm cache is not found
Run npm --prefix ./zmscitizenview ci
npm error code EUSAGE
npm error
npm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.
npm error
npm error Missing: prettier@3.8.1 from lock file
npm error
npm error Clean install a project
npm error
npm error Usage:
npm error npm ci
npm error
npm error Options:
npm error [--install-strategy <hoisted|nested|shallow|linked>] [--legacy-bundling]
npm error [--global-style] [--omit <dev|optional|peer> [--omit <dev|optional|peer> ...]]
npm error [--include <prod|dev|optional|peer> [--include <prod|dev|optional|peer> ...]]
npm error [--strict-peer-deps] [--foreground-scripts] [--ignore-scripts] [--no-audit]
npm error [--no-bin-links] [--no-fund] [--dry-run]
npm error [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]]
npm error [-ws|--workspaces] [--include-workspace-root] [--install-links]
npm error
npm error aliases: clean-install, ic, install-clean, isntall-clean
npm error
npm error Run "npm help ci" for more info
npm error A complete log of this run can be found in: /home/runner/.npm/_logs/2026-02-22T01_27_21_108Z-debug-0.log
Error: Process completed with exit code 1.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
zmscalldisplay/package.json (1)

40-40: Optional: prefer ~ over ^ for ESLint version pin.

ESLint recommends using the tilde (~) in package.json, e.g. "eslint": "~3.1.0", to guarantee the results of your builds. A caret allows minor bumps which, per ESLint's policy, may report additional linting errors.

♻️ Proposed change
-    "eslint": "^10.0.1",
+    "eslint": "~10.0.1",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@zmscalldisplay/package.json` at line 40, Update the ESLint dependency
specifier from a caret to a tilde in package.json by changing the "eslint" entry
from "^10.0.1" to "~10.0.1" so minor version bumps are prevented; after editing
the "eslint" line, run your package manager (npm/yarn/pnpm) to regenerate the
lockfile (package-lock.json or yarn.lock) and ensure CI builds pick up the
updated pinned version.
.devcontainer/Containerfile (1)

51-52: setup_22.x install script is deprecated by NodeSource.

NodeSource states: "Installation Scripts: The installation scripts setup_XX.x are no longer supported and are not needed anymore, as the installation process is straightforward for any RPM and DEB distro. It's essential to clarify that 'no longer supported' doesn't mean the scripts are 'unavailable' or 'not accessible.' Instead, these scripts are now deprecated."

When run, the script emits a `SCRIPT DEPRECATION WARNING: This script, located at https://deb.nodesource.com/setup_X, used to install Node.js is deprecated now and will eventually be made inactive. This will pollute build logs and may eventually break the container build.

Consider migrating to the official NodeSource DEB method as documented at https://github.com/nodesource/distributions.

♻️ Proposed migration to the recommended NodeSource DEB setup
-RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
- && apt-get install -y nodejs
+RUN apt-get update && apt-get install -y ca-certificates gnupg \
+ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
+    | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg \
+ && echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" \
+    > /etc/apt/sources.list.d/nodesource.list \
+ && apt-get update && apt-get install -y nodejs

Verify the exact recommended commands against the latest NodeSource distributions README before applying.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.devcontainer/Containerfile around lines 51 - 52, Replace the deprecated
"RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - ..." invocation:
instead add the official NodeSource DEB repository setup sequence (install any
needed prerequisites like ca-certificates/gnupg/lsb-release, import NodeSource
GPG key into /usr/share/keyrings or via apt-key, create the nodesource list file
with the appropriate "deb [signed-by=...] https://deb.nodesource.com node_22.x
<distro-codename> main", run apt-get update) and then apt-get install -y nodejs;
reference the existing RUN line that uses setup_22.x and replace it with these
repository setup steps, and verify exact commands against the NodeSource
distributions README before committing.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.ddev/config.yaml:
- Around line 89-90: Update the stale comment for the nodejs_version example so
it includes Node 22; locate the commented example for nodejs_version (the
commented line starting with "nodejs_version") and modify its example list from
"14, 16, 18, 20" to include "22" (e.g., "14, 16, 18, 20, 22") so the comment
matches the currently-configured value.

In `@zmscalldisplay/package.json`:
- Around line 40-41: The package.json currently pairs "eslint": "^10.0.1" with
"eslint-plugin-import": "^2.24.2" which is incompatible with ESLint 10; update
package.json to either (A) upgrade "eslint-plugin-import" to a v3.x release that
lists ESLint 10 in its peerDependencies (replace the "eslint-plugin-import"
version string with a v3.x caret-release) and run npm/yarn install and test
linting, or (B) revert "eslint" to a ^9.x version (change the "eslint" entry to
a v9 caret) if you must keep the v2 plugin; also verify the "lint" script
("lint": "eslint js/") works with ESLint 10’s config lookup behavior or
co-locate eslint.config.* with source files.

---

Duplicate comments:
In `@zmsadmin/package.json`:
- Around line 35-37: The package.json pins for "eslint", "eslint-plugin-import",
and "eslint-plugin-react" may be incompatible with ESLint 10's flat config API;
verify the compatibility by checking each plugin's peerDependencies (use
npm/registry or curl to inspect eslint-plugin-react and eslint-plugin-import
metadata) and run a quick lint pass with ESLint 10 against this repo (zmsadmin)
to surface breaking changes; if a plugin version does not declare support for
ESLint 10, upgrade the dependency to a published version that lists eslint@^10
in peerDependencies or add a compatible replacement (or an overrides/resolutions
entry) and update any config/usage in your flat config to match the plugin's
supported API (target symbols: the "eslint", "eslint-plugin-import", and
"eslint-plugin-react" entries in zmsadmin/package.json and any react-related
ESLint config files).

In `@zmsstatistic/package.json`:
- Around line 34-35: The eslint-plugin-import dependency in package.json
("eslint-plugin-import": "^2.20.1") is very old and may be incompatible with the
declared eslint ("eslint": "^10.0.1"); verify compatibility and either upgrade
the plugin to a version that supports ESLint 10 or pin ESLint to a version the
plugin supports. Inspect the package.json entries "eslint" and
"eslint-plugin-import", run the provided ripgrep check (rg --type=js
'\/\*\s*eslint-env' zmsstatistic/js/) to find any file-level eslint-env pragmas
that could affect rules, and then update package.json accordingly and re-run
lint to confirm no rule/runtime errors.

In `@zmsticketprinter/package.json`:
- Line 40: The package.json upgrade to "eslint": "^10.0.1" can introduce the
same ESLint-10 config-lookup and /* eslint-env */ inline comment issues noted
for zmscalldisplay; either pin zmsticketprinter's eslint to a 9.x range or
update this package's lint configuration to explicitly declare environments and
root behavior (add an eslintConfig block with "env" entries and "root": true or
equivalent new ESLint 10 settings) and remove/replace any /* eslint-env */ file
comments. Locate the package.json entry ("eslint": "^10.0.1") and run the
supplied rg command (rg --type=js '\/\*\s*eslint-env' zmsticketprinter/js/) to
find offending inline eslint-env comments, then remove them and ensure
environments are defined in package.json's eslintConfig or shared config so
ESLint 10 behaves correctly.

---

Nitpick comments:
In @.devcontainer/Containerfile:
- Around line 51-52: Replace the deprecated "RUN curl -fsSL
https://deb.nodesource.com/setup_22.x | bash - ..." invocation: instead add the
official NodeSource DEB repository setup sequence (install any needed
prerequisites like ca-certificates/gnupg/lsb-release, import NodeSource GPG key
into /usr/share/keyrings or via apt-key, create the nodesource list file with
the appropriate "deb [signed-by=...] https://deb.nodesource.com node_22.x
<distro-codename> main", run apt-get update) and then apt-get install -y nodejs;
reference the existing RUN line that uses setup_22.x and replace it with these
repository setup steps, and verify exact commands against the NodeSource
distributions README before committing.

In `@zmscalldisplay/package.json`:
- Line 40: Update the ESLint dependency specifier from a caret to a tilde in
package.json by changing the "eslint" entry from "^10.0.1" to "~10.0.1" so minor
version bumps are prevented; after editing the "eslint" line, run your package
manager (npm/yarn/pnpm) to regenerate the lockfile (package-lock.json or
yarn.lock) and ensure CI builds pick up the updated pinned version.

Comment on lines +40 to 41
"eslint": "^10.0.1",
"eslint-plugin-import": "^2.24.2",
Copy link
Contributor

@coderabbitai coderabbitai bot Feb 22, 2026

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

echo "=== Checking eslint-plugin-import latest version and peer dependencies ==="
curl -s https://registry.npmjs.org/eslint-plugin-import/latest 2>/dev/null | jq '{version: .version, peerDependencies: .peerDependencies}' || echo "Failed to fetch from registry"

echo ""
echo "=== Searching for eslint-env comments in zmscalldisplay/js/ ==="
cd zmscalldisplay && rg --type=js '/\*\s*eslint-env' js/ || echo "No eslint-env comments found"

Repository: it-at-m/eappointment

Length of output: 352


🌐 Web query:

ESLint 10.0.0 breaking changes config file lookup behavior

💡 Result:

In ESLint 10.0.0, the flat config lookup behavior is a breaking change:

  • Config lookup now starts from each linted file’s directory and searches upward for eslint.config.* (instead of relying on the old cwd-based lookup many setups assumed). This is now the default. [1]
  • The feature flag v10_config_lookup_from_file was removed; if you still pass it (CLI --flag ..., ESLINT_FLAGS, or API flags), ESLint 10 will error. [1]
  • If you need the prior “single config from where you ran ESLint” behavior, you must pin the config explicitly (for example --config path/to/eslint.config.js). [1]

Sources:
[1] ESLint “Migrate to v10.x” – “New configuration file lookup algorithm”. (eslint.org)

Citations:


🌐 Web query:

eslint-plugin-import compatibility ESLint 10

💡 Result:

As of eslint-plugin-import v2.32.0 (Jun 20, 2025), it is not officially compatible with ESLint 10 because its peerDependencies only allow ESLint ^2 … ^9 (no ^10). [1]

What this means in practice with ESLint 10 (released Feb 6, 2026):

  • Your package manager will likely show/throw a peer dependency conflict when you try to install ESLint 10 alongside eslint-plugin-import. [2][1]
  • It may still run at runtime, but that’s unsupported until the plugin updates its peer range. One ESLint-10 upgrade report noted they had to force-install eslint-plugin-import due to peer dep conflicts, but “verified functionality.” [4]

Extra ESLint 10 gotcha: ESLint 10 removes support for the old/legacy config format, so you’ll need flat config (or compat tooling) regardless of plugin choice. [3]


Update eslint-plugin-import to support ESLint 10, or revert ESLint to v9.

ESLint v10.0.0 includes a breaking change in config file lookup behavior: the configuration is now located starting from each linted file's directory (rather than from the current working directory). This may affect the "lint": "eslint js/" script unless eslint.config.* is co-located with source files.

More critically, eslint-plugin-import v2.x (including the currently installed v2.24.2) does not officially support ESLint 10. The latest v2 release (v2.32.0) explicitly limits peer dependencies to eslint: ^2 || ... || ^9 with no support for ^10. To proceed with ESLint 10, either update eslint-plugin-import to a v3.x release that supports ESLint 10, or revert ESLint to v9.x.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@zmscalldisplay/package.json` around lines 40 - 41, The package.json currently
pairs "eslint": "^10.0.1" with "eslint-plugin-import": "^2.24.2" which is
incompatible with ESLint 10; update package.json to either (A) upgrade
"eslint-plugin-import" to a v3.x release that lists ESLint 10 in its
peerDependencies (replace the "eslint-plugin-import" version string with a v3.x
caret-release) and run npm/yarn install and test linting, or (B) revert "eslint"
to a ^9.x version (change the "eslint" entry to a v9 caret) if you must keep the
v2 plugin; also verify the "lint" script ("lint": "eslint js/") works with
ESLint 10’s config lookup behavior or co-locate eslint.config.* with source
files.

Copy link
Member Author

Choose a reason for hiding this comment

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

Is eslint-plugin-import used at all in zmscalldisplay @coderabbitai?

Copy link
Member Author

Choose a reason for hiding this comment

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

@coderabbitai what about zmsadmin zmsstatistic and zmsticketprinter too?

Copy link
Contributor

Choose a reason for hiding this comment

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

echo "=== Looking for ESLint configuration files in zmscalldisplay ==="
fd -t f 'eslint\.config\.(js|mjs|cjs)$|\.eslintrc\.(js|json|yml|yaml)$|\.eslintrc$' zmscalldisplay/

echo ""
echo "=== Checking if eslint-plugin-import is referenced in any config files ==="
rg -n "eslint-plugin-import|plugin.*import" zmscalldisplay/ -g '*.{js,json,yml,yaml,mjs,cjs}' -g 'eslint*' || echo "No references found"

echo ""
echo "=== Checking for import/* rule usage in JS files ==="
rg -n "eslint.*import/" zmscalldisplay/js/ || echo "No import/* rule comments found"

echo ""
echo "=== List all files in zmscalldisplay for context ==="
fd -t f . zmscalldisplay/ --max-depth 2

Length of output: 1593


🏁 Script executed:

#!/bin/bash

echo "=== Checking if JS files use import statements ==="
echo ""
echo "--- zmscalldisplay/js/index.js ---"
head -30 zmscalldisplay/js/index.js

echo ""
echo "--- zmscalldisplay/js/settings.js ---"
head -30 zmscalldisplay/js/settings.js

echo ""
echo "=== Searching for import statements in all JS files ==="
rg -n "^import\s+.*from\s+" zmscalldisplay/js/ || echo "No ES6 import statements found"

Length of output: 2746


🏁 Script executed:

#!/bin/bash

echo "=== Searching for ESLint config files in all modules ==="
fd -t f 'eslint\.config\.(js|mjs|cjs)$|\.eslintrc\.(js|json|yml|yaml)$|\.eslintrc$' zmsadmin/ zmsstatistic/ zmsticketprinter/ zmscitizenview/ || echo "No ESLint config files found in any module"

echo ""
echo "=== Checking package.json files for eslint-plugin-import in all modules ==="
rg -n "eslint-plugin-import" zmsadmin/package.json zmsstatistic/package.json zmsticketprinter/package.json zmscitizenview/package.json || echo "Not found in other modules"

Length of output: 297


🏁 Script executed:

#!/bin/bash

echo "=== Contents of zmscitizenview/eslint.config.js ==="
cat zmscitizenview/eslint.config.js

echo ""
echo "=== Double-check all module directories for ESLint configs ==="
fd -t f 'eslint\.config\.(js|mjs|cjs)$|\.eslintrc' zmsadmin/ zmsstatistic/ zmsticketprinter/ zmscalldisplay/ || echo "None found"

Length of output: 965


@ThomasAFink No, eslint-plugin-import is not being used in zmscalldisplay.

My investigation found:

  • No ESLint configuration file exists in zmscalldisplay (no .eslintrc or eslint.config.js)
  • ✅ The JS files do use ES6 imports extensively
  • 📦 The plugin is listed in devDependencies but cannot be active without a config file

Recommendation: You can safely remove eslint-plugin-import from zmscalldisplay's package.json since it's unused. Without an ESLint config, the plugin serves no purpose, and my earlier compatibility warning about ESLint 10 doesn't apply here.

The same pattern appears in other modules (zmsadmin, zmsstatistic, zmsticketprinter) - they also lack ESLint configs despite having the plugin in devDependencies. Only zmscitizenview has an eslint.config.js, though it doesn't use the import plugin either.

Copy link
Contributor

Choose a reason for hiding this comment

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

echo "=== Checking zmsadmin for eslint-plugin-import ==="
echo "--- package.json ---"
if [ -f "zmsadmin/package.json" ]; then
  cat zmsadmin/package.json | jq '.devDependencies["eslint-plugin-import"], .dependencies["eslint-plugin-import"]' 2>/dev/null || echo "Not found in dependencies"
else
  echo "zmsadmin/package.json not found"
fi

echo ""
echo "--- ESLint config files ---"
fd -t f 'eslint\.config\.|\.eslintrc' zmsadmin/ 2>/dev/null || echo "No ESLint config files found"

echo ""
echo "--- Usage in source code ---"
rg -i 'eslint-plugin-import|plugin:import' zmsadmin/ --max-count=5 2>/dev/null || echo "No references found"

echo ""
echo "=== Checking zmsstatistic for eslint-plugin-import ==="
echo "--- package.json ---"
if [ -f "zmsstatistic/package.json" ]; then
  cat zmsstatistic/package.json | jq '.devDependencies["eslint-plugin-import"], .dependencies["eslint-plugin-import"]' 2>/dev/null || echo "Not found in dependencies"
else
  echo "zmsstatistic/package.json not found"
fi

echo ""
echo "--- ESLint config files ---"
fd -t f 'eslint\.config\.|\.eslintrc' zmsstatistic/ 2>/dev/null || echo "No ESLint config files found"

echo ""
echo "--- Usage in source code ---"
rg -i 'eslint-plugin-import|plugin:import' zmsstatistic/ --max-count=5 2>/dev/null || echo "No references found"

echo ""
echo "=== Checking zmsticketprinter for eslint-plugin-import ==="
echo "--- package.json ---"
if [ -f "zmsticketprinter/package.json" ]; then
  cat zmsticketprinter/package.json | jq '.devDependencies["eslint-plugin-import"], .dependencies["eslint-plugin-import"]' 2>/dev/null || echo "Not found in dependencies"
else
  echo "zmsticketprinter/package.json not found"
fi

echo ""
echo "--- ESLint config files ---"
fd -t f 'eslint\.config\.|\.eslintrc' zmsticketprinter/ 2>/dev/null || echo "No ESLint config files found"

echo ""
echo "--- Usage in source code ---"
rg -i 'eslint-plugin-import|plugin:import' zmsticketprinter/ --max-count=5 2>/dev/null || echo "No references found"

Length of output: 1514


🏁 Script executed:

#!/bin/bash

echo "=== Checking for root-level ESLint config files ==="
fd -t f 'eslint\.config\.|\.eslintrc' -d 2 --exclude node_modules --exclude .git 2>/dev/null | head -20

echo ""
echo "=== Checking if eslint-plugin-import is configured in any ESLint configs ==="
rg -i 'plugin.*import|import/' --type-add 'config:*.{js,cjs,mjs,json}' --type config -g 'eslint*' --max-count=3 2>/dev/null || echo "No plugin configuration found"

echo ""
echo "=== Checking zmsadmin for actual plugin usage in ESLint config ==="
if [ -f "zmsadmin/eslint.config.js" ] || [ -f "zmsadmin/eslint.config.mjs" ] || [ -f "zmsadmin/eslint.config.cjs" ]; then
  cat zmsadmin/eslint.config.* 2>/dev/null | head -50
elif [ -f "zmsadmin/.eslintrc.js" ] || [ -f "zmsadmin/.eslintrc.json" ] || [ -f "zmsadmin/.eslintrc" ]; then
  cat zmsadmin/.eslintrc* 2>/dev/null | head -50
else
  echo "No ESLint config file found in zmsadmin/"
fi

echo ""
echo "=== Checking zmsstatistic for actual plugin usage in ESLint config ==="
if [ -f "zmsstatistic/eslint.config.js" ] || [ -f "zmsstatistic/eslint.config.mjs" ] || [ -f "zmsstatistic/eslint.config.cjs" ]; then
  cat zmsstatistic/eslint.config.* 2>/dev/null | head -50
elif [ -f "zmsstatistic/.eslintrc.js" ] || [ -f "zmsstatistic/.eslintrc.json" ] || [ -f "zmsstatistic/.eslintrc" ]; then
  cat zmsstatistic/.eslintrc* 2>/dev/null | head -50
else
  echo "No ESLint config file found in zmsstatistic/"
fi

echo ""
echo "=== Checking zmscalldisplay for actual plugin usage in ESLint config ==="
if [ -f "zmscalldisplay/eslint.config.js" ] || [ -f "zmscalldisplay/eslint.config.mjs" ] || [ -f "zmscalldisplay/eslint.config.cjs" ]; then
  cat zmscalldisplay/eslint.config.* 2>/dev/null | head -50
elif [ -f "zmscalldisplay/.eslintrc.js" ] || [ -f "zmscalldisplay/.eslintrc.json" ] || [ -f "zmscalldisplay/.eslintrc" ]; then
  cat zmscalldisplay/.eslintrc* 2>/dev/null | head -50
else
  echo "No ESLint config file found in zmscalldisplay/"
fi

Length of output: 2716


@ThomasAFink Yes, zmsadmin and zmsstatistic have the same compatibility issue:

✅ Modules with actual eslint-plugin-import usage:

  • zmsadmin: Has eslint-plugin-import ^2.24.2 and actively uses it in .eslintrc.json with "plugin:import/warnings" and "plugin:import/errors" extends
  • zmsstatistic: Has eslint-plugin-import ^2.20.1 and actively uses it in .eslintrc.js with "plugin:import/warnings" and "plugin:import/errors" extends

Both will encounter peer dependency conflicts with ESLint 10.

❌ Modules without actual usage:

  • zmscalldisplay: Has the plugin installed (^2.24.2) but doesn't use it in .eslintrc.js (only extends "eslint:recommended") — the dependency can be safely removed
  • zmsticketprinter: Doesn't have the plugin installed at all — no issue

Recommendation: For zmsadmin and zmsstatistic, you'll need to either upgrade eslint-plugin-import to a v3.x release that supports ESLint 10, or revert ESLint to v9.x. For zmscalldisplay, you can remove the unused eslint-plugin-import dependency.

Copy link
Member Author

Choose a reason for hiding this comment

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

but 9.39 works just fine @coderabbitai

Copy link
Contributor

Choose a reason for hiding this comment

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

@ThomasAFink Yes, you're absolutely right that ESLint 9.39 works fine! My concern is specifically about the upgrade to ESLint 10.

There's an active issue (#3227) showing that eslint-plugin-import encounters runtime errors with ESLint 10, specifically a TypeError: Cannot use 'in' operator to search for 'sourceType' in undefined. This isn't just a peer dependency warning—it's an actual breaking error that occurs when the plugin runs.

Since zmsadmin and zmsstatistic actively use eslint-plugin-import in their ESLint configs, they would encounter this error after upgrading to ESLint 10.

Your options:

  1. Test it: Try running npm run lint in zmsadmin and zmsstatistic after the ESLint 10 upgrade. If linting still works without errors, you're good to go.

  2. Wait for a fix: Monitor the issue for a resolution before merging.

  3. Stay on ESLint 9: Keep using "eslint": "^9.39.1" until eslint-plugin-import officially supports v10.

  4. Remove the plugin: If you confirm it's not actually needed (like in zmscalldisplay), remove it from the affected packages.

Would you like me to check if the lint scripts actually run successfully in the CI, or test whether the plugin is genuinely required in zmsadmin and zmsstatistic?

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 22, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

@ThomasAFink, I'll investigate the lock file mismatch issue in the zmscitizenview module.


🏁 Script executed:

#!/bin/bash

# Check if zmscitizenview/package.json exists and look for prettier
echo "=== Checking zmscitizenview/package.json for prettier ==="
if [ -f "zmscitizenview/package.json" ]; then
  cat zmscitizenview/package.json | jq '.dependencies.prettier, .devDependencies.prettier'
else
  echo "zmscitizenview/package.json not found"
fi

echo -e "\n=== Checking zmscitizenview/package-lock.json for prettier ==="
if [ -f "zmscitizenview/package-lock.json" ]; then
  cat zmscitizenview/package-lock.json | jq '.packages["node_modules/prettier"].version // "not found in packages"'
  echo "Also checking packages section:"
  cat zmscitizenview/package-lock.json | jq '.packages | keys | map(select(contains("prettier")))' | head -20
else
  echo "zmscitizenview/package-lock.json not found"
fi

# Check if there are any recent changes to prettier in git
echo -e "\n=== Recent changes to prettier in package files ==="
git log --oneline --all -n 20 --grep="prettier" -- "**/package*.json" || true
git log --oneline --all -n 20 -- "**/package*.json" | head -10

Length of output: 1569


🏁 Script executed:

#!/bin/bash

# View the full package.json to see all dependencies
echo "=== Full zmscitizenview/package.json ==="
cat zmscitizenview/package.json

echo -e "\n=== Checking git diff for package.json changes in this PR ==="
git diff origin/next HEAD -- zmscitizenview/package.json || true

echo -e "\n=== Checking if there are staged/uncommitted changes ==="
git status zmscitizenview/package*.json

Length of output: 1732


🏁 Script executed:

#!/bin/bash

# Check what `@muenchen/prettier-codeformat` requires
echo "=== Checking `@muenchen/prettier-codeformat` in lock file ==="
cat zmscitizenview/package-lock.json | jq '.packages["node_modules/@muenchen/prettier-codeformat"]' | head -30

# Check if prettier is listed as a peer dependency anywhere
echo -e "\n=== Checking for prettier in peerDependencies ==="
cat zmscitizenview/package-lock.json | jq '.packages | to_entries[] | select(.value.peerDependencies.prettier != null) | {name: .key, prettier_peer: .value.peerDependencies.prettier}' | head -50

# Check the lockfile version
echo -e "\n=== Lock file version info ==="
cat zmscitizenview/package-lock.json | jq '{lockfileVersion, name, version}' | head -10

# Check when package-lock.json was last modified
echo -e "\n=== Last modification of package-lock.json ==="
git log -1 --format="%h %ai %s" -- zmscitizenview/package-lock.json

Length of output: 943


🏁 Script executed:

#!/bin/bash

# Check if there's a prettier config or what version might be expected
echo "=== Checking for prettier config files ==="
find . -maxdepth 3 -name ".prettierrc*" -o -name "prettier.config.*" 2>/dev/null | head -10

# Check other modules to see what prettier version they use
echo -e "\n=== Checking prettier versions in other modules ==="
for dir in zmsadmin zmscalldisplay zmsstatistic zmsticketprinter; do
  if [ -f "$dir/package.json" ]; then
    echo "=== $dir ==="
    cat "$dir/package.json" | jq -r '.devDependencies.prettier // .dependencies.prettier // "not found"'
  fi
done

# Check if there's a root package.json
echo -e "\n=== Checking root package.json ==="
if [ -f "package.json" ]; then
  cat package.json | jq -r '.devDependencies.prettier // .dependencies.prettier // "not found"'
else
  echo "No root package.json"
fi

Length of output: 312


@ThomasAFink, I've identified the issue. The zmscitizenview/package.json uses Prettier in its scripts and has a .prettierrc.json configuration file, but Prettier is not listed in the devDependencies. Additionally, several packages like @vue/eslint-config-prettier, eslint-plugin-prettier, and @ianvs/prettier-plugin-sort-imports have Prettier as a peer dependency.

The error occurs because npm expects prettier@3.8.1 to be in the lock file, but it's not present.

Solution

You need to add Prettier to the devDependencies in zmscitizenview/package.json and regenerate the lock file:

Option 1: Using npm (recommended)

cd zmscitizenview
npm install --save-dev prettier@3.8.1

Option 2: Manual edit

  1. Add to zmscitizenview/package.json under devDependencies:
"prettier": "^3.8.1"
  1. Regenerate the lock file:
cd zmscitizenview
npm install

After either option, commit both package.json and package-lock.json to this PR. This will resolve the CI build failure.

@ThomasAFink
Copy link
Member Author

Merge when import-js/eslint-plugin-import#3227 is resolved.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
.ddev/config.yaml (1)

89-90: Comment already addressed.

The example comment at line 89 and the version list at line 90 now correctly reflect Node.js 22.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.ddev/config.yaml around lines 89 - 90, The duplicate review marker/comment
has already been addressed but remains in the file; remove the redundant
duplicate comment text and any leftover "[duplicate_comment]" annotation so the
commented example lines for nodejs_version ("# nodejs_version: \"22\"" and the
following explanatory line) remain clean and not duplicated, ensuring the only
references are the commented example and the version list entries.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In @.ddev/config.yaml:
- Around line 89-90: The duplicate review marker/comment has already been
addressed but remains in the file; remove the redundant duplicate comment text
and any leftover "[duplicate_comment]" annotation so the commented example lines
for nodejs_version ("# nodejs_version: \"22\"" and the following explanatory
line) remain clean and not duplicated, ensuring the only references are the
commented example and the version list entries.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e036a9d and eb3b532.

📒 Files selected for processing (1)
  • .ddev/config.yaml

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