refactor(editor): extract notion html adapter to shared (#9341)
This commit is contained in:
@@ -33,6 +33,9 @@ export {
|
|||||||
BlockNotionHtmlAdapterMatcherIdentifier,
|
BlockNotionHtmlAdapterMatcherIdentifier,
|
||||||
type InlineDeltaToNotionHtmlAdapterMatcher,
|
type InlineDeltaToNotionHtmlAdapterMatcher,
|
||||||
type NotionHtml,
|
type NotionHtml,
|
||||||
|
NotionHtmlAdapter,
|
||||||
|
NotionHtmlAdapterFactoryExtension,
|
||||||
|
NotionHtmlAdapterFactoryIdentifier,
|
||||||
NotionHtmlASTToDeltaExtension,
|
NotionHtmlASTToDeltaExtension,
|
||||||
type NotionHtmlASTToDeltaMatcher,
|
type NotionHtmlASTToDeltaMatcher,
|
||||||
NotionHtmlASTToDeltaMatcherIdentifier,
|
NotionHtmlASTToDeltaMatcherIdentifier,
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
export * from './block-adapter.js';
|
export * from './block-adapter.js';
|
||||||
export * from './delta-converter.js';
|
export * from './delta-converter.js';
|
||||||
export * from './type.js';
|
export * from './notion-html.js';
|
||||||
|
|||||||
@@ -2,17 +2,6 @@ import {
|
|||||||
DEFAULT_NOTE_BACKGROUND_COLOR,
|
DEFAULT_NOTE_BACKGROUND_COLOR,
|
||||||
NoteDisplayMode,
|
NoteDisplayMode,
|
||||||
} from '@blocksuite/affine-model';
|
} from '@blocksuite/affine-model';
|
||||||
import {
|
|
||||||
type AdapterContext,
|
|
||||||
AdapterFactoryIdentifier,
|
|
||||||
type BlockNotionHtmlAdapterMatcher,
|
|
||||||
BlockNotionHtmlAdapterMatcherIdentifier,
|
|
||||||
HastUtils,
|
|
||||||
type HtmlAST,
|
|
||||||
type NotionHtml,
|
|
||||||
NotionHtmlASTToDeltaMatcherIdentifier,
|
|
||||||
NotionHtmlDeltaConverter,
|
|
||||||
} from '@blocksuite/affine-shared/adapters';
|
|
||||||
import type { ExtensionType } from '@blocksuite/block-std';
|
import type { ExtensionType } from '@blocksuite/block-std';
|
||||||
import type { ServiceProvider } from '@blocksuite/global/di';
|
import type { ServiceProvider } from '@blocksuite/global/di';
|
||||||
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
|
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
|
||||||
@@ -35,6 +24,23 @@ import {
|
|||||||
import rehypeParse from 'rehype-parse';
|
import rehypeParse from 'rehype-parse';
|
||||||
import { unified } from 'unified';
|
import { unified } from 'unified';
|
||||||
|
|
||||||
|
import {
|
||||||
|
type AdapterContext,
|
||||||
|
AdapterFactoryIdentifier,
|
||||||
|
} from '../types/adapter';
|
||||||
|
import type { HtmlAST } from '../types/hast';
|
||||||
|
import { HastUtils } from '../utils/hast';
|
||||||
|
import {
|
||||||
|
type BlockNotionHtmlAdapterMatcher,
|
||||||
|
BlockNotionHtmlAdapterMatcherIdentifier,
|
||||||
|
} from './block-adapter';
|
||||||
|
import {
|
||||||
|
NotionHtmlASTToDeltaMatcherIdentifier,
|
||||||
|
NotionHtmlDeltaConverter,
|
||||||
|
} from './delta-converter';
|
||||||
|
|
||||||
|
export type NotionHtml = string;
|
||||||
|
|
||||||
type NotionHtmlToSliceSnapshotPayload = {
|
type NotionHtmlToSliceSnapshotPayload = {
|
||||||
file: NotionHtml;
|
file: NotionHtml;
|
||||||
assets?: AssetsManager;
|
assets?: AssetsManager;
|
||||||
@@ -1 +0,0 @@
|
|||||||
export type NotionHtml = string;
|
|
||||||
@@ -2,6 +2,7 @@ import {
|
|||||||
DEFAULT_NOTE_BACKGROUND_COLOR,
|
DEFAULT_NOTE_BACKGROUND_COLOR,
|
||||||
NoteDisplayMode,
|
NoteDisplayMode,
|
||||||
} from '@blocksuite/affine-model';
|
} from '@blocksuite/affine-model';
|
||||||
|
import { NotionHtmlAdapter } from '@blocksuite/affine-shared/adapters';
|
||||||
import { Container } from '@blocksuite/global/di';
|
import { Container } from '@blocksuite/global/di';
|
||||||
import {
|
import {
|
||||||
AssetsManager,
|
AssetsManager,
|
||||||
@@ -12,7 +13,6 @@ import { describe, expect, test } from 'vitest';
|
|||||||
|
|
||||||
import { defaultBlockNotionHtmlAdapterMatchers } from '../../_common/adapters/notion-html/block-matcher.js';
|
import { defaultBlockNotionHtmlAdapterMatchers } from '../../_common/adapters/notion-html/block-matcher.js';
|
||||||
import { notionHtmlInlineToDeltaMatchers } from '../../_common/adapters/notion-html/delta-converter/html-inline.js';
|
import { notionHtmlInlineToDeltaMatchers } from '../../_common/adapters/notion-html/delta-converter/html-inline.js';
|
||||||
import { NotionHtmlAdapter } from '../../_common/adapters/notion-html/notion-html.js';
|
|
||||||
import { nanoidReplacement } from '../../_common/test-utils/test-utils.js';
|
import { nanoidReplacement } from '../../_common/test-utils/test-utils.js';
|
||||||
import { createJob } from '../utils/create-job.js';
|
import { createJob } from '../utils/create-job.js';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
HtmlAdapterFactoryExtension,
|
HtmlAdapterFactoryExtension,
|
||||||
|
NotionHtmlAdapterFactoryExtension,
|
||||||
PlainTextAdapterFactoryExtension,
|
PlainTextAdapterFactoryExtension,
|
||||||
} from '@blocksuite/affine-shared/adapters';
|
} from '@blocksuite/affine-shared/adapters';
|
||||||
import type { ExtensionType } from '@blocksuite/block-std';
|
import type { ExtensionType } from '@blocksuite/block-std';
|
||||||
@@ -11,7 +12,6 @@ import { ImageAdapterFactoryExtension } from './image.js';
|
|||||||
import { MarkdownAdapterFactoryExtension } from './markdown/markdown.js';
|
import { MarkdownAdapterFactoryExtension } from './markdown/markdown.js';
|
||||||
import { MixTextAdapterFactoryExtension } from './mix-text.js';
|
import { MixTextAdapterFactoryExtension } from './mix-text.js';
|
||||||
import { notionHtmlInlineToDeltaMatchers } from './notion-html/delta-converter/html-inline.js';
|
import { notionHtmlInlineToDeltaMatchers } from './notion-html/delta-converter/html-inline.js';
|
||||||
import { NotionHtmlAdapterFactoryExtension } from './notion-html/notion-html.js';
|
|
||||||
import { NotionTextAdapterFactoryExtension } from './notion-text.js';
|
import { NotionTextAdapterFactoryExtension } from './notion-text.js';
|
||||||
import { inlineDeltaToPlainTextAdapterMatchers } from './plain-text/delta-converter/inline-delta.js';
|
import { inlineDeltaToPlainTextAdapterMatchers } from './plain-text/delta-converter/inline-delta.js';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,2 @@
|
|||||||
export { defaultBlockNotionHtmlAdapterMatchers } from './block-matcher.js';
|
export { defaultBlockNotionHtmlAdapterMatchers } from './block-matcher.js';
|
||||||
export {
|
export { notionHtmlInlineToDeltaMatchers } from './delta-converter/html-inline.js';
|
||||||
NotionHtmlAdapter,
|
|
||||||
NotionHtmlAdapterFactoryExtension,
|
|
||||||
NotionHtmlAdapterFactoryIdentifier,
|
|
||||||
} from './notion-html.js';
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
|
import { NotionHtmlAdapter } from '@blocksuite/affine-shared/adapters';
|
||||||
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 DocCollection, extMimeMap, Job } from '@blocksuite/store';
|
import { type DocCollection, extMimeMap, Job } from '@blocksuite/store';
|
||||||
|
|
||||||
import { defaultBlockNotionHtmlAdapterMatchers } from '../adapters/notion-html/block-matcher.js';
|
import { defaultBlockNotionHtmlAdapterMatchers } from '../adapters/notion-html/block-matcher.js';
|
||||||
import { notionHtmlInlineToDeltaMatchers } from '../adapters/notion-html/delta-converter/html-inline.js';
|
import { notionHtmlInlineToDeltaMatchers } from '../adapters/notion-html/delta-converter/html-inline.js';
|
||||||
import { NotionHtmlAdapter } from '../adapters/notion-html/notion-html.js';
|
|
||||||
import { defaultImageProxyMiddleware } from './middlewares.js';
|
import { defaultImageProxyMiddleware } from './middlewares.js';
|
||||||
import { Unzip } from './utils.js';
|
import { Unzip } from './utils.js';
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import '@shoelace-style/shoelace/dist/themes/dark.css';
|
|||||||
import './left-side-panel.js';
|
import './left-side-panel.js';
|
||||||
import './side-panel.js';
|
import './side-panel.js';
|
||||||
|
|
||||||
|
import { NotionHtmlAdapter } from '@blocksuite/affine-shared/adapters';
|
||||||
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
|
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
|
||||||
import { ShadowlessElement } from '@blocksuite/block-std';
|
import { ShadowlessElement } from '@blocksuite/block-std';
|
||||||
import {
|
import {
|
||||||
@@ -35,7 +36,6 @@ import {
|
|||||||
HtmlTransformer,
|
HtmlTransformer,
|
||||||
MarkdownAdapterFactoryIdentifier,
|
MarkdownAdapterFactoryIdentifier,
|
||||||
MarkdownTransformer,
|
MarkdownTransformer,
|
||||||
NotionHtmlAdapter,
|
|
||||||
NotionHtmlTransformer,
|
NotionHtmlTransformer,
|
||||||
openFileOrFiles,
|
openFileOrFiles,
|
||||||
PlainTextAdapterFactoryIdentifier,
|
PlainTextAdapterFactoryIdentifier,
|
||||||
@@ -435,7 +435,7 @@ export class StarterDebugMenu extends ShadowlessElement {
|
|||||||
collection: this.collection,
|
collection: this.collection,
|
||||||
middlewares: [defaultImageProxyMiddleware],
|
middlewares: [defaultImageProxyMiddleware],
|
||||||
});
|
});
|
||||||
const htmlAdapter = new NotionHtmlAdapter(job);
|
const htmlAdapter = new NotionHtmlAdapter(job, this.editor.std.provider);
|
||||||
await htmlAdapter.toDoc({
|
await htmlAdapter.toDoc({
|
||||||
file: await file.text(),
|
file: await file.text(),
|
||||||
pageId: this.collection.idGenerator(),
|
pageId: this.collection.idGenerator(),
|
||||||
|
|||||||
Reference in New Issue
Block a user