Skip to content

feat: upgrade nx to 22.6.4 and liveblocks to 3.17.0#2627

Open
nperez0111 wants to merge 17 commits intomainfrom
feat/upgrade-nx
Open

feat: upgrade nx to 22.6.4 and liveblocks to 3.17.0#2627
nperez0111 wants to merge 17 commits intomainfrom
feat/upgrade-nx

Conversation

@nperez0111
Copy link
Copy Markdown
Contributor

@nperez0111 nperez0111 commented Apr 3, 2026

Summary

Upgrade nx/​@nx/js from 22.5.4 to 22.6.4 and all Liveblocks packages from the 3.7.1-tiptap3 pre-release to stable 3.17.0, resolving tiptap v2/v3 peer dependency mismatches.

Rationale

The monorepo was using a Liveblocks pre-release (3.7.1-tiptap3) that still declared tiptap v2 peer dependencies, causing unmet peer dependency warnings during install. Liveblocks 3.17.0 now officially supports tiptap v3, eliminating these warnings. The nx upgrade brings the build tooling to the latest patch release.

Changes

  • Upgraded nx and @nx/js from 22.5.4 → 22.6.4
  • Upgraded all @liveblocks/* packages from 3.7.1-tiptap3^3.17.0 in:
    • playground/package.json
    • docs/package.json
    • examples/07-collaboration/02-liveblocks/package.json
    • examples/07-collaboration/02-liveblocks/.bnexample.json
    • playground/src/examples.gen.tsx (auto-generated)
  • Updated pnpm-lock.yaml

Impact

Resolves tiptap v2/v3 peer dependency warnings related to @tiptap/extension-collaboration, @tiptap/extension-collaboration-cursor, and @liveblocks/react-tiptap. No breaking API changes expected — Liveblocks 3.17.0 is the stable release of the tiptap3 pre-release already in use.

Testing

  • pnpm install completes with no tiptap-related peer dependency warnings
  • nx run-many -t build --projects=@blocknote/core builds successfully

Checklist

  • Code follows the project's coding standards.
  • Unit tests covering the new feature have been added.
  • All existing tests pass.
  • The documentation has been updated to reflect the new feature

Summary by CodeRabbit

  • Chores
    • Updated development tooling dependencies (Vite, Vitest, NX) to newer versions across multiple packages.
    • Upgraded Liveblocks packages from version 3.7.1-tiptap3 to ^3.17.0.
    • Refined build configuration for CSS asset handling and dependency externalization in Vite configs.
    • Adjusted test performance parameters and added explicit timeouts.

Upgrade nx and @nx/js from 22.5.4 to 22.6.4. Upgrade all liveblocks
packages from the 3.7.1-tiptap3 pre-release to stable 3.17.0, which
officially supports tiptap v3 and resolves peer dependency mismatches.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 3, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blocknote Ready Ready Preview Apr 4, 2026 9:49am
blocknote-website Ready Ready Preview Apr 4, 2026 9:49am

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 3, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • ✅ Review completed - (🔄 Check again to review again)
📝 Walkthrough

Walkthrough

Updated Liveblocks dependency specifiers from pinned pre-release versions to caret ranges; bumped many dev tooling versions (vite, vitest, @vitejs/plugin-react, nx/@nx/js); enabled analytics in nx.json; added CSS filename and alias settings in multiple Vite configs; replaced a NODE_ENV check with import.meta.env.DEV in a Shiki helper.

Changes

Cohort / File(s) Summary
Liveblocks package updates
docs/package.json, examples/07-collaboration/02-liveblocks/.bnexample.json, examples/07-collaboration/02-liveblocks/package.json, playground/package.json, playground/src/examples.gen.tsx
Replaced pinned 3.7.1-tiptap3 versions for @liveblocks/* with caret ranges ^3.17.0.
Workspace config
package.json, nx.json
Bumped @nx/js and nx to 22.6.4; added "analytics": true to nx.json.
Dev tooling bumps — examples & packages
examples/**/package.json, tests/package.json, playground/package.json, packages/*/package.json
Upgraded devDependencies across many packages/examples (e.g., vite^8.0.3, vitest^4.1.2, @vitejs/plugin-react^6.0.1, plugin bumps). Changes confined to devDependencies.
Vite build output & alias changes
packages/ariakit/vite.config.ts, packages/core/vite.config.ts, packages/mantine/vite.config.ts, packages/react/vite.config.ts, packages/shadcn/vite.config.ts, packages/xl-ai/vite.config.ts, packages/xl-odt-exporter/vite.config.ts
Added build.lib.cssFileName: "style" to several library builds; introduced CSS alias mappings during build to resolve @blocknote/*/style.css; added oxc.jsx.throwIfNamespace = false in xl-odt-exporter config.
Shiki plugin check change
packages/core/src/blocks/Code/shiki.ts
Switched development gating check from process.env.NODE_ENV === "development" to import.meta.env.DEV for a lazy-highlighter warning emission.
Test types update
packages/xl-ai/src/api/formats/tests/sharedTestCases.ts
Changed imported Vitest type and parameter from TaskContext to TestContext in a test helper.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐇 I nibble at versions, swapping pins for carets,

