From fd6d96a38ee62fb6d058c7cd6db48e32a10519a2 Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Wed, 26 Feb 2025 14:15:03 +0000 Subject: [PATCH] refactor(editor): use transformer from store when possible (#10453) --- .../src/edgeless/clipboard/clipboard.ts | 21 ++---------- .../src/edgeless/services/template.ts | 13 ++----- .../src/edgeless/utils/clone-utils.ts | 12 ++----- .../block-root/src/transformers/html.ts | 17 +++------- .../block-root/src/transformers/markdown.ts | 34 +++++-------------- .../shared/src/services/drag-handle-config.ts | 2 +- .../src/watchers/drag-event-watcher.ts | 2 +- .../block-std/src/clipboard/index.ts | 2 +- .../block-std/src/scope/block-std-scope.ts | 15 -------- .../framework/store/src/model/store/store.ts | 15 ++++++++ .../apps/_common/components/adapters-panel.ts | 29 ++++++---------- .../_common/components/starter-debug-menu.ts | 30 ++++------------ packages/frontend/apps/android/src/app.tsx | 18 +++------- packages/frontend/apps/ios/src/app.tsx | 18 +++------- .../ai/mini-mindmap/mindmap-preview.ts | 12 ++----- .../core/src/blocksuite/ai/utils/extract.ts | 19 +++-------- .../src/blocksuite/utils/markdown-utils.ts | 31 +++++------------ 17 files changed, 75 insertions(+), 215 deletions(-) diff --git a/blocksuite/affine/block-root/src/edgeless/clipboard/clipboard.ts b/blocksuite/affine/block-root/src/edgeless/clipboard/clipboard.ts index ed9bf3a434..58262c93bc 100644 --- a/blocksuite/affine/block-root/src/edgeless/clipboard/clipboard.ts +++ b/blocksuite/affine/block-root/src/edgeless/clipboard/clipboard.ts @@ -64,7 +64,6 @@ import { BlockSnapshotSchema, fromJSON, type SliceSnapshot, - Transformer, } from '@blocksuite/store'; import DOMPurify from 'dompurify'; import * as Y from 'yjs'; @@ -373,15 +372,7 @@ export class EdgelessClipboardController extends PageClipboard { if (mayBeSurfaceDataJson !== undefined) { const elementsRawData = JSON.parse(mayBeSurfaceDataJson); const { snapshot, blobs } = elementsRawData; - const job = new Transformer({ - schema: this.std.store.schema, - blobCRUD: this.std.workspace.blobSync, - docCRUD: { - create: (id: string) => this.std.workspace.createDoc({ id }), - get: (id: string) => this.std.workspace.getDoc(id), - delete: (id: string) => this.std.workspace.removeDoc(id), - }, - }); + const job = this.std.store.getTransformer(); const map = job.assetsManager.getAssets(); decodeClipboardBlobs(blobs, map); for (const blobId of map.keys()) { @@ -1377,15 +1368,7 @@ export async function prepareClipboardData( selectedAll: GfxModel[], std: BlockStdScope ) { - const job = new Transformer({ - schema: std.store.schema, - blobCRUD: std.workspace.blobSync, - docCRUD: { - create: (id: string) => std.workspace.createDoc({ id }), - get: (id: string) => std.workspace.getDoc(id), - delete: (id: string) => std.workspace.removeDoc(id), - }, - }); + const job = std.store.getTransformer(); const selected = await Promise.all( selectedAll.map(async selected => { const data = serializeElement(selected, selectedAll, job); diff --git a/blocksuite/affine/block-root/src/edgeless/services/template.ts b/blocksuite/affine/block-root/src/edgeless/services/template.ts index 80556a59eb..ccae73170b 100644 --- a/blocksuite/affine/block-root/src/edgeless/services/template.ts +++ b/blocksuite/affine/block-root/src/edgeless/services/template.ts @@ -16,7 +16,7 @@ import { type DocSnapshot, DocSnapshotSchema, type SnapshotNode, - Transformer, + type Transformer, } from '@blocksuite/store'; import type * as Y from 'yjs'; /** @@ -90,16 +90,7 @@ export class TemplateJob { type: TemplateType; constructor({ model, type, middlewares }: TemplateJobConfig) { - this.job = new Transformer({ - schema: model.doc.schema, - blobCRUD: model.doc.workspace.blobSync, - docCRUD: { - create: (id: string) => model.doc.workspace.createDoc({ id }), - get: (id: string) => model.doc.workspace.getDoc(id), - delete: (id: string) => model.doc.workspace.removeDoc(id), - }, - middlewares: [], - }); + this.job = model.doc.getTransformer(); this.model = model; this.type = TEMPLATE_TYPES.includes(type as TemplateType) ? (type as TemplateType) diff --git a/blocksuite/affine/block-root/src/edgeless/utils/clone-utils.ts b/blocksuite/affine/block-root/src/edgeless/utils/clone-utils.ts index 5b9c810184..3df306128b 100644 --- a/blocksuite/affine/block-root/src/edgeless/utils/clone-utils.ts +++ b/blocksuite/affine/block-root/src/edgeless/utils/clone-utils.ts @@ -19,7 +19,7 @@ import { isGfxGroupCompatibleModel, type SerializedElement, } from '@blocksuite/block-std/gfx'; -import { type BlockSnapshot, Transformer } from '@blocksuite/store'; +import type { BlockSnapshot, Transformer } from '@blocksuite/store'; /** * return all elements in the tree of the elements @@ -40,15 +40,7 @@ export function getSortedCloneElements(elements: GfxModel[]) { export function prepareCloneData(elements: GfxModel[], std: BlockStdScope) { elements = sortEdgelessElements(elements); - const job = new Transformer({ - schema: std.store.schema, - blobCRUD: std.workspace.blobSync, - docCRUD: { - create: (id: string) => std.workspace.createDoc({ id }), - get: (id: string) => std.workspace.getDoc(id), - delete: (id: string) => std.workspace.removeDoc(id), - }, - }); + const job = std.store.getTransformer(); const res = elements.map(element => { const data = serializeElement(element, elements, job); return data; diff --git a/blocksuite/affine/block-root/src/transformers/html.ts b/blocksuite/affine/block-root/src/transformers/html.ts index c9802d11cd..2c6a421f02 100644 --- a/blocksuite/affine/block-root/src/transformers/html.ts +++ b/blocksuite/affine/block-root/src/transformers/html.ts @@ -43,19 +43,10 @@ function getProvider() { */ async function exportDoc(doc: Store) { const provider = getProvider(); - const job = new Transformer({ - schema: doc.schema, - blobCRUD: doc.blobSync, - docCRUD: { - create: (id: string) => doc.workspace.createDoc({ id }), - get: (id: string) => doc.workspace.getDoc(id), - delete: (id: string) => doc.workspace.removeDoc(id), - }, - middlewares: [ - docLinkBaseURLMiddleware(doc.workspace.id), - titleMiddleware(doc.workspace.meta.docMetas), - ], - }); + const job = doc.getTransformer([ + docLinkBaseURLMiddleware(doc.workspace.id), + titleMiddleware(doc.workspace.meta.docMetas), + ]); const snapshot = job.docToSnapshot(doc); const adapter = new HtmlAdapter(job, provider); if (!snapshot) { diff --git a/blocksuite/affine/block-root/src/transformers/markdown.ts b/blocksuite/affine/block-root/src/transformers/markdown.ts index 991d38d7d7..b2d1d4df1e 100644 --- a/blocksuite/affine/block-root/src/transformers/markdown.ts +++ b/blocksuite/affine/block-root/src/transformers/markdown.ts @@ -49,19 +49,10 @@ type ImportMarkdownZipOptions = { */ async function exportDoc(doc: Store) { const provider = getProvider(); - const job = new Transformer({ - schema: doc.schema, - blobCRUD: doc.blobSync, - docCRUD: { - create: (id: string) => doc.workspace.createDoc({ id }), - get: (id: string) => doc.workspace.getDoc(id), - delete: (id: string) => doc.workspace.removeDoc(id), - }, - middlewares: [ - docLinkBaseURLMiddleware(doc.workspace.id), - titleMiddleware(doc.workspace.meta.docMetas), - ], - }); + const job = doc.getTransformer([ + docLinkBaseURLMiddleware(doc.workspace.id), + titleMiddleware(doc.workspace.meta.docMetas), + ]); const snapshot = job.docToSnapshot(doc); const adapter = new MarkdownAdapter(job, provider); @@ -109,19 +100,10 @@ async function importMarkdownToBlock({ blockId, }: ImportMarkdownToBlockOptions) { const provider = getProvider(); - const job = new Transformer({ - schema: doc.schema, - blobCRUD: doc.blobSync, - docCRUD: { - create: (id: string) => doc.workspace.createDoc({ id }), - get: (id: string) => doc.workspace.getDoc(id), - delete: (id: string) => doc.workspace.removeDoc(id), - }, - middlewares: [ - defaultImageProxyMiddleware, - docLinkBaseURLMiddleware(doc.workspace.id), - ], - }); + const job = doc.getTransformer([ + defaultImageProxyMiddleware, + docLinkBaseURLMiddleware(doc.workspace.id), + ]); const adapter = new MarkdownAdapter(job, provider); const snapshot = await adapter.toSliceSnapshot({ file: markdown, diff --git a/blocksuite/affine/shared/src/services/drag-handle-config.ts b/blocksuite/affine/shared/src/services/drag-handle-config.ts index 39334a649a..457135552e 100644 --- a/blocksuite/affine/shared/src/services/drag-handle-config.ts +++ b/blocksuite/affine/shared/src/services/drag-handle-config.ts @@ -37,7 +37,7 @@ export class DNDAPIExtension extends Extension { const { docId, flavour = 'affine:embed-linked-doc', blockId } = options; const slice = Slice.fromModels(this.std.store, []); - const job = this.std.getTransformer(); + const job = this.std.store.getTransformer(); const snapshot = job.sliceToSnapshot(slice); if (!snapshot) { console.error('Failed to convert slice to snapshot'); diff --git a/blocksuite/affine/widget-drag-handle/src/watchers/drag-event-watcher.ts b/blocksuite/affine/widget-drag-handle/src/watchers/drag-event-watcher.ts index 6f06b0e64b..b4cdcab702 100644 --- a/blocksuite/affine/widget-drag-handle/src/watchers/drag-event-watcher.ts +++ b/blocksuite/affine/widget-drag-handle/src/watchers/drag-event-watcher.ts @@ -1354,7 +1354,7 @@ export class DragEventWatcher { middlewares.push(gfxBlocksFilter(selectedIds, std)); } - return std.getTransformer(middlewares); + return std.store.getTransformer(middlewares); } private _isDropOnCurrentEditor(std?: BlockStdScope) { diff --git a/blocksuite/framework/block-std/src/clipboard/index.ts b/blocksuite/framework/block-std/src/clipboard/index.ts index fd5c6f6328..e1209daa10 100644 --- a/blocksuite/framework/block-std/src/clipboard/index.ts +++ b/blocksuite/framework/block-std/src/clipboard/index.ts @@ -285,7 +285,7 @@ export class Clipboard extends LifeCycleWatcher { } private _getJob() { - return this.std.getTransformer(this._jobMiddlewares); + return this.std.store.getTransformer(this._jobMiddlewares); } readFromClipboard(clipboardData: DataTransfer) { diff --git a/blocksuite/framework/block-std/src/scope/block-std-scope.ts b/blocksuite/framework/block-std/src/scope/block-std-scope.ts index 7217343072..636ca2e405 100644 --- a/blocksuite/framework/block-std/src/scope/block-std-scope.ts +++ b/blocksuite/framework/block-std/src/scope/block-std-scope.ts @@ -4,8 +4,6 @@ import { type ExtensionType, type Store, StoreSelectionExtension, - Transformer, - type TransformerMiddleware, } from '@blocksuite/store'; import { Clipboard } from '../clipboard/index.js'; @@ -140,19 +138,6 @@ export class BlockStdScope { return this.getOptional(BlockViewIdentifier(flavour)); } - getTransformer(middlewares: TransformerMiddleware[] = []) { - return new Transformer({ - schema: this.store.schema, - blobCRUD: this.workspace.blobSync, - docCRUD: { - create: (id: string) => this.workspace.createDoc({ id }), - get: (id: string) => this.workspace.getDoc(id), - delete: (id: string) => this.workspace.removeDoc(id), - }, - middlewares, - }); - } - mount() { this._lifeCycleWatchers.forEach(watcher => { watcher.mounted(); diff --git a/blocksuite/framework/store/src/model/store/store.ts b/blocksuite/framework/store/src/model/store/store.ts index 683d422b12..834fd62bb5 100644 --- a/blocksuite/framework/store/src/model/store/store.ts +++ b/blocksuite/framework/store/src/model/store/store.ts @@ -9,6 +9,8 @@ import { StoreSelectionExtension, } from '../../extension/index.js'; import { Schema } from '../../schema/index.js'; +import type { TransformerMiddleware } from '../../transformer/middleware.js'; +import { Transformer } from '../../transformer/transformer.js'; import { Block, type BlockModel, @@ -715,4 +717,17 @@ export class Store { get getOptional() { return this.provider.getOptional.bind(this.provider); } + + getTransformer(middlewares: TransformerMiddleware[] = []) { + return new Transformer({ + schema: this.schema, + blobCRUD: this.workspace.blobSync, + docCRUD: { + create: (id: string) => this.workspace.createDoc({ id }), + get: (id: string) => this.workspace.getDoc(id), + delete: (id: string) => this.workspace.removeDoc(id), + }, + middlewares, + }); + } } diff --git a/blocksuite/playground/apps/_common/components/adapters-panel.ts b/blocksuite/playground/apps/_common/components/adapters-panel.ts index e2f52a6a66..649fb5d125 100644 --- a/blocksuite/playground/apps/_common/components/adapters-panel.ts +++ b/blocksuite/playground/apps/_common/components/adapters-panel.ts @@ -16,7 +16,7 @@ import { } from '@blocksuite/blocks'; import { WithDisposable } from '@blocksuite/global/utils'; import type { TestAffineEditorContainer } from '@blocksuite/integration-test'; -import { type DocSnapshot, Transformer } from '@blocksuite/store'; +import type { DocSnapshot } from '@blocksuite/store'; import { effect } from '@preact/signals-core'; import type SlTabPanel from '@shoelace-style/shoelace/dist/components/tab-panel/tab-panel.js'; import { css, html, type PropertyValues } from 'lit'; @@ -101,24 +101,15 @@ export class AdaptersPanel extends WithDisposable(ShadowlessElement) { } private _createJob() { - return new Transformer({ - schema: this.doc.schema, - blobCRUD: this.doc.blobSync, - docCRUD: { - create: (id: string) => this.doc.workspace.createDoc({ id }), - get: (id: string) => this.doc.workspace.getDoc(id), - delete: (id: string) => this.doc.workspace.removeDoc(id), - }, - middlewares: [ - docLinkBaseURLMiddlewareBuilder( - 'https://example.com', - this.doc.workspace.id - ).get(), - titleMiddleware(this.doc.workspace.meta.docMetas), - embedSyncedDocMiddleware('content'), - defaultImageProxyMiddleware, - ], - }); + return this.doc.getTransformer([ + docLinkBaseURLMiddlewareBuilder( + 'https://example.com', + this.doc.workspace.id + ).get(), + titleMiddleware(this.doc.workspace.meta.docMetas), + embedSyncedDocMiddleware('content'), + defaultImageProxyMiddleware, + ]); } private _getDocSnapshot() { diff --git a/blocksuite/playground/apps/_common/components/starter-debug-menu.ts b/blocksuite/playground/apps/_common/components/starter-debug-menu.ts index f4d734d2ec..8c36e57f16 100644 --- a/blocksuite/playground/apps/_common/components/starter-debug-menu.ts +++ b/blocksuite/playground/apps/_common/components/starter-debug-menu.ts @@ -49,7 +49,7 @@ import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions'; import type { SerializedXYWH } from '@blocksuite/global/utils'; import type { DeltaInsert } from '@blocksuite/inline/types'; import { TestAffineEditorContainer } from '@blocksuite/integration-test'; -import { Text, Transformer, type Workspace } from '@blocksuite/store'; +import { Text, type Workspace } from '@blocksuite/store'; import type { SlDropdown } from '@shoelace-style/shoelace'; import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path.js'; import { css, html } from 'lit'; @@ -237,19 +237,10 @@ export class StarterDebugMenu extends ShadowlessElement { private async _exportFile(config: AdapterConfig) { const doc = this.editor.doc; - const job = new Transformer({ - schema: doc.schema, - blobCRUD: this.collection.blobSync, - docCRUD: { - create: (id: string) => this.collection.createDoc({ id }), - get: (id: string) => this.collection.getDoc(id), - delete: (id: string) => this.collection.removeDoc(id), - }, - middlewares: [ - docLinkBaseURLMiddleware(this.collection.id), - titleMiddleware(this.collection.meta.docMetas), - ], - }); + const job = doc.getTransformer([ + docLinkBaseURLMiddleware(this.collection.id), + titleMiddleware(this.collection.meta.docMetas), + ]); const adapterFactory = this.editor.std.provider.get(config.identifier); const adapter = adapterFactory.get(job); @@ -444,16 +435,7 @@ export class StarterDebugMenu extends ShadowlessElement { }); if (!file) return; const doc = this.editor.doc; - const job = new Transformer({ - schema: doc.schema, - blobCRUD: this.collection.blobSync, - docCRUD: { - create: (id: string) => this.collection.createDoc({ id }), - get: (id: string) => this.collection.getDoc(id), - delete: (id: string) => this.collection.removeDoc(id), - }, - middlewares: [defaultImageProxyMiddleware], - }); + const job = doc.getTransformer([defaultImageProxyMiddleware]); const htmlAdapter = new NotionHtmlAdapter(job, this.editor.std.provider); await htmlAdapter.toDoc({ file: await file.text(), diff --git a/packages/frontend/apps/android/src/app.tsx b/packages/frontend/apps/android/src/app.tsx index 590d62d9b2..dc5d4b892f 100644 --- a/packages/frontend/apps/android/src/app.tsx +++ b/packages/frontend/apps/android/src/app.tsx @@ -34,7 +34,6 @@ import { titleMiddleware, } from '@blocksuite/affine/blocks'; import { Container } from '@blocksuite/affine/global/di'; -import { Transformer } from '@blocksuite/affine/store'; import { App as CapacitorApp } from '@capacitor/app'; import { Keyboard } from '@capacitor/keyboard'; import { StatusBar, Style } from '@capacitor/status-bar'; @@ -165,19 +164,10 @@ framework.impl(AIButtonProvider, { try { const blockSuiteDoc = doc.blockSuiteDoc; - const transformer = new Transformer({ - schema: blockSuiteDoc.schema, - blobCRUD: blockSuiteDoc.workspace.blobSync, - docCRUD: { - create: (id: string) => blockSuiteDoc.workspace.createDoc({ id }), - get: (id: string) => blockSuiteDoc.workspace.getDoc(id), - delete: (id: string) => blockSuiteDoc.workspace.removeDoc(id), - }, - middlewares: [ - docLinkBaseURLMiddleware(blockSuiteDoc.workspace.id), - titleMiddleware(blockSuiteDoc.workspace.meta.docMetas), - ], - }); + const transformer = blockSuiteDoc.getTransformer([ + docLinkBaseURLMiddleware(blockSuiteDoc.workspace.id), + titleMiddleware(blockSuiteDoc.workspace.meta.docMetas), + ]); const snapshot = transformer.docToSnapshot(blockSuiteDoc); const container = new Container(); diff --git a/packages/frontend/apps/ios/src/app.tsx b/packages/frontend/apps/ios/src/app.tsx index 8423fd080e..f90388c079 100644 --- a/packages/frontend/apps/ios/src/app.tsx +++ b/packages/frontend/apps/ios/src/app.tsx @@ -40,7 +40,6 @@ import { titleMiddleware, } from '@blocksuite/affine/blocks'; import { Container } from '@blocksuite/affine/global/di'; -import { Transformer } from '@blocksuite/affine/store'; import { App as CapacitorApp } from '@capacitor/app'; import { Browser } from '@capacitor/browser'; import { Haptics } from '@capacitor/haptics'; @@ -223,19 +222,10 @@ const frameworkProvider = framework.provider(); try { const blockSuiteDoc = doc.blockSuiteDoc; - const transformer = new Transformer({ - schema: blockSuiteDoc.schema, - blobCRUD: blockSuiteDoc.workspace.blobSync, - docCRUD: { - create: (id: string) => blockSuiteDoc.workspace.createDoc({ id }), - get: (id: string) => blockSuiteDoc.workspace.getDoc(id), - delete: (id: string) => blockSuiteDoc.workspace.removeDoc(id), - }, - middlewares: [ - docLinkBaseURLMiddleware(blockSuiteDoc.workspace.id), - titleMiddleware(blockSuiteDoc.workspace.meta.docMetas), - ], - }); + const transformer = blockSuiteDoc.getTransformer([ + docLinkBaseURLMiddleware(blockSuiteDoc.workspace.id), + titleMiddleware(blockSuiteDoc.workspace.meta.docMetas), + ]); const snapshot = transformer.docToSnapshot(blockSuiteDoc); const container = new Container(); diff --git a/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts b/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts index b26cc9e682..e535d31e47 100644 --- a/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts +++ b/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts @@ -12,7 +12,7 @@ import { } from '@blocksuite/affine/blocks'; import type { ServiceProvider } from '@blocksuite/affine/global/di'; import { WithDisposable } from '@blocksuite/affine/global/utils'; -import { Schema, type Store, Transformer } from '@blocksuite/affine/store'; +import { Schema, type Store } from '@blocksuite/affine/store'; import { css, html, LitElement, nothing } from 'lit'; import { property, query } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; @@ -235,15 +235,7 @@ export const markdownToMindmap = ( provider: ServiceProvider ) => { let result: Node | null = null; - const transformer = new Transformer({ - schema: doc.schema, - blobCRUD: doc.workspace.blobSync, - docCRUD: { - create: (id: string) => doc.workspace.createDoc({ id }), - get: (id: string) => doc.workspace.getDoc(id), - delete: (id: string) => doc.workspace.removeDoc(id), - }, - }); + const transformer = doc.getTransformer(); const markdown = new MarkdownAdapter(transformer, provider); const ast: Root = markdown['_markdownToAst'](answer); const traverse = ( diff --git a/packages/frontend/core/src/blocksuite/ai/utils/extract.ts b/packages/frontend/core/src/blocksuite/ai/utils/extract.ts index d78acea2d8..60eb8edbd7 100644 --- a/packages/frontend/core/src/blocksuite/ai/utils/extract.ts +++ b/packages/frontend/core/src/blocksuite/ai/utils/extract.ts @@ -15,7 +15,7 @@ import { } from '@blocksuite/affine/blocks'; import type { ServiceProvider } from '@blocksuite/affine/global/di'; import type { BlockModel, Store } from '@blocksuite/affine/store'; -import { Slice, toDraftModel, Transformer } from '@blocksuite/affine/store'; +import { Slice, toDraftModel } from '@blocksuite/affine/store'; import type { ChatContextValue } from '../chat-panel/chat-context'; import { @@ -196,17 +196,8 @@ function getNoteBlockModels(doc: Store) { } async function getTransformer(doc: Store) { - return new Transformer({ - schema: doc.schema, - blobCRUD: doc.workspace.blobSync, - docCRUD: { - create: (id: string) => doc.workspace.createDoc({ id }), - get: (id: string) => doc.workspace.getDoc(id), - delete: (id: string) => doc.workspace.removeDoc(id), - }, - middlewares: [ - titleMiddleware(doc.workspace.meta.docMetas), - embedSyncedDocMiddleware('content'), - ], - }); + return doc.getTransformer([ + titleMiddleware(doc.workspace.meta.docMetas), + embedSyncedDocMiddleware('content'), + ]); } diff --git a/packages/frontend/core/src/blocksuite/utils/markdown-utils.ts b/packages/frontend/core/src/blocksuite/utils/markdown-utils.ts index 99c14ff0d6..56a6fcd933 100644 --- a/packages/frontend/core/src/blocksuite/utils/markdown-utils.ts +++ b/packages/frontend/core/src/blocksuite/utils/markdown-utils.ts @@ -80,19 +80,10 @@ export async function getContentFromSlice( slice: Slice, type: 'markdown' | 'plain-text' = 'markdown' ) { - const transformer = new Transformer({ - schema: host.std.store.schema, - blobCRUD: host.std.store.workspace.blobSync, - docCRUD: { - create: (id: string) => host.std.store.workspace.createDoc({ id }), - get: (id: string) => host.std.store.workspace.getDoc(id), - delete: (id: string) => host.std.store.workspace.removeDoc(id), - }, - middlewares: [ - titleMiddleware(host.std.store.workspace.meta.docMetas), - embedSyncedDocMiddleware('content'), - ], - }); + const transformer = host.std.store.getTransformer([ + titleMiddleware(host.std.store.workspace.meta.docMetas), + embedSyncedDocMiddleware('content'), + ]); const snapshot = transformer.sliceToSnapshot(slice); if (!snapshot) { return ''; @@ -113,16 +104,10 @@ export const markdownToSnapshot = async ( markdown: string, host: EditorHost ) => { - const transformer = new Transformer({ - schema: host.std.store.schema, - blobCRUD: host.std.store.workspace.blobSync, - docCRUD: { - create: (id: string) => host.std.store.workspace.createDoc({ id }), - get: (id: string) => host.std.store.workspace.getDoc(id), - delete: (id: string) => host.std.store.workspace.removeDoc(id), - }, - middlewares: [defaultImageProxyMiddleware, pasteMiddleware(host.std)], - }); + const transformer = host.std.store.getTransformer([ + defaultImageProxyMiddleware, + pasteMiddleware(host.std), + ]); const markdownAdapter = new MixTextAdapter(transformer, host.std.provider); const payload = { file: markdown,