From a13be544feed82fde5fa6c5cf4f97ac05305dfa3 Mon Sep 17 00:00:00 2001 From: naaiyy Date: Mon, 31 Aug 2026 15:45:04 +0200 Subject: [PATCH] refactor: align BaseBlocks with OpenEditor 0.0.55 --- .../pages/[pageId]/export/page-export.test.ts | 2 +- .../app/api/pages/[pageId]/export/route.ts | 2 +- .../openeditor/use-versioned-page-document.ts | 2 +- apps/web/package.json | 12 +++--- bun.lock | 42 +++++++++---------- packages/backend/convex/pageContentFormat.ts | 6 ++- packages/backend/package.json | 6 +-- packages/custom-blocks/package.json | 4 +- packages/openeditor-contracts/package.json | 8 ++-- packages/openeditor-contracts/src/index.ts | 16 ++++--- 10 files changed, 51 insertions(+), 49 deletions(-) diff --git a/apps/web/app/api/pages/[pageId]/export/page-export.test.ts b/apps/web/app/api/pages/[pageId]/export/page-export.test.ts index 927ae1c9..73d01ec7 100644 --- a/apps/web/app/api/pages/[pageId]/export/page-export.test.ts +++ b/apps/web/app/api/pages/[pageId]/export/page-export.test.ts @@ -3,7 +3,7 @@ import { createOpenEditorImageAssetResolver, exportOpenEditorDocument, } from "@openeditor/export/export"; -import { projectBaseBlocksDocumentForPortableExport } from "@baseblocks/openeditor-contracts"; +import { projectBaseBlocksDocumentForPortableExport } from "@baseblocks/openeditor-contracts/portable-export"; import { assertStoredChecksum, detectRasterMediaType, diff --git a/apps/web/app/api/pages/[pageId]/export/route.ts b/apps/web/app/api/pages/[pageId]/export/route.ts index f2026c65..5849404f 100644 --- a/apps/web/app/api/pages/[pageId]/export/route.ts +++ b/apps/web/app/api/pages/[pageId]/export/route.ts @@ -12,7 +12,7 @@ import { readSource, } from "@baseblocks/anydoc-contracts/sources"; import { api } from "@baseblocks/backend"; -import { projectBaseBlocksDocumentForPortableExport } from "@baseblocks/openeditor-contracts"; +import { projectBaseBlocksDocumentForPortableExport } from "@baseblocks/openeditor-contracts/portable-export"; import { baseBlocksBlockRegistry } from "@baseblocks/openeditor-contracts/block-registry"; import { isOpenEditorDocument } from "@openeditor/document"; import { diff --git a/apps/web/features/openeditor/use-versioned-page-document.ts b/apps/web/features/openeditor/use-versioned-page-document.ts index cc189093..49d5c033 100644 --- a/apps/web/features/openeditor/use-versioned-page-document.ts +++ b/apps/web/features/openeditor/use-versioned-page-document.ts @@ -7,7 +7,7 @@ import { hasSameChildPageProjection, hasSameNonPageContent, reconcileChildPageProjection, -} from "@baseblocks/openeditor-contracts"; +} from "@baseblocks/openeditor-contracts/page-projection"; import type { SaveStatus } from "@baseblocks/domain"; import type { OpenEditorDocument } from "@openeditor/document"; import { useCallback, useEffect, useRef, useState } from "react"; diff --git a/apps/web/package.json b/apps/web/package.json index 79e97d6b..dd627b10 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -30,12 +30,12 @@ "@flags-sdk/vercel": "^1.4.6", "@hugeicons/core-free-icons": "^4.2.3", "@hugeicons/react": "^1.1.9", - "@openeditor/custom-block": "0.0.53", - "@openeditor/document": "0.0.53", - "@openeditor/export": "0.0.53", - "@openeditor/mutations": "0.0.53", - "@openeditor/react": "0.0.53", - "@openeditor/ui": "0.0.53", + "@openeditor/custom-block": "0.0.55", + "@openeditor/document": "0.0.55", + "@openeditor/export": "0.0.55", + "@openeditor/mutations": "0.0.55", + "@openeditor/react": "0.0.55", + "@openeditor/ui": "0.0.55", "@vercel/analytics": "^2.0.1", "@vercel/sdk": "^1.28.8", "ai": "7.0.49", diff --git a/bun.lock b/bun.lock index 35f61416..94fb4930 100644 --- a/bun.lock +++ b/bun.lock @@ -34,12 +34,12 @@ "@flags-sdk/vercel": "^1.4.6", "@hugeicons/core-free-icons": "^4.2.3", "@hugeicons/react": "^1.1.9", - "@openeditor/custom-block": "0.0.53", - "@openeditor/document": "0.0.53", - "@openeditor/export": "0.0.53", - "@openeditor/mutations": "0.0.53", - "@openeditor/react": "0.0.53", - "@openeditor/ui": "0.0.53", + "@openeditor/custom-block": "0.0.55", + "@openeditor/document": "0.0.55", + "@openeditor/export": "0.0.55", + "@openeditor/mutations": "0.0.55", + "@openeditor/react": "0.0.55", + "@openeditor/ui": "0.0.55", "@vercel/analytics": "^2.0.1", "@vercel/sdk": "^1.28.8", "ai": "7.0.49", @@ -91,9 +91,9 @@ "@convex-dev/workpool": "^0.4.9", "@firecrawl/anydoc": "0.1.9", "@noble/hashes": "2.0.1", - "@openeditor/custom-block": "0.0.53", - "@openeditor/document": "0.0.53", - "@openeditor/mutations": "0.0.53", + "@openeditor/custom-block": "0.0.55", + "@openeditor/document": "0.0.55", + "@openeditor/mutations": "0.0.55", "@polar-sh/sdk": "0.49.0", "ai": "7.0.49", "better-auth": "^1.6.23", @@ -121,8 +121,8 @@ "@dnd-kit/react": "^0.5.0", "@hugeicons/core-free-icons": "^4.2.3", "@hugeicons/react": "^1.1.9", - "@openeditor/custom-block": "0.0.53", - "@openeditor/document": "0.0.53", + "@openeditor/custom-block": "0.0.55", + "@openeditor/document": "0.0.55", "react": "19.2.7", }, "devDependencies": { @@ -154,8 +154,8 @@ "version": "0.0.0", "dependencies": { "@baseblocks/custom-blocks": "workspace:*", - "@openeditor/document": "0.0.53", - "@openeditor/engine": "0.0.53", + "@openeditor/document": "0.0.55", + "@openeditor/engine": "0.0.55", }, "devDependencies": { "@baseblocks/tsconfig": "workspace:*", @@ -668,21 +668,21 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@openeditor/custom-block": ["@openeditor/custom-block@0.0.53", "", { "dependencies": { "@openeditor/document": "0.0.53" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-ofs3bHKzhf5Kv1pIFDR4ehshADl7H6iHnzY/hpP+Duosbex0Fdq7h7w2sgFLBtgfXkZl8+dk8uRWfiyjjhjekw=="], + "@openeditor/custom-block": ["@openeditor/custom-block@0.0.55", "", { "dependencies": { "@openeditor/document": "0.0.55" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-tdocUZULPEGjTnI8zYYwQLOhdoBYxnmqhllxrZ51zYEhbKFgSElfiB42gFOWWo+7+ykUh6Bmcouynh5VZAxKyQ=="], - "@openeditor/document": ["@openeditor/document@0.0.53", "", { "dependencies": { "emojibase-data": "16.0.2" } }, "sha512-NKzkmAY941o42gkXU8CeaNRMuvN/ADEXzmxLeMWi9cK5dtrm0LUrGrd0V97dGctiMaZrlKntJjrAifKzjmR/Fg=="], + "@openeditor/document": ["@openeditor/document@0.0.55", "", { "dependencies": { "emojibase-data": "16.0.2" } }, "sha512-kQ4DIvdffAgnpVrMGUCdn2Kf+i7N8E9jMbf5GzW5hatxnp+JOXpzfh/KIDQCyLlIc2qB83jaBBHOuJJ5B+Ojcg=="], - "@openeditor/engine": ["@openeditor/engine@0.0.53", "", { "dependencies": { "@openeditor/document": "0.0.53", "@tiptap/core": "3.29.2", "@tiptap/extension-blockquote": "3.29.2", "@tiptap/extension-bold": "3.29.2", "@tiptap/extension-bullet-list": "3.29.2", "@tiptap/extension-code": "3.29.2", "@tiptap/extension-code-block": "3.29.2", "@tiptap/extension-document": "3.29.2", "@tiptap/extension-dropcursor": "3.29.2", "@tiptap/extension-gapcursor": "3.29.2", "@tiptap/extension-hard-break": "3.29.2", "@tiptap/extension-heading": "3.29.2", "@tiptap/extension-horizontal-rule": "3.29.2", "@tiptap/extension-image": "3.29.2", "@tiptap/extension-italic": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-list": "3.29.2", "@tiptap/extension-list-item": "3.29.2", "@tiptap/extension-list-keymap": "3.29.2", "@tiptap/extension-ordered-list": "3.29.2", "@tiptap/extension-paragraph": "3.29.2", "@tiptap/extension-strike": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-text": "3.29.2", "@tiptap/extension-text-align": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/extension-unique-id": "3.29.2", "@tiptap/extensions": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/starter-kit": "3.29.2" } }, "sha512-DT5Kc2sT8KXu5oBdAm18LbRYVb2Q1G0k+afjK+S6WrbV1L3cIpUCAwAmz8x7Tpkw40OmFIyxjv9iLZzRMHk0Dg=="], + "@openeditor/engine": ["@openeditor/engine@0.0.55", "", { "dependencies": { "@openeditor/document": "0.0.55", "@tiptap/core": "3.29.2", "@tiptap/extension-blockquote": "3.29.2", "@tiptap/extension-bold": "3.29.2", "@tiptap/extension-bullet-list": "3.29.2", "@tiptap/extension-code": "3.29.2", "@tiptap/extension-code-block": "3.29.2", "@tiptap/extension-document": "3.29.2", "@tiptap/extension-dropcursor": "3.29.2", "@tiptap/extension-gapcursor": "3.29.2", "@tiptap/extension-hard-break": "3.29.2", "@tiptap/extension-heading": "3.29.2", "@tiptap/extension-horizontal-rule": "3.29.2", "@tiptap/extension-image": "3.29.2", "@tiptap/extension-italic": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-list": "3.29.2", "@tiptap/extension-list-item": "3.29.2", "@tiptap/extension-list-keymap": "3.29.2", "@tiptap/extension-ordered-list": "3.29.2", "@tiptap/extension-paragraph": "3.29.2", "@tiptap/extension-strike": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-text": "3.29.2", "@tiptap/extension-text-align": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/extension-unique-id": "3.29.2", "@tiptap/extensions": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/starter-kit": "3.29.2" } }, "sha512-pFZa843KdgGL5RndVvnDlGq8vfDZoppGDk2S1TVeIumLVua/1rvyuX3O/7cMwYt8dHGnpFLS2wRRD57f7hV72A=="], - "@openeditor/export": ["@openeditor/export@0.0.53", "", { "dependencies": { "@openeditor/document": "0.0.53", "docx": "^9.7.1", "jszip": "^3.10.1", "parse5": "^7.3.0" } }, "sha512-BGbdX/SRNxZC/ADcBRNkiDIWCKs8d9M17Ib1JlQwJldq+Q/dT1FX7DFjB9fq5TzKwE67SQC4VePOSxt5WxT22g=="], + "@openeditor/export": ["@openeditor/export@0.0.55", "", { "dependencies": { "@openeditor/document": "0.0.55", "docx": "^9.7.1", "jszip": "^3.10.1", "parse5": "^7.3.0" } }, "sha512-C8IJ/Q1+m3VWDA3rFq3WDm1XpVbAGaum7jX0X3oavYmlxkRE/7GyEIazRL1VBteGKag0pqcIo253PNx9Q9K3Eg=="], - "@openeditor/icons": ["@openeditor/icons@0.0.53", "", { "dependencies": { "@hugeicons/core-free-icons": "^4.2.3" } }, "sha512-beMpUIz/kkrx0prRY22rW7hyqDby4EXJ8ljcZcGy2vvIzKixVydSJI8yZf++hrL/zU9wOp/c6BLzjv3XgmwFHQ=="], + "@openeditor/icons": ["@openeditor/icons@0.0.55", "", { "dependencies": { "@hugeicons/core-free-icons": "^4.2.3" } }, "sha512-HovuSDJbN/j7kGT7cSH0fuFia+YSZHzTZp88hqzfMObtIuDRtbSdFbwpMsEcLePIU4oYfO6VT9h6+UqGSyugHA=="], - "@openeditor/mutations": ["@openeditor/mutations@0.0.53", "", { "dependencies": { "@openeditor/document": "0.0.53" } }, "sha512-XRJjVJCAPCJc51FbclLo7CSnE5L8IaZpr6mI4ldo/WF/x72gvwBqRaJlRwMarLg92CJOFCB13bTsOZVNdI20lQ=="], + "@openeditor/mutations": ["@openeditor/mutations@0.0.55", "", { "dependencies": { "@openeditor/document": "0.0.55" } }, "sha512-WFrx2gt+NJMaUioDfFhRsoSJGwFuXbLMDmj+ZQUjXfa4UjiSwok7CeEy0RSEyeXolhfjpaCKIHthn8bipzLpQA=="], - "@openeditor/react": ["@openeditor/react@0.0.53", "", { "dependencies": { "@floating-ui/dom": "^1.7.4", "@hugeicons/react": "^1.1.9", "@openeditor/custom-block": "0.0.53", "@openeditor/document": "0.0.53", "@openeditor/engine": "0.0.53", "@openeditor/export": "0.0.53", "@openeditor/icons": "0.0.53", "@tiptap/core": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-placeholder": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/react": "3.29.2", "@tiptap/suggestion": "3.29.2", "beautiful-mermaid": "1.1.3", "use-sync-external-store": "1.6.0" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-VrrQHAizwV6RFqRDfZzGoEjMRRbjOEdZgE93cjGW7RTZK1GDQeDEyAwzfe4oTnBCPdQZB6XRBddjgBAIRZqOow=="], + "@openeditor/react": ["@openeditor/react@0.0.55", "", { "dependencies": { "@floating-ui/dom": "^1.7.4", "@hugeicons/react": "^1.1.9", "@openeditor/custom-block": "0.0.55", "@openeditor/document": "0.0.55", "@openeditor/engine": "0.0.55", "@openeditor/icons": "0.0.55", "@tiptap/core": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-placeholder": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/react": "3.29.2", "@tiptap/suggestion": "3.29.2", "beautiful-mermaid": "1.1.3", "use-sync-external-store": "1.6.0" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-C+jFFKMeuYV26GgEH8/82G+8uKx6Msb64FeICywwjAZKI80/ACT2aT7IGxJAqaoAXJcKkMIShq/CdBxRbocX6A=="], - "@openeditor/ui": ["@openeditor/ui@0.0.53", "", { "dependencies": { "@base-ui/react": "^1.6.0", "@hugeicons/react": "^1.1.9", "@openeditor/document": "0.0.53", "@openeditor/icons": "0.0.53", "@openeditor/react": "0.0.53", "frimousse": "0.3.0" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-430T5bpXcaPivih8viiDsiJjgJ5G+XuD12eU2+x0qfxQSAqL6NT+vSAitllCdSoqpV8a+dwG9BtTJ5dJ/l+M6Q=="], + "@openeditor/ui": ["@openeditor/ui@0.0.55", "", { "dependencies": { "@base-ui/react": "^1.6.0", "@hugeicons/react": "^1.1.9", "@openeditor/document": "0.0.55", "@openeditor/icons": "0.0.55", "@openeditor/react": "0.0.55", "frimousse": "0.3.0" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-l7n7eYYMbp5ERMiUj1WXQDfR45JdYH/f2E4lvER0ADF0OzDpi4bQDcHrloB7g7El9WL+ECcW+fV1PPsmB5XxRQ=="], "@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], diff --git a/packages/backend/convex/pageContentFormat.ts b/packages/backend/convex/pageContentFormat.ts index 015bae2f..a7fefdaa 100644 --- a/packages/backend/convex/pageContentFormat.ts +++ b/packages/backend/convex/pageContentFormat.ts @@ -6,11 +6,13 @@ import { import { assertBaseBlocksDocument, baseBlocksDocumentContract, - projectChildPages, validateBaseBlocksNestedDocument, - type ChildPageProjection, } from "@baseblocks/openeditor-contracts"; import { baseBlocksBlockRegistry } from "@baseblocks/openeditor-contracts/block-registry"; +import { + projectChildPages, + type ChildPageProjection, +} from "@baseblocks/openeditor-contracts/page-projection"; import { sha256 } from "@noble/hashes/sha2.js"; import { bytesToHex, utf8ToBytes } from "@noble/hashes/utils.js"; diff --git a/packages/backend/package.json b/packages/backend/package.json index e8c0d482..0ab05783 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -43,9 +43,9 @@ "@convex-dev/workpool": "^0.4.9", "@firecrawl/anydoc": "0.1.9", "@noble/hashes": "2.0.1", - "@openeditor/custom-block": "0.0.53", - "@openeditor/document": "0.0.53", - "@openeditor/mutations": "0.0.53", + "@openeditor/custom-block": "0.0.55", + "@openeditor/document": "0.0.55", + "@openeditor/mutations": "0.0.55", "@polar-sh/sdk": "0.49.0", "ai": "7.0.49", "better-auth": "^1.6.23", diff --git a/packages/custom-blocks/package.json b/packages/custom-blocks/package.json index 5b4fde75..58e05fa6 100644 --- a/packages/custom-blocks/package.json +++ b/packages/custom-blocks/package.json @@ -23,8 +23,8 @@ "@dnd-kit/react": "^0.5.0", "@hugeicons/core-free-icons": "^4.2.3", "@hugeicons/react": "^1.1.9", - "@openeditor/custom-block": "0.0.53", - "@openeditor/document": "0.0.53", + "@openeditor/custom-block": "0.0.55", + "@openeditor/document": "0.0.55", "react": "19.2.7" }, "devDependencies": { diff --git a/packages/openeditor-contracts/package.json b/packages/openeditor-contracts/package.json index 8b3a176c..bd29a537 100644 --- a/packages/openeditor-contracts/package.json +++ b/packages/openeditor-contracts/package.json @@ -8,7 +8,9 @@ "exports": { ".": "./src/index.ts", "./block-registry": "./src/block-registry.ts", - "./core-blocks": "./src/core-blocks.ts" + "./core-blocks": "./src/core-blocks.ts", + "./page-projection": "./src/page-projection.ts", + "./portable-export": "./src/portable-export.ts" }, "scripts": { "check-types": "tsc --noEmit", @@ -17,8 +19,8 @@ }, "dependencies": { "@baseblocks/custom-blocks": "workspace:*", - "@openeditor/document": "0.0.53", - "@openeditor/engine": "0.0.53" + "@openeditor/document": "0.0.55", + "@openeditor/engine": "0.0.55" }, "devDependencies": { "@baseblocks/tsconfig": "workspace:*", diff --git a/packages/openeditor-contracts/src/index.ts b/packages/openeditor-contracts/src/index.ts index dde77300..a096f5ae 100644 --- a/packages/openeditor-contracts/src/index.ts +++ b/packages/openeditor-contracts/src/index.ts @@ -4,7 +4,6 @@ import { validateDocument, type BlockSpec, type OpenEditorValueSchema, - type ProseMirrorNode, } from "@openeditor/document"; import { validateOpenEditorEngineDocument } from "@openeditor/engine"; import { @@ -14,9 +13,6 @@ import { defaultNodeSpecs, } from "@openeditor/document"; -export * from "./page-projection"; -export * from "./portable-export"; - const text = (maxLength: number): OpenEditorValueSchema => ({ type: "string", maxLength, @@ -72,7 +68,13 @@ export const pageTabsBlockSpec: BlockSpec = { }, }, }), - support: { web: "supported", native: "unsupported" }, + support: { + web: "supported", + native: "unsupported", + viewer: "unsupported", + html: "unsupported", + plainText: "unsupported", + }, schema: { attributes: { properties: { @@ -215,7 +217,3 @@ export const assertBaseBlocksDocument = (document: unknown): void => { .join("\n"), ); }; - -export type BaseBlocksCustomNode = ProseMirrorNode & { - type: "customBlock" | "baseblocksPageTabs"; -};