Vite strides on with new-named charts,
DEV now whispers where NODE once stood,
Analytics hums — CSS named good.
🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed Title clearly summarizes the main changes: nx upgrade to 22.6.4 and liveblocks upgrade to 3.17.0, matching the core objective of the PR.
Description check ✅ Passed Description is well-structured with Summary, Rationale, Changes, Impact, Testing sections and a checklist. It clearly explains the upgrades, their motivation, and testing performed.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/upgrade-nx

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.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Apr 3, 2026

Open in StackBlitz

@blocknote/ariakit

npm i https://pkg.pr.new/@blocknote/ariakit@2627

@blocknote/code-block

npm i https://pkg.pr.new/@blocknote/code-block@2627

@blocknote/core

npm i https://pkg.pr.new/@blocknote/core@2627

@blocknote/mantine

npm i https://pkg.pr.new/@blocknote/mantine@2627

@blocknote/react

npm i https://pkg.pr.new/@blocknote/react@2627

@blocknote/server-util

npm i https://pkg.pr.new/@blocknote/server-util@2627

@blocknote/shadcn

npm i https://pkg.pr.new/@blocknote/shadcn@2627

@blocknote/xl-ai

npm i https://pkg.pr.new/@blocknote/xl-ai@2627

@blocknote/xl-docx-exporter

npm i https://pkg.pr.new/@blocknote/xl-docx-exporter@2627

@blocknote/xl-email-exporter

npm i https://pkg.pr.new/@blocknote/xl-email-exporter@2627

@blocknote/xl-multi-column

npm i https://pkg.pr.new/@blocknote/xl-multi-column@2627

@blocknote/xl-odt-exporter

npm i https://pkg.pr.new/@blocknote/xl-odt-exporter@2627

@blocknote/xl-pdf-exporter

npm i https://pkg.pr.new/@blocknote/xl-pdf-exporter@2627

commit: e25fbaa

Copy link
Copy Markdown

