feat(editor): use store extension manager (#11891)

Closes: BS-3284
This commit is contained in:
Saul-Mirone
2025-04-22 15:51:23 +00:00
parent 99ad4e871e
commit 43966a6c6b
25 changed files with 160 additions and 54 deletions
@@ -1,5 +1,4 @@
import { defaultImageProxyMiddleware } from '@blocksuite/affine-block-image'; import { defaultImageProxyMiddleware } from '@blocksuite/affine-block-image';
import { SpecProvider } from '@blocksuite/affine-shared/utils';
import { import {
Schema, Schema,
Transformer, Transformer,
@@ -8,6 +7,7 @@ import {
import { TestWorkspace } from '@blocksuite/store/test'; import { TestWorkspace } from '@blocksuite/store/test';
import { AffineSchemas } from '../../schemas.js'; import { AffineSchemas } from '../../schemas.js';
import { testStoreExtensions } from './store.js';
declare global { declare global {
interface Window { interface Window {
@@ -27,7 +27,7 @@ export function createJob(middlewares?: TransformerMiddleware[]) {
testMiddlewares.push(defaultImageProxyMiddleware); testMiddlewares.push(defaultImageProxyMiddleware);
const schema = new Schema().register(AffineSchemas); const schema = new Schema().register(AffineSchemas);
const docCollection = new TestWorkspace(); const docCollection = new TestWorkspace();
docCollection.storeExtensions = SpecProvider._.getSpec('store').value; docCollection.storeExtensions = testStoreExtensions;
docCollection.meta.initialize(); docCollection.meta.initialize();
return new Transformer({ return new Transformer({
schema, schema,
@@ -1,17 +1,17 @@
import { SpecProvider } from '@blocksuite/affine-shared/utils';
import { Container } from '@blocksuite/global/di'; import { Container } from '@blocksuite/global/di';
import { import {
registerBlockSpecs, registerBlockSpecs,
registerStoreSpecs, registerStoreSpecs,
} from '../../extensions/register'; } from '../../extensions/register';
import { testStoreExtensions } from './store';
registerStoreSpecs(); registerStoreSpecs();
registerBlockSpecs(); registerBlockSpecs();
export function getProvider() { export function getProvider() {
const container = new Container(); const container = new Container();
const exts = SpecProvider._.getSpec('store').value; const exts = testStoreExtensions;
exts.forEach(ext => { exts.forEach(ext => {
ext.setup(container); ext.setup(container);
}); });
@@ -0,0 +1,40 @@
import { AttachmentStoreExtension } from '@blocksuite/affine-block-attachment/store';
import { BookmarkStoreExtension } from '@blocksuite/affine-block-bookmark/store';
import { CalloutStoreExtension } from '@blocksuite/affine-block-callout/store';
import { CodeStoreExtension } from '@blocksuite/affine-block-code/store';
import { DataViewStoreExtension } from '@blocksuite/affine-block-data-view/store';
import { DatabaseStoreExtension } from '@blocksuite/affine-block-database/store';
import { DividerStoreExtension } from '@blocksuite/affine-block-divider/store';
import { EdgelessTextStoreExtension } from '@blocksuite/affine-block-edgeless-text/store';
import { EmbedStoreExtension } from '@blocksuite/affine-block-embed/store';
import { FrameStoreExtension } from '@blocksuite/affine-block-frame/store';
import { ImageStoreExtension } from '@blocksuite/affine-block-image/store';
import { LatexStoreExtension } from '@blocksuite/affine-block-latex/store';
import { ListStoreExtension } from '@blocksuite/affine-block-list/store';
import { NoteStoreExtension } from '@blocksuite/affine-block-note/store';
import { ParagraphStoreExtension } from '@blocksuite/affine-block-paragraph/store';
import { StoreExtensionManager } from '@blocksuite/affine-ext-loader';
import { MigratingStoreExtension } from '../../extensions/store';
const manager = new StoreExtensionManager([
AttachmentStoreExtension,
BookmarkStoreExtension,
CalloutStoreExtension,
CodeStoreExtension,
DataViewStoreExtension,
DatabaseStoreExtension,
DividerStoreExtension,
EdgelessTextStoreExtension,
EmbedStoreExtension,
FrameStoreExtension,
ImageStoreExtension,
LatexStoreExtension,
ListStoreExtension,
NoteStoreExtension,
ParagraphStoreExtension,
MigratingStoreExtension,
]);
export const testStoreExtensions = manager.get('store');
@@ -10,7 +10,7 @@ import {
} from '@blocksuite/affine-block-root'; } from '@blocksuite/affine-block-root';
import { SurfaceBlockSchemaExtension } from '@blocksuite/affine-block-surface'; import { SurfaceBlockSchemaExtension } from '@blocksuite/affine-block-surface';
import { import {
TableBlockHtmlAdapterExtension, TableBlockAdapterExtensions,
TableSelectionExtension, TableSelectionExtension,
} from '@blocksuite/affine-block-table'; } from '@blocksuite/affine-block-table';
import { import {
@@ -66,10 +66,7 @@ function getAdapterFactoryExtensions(): ExtensionType[] {
]; ];
} }
const defaultBlockHtmlAdapterMatchers = [ const defaultBlockHtmlAdapterMatchers = [RootBlockHtmlAdapterExtension];
RootBlockHtmlAdapterExtension,
TableBlockHtmlAdapterExtension,
];
const defaultBlockMarkdownAdapterMatchers = [RootBlockMarkdownAdapterExtension]; const defaultBlockMarkdownAdapterMatchers = [RootBlockMarkdownAdapterExtension];
@@ -130,6 +127,7 @@ const MigratingStoreExtensions: ExtensionType[] = [
DatabaseSelectionExtension, DatabaseSelectionExtension,
TableSelectionExtension, TableSelectionExtension,
TableBlockAdapterExtensions,
getHtmlAdapterExtensions(), getHtmlAdapterExtensions(),
getMarkdownAdapterExtensions(), getMarkdownAdapterExtensions(),
getNotionHtmlAdapterExtensions(), getNotionHtmlAdapterExtensions(),
@@ -1,3 +1,4 @@
export * from './extension';
export * from './html'; export * from './html';
export * from './markdown'; export * from './markdown';
export * from './notion-html'; export * from './notion-html';
@@ -12,6 +12,7 @@
"dependencies": { "dependencies": {
"@blocksuite/affine-block-image": "workspace:*", "@blocksuite/affine-block-image": "workspace:*",
"@blocksuite/affine-components": "workspace:*", "@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-inline-reference": "workspace:*", "@blocksuite/affine-inline-reference": "workspace:*",
"@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*", "@blocksuite/affine-rich-text": "workspace:*",
@@ -5,6 +5,7 @@ import {
NewDocIcon, NewDocIcon,
} from '@blocksuite/affine-components/icons'; } from '@blocksuite/affine-components/icons';
import { toast } from '@blocksuite/affine-components/toast'; import { toast } from '@blocksuite/affine-components/toast';
import { StoreExtensionManagerIdentifier } from '@blocksuite/affine-ext-loader';
import { insertLinkedNode } from '@blocksuite/affine-inline-reference'; import { insertLinkedNode } from '@blocksuite/affine-inline-reference';
import { import {
DocModeProvider, DocModeProvider,
@@ -235,9 +236,13 @@ export function createNewDocMenuGroup(
const onFail = (message: string) => { const onFail = (message: string) => {
toast(editorHost, message); toast(editorHost, message);
}; };
const storeManager = editorHost.std.get(
StoreExtensionManagerIdentifier
);
showImportModal({ showImportModal({
collection: doc.workspace, collection: doc.workspace,
schema: doc.schema, schema: doc.schema,
extensions: storeManager.get('store'),
onSuccess, onSuccess,
onFail, onFail,
}); });
@@ -8,7 +8,7 @@ import {
} from '@blocksuite/affine-components/icons'; } from '@blocksuite/affine-components/icons';
import { openFileOrFiles } from '@blocksuite/affine-shared/utils'; import { openFileOrFiles } from '@blocksuite/affine-shared/utils';
import { WithDisposable } from '@blocksuite/global/lit'; import { WithDisposable } from '@blocksuite/global/lit';
import type { Schema, Workspace } from '@blocksuite/store'; import type { ExtensionType, Schema, Workspace } from '@blocksuite/store';
import { html, LitElement, type PropertyValues } from 'lit'; import { html, LitElement, type PropertyValues } from 'lit';
import { query, state } from 'lit/decorators.js'; import { query, state } from 'lit/decorators.js';
@@ -32,6 +32,7 @@ export class ImportDoc extends WithDisposable(LitElement) {
constructor( constructor(
private readonly collection: Workspace, private readonly collection: Workspace,
private readonly schema: Schema, private readonly schema: Schema,
private readonly extensions: ExtensionType[],
private readonly onSuccess?: OnSuccessHandler, private readonly onSuccess?: OnSuccessHandler,
private readonly onFail?: OnFailHandler, private readonly onFail?: OnFailHandler,
private readonly abortController = new AbortController() private readonly abortController = new AbortController()
@@ -65,6 +66,7 @@ export class ImportDoc extends WithDisposable(LitElement) {
const pageId = await HtmlTransformer.importHTMLToDoc({ const pageId = await HtmlTransformer.importHTMLToDoc({
collection: this.collection, collection: this.collection,
schema: this.schema, schema: this.schema,
extensions: this.extensions,
html: text, html: text,
fileName, fileName,
}); });
@@ -98,6 +100,7 @@ export class ImportDoc extends WithDisposable(LitElement) {
schema: this.schema, schema: this.schema,
markdown: text, markdown: text,
fileName, fileName,
extensions: this.extensions,
}); });
needLoading && this.abortController.abort(); needLoading && this.abortController.abort();
if (pageId) { if (pageId) {
@@ -122,6 +125,7 @@ export class ImportDoc extends WithDisposable(LitElement) {
collection: this.collection, collection: this.collection,
schema: this.schema, schema: this.schema,
imported: file, imported: file,
extensions: this.extensions,
}); });
needLoading && this.abortController.abort(); needLoading && this.abortController.abort();
if (hasMarkdown) { if (hasMarkdown) {
@@ -1,4 +1,4 @@
import type { Schema, Workspace } from '@blocksuite/store'; import type { ExtensionType, Schema, Workspace } from '@blocksuite/store';
import { import {
ImportDoc, ImportDoc,
@@ -9,6 +9,7 @@ import {
export function showImportModal({ export function showImportModal({
schema, schema,
collection, collection,
extensions,
onSuccess, onSuccess,
onFail, onFail,
container = document.body, container = document.body,
@@ -16,6 +17,7 @@ export function showImportModal({
}: { }: {
schema: Schema; schema: Schema;
collection: Workspace; collection: Workspace;
extensions: ExtensionType[];
onSuccess?: OnSuccessHandler; onSuccess?: OnSuccessHandler;
onFail?: OnFailHandler; onFail?: OnFailHandler;
multiple?: boolean; multiple?: boolean;
@@ -25,6 +27,7 @@ export function showImportModal({
const importDoc = new ImportDoc( const importDoc = new ImportDoc(
collection, collection,
schema, schema,
extensions,
onSuccess, onSuccess,
onFail, onFail,
abortController abortController
@@ -5,10 +5,14 @@ import {
HtmlAdapter, HtmlAdapter,
titleMiddleware, titleMiddleware,
} from '@blocksuite/affine-shared/adapters'; } from '@blocksuite/affine-shared/adapters';
import { SpecProvider } from '@blocksuite/affine-shared/utils';
import { Container } from '@blocksuite/global/di'; import { Container } from '@blocksuite/global/di';
import { sha } from '@blocksuite/global/utils'; import { sha } from '@blocksuite/global/utils';
import type { Schema, Store, Workspace } from '@blocksuite/store'; import type {
ExtensionType,
Schema,
Store,
Workspace,
} from '@blocksuite/store';
import { extMimeMap, Transformer } from '@blocksuite/store'; import { extMimeMap, Transformer } from '@blocksuite/store';
import { createAssetsArchive, download, Unzip } from './utils.js'; import { createAssetsArchive, download, Unzip } from './utils.js';
@@ -18,18 +22,19 @@ type ImportHTMLToDocOptions = {
schema: Schema; schema: Schema;
html: string; html: string;
fileName?: string; fileName?: string;
extensions: ExtensionType[];
}; };
type ImportHTMLZipOptions = { type ImportHTMLZipOptions = {
collection: Workspace; collection: Workspace;
schema: Schema; schema: Schema;
imported: Blob; imported: Blob;
extensions: ExtensionType[];
}; };
function getProvider() { function getProvider(extensions: ExtensionType[]) {
const container = new Container(); const container = new Container();
const exts = SpecProvider._.getSpec('store').value; extensions.forEach(ext => {
exts.forEach(ext => {
ext.setup(container); ext.setup(container);
}); });
return container.provider(); return container.provider();
@@ -42,7 +47,7 @@ function getProvider() {
* @returns A Promise that resolves when the export is complete. * @returns A Promise that resolves when the export is complete.
*/ */
async function exportDoc(doc: Store) { async function exportDoc(doc: Store) {
const provider = getProvider(); const provider = doc.provider;
const job = doc.getTransformer([ const job = doc.getTransformer([
docLinkBaseURLMiddleware(doc.workspace.id), docLinkBaseURLMiddleware(doc.workspace.id),
titleMiddleware(doc.workspace.meta.docMetas), titleMiddleware(doc.workspace.meta.docMetas),
@@ -90,8 +95,9 @@ async function importHTMLToDoc({
schema, schema,
html, html,
fileName, fileName,
extensions,
}: ImportHTMLToDocOptions) { }: ImportHTMLToDocOptions) {
const provider = getProvider(); const provider = getProvider(extensions);
const job = new Transformer({ const job = new Transformer({
schema, schema,
blobCRUD: collection.blobSync, blobCRUD: collection.blobSync,
@@ -130,8 +136,9 @@ async function importHTMLZip({
collection, collection,
schema, schema,
imported, imported,
extensions,
}: ImportHTMLZipOptions) { }: ImportHTMLZipOptions) {
const provider = getProvider(); const provider = getProvider(extensions);
const unzip = new Unzip(); const unzip = new Unzip();
await unzip.load(imported); await unzip.load(imported);
@@ -5,19 +5,22 @@ import {
MarkdownAdapter, MarkdownAdapter,
titleMiddleware, titleMiddleware,
} from '@blocksuite/affine-shared/adapters'; } from '@blocksuite/affine-shared/adapters';
import { SpecProvider } from '@blocksuite/affine-shared/utils';
import { Container } from '@blocksuite/global/di'; import { Container } from '@blocksuite/global/di';
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions'; import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import { sha } from '@blocksuite/global/utils'; import { sha } from '@blocksuite/global/utils';
import type { Schema, Store, Workspace } from '@blocksuite/store'; import type {
ExtensionType,
Schema,
Store,
Workspace,
} from '@blocksuite/store';
import { extMimeMap, Transformer } from '@blocksuite/store'; import { extMimeMap, Transformer } from '@blocksuite/store';
import { createAssetsArchive, download, Unzip } from './utils.js'; import { createAssetsArchive, download, Unzip } from './utils.js';
function getProvider() { function getProvider(extensions: ExtensionType[]) {
const container = new Container(); const container = new Container();
const exts = SpecProvider._.getSpec('store').value; extensions.forEach(ext => {
exts.forEach(ext => {
ext.setup(container); ext.setup(container);
}); });
return container.provider(); return container.provider();
@@ -27,6 +30,7 @@ type ImportMarkdownToBlockOptions = {
doc: Store; doc: Store;
markdown: string; markdown: string;
blockId: string; blockId: string;
extensions: ExtensionType[];
}; };
type ImportMarkdownToDocOptions = { type ImportMarkdownToDocOptions = {
@@ -34,12 +38,14 @@ type ImportMarkdownToDocOptions = {
schema: Schema; schema: Schema;
markdown: string; markdown: string;
fileName?: string; fileName?: string;
extensions: ExtensionType[];
}; };
type ImportMarkdownZipOptions = { type ImportMarkdownZipOptions = {
collection: Workspace; collection: Workspace;
schema: Schema; schema: Schema;
imported: Blob; imported: Blob;
extensions: ExtensionType[];
}; };
/** /**
@@ -48,7 +54,7 @@ type ImportMarkdownZipOptions = {
* @returns A Promise that resolves when the export is complete * @returns A Promise that resolves when the export is complete
*/ */
async function exportDoc(doc: Store) { async function exportDoc(doc: Store) {
const provider = getProvider(); const provider = doc.provider;
const job = doc.getTransformer([ const job = doc.getTransformer([
docLinkBaseURLMiddleware(doc.workspace.id), docLinkBaseURLMiddleware(doc.workspace.id),
titleMiddleware(doc.workspace.meta.docMetas), titleMiddleware(doc.workspace.meta.docMetas),
@@ -98,8 +104,9 @@ async function importMarkdownToBlock({
doc, doc,
markdown, markdown,
blockId, blockId,
extensions,
}: ImportMarkdownToBlockOptions) { }: ImportMarkdownToBlockOptions) {
const provider = getProvider(); const provider = getProvider(extensions);
const job = doc.getTransformer([ const job = doc.getTransformer([
defaultImageProxyMiddleware, defaultImageProxyMiddleware,
docLinkBaseURLMiddleware(doc.workspace.id), docLinkBaseURLMiddleware(doc.workspace.id),
@@ -142,8 +149,9 @@ async function importMarkdownToDoc({
schema, schema,
markdown, markdown,
fileName, fileName,
extensions,
}: ImportMarkdownToDocOptions) { }: ImportMarkdownToDocOptions) {
const provider = getProvider(); const provider = getProvider(extensions);
const job = new Transformer({ const job = new Transformer({
schema, schema,
blobCRUD: collection.blobSync, blobCRUD: collection.blobSync,
@@ -181,8 +189,9 @@ async function importMarkdownZip({
collection, collection,
schema, schema,
imported, imported,
extensions,
}: ImportMarkdownZipOptions) { }: ImportMarkdownZipOptions) {
const provider = getProvider(); const provider = getProvider(extensions);
const unzip = new Unzip(); const unzip = new Unzip();
await unzip.load(imported); await unzip.load(imported);
@@ -1,9 +1,9 @@
import { defaultImageProxyMiddleware } from '@blocksuite/affine-block-image'; import { defaultImageProxyMiddleware } from '@blocksuite/affine-block-image';
import { NotionHtmlAdapter } from '@blocksuite/affine-shared/adapters'; import { NotionHtmlAdapter } from '@blocksuite/affine-shared/adapters';
import { SpecProvider } from '@blocksuite/affine-shared/utils';
import { Container } from '@blocksuite/global/di'; import { Container } from '@blocksuite/global/di';
import { sha } from '@blocksuite/global/utils'; import { sha } from '@blocksuite/global/utils';
import { import {
type ExtensionType,
extMimeMap, extMimeMap,
type Schema, type Schema,
Transformer, Transformer,
@@ -16,12 +16,12 @@ type ImportNotionZipOptions = {
collection: Workspace; collection: Workspace;
schema: Schema; schema: Schema;
imported: Blob; imported: Blob;
extensions: ExtensionType[];
}; };
function getProvider() { function getProvider(extensions: ExtensionType[]) {
const container = new Container(); const container = new Container();
const exts = SpecProvider._.getSpec('store').value; extensions.forEach(ext => {
exts.forEach(ext => {
ext.setup(container); ext.setup(container);
}); });
return container.provider(); return container.provider();
@@ -45,8 +45,9 @@ async function importNotionZip({
collection, collection,
schema, schema,
imported, imported,
extensions,
}: ImportNotionZipOptions) { }: ImportNotionZipOptions) {
const provider = getProvider(); const provider = getProvider(extensions);
const pageIds: string[] = []; const pageIds: string[] = [];
let isWorkspaceFile = false; let isWorkspaceFile = false;
let hasMarkdown = false; let hasMarkdown = false;
@@ -9,6 +9,7 @@
"references": [ "references": [
{ "path": "../../blocks/image" }, { "path": "../../blocks/image" },
{ "path": "../../components" }, { "path": "../../components" },
{ "path": "../../ext-loader" },
{ "path": "../../inlines/reference" }, { "path": "../../inlines/reference" },
{ "path": "../../model" }, { "path": "../../model" },
{ "path": "../../rich-text" }, { "path": "../../rich-text" },
+20 -19
View File
@@ -16,25 +16,26 @@ import { ParagraphStoreExtension } from '@blocksuite/affine/blocks/paragraph/sto
import { StoreExtensionManager } from '@blocksuite/affine/ext-loader'; import { StoreExtensionManager } from '@blocksuite/affine/ext-loader';
import { MigratingStoreExtension } from '@blocksuite/affine/extensions/store'; import { MigratingStoreExtension } from '@blocksuite/affine/extensions/store';
export function getTestStoreManager() { const manager = new StoreExtensionManager([
const manager = new StoreExtensionManager([ AttachmentStoreExtension,
AttachmentStoreExtension, BookmarkStoreExtension,
BookmarkStoreExtension, CalloutStoreExtension,
CalloutStoreExtension, CodeStoreExtension,
CodeStoreExtension, DataViewStoreExtension,
DataViewStoreExtension, DatabaseStoreExtension,
DatabaseStoreExtension, DividerStoreExtension,
DividerStoreExtension, EdgelessTextStoreExtension,
EdgelessTextStoreExtension, EmbedStoreExtension,
EmbedStoreExtension, FrameStoreExtension,
FrameStoreExtension, ImageStoreExtension,
ImageStoreExtension, LatexStoreExtension,
LatexStoreExtension, ListStoreExtension,
ListStoreExtension, NoteStoreExtension,
NoteStoreExtension, ParagraphStoreExtension,
ParagraphStoreExtension,
MigratingStoreExtension, MigratingStoreExtension,
]); ]);
export function getTestStoreManager() {
return manager; return manager;
} }
@@ -19,6 +19,7 @@ import './left-side-panel.js';
import { defaultImageProxyMiddleware } from '@blocksuite/affine/blocks/image'; import { defaultImageProxyMiddleware } from '@blocksuite/affine/blocks/image';
import { ExportManager } from '@blocksuite/affine/blocks/surface'; import { ExportManager } from '@blocksuite/affine/blocks/surface';
import { toast } from '@blocksuite/affine/components/toast'; import { toast } from '@blocksuite/affine/components/toast';
import { StoreExtensionManagerIdentifier } from '@blocksuite/affine/ext-loader';
import { import {
BlockSuiteError, BlockSuiteError,
ErrorCode, ErrorCode,
@@ -331,6 +332,10 @@ export class StarterDebugMenu extends ShadowlessElement {
); );
} }
private _getStoreManager() {
return this.editor.std.get(StoreExtensionManagerIdentifier);
}
private async _importHTML() { private async _importHTML() {
try { try {
const files = await openFileOrFiles({ const files = await openFileOrFiles({
@@ -349,6 +354,7 @@ export class StarterDebugMenu extends ShadowlessElement {
schema: this.editor.doc.schema, schema: this.editor.doc.schema,
html: text, html: text,
fileName, fileName,
extensions: this._getStoreManager().get('store'),
}); });
if (pageId) { if (pageId) {
pageIds.push(pageId); pageIds.push(pageId);
@@ -372,6 +378,7 @@ export class StarterDebugMenu extends ShadowlessElement {
collection: this.collection, collection: this.collection,
schema: this.editor.doc.schema, schema: this.editor.doc.schema,
imported: file, imported: file,
extensions: this._getStoreManager().get('store'),
}); });
if (!this.editor.host) return; if (!this.editor.host) return;
toast( toast(
@@ -401,6 +408,7 @@ export class StarterDebugMenu extends ShadowlessElement {
schema: this.editor.doc.schema, schema: this.editor.doc.schema,
markdown: text, markdown: text,
fileName, fileName,
extensions: this._getStoreManager().get('store'),
}); });
if (pageId) { if (pageId) {
pageIds.push(pageId); pageIds.push(pageId);
@@ -424,6 +432,7 @@ export class StarterDebugMenu extends ShadowlessElement {
collection: this.collection, collection: this.collection,
schema: this.editor.doc.schema, schema: this.editor.doc.schema,
imported: file, imported: file,
extensions: this._getStoreManager().get('store'),
}); });
if (!this.editor.host) return; if (!this.editor.host) return;
toast( toast(
@@ -463,6 +472,7 @@ export class StarterDebugMenu extends ShadowlessElement {
collection: this.collection, collection: this.collection,
schema: this.editor.doc.schema, schema: this.editor.doc.schema,
imported: file, imported: file,
extensions: this._getStoreManager().get('store'),
}); });
if (!this.editor.host) return; if (!this.editor.host) return;
toast( toast(
+2 -2
View File
@@ -1,9 +1,9 @@
import { SpecProvider } from '@blocksuite/affine/shared/utils';
import { TestWorkspace } from '@blocksuite/affine/store/test'; import { TestWorkspace } from '@blocksuite/affine/store/test';
import { getTestStoreManager } from '@blocksuite/integration-test/store';
export function createEmptyDoc() { export function createEmptyDoc() {
const collection = new TestWorkspace(); const collection = new TestWorkspace();
collection.storeExtensions = SpecProvider._.getSpec('store').value; collection.storeExtensions = getTestStoreManager().get('store');
collection.meta.initialize(); collection.meta.initialize();
const doc = collection.createDoc(); const doc = collection.createDoc();
const store = doc.getStore(); const store = doc.getStore();
@@ -1,5 +1,6 @@
import { Text, type Workspace } from '@blocksuite/affine/store'; import { Text, type Workspace } from '@blocksuite/affine/store';
import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc'; import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc';
import { getTestStoreManager } from '@blocksuite/integration-test/store';
import type { InitFn } from './utils.js'; import type { InitFn } from './utils.js';
@@ -26,6 +27,7 @@ export const preset: InitFn = async (collection: Workspace, id: string) => {
doc, doc,
blockId: noteId, blockId: noteId,
markdown: presetMarkdown, markdown: presetMarkdown,
extensions: getTestStoreManager().get('store'),
}); });
doc.resetHistory(); doc.resetHistory();
@@ -1,5 +1,6 @@
import { Text, type Workspace } from '@blocksuite/affine/store'; import { Text, type Workspace } from '@blocksuite/affine/store';
import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc'; import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc';
import { getTestStoreManager } from '@blocksuite/integration-test/store';
import type { InitFn } from './utils'; import type { InitFn } from './utils';
@@ -44,6 +45,7 @@ export const synced: InitFn = (collection: Workspace, id: string) => {
doc: docSyncedPage, doc: docSyncedPage,
blockId: noteId, blockId: noteId,
markdown: syncedDocMarkdown, markdown: syncedDocMarkdown,
extensions: getTestStoreManager().get('store'),
}).catch(console.error); }).catch(console.error);
}); });
@@ -63,6 +65,7 @@ export const synced: InitFn = (collection: Workspace, id: string) => {
doc: docSyncedEdgeless, doc: docSyncedEdgeless,
blockId: noteId, blockId: noteId,
markdown: syncedDocMarkdown, markdown: syncedDocMarkdown,
extensions: getTestStoreManager().get('store'),
}).catch(console.error); }).catch(console.error);
}); });
@@ -80,6 +83,7 @@ export const synced: InitFn = (collection: Workspace, id: string) => {
doc: docMain, doc: docMain,
blockId: noteId, blockId: noteId,
markdown: syncedDocMarkdown, markdown: syncedDocMarkdown,
extensions: getTestStoreManager().get('store'),
}) })
.then(() => { .then(() => {
// Add synced block - self // Add synced block - self
+2
View File
@@ -1,3 +1,4 @@
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
import { AffineContext } from '@affine/core/components/context'; import { AffineContext } from '@affine/core/components/context';
import { AppFallback } from '@affine/core/mobile/components/app-fallback'; import { AppFallback } from '@affine/core/mobile/components/app-fallback';
import { configureMobileModules } from '@affine/core/mobile/modules'; import { configureMobileModules } from '@affine/core/mobile/modules';
@@ -306,6 +307,7 @@ const frameworkProvider = framework.provider();
collection: workspace.docCollection, collection: workspace.docCollection,
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
markdown, markdown,
extensions: getStoreManager().get('store'),
}); });
const docsService = workspace.scope.get(DocsService); const docsService = workspace.scope.get(DocsService);
if (docId) { if (docId) {
@@ -14,6 +14,8 @@ import type { Workspace } from '@blocksuite/affine/store';
import { useServices } from '@toeverything/infra'; import { useServices } from '@toeverything/infra';
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { getStoreManager } from '../manager/migrating-store';
export const usePageHelper = (docCollection: Workspace) => { export const usePageHelper = (docCollection: Workspace) => {
const { const {
docsService, docsService,
@@ -121,6 +123,7 @@ export const usePageHelper = (docCollection: Workspace) => {
showImportModal({ showImportModal({
collection: docCollection, collection: docCollection,
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
extensions: getStoreManager().get('store'),
onSuccess, onSuccess,
onFail: message => { onFail: message => {
reject(new Error(message)); reject(new Error(message));
@@ -1,4 +1,5 @@
import { Button, IconButton, Modal } from '@affine/component'; import { Button, IconButton, Modal } from '@affine/component';
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks'; import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
import type { import type {
DialogComponentProps, DialogComponentProps,
@@ -145,6 +146,7 @@ const importConfigs: Record<ImportType, ImportConfig> = {
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
markdown: text, markdown: text,
fileName, fileName,
extensions: getStoreManager().get('store'),
}); });
if (docId) docIds.push(docId); if (docId) docIds.push(docId);
} }
@@ -163,6 +165,7 @@ const importConfigs: Record<ImportType, ImportConfig> = {
collection: docCollection, collection: docCollection,
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
imported: file, imported: file,
extensions: getStoreManager().get('store'),
}); });
return { return {
docIds, docIds,
@@ -182,6 +185,7 @@ const importConfigs: Record<ImportType, ImportConfig> = {
const docId = await HtmlTransformer.importHTMLToDoc({ const docId = await HtmlTransformer.importHTMLToDoc({
collection: docCollection, collection: docCollection,
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
extensions: getStoreManager().get('store'),
html: text, html: text,
fileName, fileName,
}); });
@@ -203,6 +207,7 @@ const importConfigs: Record<ImportType, ImportConfig> = {
collection: docCollection, collection: docCollection,
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
imported: file, imported: file,
extensions: getStoreManager().get('store'),
}); });
return { return {
docIds: pageIds, docIds: pageIds,
@@ -1,3 +1,4 @@
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc'; import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc';
import { Service } from '@toeverything/infra'; import { Service } from '@toeverything/infra';
@@ -34,6 +35,7 @@ export class ImportClipperService extends Service {
collection: workspace.docCollection, collection: workspace.docCollection,
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
markdown: clipperInput.contentMarkdown, markdown: clipperInput.contentMarkdown,
extensions: getStoreManager().get('store'),
}); });
const docsService = workspace.scope.get(DocsService); const docsService = workspace.scope.get(DocsService);
if (docId) { if (docId) {
@@ -67,6 +69,7 @@ export class ImportClipperService extends Service {
collection: docCollection, collection: docCollection,
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
markdown: clipperInput.contentMarkdown, markdown: clipperInput.contentMarkdown,
extensions: getStoreManager().get('store'),
}); });
} }
); );
@@ -1,3 +1,4 @@
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc'; import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc';
import { Entity } from '@toeverything/infra'; import { Entity } from '@toeverything/infra';
@@ -60,6 +61,7 @@ export class IntegrationWriter extends Entity {
schema: getAFFiNEWorkspaceSchema(), schema: getAFFiNEWorkspaceSchema(),
markdown, markdown,
fileName: title, fileName: title,
extensions: getStoreManager().get('store'),
}); });
if (!newDocId) throw new Error('Failed to create a new doc'); if (!newDocId) throw new Error('Failed to create a new doc');
@@ -87,6 +89,7 @@ export class IntegrationWriter extends Entity {
doc, doc,
blockId: noteBlockId, blockId: noteBlockId,
markdown, markdown,
extensions: getStoreManager().get('store'),
}); });
} else if (updateStrategy === 'append') { } else if (updateStrategy === 'append') {
const pageBlockId = doc.getBlocksByFlavour('affine:page')[0]?.id; const pageBlockId = doc.getBlocksByFlavour('affine:page')[0]?.id;
@@ -95,6 +98,7 @@ export class IntegrationWriter extends Entity {
doc, doc,
blockId, blockId,
markdown: `---\n${markdown}`, markdown: `---\n${markdown}`,
extensions: getStoreManager().get('store'),
}); });
} else { } else {
throw new Error('Invalid update strategy'); throw new Error('Invalid update strategy');
+1
View File
@@ -837,6 +837,7 @@ export const PackageList = [
workspaceDependencies: [ workspaceDependencies: [
'blocksuite/affine/blocks/image', 'blocksuite/affine/blocks/image',
'blocksuite/affine/components', 'blocksuite/affine/components',
'blocksuite/affine/ext-loader',
'blocksuite/affine/inlines/reference', 'blocksuite/affine/inlines/reference',
'blocksuite/affine/model', 'blocksuite/affine/model',
'blocksuite/affine/rich-text', 'blocksuite/affine/rich-text',
+1
View File
@@ -3727,6 +3727,7 @@ __metadata:
dependencies: dependencies:
"@blocksuite/affine-block-image": "workspace:*" "@blocksuite/affine-block-image": "workspace:*"
"@blocksuite/affine-components": "workspace:*" "@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-inline-reference": "workspace:*" "@blocksuite/affine-inline-reference": "workspace:*"
"@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-rich-text": "workspace:*" "@blocksuite/affine-rich-text": "workspace:*"