refactor(editor): extract markdown adapter (#9443)

This commit is contained in:
Saul-Mirone
2024-12-31 04:13:02 +00:00
parent adf14d11d5
commit 09427e846e
25 changed files with 333 additions and 181 deletions
@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import type { SurfaceBlockModel } from '@blocksuite/affine-block-surface';
import {
MindmapStyleFour,
@@ -10,7 +9,9 @@ import {
type MindmapElementModel,
MindmapStyle,
} from '@blocksuite/affine-model';
import { MarkdownAdapter } from '@blocksuite/affine-shared/adapters';
import { BlockStdScope, type EditorHost } from '@blocksuite/block-std';
import type { ServiceProvider } from '@blocksuite/global/di';
import { WithDisposable } from '@blocksuite/global/utils';
import {
type Doc,
@@ -24,8 +25,8 @@ import { css, html, LitElement, nothing } from 'lit';
import { property, query } from 'lit/decorators.js';
import { repeat } from 'lit/directives/repeat.js';
import { styleMap } from 'lit/directives/style-map.js';
import type { Root } from 'mdast';
import { MarkdownAdapter } from '../../_common/adapters/markdown/index.js';
import { MiniMindmapSchema, MiniMindmapSpecs } from './spec.js';
const mindmapStyles = [
@@ -140,7 +141,7 @@ export class MiniMindmapPreview extends WithDisposable(LitElement) {
}
private _toMindmapNode(answer: string, doc: Doc) {
return markdownToMindmap(answer, doc);
return markdownToMindmap(answer, doc, this.host.std.provider);
}
override connectedCallback(): void {
@@ -240,11 +241,15 @@ type Node = {
children: Node[];
};
export const markdownToMindmap = (answer: string, doc: Doc) => {
export const markdownToMindmap = (
answer: string,
doc: Doc,
provider: ServiceProvider
) => {
let result: Node | null = null;
const job = new Job({ collection: doc.collection });
const markdown = new MarkdownAdapter(job);
const ast = markdown['_markdownToAst'](answer);
const markdown = new MarkdownAdapter(job, provider);
const ast: Root = markdown['_markdownToAst'](answer);
const traverse = (
markdownNode: Unpacked<(typeof ast)['children']>,
firstLevel = false