@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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@playground/package.json`:
- Line 32: Replace the incorrect dependency entry "@liveblocks/core" with the
public SDK package "@liveblocks/client" in the playground package manifest (keep
the version specifier, e.g. "^3.17.0"); this ensures consistency with examples
that import "@liveblocks/client" and avoids referencing the internal
"@liveblocks/core" package. After changing the dependency string, run your
package manager to update the lockfile and node_modules so the new dependency 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9d1dbc27-314f-4f3d-8de6-d4945cbeb13e

📥 Commits

Reviewing files that changed from the base of the PR and between 38be5fd and f6bfb7e.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • docs/package.json
  • examples/07-collaboration/02-liveblocks/.bnexample.json
  • examples/07-collaboration/02-liveblocks/package.json
  • package.json
  • playground/package.json
  • playground/src/examples.gen.tsx

- vite: ^5.4.20/^6.4.0 → ^8.0.3
- vitest: ^2.1.9 → ^4.1.2
- @vitest/runner: ^2.1.9 → ^4.1.2
- @vitejs/plugin-react: ^4.7.0 → ^6.0.1
- vite-plugin-externalize-deps: ^0.8.0 → ^0.10.0
- vite-plugin-inspect: 11.1.0 → 12.0.0-beta.1
- Replace process.env.NODE_ENV with import.meta.env.DEV in shiki.ts
  (vite 8 no longer bundles @types/node)

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

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/core/src/blocks/Code/shiki.ts`:
- Line 22: The conditional that references import.meta.env.DEV (the line
containing import.meta.env.DEV and the hasWarned check) will blow up in
CJS/Node; replace it with a defensive environment check that first guards
existence (using typeof import !== 'undefined' and checking import.meta and
import.meta.env) and falls back to process.env.NODE_ENV === 'development' so
both ESM and CJS/Node are safe, keeping the hasWarned logic intact; also add a
minimal ambient declaration (.d.ts) for process.env (e.g., declare const
process: { env?: { NODE_ENV?: string } } | undefined) to satisfy TypeScript.

In `@packages/xl-ai-server/package.json`:
- Around line 63-64: The dev dependencies in package.json are inconsistent:
"vite" is bumped to ^8.0.3 but "vite-node" remains ^2.1.9 which is incompatible;
update the manifest so vite-node is upgraded to a v6-compatible version (match
vite@8 / vitest@4 requirements) and ensure the "scripts.dev" entry that invokes
vite-node continues to work; specifically change the vite-node dependency to a
v6.x release compatible with Vite 8 and run/install to verify local dev starts
successfully.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ebd3c74b-3b4f-4ec6-a0cd-708b757b4106

📥 Commits

Reviewing files that changed from the base of the PR and between f6bfb7e and 2525122.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (19)
  • nx.json
  • package.json
  • packages/ariakit/package.json
  • packages/code-block/package.json
  • packages/core/package.json
  • packages/core/src/blocks/Code/shiki.ts
  • packages/mantine/package.json
  • packages/react/package.json
  • packages/server-util/package.json
  • packages/shadcn/package.json
  • packages/xl-ai-server/package.json
  • packages/xl-ai/package.json
  • packages/xl-docx-exporter/package.json
  • packages/xl-email-exporter/package.json
  • packages/xl-multi-column/package.json
  • packages/xl-odt-exporter/package.json
  • packages/xl-pdf-exporter/package.json
  • playground/package.json
  • tests/package.json
✅ Files skipped from review due to trivial changes (14)
  • nx.json
  • packages/xl-multi-column/package.json
  • packages/server-util/package.json
  • packages/core/package.json
  • packages/xl-odt-exporter/package.json
  • packages/mantine/package.json
  • tests/package.json
  • packages/code-block/package.json
  • packages/xl-email-exporter/package.json
  • packages/xl-docx-exporter/package.json
  • packages/react/package.json
  • packages/ariakit/package.json
  • packages/shadcn/package.json
  • package.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • playground/package.json

….json files

The vite v8 upgrade missed updating these 86 example files, causing
pnpm install --frozen-lockfile to fail in CI due to lockfile mismatch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add cssFileName: "style" to lib configs so CSS output keeps the
  expected name (vite 8 changed default from style.css to {entry}.css)
