Fix tiptap selection sync and toolbar event loop

This commit is contained in:
lix-2026
2026-04-19 21:03:25 +08:00
parent 111a87d4fd
commit 394e2a155c
87 changed files with 17415 additions and 527 deletions
@@ -7,6 +7,8 @@ import {
buildDocumentQueryEnvelope,
documentBridgeErrorResponse,
} from "@/lib/documents/bridge";
import type { PageSubtreeProjection } from "@/lib/documents/page-subtree";
import { normalizeDocumentContentResponse } from "@/lib/documents/page-subtree-response";
import {
executeRustBridgeQueryTransport,
resolveRustBridgeQueryPlan,
@@ -35,6 +37,8 @@ export async function GET(request: Request) {
content?: unknown;
revision?: number | null;
conflict_detection_key?: string | null;
title?: string | null;
page_subtree?: PageSubtreeProjection | null;
} | null>({
client,
plan,
@@ -54,16 +58,17 @@ export async function GET(request: Request) {
);
}
const normalized = normalizeDocumentContentResponse({
documentId,
title: typeof result.title === "string" && result.title.trim() ? result.title : null,
payload: result,
});
return NextResponse.json({
content: result.content ?? null,
revision:
typeof result.revision === "number" && Number.isInteger(result.revision)
? result.revision
: 0,
conflictDetectionKey:
typeof result.conflict_detection_key === "string" && result.conflict_detection_key.trim()
? result.conflict_detection_key
: `${documentId}:0`,
content: normalized.content,
revision: normalized.revision,
conflictDetectionKey: normalized.conflictDetectionKey,
pageSubtree: normalized.pageSubtree,
meta: {
requestId: bridgeContext.requestId,
traceId: bridgeContext.traceId,