Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,26 +78,26 @@
"@types/lodash": "^4.17.20",
"@types/react": "^18.0.26",
"@types/react-addons-linked-state-mixin": "^0.14.22",
"@typescript-eslint/eslint-plugin": "^6.1.0",
"@typescript-eslint/parser": "^6.1.0",
"css-loader": "^6.7.1",
"eslint": "^8.36.0",
"eslint-config-prettier": "^8.8.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
Comment on lines +81 to +82
Copy link
Contributor

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

🌐 Web query:

@typescript-eslint 8.0 breaking changes ESLint compatibility

💡 Result:

Short answer — for @typescript-eslint v8 the important ESLint-compatibility changes are:

  • v8 adds full support for ESLint v9. [1]
  • The ESLint peer requirement was tightened (minimum changed around the v8 release; v8 requires ESLint ^8.57.0). [1][2]
  • Expect a few rule deprecations/renames and tooling/parser option changes (projectService, parserOptions behavior) tied to the upgrade; these are documented in the v8 release notes. [1]

Sources: [1] typescript-eslint v8 release notes; [2] ESLint v8 → v8.0.0 migration guide.


🌐 Web query:

@typescript-eslint version history v7 v8 releases

💡 Result:

Summary — @typescript-eslint v7 and v8 (major releases)

  • v7 (major): v7.0.0 released Feb 12, 2024 — introduced flat-config support and bumped peer requirements (Node/TypeScript/ESLint). [1][2]
  • v8 (major): v8 was announced (beta) in mid‑2024 and promoted to stable in the v8 blog post; v8 adds full ESLint v9 support and the stable "project service" (stable v8 rollout occurred around July 2024). [3][4]

Sources

  1. typescript-eslint v7.0.0 release notes (release entry). [GitHub / release summary]. [turn3search4]
  2. typescript-eslint releases / older-versions documentation (v7 docs link). [turn0search0]
  3. Announcing typescript-eslint v8 (blog — stable). [turn4search5]
  4. Announcing typescript-eslint v8 Beta / v8 planning & community references (planning / timeline and ecosystem updates, incl. July 31, 2024 milestone). [turn3search0][turn1search3]

If you want, I can list notable v7→v8 breaking changes and the exact upgrade steps for each @typescript-eslint package.


🌐 Web query:

@typescript-eslint 8.0 migration guide configuration changes

💡 Result:

Key config changes when migrating to @typescript-eslint v8

  • Package consolidation: v8 provides a combined package (typescript-eslint) that bundles the parser and plugin; you can uninstall separate @typescript-eslint/parser and @typescript-eslint/eslint-plugin and install the new package (or use the new @8 tag). [1][2]

  • Install command change (example): npm i typescript-eslint@8 --save-dev (or the release-candidate / rc tag during beta). [1][6]

  • Recommended configs reworked: v8 ships updated/reworked recommended configurations — update your extends to the new recommended configs and prefer them if you haven’t updated your lint config in a while. [1]

  • Flat config support / legacy configs: v8 supports ESLint’s flat config format; docs show both flat and legacy (.eslintrc) usage and recommend migrating where appropriate. If moving to flat config, follow ESLint’s config migration guide. [2][0]

  • Migration steps / action items:

    1. Replace separate packages with the v8 package (or update @typescript-eslint/* packages to ^8.x). [2]
    2. Update your ESLint config to use the v8 recommended rules (check typescript-eslint docs for exact extends names). [1]
    3. If you use typed rules, ensure parserOptions.project and file globs are still correct for type-aware linting. (See v8 getting-started / typed-linting docs for details.) [2]
    4. Run lint and fix new/changed rule outputs; consult the v8 release notes for rule-specific breaking changes. [1]

References
[1] typescript-eslint — “Announcing typescript-eslint v8” (upgrade notes, recommended configs).
[2] typescript-eslint packages / getting-started & config docs (migration, flat vs legacy config).


Update ESLint peer requirement and verify config compatibility with v8.

@typescript-eslint v8 requires ESLint ^8.57.0 (tightened from v6). Verify your ESLint version and update eslint config: recommended configs changed in v8, and if using type-aware linting, parserOptions.project may need adjustment. See typescript-eslint v8 migration guide.

🤖 Prompt for AI Agents
In package.json around lines 81-82, the pinned @typescript-eslint packages are
v8 but v8 requires ESLint >=8.57.0; update package.json to pin eslint to ^8.57.0
(or a compatible ^8.x >=8.57.0) and ensure related plugin/formatter versions are
compatible, then update your ESLint config to match typescript-eslint v8
migration: replace/adjust any deprecated recommended configs, confirm extends
uses the v8-recommended names, and if you use type-aware rules set
parserOptions.project to a correct tsconfig path or glob (and ensure project
files are included), run npm/yarn install and lint to verify no new rule errors
and fix config issues reported by ESLint.

"css-loader": "^7.0.0",
"eslint": "^9.0.0",
Copy link
Contributor

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

🌐 Web query:

ESLint 9.0.0 breaking changes migration guide flat config

💡 Result:

Summary of the v9 flat-config / breaking-change items and quick migration steps

Key changes you need to know

  • Flat config (eslint.config.js) is now the default configuration format; eslintrc is deprecated (you can keep it by setting ES LINT_USE_FLAT_CONFIG=false). [1][2]
  • ESLint’s CLI behavior: with flat config, running eslint with no file patterns defaults to linting the current directory (equivalent to passing .); eslintrc users will get an error unless they pass --pass-on-no-patterns. [2]
  • "eslint:recommended" and "eslint:all" are not accepted in flat config. Translate those rules into flat config entries. [2]
  • The Linter and tooling expect flat config (FlatESLint → ESLint; Linter expects flat format). RuleTester (formerly FlatRuleTester) defaults changed (languageOptions defaults to latest/module). Update tests accordingly. [2]
  • Some rules, schemas, and CLI behaviors tightened (examples: unused-disable-directive warnings by default, stricter rule schemas, new defaults for certain rules). Review the full breaking-changes list. [1][2]

Minimal migration checklist

  1. Read the official migration guide and breaking-changes list. [2]
  2. Run the configuration migrator to convert .eslintrc* to a flat config (eslint.config.js). Follow the Configuration Migration Guide for translating keys (env, parser, parserOptions → languageOptions, plugins, overrides → files/ignores, etc.). [3]
  3. Replace uses of "eslint:recommended" / "eslint:all" with explicit rule entries in your flat config. [2]
  4. Update tests and rule authoring:
    • Use the new RuleTester (FlatRuleTester removed). Move parserOptions → languageOptions and set explicit ecmaVersion/sourceType if you relied on old defaults. [2]
    • Ensure rules declare meta.schema (function-style rules removed). [2]
  5. Adjust CI/CLI calls:
    • If you want the old behavior when no patterns passed, add --pass-on-no-patterns.
    • Consider --report-unused-disable-directives-severity or set linterOptions.reportUnusedDisableDirectives if you need old behavior for unused disables. [1][2]
  6. If you need to keep using eslintrc for now, set the env var ES LINT_USE_FLAT_CONFIG=false (temporary). Plan to migrate because eslintrc is deprecated. [1][2]

References

  • ESLint v9.0.0 release notes (breaking changes, flat config default). [1]
  • Migrate to v9.x (detailed breaking changes & guidance). [2]
  • Configuration Migration Guide (how to convert eslintrc → flat config and key translations). [3]

Would you like me to run the config migrator on a sample .eslintrc file you paste here and produce an eslint.config.js for you?


🏁 Script executed:

# Read the package.json file, specifically around lines 142-184 to see the eslintConfig
head -n 190 package.json | tail -n 60 | cat -n

Repository: deepnote/jupyterlab-deepnote

Length of output: 2275


Migrate eslintConfig to flat config format.

ESLint v9 defaults to flat config; your eslintConfig uses the deprecated eslintrc format. Migrate package.json lines 142–184 to eslint.config.js. Specifically, "eslint:recommended" (line 14) is not accepted in flat config and must be replaced with explicit rules. See the ESLint migration guide.

"eslint-config-prettier": "^10.0.0",
Comment on lines +81 to +85
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# First, let's look at the package.json file around the specified lines
head -n 110 package.json | tail -n 40

Repository: deepnote/jupyterlab-deepnote

Length of output: 1398


🏁 Script executed:

# Also check if there are configuration files for the tools mentioned
fd -e "\.eslintrc|\.stylelintrc|jest\.config" .

Repository: deepnote/jupyterlab-deepnote

Length of output: 54


🏁 Script executed:

# Check if there's a git history showing what changed
git log --oneline -n 1 -- package.json

Repository: deepnote/jupyterlab-deepnote

Length of output: 115


🏁 Script executed:

# Check git diff to see what the actual changes were
git diff HEAD~1 package.json | head -n 100

Repository: deepnote/jupyterlab-deepnote

Length of output: 258


🏁 Script executed:

# Check for configuration files for the tools mentioned
find . -maxdepth 2 -type f \( -name ".eslintrc*" -o -name "eslint.config.*" -o -name ".stylelintrc*" -o -name "jest.config.*" -o -name "prettier.config.*" \)

Repository: deepnote/jupyterlab-deepnote

Length of output: 88


🏁 Script executed:

# Check if package-lock.json or yarn.lock exists to see lock status
ls -la package-lock.json yarn.lock 2>&1 | head -5

Repository: deepnote/jupyterlab-deepnote

Length of output: 197


🏁 Script executed:

# Check what scripts are available in package.json
grep -A 20 '"scripts":' package.json

Repository: deepnote/jupyterlab-deepnote

Length of output: 1640


🏁 Script executed:

# Check the jest.config.js to see if it needs updates
cat jest.config.js

Repository: deepnote/jupyterlab-deepnote

Length of output: 861


🏁 Script executed:

# Search for eslint configuration
find . -maxdepth 2 -type f -name "eslint.config.*" -o -name ".eslintrc*"

Repository: deepnote/jupyterlab-deepnote

Length of output: 54


🏁 Script executed:

# Check for eslint configuration - ESLint 9 uses eslint.config.js or .eslintrc
find . -maxdepth 2 -type f \( -name "eslint.config.js" -o -name ".eslintrc.js" -o -name ".eslintrc.json" -o -name ".eslintrc" \)

Repository: deepnote/jupyterlab-deepnote

Length of output: 54


🏁 Script executed:

# Check if there's a stylelint config
find . -maxdepth 2 -type f \( -name ".stylelintrc*" -o -name "stylelint.config.*" \)

Repository: deepnote/jupyterlab-deepnote

Length of output: 54


🏁 Script executed:

# Check the full scripts section to see if test exists
grep -A 30 '"scripts":' package.json | grep test

Repository: deepnote/jupyterlab-deepnote

Length of output: 106


🏁 Script executed:

# Check if there are any references to ESLint legacy config
grep -r "eslintConfig" . --include="*.json" --include="*.js" 2>/dev/null | head -5

Repository: deepnote/jupyterlab-deepnote

Length of output: 108


🏁 Script executed:

# Check the actual versions in node_modules to understand the state
grep -A 2 '"eslint"' package.json
grep -A 2 '"jest"' package.json

Repository: deepnote/jupyterlab-deepnote

Length of output: 426


🏁 Script executed:

# Check what's in the eslintConfig section of package.json
sed -n '/"eslintConfig"/,/^    }/p' package.json

Repository: deepnote/jupyterlab-deepnote

Length of output: 1507


🏁 Script executed:

# Check if ESLint 9 is looking for eslint.config.js specifically
grep -i "flat\|config" package.json | head -10

Repository: deepnote/jupyterlab-deepnote

Length of output: 441


ESLint 9 incompatibility: Project uses legacy eslintConfig format but ESLint 9 requires flat config.

Major version bumps (ESLint 8→9, Jest 29→30, TypeScript ESLint 6→8, stylelint 15→16) include breaking changes. ESLint 9 specifically requires either an eslint.config.js file or explicit legacy config support—the current eslintConfig in package.json will not work.

Before merge, either:

  1. Migrate to ESLint 9 flat config format (add eslint.config.js)
  2. Downgrade ESLint to ^8.x
  3. Configure ESLint 9 to use legacy config explicitly

Also verify Jest 30 compatibility and run npm run lint:check and npm run test to confirm pipeline passes.

🤖 Prompt for AI Agents
package.json lines 81-85: current bump to "eslint": "^9.0.0" is incompatible
with the legacy eslintConfig in package.json; either migrate to ESLint 9 flat
config, pin ESLint to v8, or enable legacy config support. Fix by one of three
actions: (A) create an eslint.config.js at repo root implementing the flat
config equivalent of your existing package.json eslintConfig and update
package.json scripts if needed; (B) revert the eslint dependency to a caret
range compatible with v8 (e.g. "^8.x") in package.json to keep the existing
legacy config; or (C) explicitly configure ESLint 9 to load the legacy config
(add the compatibility package/flag recommended in ESLint docs) and verify
package.json still works. After applying one of these, update package.json
dependency versions accordingly and run npm run lint:check and npm run test to
ensure pipeline compatibility.

"eslint-plugin-prettier": "^5.0.0",
"husky": "9.1.7",
"jest": "^29.2.0",
"jest": "^30.0.0",
Copy link
Contributor

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

🌐 Web query:

Jest 30.0 breaking changes migration guide

💡 Result:

Here are the key breaking changes in Jest 30 and concise migration steps.

Quick install

  • npm install jest@^30.0.0. [1]

Major breaking changes (summary)

  • Dropped Node support: 14, 16, 19, 21 — run on a supported Node version (>=18/20 family as appropriate). [1][3]
  • TypeScript: minimum supported TS is 5.4 — upgrade your toolchain if needed. [1]
  • jsdom: jest-environment-jsdom upgraded (jsdom 21 → 26) — update any jsdom-specific expectations. [1]
  • Removed expect alias matchers — replace aliases with canonical names (there are autofixers in eslint-plugin-jest / Nx migrations). [1][6]
  • Asymmetric matcher behavior changed: objectContaining no longer matches arrays or non‑enumerable props; use arrayContaining, ArrayOf, or direct array asserts and adjust length checks. [2][4]
  • Non-enumerable object properties excluded from object matchers by default — adjust tests that relied on those. [1][2]
  • Snapshot printing changed — you may need to update snapshots. [1]
  • CLI/config rename: --testPathPattern → --testPathPatterns; globalsCleanupMode renamed to globalsCleanup; waitNextEventLoopTurnForUnhandledRejectionEvents → --waitForUnhandledRejections. [3]
  • .mts/.cts are supported by default — ensure loaders/build tools handle them correctly. [1]
  • Jest packages now bundle internals into single files and use "exports" (ESM wrappers) — any deep/undocumented internal imports will break; switch to public APIs or request an export. [2][5]
  • Promise handling: fixed false-positive failures for promises rejected then caught — review tests that relied on previous behavior. [1]

Concrete migration checklist

  1. Upgrade Node and TypeScript to minimum supported versions (Node: use a supported LTS; TS >= 5.4). [1]
  2. npm install jest@^30.0.0 and run your test suite to surface failures. [1]
  3. Replace removed matcher aliases (run eslint-plugin-jest autofix or use provided Nx migrations). [1][6]
  4. Update tests that used expect.objectContaining with arrays or length objects:
    • Use expect.arrayContaining([...]) or direct array comparisons, and use toHaveLength or .mock.calls checks for lengths. [4]
  5. Update snapshots (run tests with -u to update, review diffs). [1]
  6. Remove any deep imports into Jest internals; use public APIs or open a PR to expose needed APIs. [2][5]
  7. Update CLI flags/config names if you use renamed options. [3]
  8. Verify jsdom-dependent tests after the jsdom version bump. [1]
  9. Run full CI and fix any additional failures (promise handling, non-enumerable props, .mts/.cts issues). [1][2]

References

  • Jest 30 release blog (overview & breaking changes). [1]
  • Upgrading to Jest 30 / versioned migration docs (internals, bundling, exports). [2]
  • Jest GitHub releases / changelog (flags, rename summary). [3]
  • Example migration notes (Backstage/Nx examples for array/objectContaining and matcher alias fixes). [4][6]

If you want, I can: (a) produce a codemod to replace common alias matchers in your repo, (b) scan a package.json + a few test files and point out likely breakages, or (c) generate exact grep/sed commands to find deep imports and removed CLI flags. Which would you like?


Jest 30 upgrade requires migration work.

Jest 30 drops support for Node 14/16/19/21, requires TypeScript ≥5.4, and changes critical matcher behavior (e.g., objectContaining no longer matches arrays; expect alias matchers removed). Update tests for asymmetric matcher changes, review snapshots, and verify Node/TypeScript versions before upgrading.

🤖 Prompt for AI Agents
In package.json around line 88, the project bumps jest to ^30.0.0 which requires
migration work: ensure CI and local environments run a supported Node version
(upgrade project/engines to a supported Node, e.g., 18/20, and drop
14/16/19/21), upgrade TypeScript to >=5.4 and update tsconfig if needed, update
tests to handle Jest 30 asymmetric matcher changes (replace objectContaining
usages that relied on array-matching, adjust tests to use explicit array
matchers or transform expectations), remove any usages of removed expect alias
matchers and replace with supported matcher alternatives, review and update
snapshots where output changed, run the full test suite and fix any failing
tests, and update CI matrix and package.json devDependencies accordingly before
merging.

"lint-staged": "16.2.3",
"mkdirp": "^1.0.3",
"npm-run-all2": "^7.0.1",
"mkdirp": "^3.0.0",
"npm-run-all2": "^8.0.0",
"prettier": "^3.0.0",
"rimraf": "^5.0.1",
"source-map-loader": "^1.0.2",
"style-loader": "^3.3.1",
"stylelint": "^15.10.1",
"stylelint-config-recommended": "^13.0.0",
"stylelint-config-standard": "^34.0.0",
"rimraf": "^6.0.0",
"source-map-loader": "^5.0.0",
"style-loader": "^4.0.0",
"stylelint": "^16.0.0",
"stylelint-config-recommended": "^17.0.0",
"stylelint-config-standard": "^39.0.0",
"stylelint-csstree-validator": "^3.0.0",
"stylelint-prettier": "^4.0.0",
"stylelint-prettier": "^5.0.0",
"typescript": "~5.8.0",
"yjs": "^13.5.0"
},
Expand Down
Loading