- Add resolve aliases for CSS @import of @blocknote/* packages during
  build (vite 8's postcss-import no longer resolves bare specifiers)
- Set oxc jsx throwIfNamespace: false for xl-odt-exporter (vite 8 uses
  oxc which rejects JSX namespace tags by default)
- Rename TaskContext to TestContext in xl-ai (vitest v4 rename)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The performance tests create 10k-block editors which can exceed the
default 5s vitest timeout on CI runners. Increased to 30s.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The jest/valid-describe-callback rule doesn't allow an options object
as the second argument to describe(). Move timeout to each it() instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Update vite (^5.4.20 → ^8.0.3) and @vitejs/plugin-react (^4.7.0 →
  ^6.0.1) in 86 example package.json files
- Add cssFileName: "style" to lib configs so CSS output keeps the
  expected name (vite 8 changed default from style.css to {entry}.css)
- Add resolve aliases for CSS @import of @blocknote/* packages during
  build (vite 8's postcss-import no longer resolves bare specifiers)
- Set oxc jsx throwIfNamespace: false for xl-odt-exporter (vite 8 uses
  oxc which rejects JSX namespace tags by default)
- Rename TaskContext to TestContext in xl-ai (vitest v4 rename)
- Update MSW snapshot file hashes for xl-ai tests (request body hashes
  changed with dependency upgrades)
- Add global process type declaration for shiki.ts NODE_ENV check
- Reduce performance test iterations to prevent CI timeout flakiness

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The interop: "compat" output option was removed in Rollup 4 (used by Vite 8) since compat is now the default behavior. Removing it eliminates the "Invalid output options" warning during builds.

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

Rolldown (used by Vite 8) preserves CJS require() calls for non-externalized
dependencies. The external function used exact matching with .includes(source),
which missed subpath imports like "use-sync-external-store/shim/with-selector".
This caused require("react") to fail at runtime in the browser with
"Calling require in an environment that doesn't expose the require function".

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Switch playground @liveblocks/core to @liveblocks/client to match other
manifests, and upgrade vite-node to ^6.0.0 for vite 8 compatibility.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ProseMirror's DOMObserver timeout fires after jsdom teardown, causing
"document is not defined" ReferenceError. Adding editor.unmount() at
the end of each test ensures proper cleanup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Exclude .next/cache from build:site outputs to reduce cache bloat
- Remove unused dist output from build:site (docs uses .next)
- Exclude non-build files (sqlite.db, .env*, coverage) from build:site inputs
- Fix test/e2e dependsOn to use build deps instead of cascading test/e2e deps

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

When Nx runs builds in parallel and restores core/react from remote cache,
multiple tsc --build processes simultaneously try to rebuild the same project
references, causing race conditions where one process reads partially-written
declaration files. Since Nx already handles dependency ordering via ^build,
the project reference traversal in tsc --build is redundant.

Affected packages: xl-pdf-exporter, xl-docx-exporter, xl-odt-exporter, xl-ai

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

@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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/core/src/extensions/Collaboration/ForkYDoc.test.ts`:
- Line 56: Each test in ForkYDoc.test.ts currently calls editor.unmount() at the
end but leaves it out if an assertion throws; wrap each test body in a
try/finally so editor cleanup always runs (move the editor.unmount() call into
the finally block). Locate the three tests that instantiate the editor
(references to the editor variable in the test functions around the current end
calls) and update them to ensure editor.unmount() is executed in finally,
guaranteeing Yjs/editor resources are released even on failure.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b29e7e20-ee51-431e-80e8-e8985a6db4bc

📥 Commits

Reviewing files that changed from the base of the PR and between f5f1863 and e25fbaa.

⛔ Files ignored due to path filters (88)
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/Add heading (h1) and code block_1_144961d511efe7e04c44ff79ecabf43e.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/add a list (end)_1_ca20c0b56ff3bdfe67f76b3e1b3c82bc.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/add a new paragraph (empty doc)_1_509f796014e0dae8a4a50e1aaab8a378.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/add a new paragraph (end)_1_f4419c510915474907ca2fb35f92d2b8.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/add a new paragraph (start)_1_3426f436a5b272f3b8e26edcec43fdae.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/Add heading (h1) and code block_1_3f0b847de3745c61a82e3a9728770d4d.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/add a list (end)_1_680d0a41316e174365d11814e9df7fda.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/add a new paragraph (empty doc)_1_3f2fffcfa733575ca2a6c4f9d1a8f615.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/add a new paragraph (end)_1_04b2bff7b39bfda09c5d3f116cbb53b9.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/add a new paragraph (start)_1_45ec5a1e5fa6757f02843c8803e7a334.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/Add heading (h1) and code block_1_ece60088a9ecb6767d83b6584bbec6d9.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/add a list (end)_1_64e60c0c2add32fbfe1da823b8c7990a.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/add a new paragraph (empty doc)_1_100f09592ece8a32c33dff2dc612c649.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/add a new paragraph (end)_1_a2a9884926fbc5218a3f00c9952cefd5.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Add/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/add a new paragraph (start)_1_c85bbb5cec5410289d652e15b2df6fa3.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/add and update paragraph_1_380a0c02b5089b38247457135c044cf7.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/add paragraph and update selection_1_298b51bb28c5f95ab9a00205d4e38460.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/add and update paragraph_1_f6253c11196abdbeae0f898cc9df85eb.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/add paragraph and update selection_1_dc29d735348684d1ec3e290ad8c03a71.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/add and update paragraph_1_a27ae10badcc3913a00eb86f77ac64db.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/add paragraph and update selection_1_86f10ca461ee44e74ae571fb9f214338.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/delete first block_1_91346200727a71ab9ad8c5d014835688.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/delete first block_1_150a539024aa981c9f6bcb068875a6c9.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/delete first block_1_1b3c4ac85d448677697457098332ceba.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/clear block formatting_1_fc858b37cc10ed7b65802375977eaf7a.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/drop mark and link and change text within mark_1_fe3cac9da9d1e17a20ee8c0c4380d925.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/drop mark and link_1_f6ee881e6d3b4cd9553256523e67683a.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/fix spelling mid-word selection_1_360f2cf4db48ef5b92c8e24ed0998167.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/modify nested content_1_a57d7364de9ba3d72686aca4f3c424e4.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/modify parent content_1_5f7043c9275e742ea47f92b66e65a845.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/plain source block, add mention_1_ccd752aefdbc2252a5a09bebac393afb.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/standard update_1_c44a31a1631a3a10efcd5e17645998f1.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/styles + ic in source block, remove mark_1_df177a6a4f26b0fbcba307c6d21cab76.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/styles + ic in source block, remove mention_1_4ba9f3411694f807e85e8e33f4b3c8cd.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/styles + ic in source block, replace content_1_f5b001d0f8415a00e8b043f3e3e33535.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/styles + ic in source block, update mention prop_1_c197e3f5ce1dbc1a68765acbd198881a.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/styles + ic in source block, update text_1_a0b93418bb2a5c0049e0a5c896f72191.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/styles + ic in target block, add mark (paragraph)_1_fb2285b8d362cb8adcf78f6039ad3058.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/styles + ic in target block, add mark (word)_1_e0087b91327576eaff9f8d4d368e0a03.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/translate selection_1_4706b49daa5ad7afe9dfadded2e335c5.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/turn paragraphs into list_1_a3ce79b4f32d1dd6ac04dbe6b69e187b.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/update block prop and content_1_5bb684c9ae46815b5367a39bd42d5257.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/update block prop_1_8469a78802d46f3d9ec74dd1fbf49fd8.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/update block type and content_1_226cc5d7352c8c7e58a15d064543518c.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/update block type_1_c4cc00889532e0baa73998da5e79c303.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/clear block formatting_1_6c08229db90214b8a20b0d7dfefb2824.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/drop mark and link and change text within mark_1_e5c77f0f881e77f6ee27a25f203ffdcb.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/drop mark and link_1_b93576392cb38dc57acd85f7fc55c6cd.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/fix spelling mid-word selection_1_9c19d479f2d356a48480d5ec5e384229.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/modify nested content_1_f42fc26924afc557d18ef6696f36a8fa.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/modify parent content_1_e8424752b43fa146d8575a475924de52.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/plain source block, add mention_1_b18afae076d7f7f423477f1e1bc5813a.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/standard update_1_529e09ae665507a31316cb632f5cabcd.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/styles + ic in source block, remove mark_1_20036398e12cf4a20b50024ad5f30018.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/styles + ic in source block, remove mention_1_ed131f0383e7709a4e5fae2df28af29a.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/styles + ic in source block, replace content_1_51bfdc443e43bbf18599fcc3a16c5683.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/styles + ic in source block, update mention prop_1_7641f5691799d2666855c113b6659b71.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/styles + ic in source block, update text_1_8fcb24a91437026c480205de77507871.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/styles + ic in target block, add mark (paragraph)_1_be126322b804c53145dbd35a6aa1131f.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/styles + ic in target block, add mark (word)_1_ec13a3b1d4f97b79148833b507295ffa.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/translate selection_1_f1a2ffb178b441d40625b8f110e3290f.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/turn paragraphs into list_1_8367ba81813ffe9d2d17f2de266f3039.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/update block prop and content_1_8557c5a4249c324adfff5d243645e3de.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/update block prop_1_16dda1caa1f43ab624eb28a605179dd3.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/update block type and content_1_8b167672c96bf3c69b9b146eb4f26451.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/update block type_1_7326b3d0db43c8f399aba2bc44c80194.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/clear block formatting_1_651c2e0b4f940c6cece61513462d2ddd.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/drop mark and link and change text within mark_1_94f36faff958747b5d66a185e268bba7.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/drop mark and link_1_60bf97139612cd25b1f99502383df8aa.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/fix spelling mid-word selection_1_db44da41b500c6883e215f2b6d013f58.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/modify nested content_1_f3a35d9120c6ff0e02a89548d8349363.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/modify parent content_1_7205cf7ec3d86e8ebd9c555028c5db74.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/plain source block, add mention_1_d5759fe9868f60a47538d31361c68b3c.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/standard update_1_f6a167a6ea376d70d84dd9aac6ac7bb3.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/styles + ic in source block, remove mark_1_990c696cfe9af87de056328060fd1f93.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/styles + ic in source block, remove mention_1_fd4deb4dce4d79ae14939fda71c510fd.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/styles + ic in source block, replace content_1_6cd810cd03bff509578637fe27d13a92.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/styles + ic in source block, update mention prop_1_f0e30d1d6cbc94e6b7dcb8abb7e0221f.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/styles + ic in source block, update text_1_1104dff815f18f8f786fb7d4e4522d47.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/styles + ic in target block, add mark (paragraph)_1_e2f4cdb3df42b17c74cd1d2d00d2f8d5.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/styles + ic in target block, add mark (word)_1_6b5073ce92485be7974a344d50247b4a.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/translate selection_1_d343e10867cc7b3d9850847c99826b61.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/turn paragraphs into list_1_3373025fd96315ed15342f3a3a727771.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/update block prop and content_1_780bfe04d42dd48e9115cba7c4582c01.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/update block prop_1_667c03220ba6e678d0c91b9de092484b.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/update block type and content_1_f3c6521f6f12dc50dc16d0bbc277a858.json is excluded by !**/__snapshots__/**
  • packages/xl-ai/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/update block type_1_7c4fbdcabcec0568ade27d2b47afbaab.json is excluded by !**/__snapshots__/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (28)
  • docs/package.json
  • examples/07-collaboration/02-liveblocks/package.json
  • nx.json
  • package.json
  • packages/ariakit/vite.config.ts
  • packages/code-block/vite.config.ts
  • packages/core/src/editor/performance.test.ts
  • packages/core/src/extensions/Collaboration/ForkYDoc.test.ts
  • packages/core/src/index.ts
  • packages/core/src/vite-env.d.ts
  • packages/core/vite.config.ts
  • packages/mantine/vite.config.ts
  • packages/react/vite.config.ts
  • packages/server-util/vite.config.ts
  • packages/shadcn/vite.config.ts
  • packages/xl-ai-server/package.json
  • packages/xl-ai-server/vite.config.ts
  • packages/xl-ai/package.json
  • packages/xl-ai/vite.config.ts
  • packages/xl-docx-exporter/package.json
  • packages/xl-docx-exporter/vite.config.ts
  • packages/xl-email-exporter/vite.config.ts
  • packages/xl-multi-column/vite.config.ts
  • packages/xl-odt-exporter/package.json
  • packages/xl-odt-exporter/vite.config.ts
  • packages/xl-pdf-exporter/package.json
  • packages/xl-pdf-exporter/vite.config.ts
  • playground/package.json
