chore(deps): wave 3 — tiptap v3 (+ tiptap-markdown 0.9) #43

Merged
rbrooks merged 3 commits from deps/wave-3-tiptap into main 2026-06-25 21:49:20 +00:00
Owner

Wave 3, cluster 3 (final) of the Renovate dependency dashboard (#30) — the editor migration. All four packages are version-coupled and upgraded together.

Changes

Package From To
@tiptap/react ^2.12.0 ^3.27.1
@tiptap/starter-kit ^2.12.0 ^3.27.1
@tiptap/extension-link ^2.12.0 ^3.27.1
tiptap-markdown ^0.8.10 ^0.9.0

Migration (MarkdownEditor.tsx)

Three v3 changes, each surfaced by tsc or a known runtime behaviour:

  1. StarterKit now bundles Link — passed link: false to StarterKit.configure so our custom safe-URL-validating Link is the only one registered. Without this, both register under the name link and our validate: isSafeUrl config would be silently dropped.
  2. setContent signature — the boolean emitUpdate arg became a SetContentOptions object (TS2559): setContent(value, { emitUpdate: false }).
  3. editor.storage.markdown untyped — tiptap-markdown ships no .d.ts, and tiptap v3's Storage interface is empty-by-design (meant to be augmented). Added app/src/tiptap-markdown.d.ts declaring the markdown.getMarkdown() storage shape.

The custom Link.configure({ openOnClick, HTMLAttributes, validate }) needed no changes — those options are unchanged in v3.

Lockfile note

The committed v2 lockfile caused an ERESOLVE against the v3 peer set, so the app lockfile was regenerated from a clean install (tiptap-markdown@0.9.0 peers on @tiptap/core@^3.0.1, so the set resolves cleanly once the stale v2 pins are gone).

Verification (dev server, Node 24 / npm 11)

  • App: tsc + vite build clean · vitest pass · npm audit 0 vulns
  • Runtime smoke test (throwaway, not committed): rendered MarkdownEditor, confirmed it mounts (.ProseMirror present, no duplicate-extension throw), the toolbar renders, and markdown round-trips — **bold**<strong>, and [link](https://example.com)<a href="https://example.com"> (proves our safe-URL Link is active and tiptap-markdown parses under v3).

⚠️ Worth a manual click-through after merge: the editor has no committed test coverage, so the smoke test above was synthetic. Recommend exercising bold/italic/blockquote/lists/inline-code/link buttons and a save round-trip in the running app once deployed.

This completes Wave 3. With #41 (redis) and #42 (react-router), the dashboard's "Pending Approval" majors are all addressed.

🤖 Generated with Claude Code

Wave 3, cluster 3 (final) of the Renovate dependency dashboard (#30) — the editor migration. All four packages are version-coupled and upgraded together. ## Changes | Package | From | To | |---|---|---| | `@tiptap/react` | ^2.12.0 | ^3.27.1 | | `@tiptap/starter-kit` | ^2.12.0 | ^3.27.1 | | `@tiptap/extension-link` | ^2.12.0 | ^3.27.1 | | `tiptap-markdown` | ^0.8.10 | ^0.9.0 | ## Migration ([MarkdownEditor.tsx](app/src/pages/Entries/MarkdownEditor.tsx)) Three v3 changes, each surfaced by `tsc` or a known runtime behaviour: 1. **StarterKit now bundles Link** — passed `link: false` to `StarterKit.configure` so our custom safe-URL-validating `Link` is the only one registered. Without this, both register under the name `link` and our `validate: isSafeUrl` config would be silently dropped. 2. **`setContent` signature** — the boolean `emitUpdate` arg became a `SetContentOptions` object (TS2559): `setContent(value, { emitUpdate: false })`. 3. **`editor.storage.markdown` untyped** — tiptap-markdown ships no `.d.ts`, and tiptap v3's `Storage` interface is empty-by-design (meant to be augmented). Added [app/src/tiptap-markdown.d.ts](app/src/tiptap-markdown.d.ts) declaring the `markdown.getMarkdown()` storage shape. The custom `Link.configure({ openOnClick, HTMLAttributes, validate })` needed no changes — those options are unchanged in v3. ## Lockfile note The committed v2 lockfile caused an `ERESOLVE` against the v3 peer set, so the app lockfile was regenerated from a clean install (`tiptap-markdown@0.9.0` peers on `@tiptap/core@^3.0.1`, so the set resolves cleanly once the stale v2 pins are gone). ## Verification (dev server, Node 24 / npm 11) - **App:** `tsc` + `vite build` clean ✅ · vitest pass ✅ · `npm audit` 0 vulns - **Runtime smoke test** (throwaway, not committed): rendered `MarkdownEditor`, confirmed it mounts (`.ProseMirror` present, no duplicate-extension throw), the toolbar renders, and markdown round-trips — `**bold**` → `<strong>`, and `[link](https://example.com)` → `<a href="https://example.com">` (proves our safe-URL Link is active and tiptap-markdown parses under v3). ⚠️ **Worth a manual click-through after merge:** the editor has no committed test coverage, so the smoke test above was synthetic. Recommend exercising bold/italic/blockquote/lists/inline-code/link buttons and a save round-trip in the running app once deployed. This completes Wave 3. With #41 (redis) and #42 (react-router), the dashboard's "Pending Approval" majors are all addressed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore(deps): tiptap v2 → v3 + tiptap-markdown 0.9
Some checks failed
CI / App — typecheck, test & build (push) Failing after 19s
CI / API — typecheck & tests (push) Successful in 2m10s
92b160eb34
Editor migration; lockfile + code adaptations in follow-up commits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(deps): migrate MarkdownEditor to tiptap v3
All checks were successful
CI / App — typecheck, test & build (push) Successful in 1m19s
CI / App — typecheck, test & build (pull_request) Successful in 1m22s
CI / API — typecheck & tests (push) Successful in 2m7s
CI / API — typecheck & tests (pull_request) Successful in 2m4s
c9982bf819
tiptap v3 API/packaging changes required three editor adaptations:
- StarterKit v3 bundles its own Link extension; pass `link: false` so our
  custom safe-URL-validating Link is the only one registered (avoids a
  duplicate-extension clash that would drop our validation).
- `editor.commands.setContent` dropped the boolean `emitUpdate` arg for a
  `SetContentOptions` object → `setContent(value, { emitUpdate: false })`.
- tiptap-markdown ships no types and tiptap v3's `Storage` interface is
  empty-by-design; add a module augmentation (app/src/tiptap-markdown.d.ts)
  so `editor.storage.markdown.getMarkdown()` type-checks.

Lockfile regenerated clean (the v2 lockfile caused an ERESOLVE on the v3
peer set). Verified on the dev server: app tsc + vite build clean, tests
pass, and a runtime smoke test confirmed the editor mounts and round-trips
markdown (bold + safe links) under v3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into deps/wave-3-tiptap
All checks were successful
CI / App — typecheck, test & build (push) Successful in 2m3s
CI / API — typecheck & tests (push) Successful in 2m41s
CI / API — typecheck & tests (pull_request) Successful in 2m26s
CI / App — typecheck, test & build (pull_request) Successful in 1m0s
9b44b46fea
# Conflicts:
#	app/package-lock.json
#	app/package.json
rbrooks scheduled this pull request to auto merge when all checks succeed 2026-06-25 21:46:57 +00:00
rbrooks deleted branch deps/wave-3-tiptap 2026-06-25 21:49:20 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
rbrooks/TeaLeaves!43
No description provided.