✅ Files skipped from review due to trivial changes (5)
  • packages/core/src/vite-env.d.ts
  • packages/core/src/index.ts
  • examples/07-collaboration/02-liveblocks/package.json
  • package.json
  • packages/xl-ai-server/package.json
🚧 Files skipped from review as they are similar to previous changes (13)
  • packages/xl-docx-exporter/package.json
  • packages/core/vite.config.ts
  • packages/xl-pdf-exporter/package.json
  • packages/xl-ai/package.json
  • packages/xl-odt-exporter/vite.config.ts
  • packages/core/src/editor/performance.test.ts
  • packages/xl-odt-exporter/package.json
  • packages/ariakit/vite.config.ts
  • nx.json
  • docs/package.json
  • packages/shadcn/vite.config.ts
  • packages/mantine/vite.config.ts
  • playground/package.json

"__snapshots__/fork-yjs-snap-editor-forked.json",
);

editor.unmount();
Copy link
Copy Markdown

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
set -euo pipefail

python - <<'PY'
from pathlib import Path
import re

path = Path("packages/core/src/extensions/Collaboration/ForkYDoc.test.ts")
text = path.read_text()

blocks = re.split(r'\nit\(', text)
for i, b in enumerate(blocks[1:], 1):
    blk = "it(" + b
    title = re.search(r'it\("([^"]+)"', blk).group(1)
    has_unmount = "editor.unmount()" in blk
    has_finally = "finally" in blk
    print(f"{i}. {title}: unmount={has_unmount}, finally={has_finally}")
PY

Repository: TypeCellOS/BlockNote

Length of output: 254


🏁 Script executed:

cat -n packages/core/src/extensions/Collaboration/ForkYDoc.test.ts | head -80

Repository: TypeCellOS/BlockNote

Length of output: 2600


🏁 Script executed:

cat -n packages/core/src/extensions/Collaboration/ForkYDoc.test.ts | sed -n '100,130p'

Repository: TypeCellOS/BlockNote

Length of output: 1103


🏁 Script executed:

cat -n packages/core/src/extensions/Collaboration/ForkYDoc.test.ts | sed -n '160,180p'

Repository: TypeCellOS/BlockNote

Length of output: 538


🏁 Script executed:

rg -A 20 "editor.unmount\(\)" packages/core/src/extensions/Collaboration/ --type ts

Repository: TypeCellOS/BlockNote

Length of output: 3690


🏁 Script executed:

rg "try\s*\{[\s\S]*finally\s*\{[\s\S]*editor\.unmount" packages/core/src/extensions/ -A 5 --type ts

Repository: TypeCellOS/BlockNote

Length of output: 46


🏁 Script executed:

fd -e test.ts -e test.tsx packages/core/src --exec grep -l "editor.unmount\|\.unmount()" {} \;

Repository: TypeCellOS/BlockNote

Length of output: 437


🏁 Script executed:

rg "finally\s*\{" packages/core/src/extensions --type ts -B 10 | head -50

Repository: TypeCellOS/BlockNote

Length of output: 46


🏁 Script executed:

rg "\\.mount\\(" packages/core/src/extensions --type ts -A 15 | grep -A 15 "finally"

Repository: TypeCellOS/BlockNote

Length of output: 46


🏁 Script executed:

fd . 'packages/core/src' -e test.ts --exec grep -l "unmount\|teardown\|cleanup" {} \;

Repository: TypeCellOS/BlockNote

Length of output: 218


🏁 Script executed:

rg "afterEach|beforeEach|afterAll|beforeAll" packages/core/src --type ts -A 3 | head -40

Repository: TypeCellOS/BlockNote

Length of output: 3029


🏁 Script executed:

rg "try\s*\{" packages/core --type ts | head -20

Repository: TypeCellOS/BlockNote

Length of output: 743


🏁 Script executed:

cat packages/core/src/editor/BlockNoteEditor.test.ts | head -60

Repository: TypeCellOS/BlockNote

Length of output: 1686


🏁 Script executed:

rg "editor.unmount\(\)|editor._tiptapEditor.destroy" packages/core/src/editor/BlockNoteEditor.test.ts -B 5 -A 2

Repository: TypeCellOS/BlockNote

Length of output: 342


Wrap test bodies in try/finally to guarantee editor cleanup

If any assertion fails before the tail editor.unmount() call (lines 56, 114, 172), cleanup is skipped, leaking editor and Yjs resources between tests. This applies to all three tests in this file.

Proposed fix pattern (apply to all 3 tests)
 it("can fork a document", async () => {
   const doc = new Y.Doc();
   const fragment = doc.getXmlFragment("doc");
   const editor = BlockNoteEditor.create({
@@
   const div = document.createElement("div");
   editor.mount(div);
-
-  editor.replaceBlocks(editor.document, [
-    {
-      type: "paragraph",
-      content: [{ text: "Hello", styles: {}, type: "text" }],
-    },
-  ]);
-
-  await expect(fragment.toJSON()).toMatchFileSnapshot(
-    "__snapshots__/fork-yjs-snap.html",
-  );
-  await expect(editor.document).toMatchFileSnapshot(
-    "__snapshots__/fork-yjs-snap-editor.json",
-  );
-
-  editor.getExtension(ForkYDocExtension)!.fork();
-
-  editor.replaceBlocks(editor.document, [
-    {
-      type: "paragraph",
-      content: [{ text: "Hello World", styles: {}, type: "text" }],
-    },
-  ]);
-
-  await expect(fragment.toJSON()).toMatchFileSnapshot(
-    "__snapshots__/fork-yjs-snap.html",
-  );
-  await expect(editor.document).toMatchFileSnapshot(
-    "__snapshots__/fork-yjs-snap-editor-forked.json",
-  );
-
-  editor.unmount();
+  try {
+    editor.replaceBlocks(editor.document, [
+      {
+        type: "paragraph",
+        content: [{ text: "Hello", styles: {}, type: "text" }],
+      },
+    ]);
+
+    await expect(fragment.toJSON()).toMatchFileSnapshot(
+      "__snapshots__/fork-yjs-snap.html",
+    );
+    await expect(editor.document).toMatchFileSnapshot(
+      "__snapshots__/fork-yjs-snap-editor.json",
+    );
+
+    editor.getExtension(ForkYDocExtension)!.fork();
+
+    editor.replaceBlocks(editor.document, [
+      {
+        type: "paragraph",
+        content: [{ text: "Hello World", styles: {}, type: "text" }],
+      },
+    ]);
+
+    await expect(fragment.toJSON()).toMatchFileSnapshot(
+      "__snapshots__/fork-yjs-snap.html",
+    );
+    await expect(editor.document).toMatchFileSnapshot(
+      "__snapshots__/fork-yjs-snap-editor-forked.json",
+    );
+  } finally {
+    editor.unmount();
+  }
 });

Also applies to: 114-114, 172-172

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

In `@packages/core/src/extensions/Collaboration/ForkYDoc.test.ts` at line 56, Each
test in ForkYDoc.test.ts currently calls editor.unmount() at the end but leaves
it out if an assertion throws; wrap each test body in a try/finally so editor
cleanup always runs (move the editor.unmount() call into the finally block).
Locate the three tests that instantiate the editor (references to the editor
variable in the test functions around the current end calls) and update them to
ensure editor.unmount() is executed in finally, guaranteeing Yjs/editor
resources are released even on failure.

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