@refinex-md/markdown 0.1.0-canary.1 → 0.1.0-canary.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,6 +8,12 @@ Markdown 与 `RefinexDoc` / ProseMirror document 的转换包,基于 remark /
8
8
  pnpm add @refinex-md/markdown @refinex-md/model
9
9
  ```
10
10
 
11
+ 如需预发布版本,显式使用 `@next`:
12
+
13
+ ```bash
14
+ pnpm add @refinex-md/markdown@next @refinex-md/model@next
15
+ ```
16
+
11
17
  ## 最短示例
12
18
 
13
19
  ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -279,7 +279,7 @@ function _(e, t, r, a, n, l, s) {
279
279
  const c = j(e.lang);
280
280
  return [t.nodes.code_block.create({
281
281
  language: c,
282
- displayMode: W(),
282
+ displayMode: W(c),
283
283
  ...p(l)
284
284
  }, b(t, e.value))];
285
285
  }
@@ -468,7 +468,7 @@ function j(e) {
468
468
  return t.length > 0 ? t : null;
469
469
  }
470
470
  function W(e) {
471
- return "source";
471
+ return e === "mermaid" ? "preview" : "source";
472
472
  }
473
473
  function ge(e) {
474
474
  const t = je(e);
@@ -732,7 +732,7 @@ function A(e, t) {
732
732
  const r = j(t.lang);
733
733
  return [e.schema.nodes.code_block.create({
734
734
  language: r,
735
- displayMode: W(),
735
+ displayMode: W(r),
736
736
  ...p()
737
737
  }, b(e.schema, t.value))];
738
738
  }
@@ -865,6 +865,7 @@ function Pe(e) {
865
865
  return Object.fromEntries(Object.entries({
866
866
  align: J(e.attrs.align),
867
867
  background: e.attrs.background ?? null,
868
+ textColor: e.attrs.textColor ?? null,
868
869
  colspan: e.attrs.colspan === 1 ? null : e.attrs.colspan,
869
870
  rowspan: e.attrs.rowspan === 1 ? null : e.attrs.rowspan,
870
871
  colwidth: e.attrs.colwidth ?? null,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { Fragment, type Mark, type Node as ProseMirrorNode, type Schema } from 'prosemirror-model'\nimport remarkFrontmatter from 'remark-frontmatter'\nimport remarkGfm from 'remark-gfm'\nimport remarkMath from 'remark-math'\nimport remarkParse from 'remark-parse'\nimport remarkStringify from 'remark-stringify'\nimport { unified } from 'unified'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\nimport {\n createBlockId,\n createRefinexDoc,\n createRefinexSchema,\n defaultSchema,\n validateDoc,\n type ProseMirrorDocJSON,\n type RefinexDoc,\n type RefinexDocMetadata,\n type RefinexSchemaExtension,\n} from '@refinex-md/model'\n\nexport type MarkdownTransformIssueCode =\n | 'MARKDOWN_PARSE_FAILED'\n | 'FRONTMATTER_INVALID'\n | 'FRONTMATTER_UNSERIALIZABLE'\n | 'MDAST_NODE_UNSUPPORTED'\n | 'PMAST_NODE_UNSUPPORTED'\n | 'MARK_UNSUPPORTED'\n | 'EXTENSION_CODEC_CONFLICT'\n | 'EXTENSION_CODEC_FAILED'\n | 'BLOCK_ID_COMMENT_INVALID'\n | 'GFM_TABLE_FALLBACK'\n | 'GFM_TASK_LIST_ITEM'\n | 'HTML_FALLBACK'\n | 'RICH_BLOCK_ATTR_FALLBACK'\n | 'TABLE_COMPLEX_MARKDOWN_FALLBACK'\n | 'MATH_PARSE_WARNING'\n | 'ROUNDTRIP_LOSSY'\n | 'DOC_VALIDATION_FAILED'\n\nexport type MarkdownIssueSeverity = 'error' | 'warn' | 'info'\nexport type FrontmatterMode = 'preserve' | 'drop' | 'metadata-only'\nexport type SerializeFrontmatterMode = 'emit' | 'drop'\nexport type BlockIdMode = 'regenerate' | 'preserve-trusted' | 'preserve-comments'\nexport type SerializeBlockIds = 'drop' | 'html-comments'\nexport type UnknownNodePolicy = 'warn-and-drop' | 'warn-and-paragraph' | 'error'\nexport type UnsupportedNodePolicy = 'warn-and-drop' | 'warn-and-code-fence' | 'error'\n\nexport interface MarkdownTransformIssue {\n readonly code: MarkdownTransformIssueCode\n readonly severity: MarkdownIssueSeverity\n readonly path: string\n readonly message: string\n}\n\nexport interface MarkdownFormatOptions {\n readonly bullet: '-' | '*' | '+'\n readonly emphasis: '*' | '_'\n readonly strong: '*' | '_'\n readonly bulletOrdered: '.' | ')'\n readonly incrementListMarker: boolean\n readonly fences: boolean\n readonly listItemIndent: 'one' | 'tab' | 'mixed'\n readonly rule: '-' | '*' | '_'\n readonly ruleRepetition: number\n readonly setext: boolean\n}\n\nexport interface ParseMarkdownOptions {\n readonly schemaExtensions?: readonly RefinexSchemaExtension[]\n readonly markdownExtensions?: readonly RefinexMarkdownExtension[]\n readonly frontmatter?: FrontmatterMode\n readonly blockIdMode?: BlockIdMode\n readonly unknownNodePolicy?: UnknownNodePolicy\n readonly source?: RefinexDocMetadata['source']\n}\n\nexport interface SerializeMarkdownOptions {\n readonly schemaExtensions?: readonly RefinexSchemaExtension[]\n readonly markdownExtensions?: readonly RefinexMarkdownExtension[]\n readonly frontmatter?: SerializeFrontmatterMode\n readonly blockIds?: SerializeBlockIds\n readonly unsupportedNodePolicy?: UnsupportedNodePolicy\n readonly format?: Partial<MarkdownFormatOptions>\n}\n\nexport interface ParseMarkdownResult {\n readonly doc: RefinexDoc\n readonly issues: readonly MarkdownTransformIssue[]\n readonly frontmatter: Record<string, unknown>\n}\n\nexport interface SerializeMarkdownResult {\n readonly markdown: string\n readonly issues: readonly MarkdownTransformIssue[]\n}\n\nexport interface MarkdownTransformerOptions {\n readonly schemaExtensions?: readonly RefinexSchemaExtension[]\n readonly markdownExtensions?: readonly RefinexMarkdownExtension[]\n readonly parse?: Omit<ParseMarkdownOptions, 'schemaExtensions' | 'markdownExtensions'>\n readonly serialize?: Omit<SerializeMarkdownOptions, 'schemaExtensions' | 'markdownExtensions'>\n}\n\nexport interface MarkdownTransformer {\n parse(markdown: string, options?: ParseMarkdownOptions): ParseMarkdownResult\n serialize(doc: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode, options?: SerializeMarkdownOptions): SerializeMarkdownResult\n}\n\nexport interface MarkdownParseContext {\n readonly schema: Schema\n readonly issues: MarkdownTransformIssue[]\n}\n\nexport interface MarkdownSerializeContext {\n readonly node: ProseMirrorNode\n readonly issues: MarkdownTransformIssue[]\n serializeInline(node: ProseMirrorNode): MdastPhrasing[]\n}\n\nexport interface MarkdownNodeCodec {\n parse?(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | ProseMirrorNode[] | null\n serialize?(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastNode | MdastNode[] | null\n readonly fallback: 'paragraph' | 'code_block' | 'html-comment' | 'drop' | 'error'\n}\n\nexport interface MarkdownMarkCodec {\n readonly fallback: 'drop' | 'code' | 'html-comment' | 'error'\n}\n\nexport interface RefinexMarkdownExtension {\n readonly name: string\n readonly version: string\n readonly nodes?: Record<string, MarkdownNodeCodec>\n readonly marks?: Record<string, MarkdownMarkCodec>\n}\n\ninterface MdastParent {\n children: MdastNode[]\n}\n\ninterface MdastLiteral {\n value: string\n}\n\ntype MdastNode =\n | MdastRoot\n | MdastYaml\n | MdastText\n | MdastBreak\n | MdastInlineCode\n | MdastInlineMath\n | MdastEmphasis\n | MdastStrong\n | MdastDelete\n | MdastLink\n | MdastImage\n | MdastHtml\n | MdastParagraph\n | MdastHeading\n | MdastBlockquote\n | MdastCode\n | MdastMath\n | MdastThematicBreak\n | MdastList\n | MdastListItem\n | MdastTable\n | MdastTableRow\n | MdastTableCell\n\ninterface MdastRoot extends MdastParent { type: 'root' }\ninterface MdastYaml extends MdastLiteral { type: 'yaml' }\ninterface MdastText extends MdastLiteral { type: 'text' }\ninterface MdastBreak { type: 'break' }\ninterface MdastInlineCode extends MdastLiteral { type: 'inlineCode' }\ninterface MdastInlineMath extends MdastLiteral { type: 'inlineMath' }\ninterface MdastEmphasis extends MdastParent { type: 'emphasis'; children: MdastPhrasing[] }\ninterface MdastStrong extends MdastParent { type: 'strong'; children: MdastPhrasing[] }\ninterface MdastDelete extends MdastParent { type: 'delete'; children: MdastPhrasing[] }\ninterface MdastLink extends MdastParent { type: 'link'; url: string; title?: string | null; children: MdastPhrasing[] }\ninterface MdastImage { type: 'image'; url: string; alt?: string; title?: string | null }\ninterface MdastHtml extends MdastLiteral { type: 'html' }\ninterface MdastParagraph extends MdastParent { type: 'paragraph'; children: MdastPhrasing[] }\ninterface MdastHeading extends MdastParent { type: 'heading'; depth: 1 | 2 | 3 | 4 | 5 | 6; children: MdastPhrasing[] }\ninterface MdastBlockquote extends MdastParent { type: 'blockquote'; children: MdastBlock[] }\ninterface MdastCode extends MdastLiteral { type: 'code'; lang?: string | null }\ninterface MdastMath extends MdastLiteral { type: 'math'; meta?: string | null }\ninterface MdastThematicBreak { type: 'thematicBreak' }\ninterface MdastList extends MdastParent { type: 'list'; ordered?: boolean | null; start?: number | null; spread?: boolean | null; children: MdastListItem[] }\ninterface MdastListItem extends MdastParent { type: 'listItem'; checked?: boolean | null; spread?: boolean | null; children: MdastBlock[] }\ninterface MdastTable extends MdastParent { type: 'table'; align?: Array<'left' | 'right' | 'center' | null>; children: MdastTableRow[] }\ninterface MdastTableRow extends MdastParent { type: 'tableRow'; children: MdastTableCell[] }\ninterface MdastTableCell extends MdastParent { type: 'tableCell'; children: MdastPhrasing[] }\n\ntype MdastPhrasing = MdastText | MdastBreak | MdastInlineCode | MdastInlineMath | MdastEmphasis | MdastStrong | MdastDelete | MdastLink | MdastImage | MdastHtml\ntype MdastBlock = MdastParagraph | MdastHeading | MdastBlockquote | MdastCode | MdastMath | MdastThematicBreak | MdastList | MdastTable | MdastHtml\n\nconst defaultFormat: MarkdownFormatOptions = {\n bullet: '-',\n emphasis: '*',\n strong: '*',\n bulletOrdered: '.',\n incrementListMarker: true,\n fences: true,\n listItemIndent: 'one',\n rule: '-',\n ruleRepetition: 3,\n setext: false,\n}\n\nexport function parseMarkdown(markdown: string, options: ParseMarkdownOptions = {}): ProseMirrorNode {\n return parseMarkdownDocument(markdown, options).docNode\n}\n\nexport function serializeMarkdown(\n doc: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions = {},\n): string {\n return serializeMarkdownDocument(doc, options).markdown\n}\n\nexport function markdownToDoc(markdown: string, options: ParseMarkdownOptions = {}): ParseMarkdownResult {\n return parseMarkdownDocument(markdown, options)\n}\n\nexport function docToMarkdown(\n doc: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions = {},\n): SerializeMarkdownResult {\n return serializeMarkdownDocument(doc, options)\n}\n\nexport function parseMarkdownDocument(markdown: string, options: ParseMarkdownOptions = {}): ParseMarkdownResult & { readonly docNode: ProseMirrorNode } {\n const schema = createRefinexSchema({ extensions: options.schemaExtensions })\n const issues: MarkdownTransformIssue[] = []\n const tree = parseToMdast(normalizeMarkdownMathBlocks(markdown), issues)\n const { frontmatter, children } = extractFrontmatter(tree, options, issues)\n const { nodes, extensionNames } = convertBlocks(children, schema, options, issues)\n const docNode = schema.nodes.doc.create(null, nodes.length > 0 ? nodes : undefined)\n const doc = createRefinexDoc(docNode, {\n schema: {\n extensions: [\n ...extensionNames,\n ...(options.schemaExtensions ?? []).map((extension) => ({ name: extension.name, version: extension.version })),\n ],\n },\n metadata: {\n source: options.source ?? 'markdown-import',\n ...promoteFrontmatter(frontmatter),\n },\n })\n const normalized = validateDoc(doc, {\n mode: 'repair',\n extensions: options.schemaExtensions,\n createId: createBlockId,\n })\n\n if (!normalized.ok) {\n issues.push(issue('DOC_VALIDATION_FAILED', 'error', '$.content', 'Markdown produced an invalid RefinexDoc.'))\n }\n for (const modelIssue of normalized.issues) {\n if (modelIssue.code === 'BLOCK_ID_MISSING') continue\n if (modelIssue.severity !== 'info') {\n issues.push(issue('ROUNDTRIP_LOSSY', modelIssue.severity, modelIssue.path, modelIssue.message))\n }\n }\n\n const nextDoc = normalized.normalized ?? normalized.doc ?? doc\n return {\n doc: nextDoc,\n docNode: schema.nodeFromJSON(nextDoc.content),\n issues,\n frontmatter,\n }\n}\n\nfunction normalizeMarkdownMathBlocks(markdown: string): string {\n return markdown.replace(\n /(^|\\n)([^\\n$]*?[::])?\\s*\\$\\$\\s*([^\\n$][^\\n]*?)\\s*\\$\\$(?=\\n|$)/g,\n (_match, lineStart: string, prefix: string | undefined, tex: string) =>\n `${lineStart}${prefix ? `${prefix.trim()}\\n\\n` : ''}$$\\n${tex.trim()}\\n$$`,\n )\n}\n\nexport function serializeMarkdownDocument(\n input: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions = {},\n): SerializeMarkdownResult {\n const schema = createRefinexSchema({ extensions: options.schemaExtensions })\n const issues: MarkdownTransformIssue[] = []\n const docNode = inputToNode(input, schema)\n const blocks = pmBlocksToMdast(docNode, options, issues)\n const root: MdastRoot = { type: 'root', children: blocks }\n const frontmatter = frontmatterToYaml(input, options, issues)\n if (frontmatter) root.children.unshift({ type: 'yaml', value: frontmatter })\n const markdown = stringifyMdast(root, options)\n return { markdown, issues }\n}\n\nexport function createMarkdownTransformer(options: MarkdownTransformerOptions = {}): MarkdownTransformer {\n return {\n parse(markdown, parseOptions = {}) {\n return parseMarkdownDocument(markdown, {\n schemaExtensions: options.schemaExtensions,\n markdownExtensions: options.markdownExtensions,\n ...options.parse,\n ...parseOptions,\n })\n },\n serialize(doc, serializeOptions = {}) {\n return serializeMarkdownDocument(doc, {\n schemaExtensions: options.schemaExtensions,\n markdownExtensions: options.markdownExtensions,\n ...options.serialize,\n ...serializeOptions,\n })\n },\n }\n}\n\nexport function createRichBlockMarkdownExtension(): RefinexMarkdownExtension {\n return {\n name: 'rich_blocks',\n version: '1.0.0',\n nodes: {\n image_block: {\n parse({ schema }, node) {\n if (node.type !== 'paragraph' || !schema.nodes.image_block) return null\n const image = node.children.length === 1 && node.children[0]?.type === 'image' ? node.children[0] : null\n if (!image) return null\n return schema.nodes.image_block.create({\n src: image.url,\n alt: image.alt ?? null,\n title: image.title ?? null,\n })\n },\n serialize(context, node) {\n return imageBlockToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n callout: {\n parse(context, node) {\n return calloutFromMdast(context, node)\n },\n serialize(context, node) {\n return calloutToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n task_list: {\n parse(context, node) {\n return taskListFromMdast(context, node)\n },\n serialize(context, node) {\n return taskListToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n toggle_list: {\n parse() {\n return null\n },\n serialize(context, node) {\n return toggleListToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n divider: {\n parse({ schema }, node) {\n return node.type === 'thematicBreak' && schema.nodes.divider\n ? schema.nodes.divider.create({ variant: 'solid' })\n : null\n },\n serialize(_context, node) {\n if (node.attrs.variant === 'solid' || !node.attrs.variant) return { type: 'thematicBreak' }\n return wrapRefinexBlock('divider', { variant: node.attrs.variant }, [{ type: 'thematicBreak' }])\n },\n fallback: 'paragraph',\n },\n table: {\n parse(context, node) {\n return tableFromMdast(context, node)\n },\n serialize(context, node) {\n return tableToMdastNode(context, node)\n },\n fallback: 'code_block',\n },\n math_block: {\n parse({ schema }, node) {\n if (!schema.nodes.math_block) return null\n if (node.type === 'math') return schema.nodes.math_block.create({ tex: node.value })\n if (node.type === 'code' && node.lang === 'math') return schema.nodes.math_block.create({ tex: node.value })\n return null\n },\n serialize(_context, node) {\n if (node.attrs.numbered || node.attrs.label || node.attrs.align === 'left') {\n return wrapRefinexBlock('math_block', {\n numbered: Boolean(node.attrs.numbered),\n label: node.attrs.label,\n align: node.attrs.align,\n }, [{ type: 'math', value: node.attrs.tex as string }])\n }\n return { type: 'math', value: node.attrs.tex as string }\n },\n fallback: 'code_block',\n },\n embed_block: {\n parse({ schema }, node) {\n if (node.type !== 'paragraph' || !schema.nodes.embed_block) return null\n const first = node.children[0]\n if (node.children.length !== 1 || first?.type !== 'link') return null\n return schema.nodes.embed_block.create({\n url: first.url,\n title: phrasingToText(first.children),\n embedType: 'bookmark',\n status: 'unresolved',\n })\n },\n serialize(_context, node) {\n const title = typeof node.attrs.title === 'string' && node.attrs.title.length > 0\n ? node.attrs.title\n : node.attrs.url\n return {\n type: 'paragraph',\n children: [{\n type: 'link',\n url: node.attrs.url as string,\n title: null,\n children: [{ type: 'text', value: title as string }],\n }],\n }\n },\n fallback: 'paragraph',\n },\n },\n }\n}\n\nfunction parseToMdast(markdown: string, issues: MarkdownTransformIssue[]): MdastRoot {\n try {\n return unified()\n .use(remarkParse)\n .use(remarkFrontmatter, ['yaml'])\n .use(remarkGfm, { singleTilde: false })\n .use(remarkMath)\n .parse(markdown) as unknown as MdastRoot\n } catch (error) {\n issues.push(issue('MARKDOWN_PARSE_FAILED', 'error', '$', error instanceof Error ? error.message : 'Markdown parse failed.'))\n return { type: 'root', children: [] }\n }\n}\n\nfunction stringifyMdast(root: MdastRoot, options: SerializeMarkdownOptions): string {\n const format = { ...defaultFormat, ...options.format }\n return String(unified()\n .use(remarkGfm, { singleTilde: false, tablePipeAlign: false, tableCellPadding: true })\n .use(remarkMath)\n .use(remarkFrontmatter, ['yaml'])\n .use(remarkStringify, format)\n .stringify(root as never))\n .replace(/(<!-- refinex:block-id blk_[A-Za-z0-9_-]{8,36} -->)\\n\\n/g, '$1\\n')\n .replace(/^(---\\n[\\s\\S]*?\\n---)\\n\\n/, '$1\\n')\n}\n\nfunction extractFrontmatter(\n root: MdastRoot,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): { frontmatter: Record<string, unknown>; children: MdastNode[] } {\n const first = root.children[0]\n if (!first || first.type !== 'yaml') return { frontmatter: {}, children: root.children }\n if (options.frontmatter === 'drop') return { frontmatter: {}, children: root.children.slice(1) }\n\n try {\n const parsed = parseYaml(first.value) as unknown\n if (!isRecord(parsed)) {\n issues.push(issue('FRONTMATTER_INVALID', 'warn', '$.frontmatter', 'YAML frontmatter must be an object.'))\n return { frontmatter: { frontmatterRaw: first.value }, children: root.children.slice(1) }\n }\n return { frontmatter: parsed, children: root.children.slice(1) }\n } catch (error) {\n issues.push(issue('FRONTMATTER_INVALID', 'warn', '$.frontmatter', error instanceof Error ? error.message : 'Invalid YAML frontmatter.'))\n return { frontmatter: { frontmatterRaw: first.value }, children: root.children.slice(1) }\n }\n}\n\nfunction promoteFrontmatter(frontmatter: Record<string, unknown>): RefinexDocMetadata {\n const metadata: Record<string, unknown> = {}\n for (const key of ['title', 'createdAt', 'updatedAt', 'createdBy', 'updatedBy'] as const) {\n if (typeof frontmatter[key] === 'string') {\n metadata[key] = frontmatter[key]\n }\n }\n if (Object.keys(frontmatter).length > 0) {\n metadata.custom = { frontmatter }\n }\n return metadata as RefinexDocMetadata\n}\n\nfunction convertBlocks(\n nodes: readonly MdastNode[],\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): { nodes: ProseMirrorNode[]; extensionNames: Array<{ name: string; version: string }> } {\n const result: ProseMirrorNode[] = []\n const extensionNames: Array<{ name: string; version: string }> = []\n let pendingBlockId: string | undefined\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]\n if (node.type === 'html') {\n const blockId = parseBlockIdComment(node.value)\n if (blockId) {\n if (options.blockIdMode === 'preserve-comments') pendingBlockId = blockId\n continue\n }\n const wrapper = parseRefinexBlockStart(node.value)\n if (wrapper) {\n const inner: MdastNode[] = []\n let cursor = index + 1\n while (cursor < nodes.length) {\n const candidate = nodes[cursor]\n if (candidate.type === 'html' && isRefinexBlockEnd(candidate.value)) break\n inner.push(candidate)\n cursor += 1\n }\n if (cursor < nodes.length) {\n result.push(...convertRefinexBlockWrapper(wrapper, inner, schema, options, issues, `$.children[${String(index)}]`, pendingBlockId, extensionNames))\n pendingBlockId = undefined\n index = cursor\n continue\n }\n }\n }\n\n const converted = convertBlock(node, schema, options, issues, `$.children[${String(index)}]`, pendingBlockId, extensionNames)\n pendingBlockId = undefined\n result.push(...converted)\n }\n\n return { nodes: result, extensionNames }\n}\n\nfunction convertBlock(\n node: MdastNode,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n blockId: string | undefined,\n extensionNames: Array<{ name: string; version: string }>,\n): ProseMirrorNode[] {\n const extensionResult = parseWithExtension(node, schema, options, issues)\n if (extensionResult) {\n extensionNames.push(...extensionResult.extensionNames)\n return Array.isArray(extensionResult.node) ? extensionResult.node : [extensionResult.node]\n }\n\n switch (node.type) {\n case 'paragraph':\n if (isHtmlOnlyParagraph(node)) {\n issues.push(issue('HTML_FALLBACK', 'warn', path, 'HTML block is preserved as html code block.'))\n return [schema.nodes.code_block.create({ language: 'html', ...blockAttrs(blockId) }, textOrUndefined(schema, phrasingToText(node.children)))]\n }\n return [schema.nodes.paragraph.create(blockAttrs(blockId), convertPhrasing(node.children, schema, issues, path))]\n case 'heading':\n return [schema.nodes.heading.create({ level: node.depth, ...blockAttrs(blockId) }, convertPhrasing(node.children, schema, issues, path))]\n case 'blockquote': {\n const children = node.children.flatMap((child, index) => convertBlock(child, schema, options, issues, `${path}.children[${String(index)}]`, undefined, extensionNames))\n return [schema.nodes.blockquote.create(blockAttrs(blockId), children.length > 0 ? children : [schema.nodes.paragraph.create(blockAttrs())])]\n }\n case 'code':\n {\n const language = normalizeCodeLanguage(node.lang)\n return [schema.nodes.code_block.create({\n language,\n displayMode: normalizeCodeBlockDisplayMode(language),\n ...blockAttrs(blockId),\n }, textOrUndefined(schema, node.value))]\n }\n case 'math':\n if (schema.nodes.math_block) {\n return [schema.nodes.math_block.create({ tex: node.value, ...blockAttrs(blockId) })]\n }\n return [schema.nodes.code_block.create({ language: 'math', ...blockAttrs(blockId) }, textOrUndefined(schema, node.value))]\n case 'thematicBreak':\n return [schema.nodes.horizontal_rule.create(blockAttrs(blockId))]\n case 'list':\n return [convertList(node, schema, options, issues, path)]\n case 'table':\n issues.push(issue('GFM_TABLE_FALLBACK', 'warn', path, 'GFM table is preserved as markdown-table code block until table nodes exist.'))\n return [schema.nodes.code_block.create(\n { language: 'markdown-table', ...blockAttrs(blockId), metadata: { markdown: { type: 'table', table: node } } },\n textOrUndefined(schema, tableToPlainText(node)),\n )]\n case 'html':\n issues.push(issue('HTML_FALLBACK', 'warn', path, 'HTML block is preserved as html code block.'))\n return [schema.nodes.code_block.create({ language: 'html', ...blockAttrs(blockId) }, textOrUndefined(schema, node.value))]\n case 'yaml':\n return []\n default:\n return handleUnknownBlock(node, schema, options, issues, path)\n }\n}\n\nfunction convertList(\n node: MdastList,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n): ProseMirrorNode {\n const hasTaskItems = !node.ordered && node.children.some((item) => typeof item.checked === 'boolean')\n if (hasTaskItems && schema.nodes.task_list && schema.nodes.task_item) {\n return schema.nodes.task_list.create({ metadata: null }, node.children.map((item, index) => {\n const children = item.children.flatMap((child, childIndex) => convertBlock(child, schema, options, issues, `${path}.children[${String(index)}].children[${String(childIndex)}]`, undefined, []))\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(schema.nodes.paragraph.create(blockAttrs()))\n }\n return schema.nodes.task_item.create(\n { checked: item.checked === true, ...blockAttrs() },\n children,\n )\n }))\n }\n const itemNodes = node.children.map((item, index) => {\n if (typeof item.checked === 'boolean') {\n issues.push(issue('GFM_TASK_LIST_ITEM', 'warn', `${path}.children[${String(index)}]`, 'Task list item state is stored in list item metadata.'))\n }\n const children = item.children.flatMap((child, childIndex) => convertBlock(child, schema, options, issues, `${path}.children[${String(index)}].children[${String(childIndex)}]`, undefined, []))\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(schema.nodes.paragraph.create(blockAttrs()))\n }\n return schema.nodes.list_item.create(\n { ...blockAttrs(), metadata: typeof item.checked === 'boolean' ? { task: { checked: item.checked } } : null },\n children,\n )\n })\n return node.ordered\n ? schema.nodes.ordered_list.create({ order: node.start ?? 1, metadata: null }, itemNodes)\n : schema.nodes.bullet_list.create({ metadata: null }, itemNodes)\n}\n\nfunction convertPhrasing(\n nodes: readonly MdastPhrasing[],\n schema: Schema,\n issues: MarkdownTransformIssue[],\n path: string,\n marks: readonly Mark[] = [],\n): ProseMirrorNode[] {\n return nodes.flatMap((node, index) => convertPhrasingNode(node, schema, issues, `${path}.children[${String(index)}]`, marks))\n}\n\nfunction convertPhrasingNode(\n node: MdastPhrasing,\n schema: Schema,\n issues: MarkdownTransformIssue[],\n path: string,\n marks: readonly Mark[],\n): ProseMirrorNode[] {\n switch (node.type) {\n case 'text':\n return node.value.length > 0 ? [schema.text(node.value, marks)] : []\n case 'strong':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.bold.create()])\n case 'emphasis':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.italic.create()])\n case 'delete':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.strikethrough.create()])\n case 'inlineCode':\n return [schema.text(node.value, [schema.marks.code.create()])]\n case 'inlineMath':\n if (schema.nodes.math_inline) return [schema.nodes.math_inline.create({ tex: node.value })]\n issues.push(issue('MATH_PARSE_WARNING', 'warn', path, 'Inline math is preserved as plain text because math nodes are not enabled.'))\n return [schema.text(`$${node.value}$`, marks)]\n case 'link':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.link.create({ href: node.url, title: node.title ?? null })])\n case 'image':\n return [schema.nodes.image.create({ src: node.url, alt: node.alt ?? null, title: node.title ?? null, metadata: null, permissions: null })]\n case 'break':\n return [schema.nodes.hard_break.create()]\n case 'html':\n issues.push(issue('HTML_FALLBACK', 'warn', path, 'Inline HTML is preserved as text.'))\n return [schema.text(node.value, marks)]\n }\n}\n\nfunction pmBlocksToMdast(\n doc: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode[] {\n const result: MdastNode[] = []\n doc.forEach((child) => {\n const block = pmBlockToMdast(child, options, issues)\n const blocks = Array.isArray(block) ? block : [block]\n for (const entry of blocks) {\n if (options.blockIds === 'html-comments' && typeof child.attrs.blockId === 'string') {\n result.push({ type: 'html', value: `<!-- refinex:block-id ${child.attrs.blockId as string} -->` })\n }\n result.push(entry)\n }\n })\n return result\n}\n\nfunction pmBlockToMdast(\n node: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode | MdastNode[] {\n const extension = options.markdownExtensions?.find((entry) => entry.nodes?.[node.type.name])\n if (extension?.nodes?.[node.type.name]?.serialize) {\n try {\n const serialized = extension.nodes[node.type.name].serialize?.({\n node,\n issues,\n serializeInline: (target) => pmInlineToMdast(target, options, issues),\n }, node)\n if (serialized) return serialized\n } catch (error) {\n issues.push(issue('EXTENSION_CODEC_FAILED', 'error', `$.${node.type.name}`, error instanceof Error ? error.message : 'Extension codec failed.'))\n }\n }\n\n switch (node.type.name) {\n case 'paragraph':\n return { type: 'paragraph', children: mergeAdjacent(pmInlineToMdast(node, options, issues)) }\n case 'heading':\n return { type: 'heading', depth: clampHeading(node.attrs.level), children: mergeAdjacent(pmInlineToMdast(node, options, issues)) }\n case 'blockquote':\n return { type: 'blockquote', children: flattenChildren(node, options, issues) as MdastBlock[] }\n case 'code_block':\n return codeBlockToMdast(node)\n case 'horizontal_rule':\n return { type: 'thematicBreak' }\n case 'bullet_list':\n case 'ordered_list':\n return listToMdast(node, options, issues)\n default:\n return handleUnsupportedPmNode(node, options, issues)\n }\n}\n\nfunction pmInlineToMdast(\n parent: ProseMirrorNode,\n _options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastPhrasing[] {\n const result: MdastPhrasing[] = []\n parent.forEach((child) => {\n if (child.type.name === 'hard_break') {\n result.push({ type: 'break' })\n return\n }\n if (child.type.name === 'image') {\n result.push({\n type: 'image',\n url: child.attrs.src as string,\n alt: (child.attrs.alt as string | null) ?? undefined,\n title: (child.attrs.title as string | null) ?? null,\n })\n return\n }\n if (child.type.name === 'math_inline') {\n result.push({ type: 'inlineMath', value: child.attrs.tex as string })\n return\n }\n if (!child.isText) return\n\n const codeMark = child.marks.find((mark) => mark.type.name === 'code')\n if (codeMark) {\n result.push({ type: 'inlineCode', value: child.text ?? '' })\n return\n }\n\n let current: MdastPhrasing = { type: 'text', value: child.text ?? '' }\n for (const mark of [...child.marks].reverse()) {\n switch (mark.type.name) {\n case 'bold':\n current = { type: 'strong', children: [current] }\n break\n case 'italic':\n current = { type: 'emphasis', children: [current] }\n break\n case 'strikethrough':\n current = { type: 'delete', children: [current] }\n break\n case 'link':\n current = {\n type: 'link',\n url: mark.attrs.href as string,\n title: (mark.attrs.title as string | null) ?? null,\n children: [current],\n }\n break\n case 'underline':\n issues.push(issue('MARK_UNSUPPORTED', 'warn', '$.marks.underline', 'Underline has no portable Markdown representation and was dropped.'))\n break\n }\n }\n result.push(current)\n })\n return result\n}\n\nfunction listToMdast(\n node: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastList {\n const children: MdastListItem[] = []\n node.forEach((item) => {\n const itemChildren = flattenChildren(item, options, issues) as MdastBlock[]\n const task = readTaskMetadata(item)\n children.push({\n type: 'listItem',\n checked: task,\n spread: false,\n children: itemChildren,\n })\n })\n return {\n type: 'list',\n ordered: node.type.name === 'ordered_list',\n start: node.type.name === 'ordered_list' ? node.attrs.order as number : undefined,\n spread: false,\n children,\n }\n}\n\nfunction normalizeCodeLanguage(value: unknown): string | null {\n const normalized = String(value ?? '').trim().toLowerCase()\n return normalized.length > 0 ? normalized : null\n}\n\nfunction normalizeCodeBlockDisplayMode(_language: string | null): 'source' | 'preview' {\n return 'source'\n}\n\nfunction codeBlockToMdast(node: ProseMirrorNode): MdastNode {\n const metadata = readMarkdownMetadata(node)\n if (metadata?.type === 'table' && metadata.table) return metadata.table as MdastTable\n return {\n type: 'code',\n lang: (node.attrs.language as string | null) ?? undefined,\n value: node.textContent,\n }\n}\n\nfunction flattenChildren(\n parent: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode[] {\n const result: MdastNode[] = []\n parent.forEach((child) => {\n const converted = pmBlockToMdast(child, options, issues)\n result.push(...(Array.isArray(converted) ? converted : [converted]))\n })\n return result\n}\n\nfunction frontmatterToYaml(\n input: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): string | undefined {\n if (options.frontmatter === 'drop' || !isRefinexDoc(input)) return undefined\n const raw = {\n ...(input.metadata.custom?.frontmatter as Record<string, unknown> | undefined),\n title: input.metadata.title,\n createdAt: input.metadata.createdAt,\n updatedAt: input.metadata.updatedAt,\n createdBy: input.metadata.createdBy,\n updatedBy: input.metadata.updatedBy,\n }\n const frontmatter = Object.fromEntries(Object.entries(raw).filter(([, value]) => value !== undefined))\n if (Object.keys(frontmatter).length === 0) return undefined\n\n try {\n return stringifyYaml(frontmatter).trimEnd()\n } catch (error) {\n issues.push(issue('FRONTMATTER_UNSERIALIZABLE', 'warn', '$.metadata', error instanceof Error ? error.message : 'Frontmatter is not serializable.'))\n return undefined\n }\n}\n\nfunction inputToNode(input: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode, schema: Schema): ProseMirrorNode {\n if (isProseMirrorNode(input)) return input\n if (isRefinexDoc(input)) return schema.nodeFromJSON(input.content)\n return schema.nodeFromJSON(input)\n}\n\nfunction handleUnknownBlock(\n node: MdastNode,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n): ProseMirrorNode[] {\n if (options.unknownNodePolicy === 'error') {\n issues.push(issue('MDAST_NODE_UNSUPPORTED', 'error', path, `Unsupported mdast node \"${node.type}\".`))\n return []\n }\n issues.push(issue('MDAST_NODE_UNSUPPORTED', 'warn', path, `Unsupported mdast node \"${node.type}\" was dropped.`))\n if (options.unknownNodePolicy === 'warn-and-paragraph') {\n return [schema.nodes.paragraph.create(blockAttrs(), schema.text(nodeToText(node)))]\n }\n return []\n}\n\nfunction handleUnsupportedPmNode(\n node: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode[] {\n if (options.unsupportedNodePolicy === 'error') {\n issues.push(issue('PMAST_NODE_UNSUPPORTED', 'error', `$.${node.type.name}`, `Unsupported ProseMirror node \"${node.type.name}\".`))\n return []\n }\n issues.push(issue('PMAST_NODE_UNSUPPORTED', 'warn', `$.${node.type.name}`, `Unsupported ProseMirror node \"${node.type.name}\" was dropped.`))\n if (options.unsupportedNodePolicy === 'warn-and-code-fence') {\n return [{ type: 'code', lang: 'json', value: JSON.stringify(node.toJSON(), null, 2) }]\n }\n return []\n}\n\nfunction parseWithExtension(\n node: MdastNode,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): { node: ProseMirrorNode | ProseMirrorNode[]; extensionNames: Array<{ name: string; version: string }> } | undefined {\n for (const extension of options.markdownExtensions ?? []) {\n for (const codec of Object.values(extension.nodes ?? {})) {\n if (!codec.parse) continue\n try {\n const parsed = codec.parse({ schema, issues }, node)\n if (parsed) {\n const schemaExtensionNames = new Set((options.schemaExtensions ?? []).map((schemaExtension) => schemaExtension.name))\n return {\n node: parsed,\n extensionNames: schemaExtensionNames.has(extension.name)\n ? [{ name: extension.name, version: extension.version }]\n : [],\n }\n }\n } catch (error) {\n issues.push(issue('EXTENSION_CODEC_FAILED', 'error', `$.${node.type}`, error instanceof Error ? error.message : 'Extension codec failed.'))\n }\n }\n }\n return undefined\n}\n\nfunction mergeAdjacent(nodes: MdastPhrasing[]): MdastPhrasing[] {\n const result: MdastPhrasing[] = []\n for (const node of nodes) {\n const previous = result[result.length - 1]\n if (previous?.type === 'text' && node.type === 'text') {\n previous.value += node.value\n continue\n }\n if (previous?.type === 'strong' && node.type === 'strong') {\n previous.children.push(...node.children)\n continue\n }\n if (previous?.type === 'emphasis' && node.type === 'emphasis') {\n previous.children.push(...node.children)\n continue\n }\n if (previous?.type === 'delete' && node.type === 'delete') {\n previous.children.push(...node.children)\n continue\n }\n result.push(node)\n }\n return result\n}\n\nfunction imageBlockToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastNode | MdastNode[] {\n const image: MdastImage = {\n type: 'image',\n url: node.attrs.src as string,\n alt: (node.attrs.alt as string | null) ?? undefined,\n title: (node.attrs.title as string | null) ?? null,\n }\n const caption = mergeAdjacent(context.serializeInline(node))\n const hasCaption = caption.length > 0\n const attrs = {\n align: node.attrs.align,\n widthPercent: node.attrs.widthPercent,\n aspectRatio: node.attrs.aspectRatio,\n status: node.attrs.status,\n }\n const defaultAttrs = (attrs.align === 'center' || attrs.align == null)\n && (attrs.widthPercent === 100 || attrs.widthPercent == null)\n && !attrs.aspectRatio\n && (attrs.status === 'ready' || attrs.status == null)\n const imageParagraph: MdastParagraph = { type: 'paragraph', children: [image] }\n if (!hasCaption && defaultAttrs) return imageParagraph\n return wrapRefinexBlock('image_block', attrs, [\n imageParagraph,\n ...(hasCaption ? [{ type: 'paragraph', children: caption } satisfies MdastParagraph] : []),\n ])\n}\n\nfunction calloutFromMdast(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | null {\n if (node.type !== 'blockquote' || !context.schema.nodes.callout) return null\n const first = node.children[0]\n if (first?.type !== 'paragraph') return null\n const marker = phrasingToText(first.children).match(/^\\[!(NOTE|INFO|TIP|IMPORTANT|WARNING|CAUTION|ERROR)\\]\\s*([\\s\\S]*)$/i)\n if (!marker) return null\n const kind = normalizeCalloutKind(marker[1])\n const markerRest = marker[2]?.trim() || ''\n const [titleLine, ...bodyLines] = markerRest.split(/\\n+/)\n const title = titleLine || null\n const body: ProseMirrorNode[] = []\n if (bodyLines.length > 0) {\n body.push(context.schema.nodes.paragraph.create(blockAttrs(), context.schema.text(bodyLines.join('\\n'))))\n } else if (title) {\n body.push(context.schema.nodes.paragraph.create(blockAttrs(), context.schema.text(title)))\n }\n for (const child of node.children.slice(1)) {\n body.push(...simpleBlocksFromMdast(context, child))\n }\n return context.schema.nodes.callout.create(\n { kind, title, ...blockAttrs() },\n body.length > 0 ? body : [context.schema.nodes.paragraph.create(blockAttrs())],\n )\n}\n\nfunction calloutToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastBlockquote {\n const kind = normalizeCalloutKind(node.attrs.kind).toUpperCase()\n const title = typeof node.attrs.title === 'string' && node.attrs.title.length > 0 ? ` ${node.attrs.title}` : ''\n const children = flattenChildren(node, { markdownExtensions: [createRichBlockMarkdownExtension()] }, context.issues) as MdastBlock[]\n const first = children[0]\n if (!title && first?.type === 'paragraph') {\n return {\n type: 'blockquote',\n children: [\n {\n type: 'paragraph',\n children: [\n { type: 'text', value: `[!${kind}]\\n` },\n ...first.children,\n ],\n },\n ...children.slice(1),\n ],\n }\n }\n return {\n type: 'blockquote',\n children: [\n { type: 'paragraph', children: [{ type: 'text', value: `[!${kind}]${title}` }] },\n ...children,\n ],\n }\n}\n\nfunction normalizeCalloutKind(value: unknown): 'note' | 'tip' | 'important' | 'warning' | 'caution' {\n const normalized = String(value ?? 'note').toLowerCase()\n if (normalized === 'tip' || normalized === 'important' || normalized === 'warning' || normalized === 'caution') return normalized\n if (normalized === 'error') return 'caution'\n return 'note'\n}\n\nfunction taskListFromMdast(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | null {\n if (node.type !== 'list' || node.ordered || !context.schema.nodes.task_list || !context.schema.nodes.task_item) return null\n if (!node.children.some((item) => typeof item.checked === 'boolean')) return null\n return context.schema.nodes.task_list.create({ metadata: null }, node.children.map((item) => {\n const children = item.children.flatMap((child) => simpleBlocksFromMdast(context, child))\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(context.schema.nodes.paragraph.create(blockAttrs()))\n }\n return context.schema.nodes.task_item.create({ checked: item.checked === true, ...blockAttrs() }, children)\n }))\n}\n\nfunction taskListToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastList {\n const children: MdastListItem[] = []\n node.forEach((item) => {\n children.push({\n type: 'listItem',\n checked: item.attrs.checked === true,\n spread: false,\n children: flattenChildren(item, { markdownExtensions: [createRichBlockMarkdownExtension()] }, context.issues) as MdastBlock[],\n })\n })\n return { type: 'list', ordered: false, spread: false, children }\n}\n\ninterface ToggleItemState {\n readonly collapsed: boolean\n readonly children?: readonly ToggleItemState[]\n}\n\nfunction toggleListToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastNode[] {\n const items: ToggleItemState[] = []\n const list = toggleListNodeToMdastList(context, node, items)\n return wrapRefinexBlock('toggle_list', { items }, [list])\n}\n\nfunction toggleListNodeToMdastList(\n context: MarkdownSerializeContext,\n node: ProseMirrorNode,\n states: ToggleItemState[],\n): MdastList {\n const children: MdastListItem[] = []\n node.forEach((item) => {\n const state: { collapsed: boolean; children?: ToggleItemState[] } = { collapsed: item.attrs.collapsed === true }\n states.push(state)\n const itemChildren: MdastBlock[] = []\n item.forEach((child) => {\n if (child.type.name === 'toggle_list') {\n const nestedStates: ToggleItemState[] = []\n itemChildren.push(toggleListNodeToMdastList(context, child, nestedStates))\n state.children = nestedStates\n return\n }\n const converted = pmBlockToMdast(child, { markdownExtensions: [createRichBlockMarkdownExtension()] }, context.issues)\n const blocks = (Array.isArray(converted) ? converted : [converted]) as MdastBlock[]\n itemChildren.push(...blocks)\n })\n if (itemChildren.length === 0 || itemChildren[0]?.type !== 'paragraph') {\n itemChildren.unshift({ type: 'paragraph', children: [] })\n }\n children.push({ type: 'listItem', checked: null, spread: itemChildren.length > 1, children: itemChildren })\n })\n return { type: 'list', ordered: false, spread: children.some((item) => item.spread), children }\n}\n\nfunction toggleListFromWrappedMdast(\n context: MarkdownParseContext,\n inner: readonly MdastNode[],\n attrs: Record<string, unknown>,\n): ProseMirrorNode | null {\n if (!context.schema.nodes.toggle_list || !context.schema.nodes.toggle_item) return null\n const list = inner.find((node): node is MdastList => node.type === 'list' && !node.ordered)\n if (!list) return null\n const itemStates = readToggleItemStates(attrs.items)\n return context.schema.nodes.toggle_list.create(\n { metadata: null },\n list.children.map((item, index) => toggleItemFromMdast(context, item, itemStates[index])),\n )\n}\n\nfunction toggleItemFromMdast(\n context: MarkdownParseContext,\n item: MdastListItem,\n state: ToggleItemState | undefined,\n): ProseMirrorNode {\n const children: ProseMirrorNode[] = []\n const nestedStates = state?.children ?? []\n item.children.forEach((child) => {\n if (child.type === 'list' && !child.ordered && nestedStates.length > 0) {\n children.push(context.schema.nodes.toggle_list.create(\n { metadata: null },\n child.children.map((nestedItem, index) => toggleItemFromMdast(context, nestedItem, nestedStates[index])),\n ))\n return\n }\n children.push(...simpleBlocksFromMdast(context, child))\n })\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(context.schema.nodes.paragraph.create(blockAttrs()))\n }\n return context.schema.nodes.toggle_item.create(\n { collapsed: state?.collapsed === true, ...blockAttrs() },\n children,\n )\n}\n\nfunction readToggleItemStates(value: unknown): ToggleItemState[] {\n if (!Array.isArray(value)) return []\n return value.map((entry) => {\n if (!isRecord(entry)) return { collapsed: false }\n const children = readToggleItemStates(entry.children)\n return {\n collapsed: entry.collapsed === true,\n ...(children.length > 0 ? { children } : {}),\n }\n })\n}\n\nfunction tableFromMdast(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | null {\n const schema = context.schema\n if (node.type !== 'table' || !schema.nodes.table || !schema.nodes.table_row || !schema.nodes.table_cell || !schema.nodes.table_header) return null\n const rows = node.children.map((row, rowIndex) => schema.nodes.table_row.create(null, row.children.map((cell, columnIndex) => {\n const cellType = rowIndex === 0 ? schema.nodes.table_header : schema.nodes.table_cell\n const align = node.align?.[columnIndex] ?? null\n return cellType.create({ align }, [\n schema.nodes.paragraph.create(blockAttrs(), convertPhrasing(cell.children, schema, context.issues, '$.table')),\n ])\n })))\n return schema.nodes.table.create({ ...blockAttrs(), layout: 'auto', columnWidths: null, caption: null }, rows)\n}\n\nfunction tableToMdastNode(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastTable | MdastNode[] {\n const rows: MdastTableRow[] = []\n const align: Array<'left' | 'right' | 'center' | null> = []\n let complex = false\n node.forEach((row, _rowOffset, rowIndex) => {\n const cells: MdastTableCell[] = []\n row.forEach((cell, _cellOffset, columnIndex) => {\n if (cell.attrs.colspan !== 1 || cell.attrs.rowspan !== 1 || cell.childCount !== 1 || cell.firstChild?.type.name !== 'paragraph') {\n complex = true\n }\n if (!isGfmTableCellType(node, rowIndex, cell.type.name)) complex = true\n if (hasComplexTableCellAttrs(cell)) complex = true\n if (rowIndex === 0) align[columnIndex] = normalizeTableAlign(cell.attrs.align)\n cells.push({ type: 'tableCell', children: cell.firstChild ? pmInlineToMdast(cell.firstChild, {}, context.issues) : [] })\n })\n rows.push({ type: 'tableRow', children: cells })\n })\n const table: MdastTable = { type: 'table', align, children: rows }\n if (complex || node.attrs.caption || node.attrs.columnWidths) {\n context.issues.push(issue('TABLE_COMPLEX_MARKDOWN_FALLBACK', 'warn', '$.table', 'Complex table attributes require Refinex block wrapper.'))\n return wrapRefinexBlock('table', {\n caption: node.attrs.caption,\n columnWidths: node.attrs.columnWidths,\n layout: node.attrs.layout,\n cells: tableWrapperCells(node),\n }, [table])\n }\n return table\n}\n\nfunction simpleBlocksFromMdast(context: MarkdownParseContext, node: MdastBlock): ProseMirrorNode[] {\n switch (node.type) {\n case 'paragraph':\n return [context.schema.nodes.paragraph.create(blockAttrs(), convertPhrasing(node.children, context.schema, context.issues, '$.rich'))]\n case 'heading':\n return [context.schema.nodes.heading.create({ level: node.depth, ...blockAttrs() }, convertPhrasing(node.children, context.schema, context.issues, '$.rich'))]\n case 'code':\n {\n const language = normalizeCodeLanguage(node.lang)\n return [context.schema.nodes.code_block.create({\n language,\n displayMode: normalizeCodeBlockDisplayMode(language),\n ...blockAttrs(),\n }, textOrUndefined(context.schema, node.value))]\n }\n case 'math':\n return context.schema.nodes.math_block ? [context.schema.nodes.math_block.create({ tex: node.value, ...blockAttrs() })] : []\n case 'list':\n return [convertList(node, context.schema, {}, context.issues, '$.rich')]\n case 'thematicBreak':\n return [context.schema.nodes.horizontal_rule.create(blockAttrs())]\n case 'blockquote':\n return [context.schema.nodes.blockquote.create(blockAttrs(), node.children.flatMap((child) => simpleBlocksFromMdast(context, child)))]\n case 'table': {\n const table = tableFromMdast(context, node)\n return table ? [table] : []\n }\n case 'html':\n return [context.schema.nodes.code_block.create({ language: 'html', ...blockAttrs() }, textOrUndefined(context.schema, node.value))]\n }\n}\n\nfunction wrapRefinexBlock(type: string, attrs: Record<string, unknown>, children: MdastNode[]): MdastNode[] {\n const cleaned = Object.fromEntries(Object.entries(attrs).filter(([, value]) => value !== undefined && value !== null))\n return [\n { type: 'html', value: `<!-- refinex:block ${JSON.stringify({ type, attrs: cleaned })} -->` },\n ...children,\n { type: 'html', value: '<!-- /refinex:block -->' },\n ]\n}\n\nfunction normalizeTableAlign(value: unknown): 'left' | 'right' | 'center' | null {\n return value === 'left' || value === 'right' || value === 'center' ? value : null\n}\n\nfunction blockAttrs(blockId?: string): Record<string, unknown> {\n return {\n blockId: blockId ?? null,\n metadata: null,\n permissions: null,\n }\n}\n\nfunction textOrUndefined(schema: Schema, value: string): ProseMirrorNode | undefined {\n return value.length > 0 ? schema.text(value) : undefined\n}\n\nfunction parseBlockIdComment(value: string): string | undefined {\n const match = /^<!--\\s*refinex:block-id\\s+(blk_[A-Za-z0-9_-]{8,36})\\s*-->$/.exec(value.trim())\n return match?.[1]\n}\n\nfunction parseRefinexBlockStart(value: string): { type: string; attrs: Record<string, unknown> } | undefined {\n const match = /^<!--\\s*refinex:block\\s+(\\{[\\s\\S]*\\})\\s*-->$/.exec(value.trim())\n if (!match) return undefined\n try {\n const parsed = JSON.parse(match[1]) as unknown\n if (!isRecord(parsed) || typeof parsed.type !== 'string') return undefined\n return {\n type: parsed.type,\n attrs: isRecord(parsed.attrs) ? parsed.attrs : {},\n }\n } catch {\n return undefined\n }\n}\n\nfunction isRefinexBlockEnd(value: string): boolean {\n return /^<!--\\s*\\/refinex:block\\s*-->$/.test(value.trim())\n}\n\nfunction convertRefinexBlockWrapper(\n wrapper: { type: string; attrs: Record<string, unknown> },\n inner: readonly MdastNode[],\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n blockId: string | undefined,\n extensionNames: Array<{ name: string; version: string }>,\n): ProseMirrorNode[] {\n const attrs = { ...wrapper.attrs, ...blockAttrs(blockId) }\n switch (wrapper.type) {\n case 'image_block': {\n const first = inner[0]\n const image = first?.type === 'paragraph' && first.children[0]?.type === 'image' ? first.children[0] : undefined\n if (!image || !schema.nodes.image_block) break\n const captionNode = inner.find((node, index) => index > 0 && node.type === 'paragraph') as MdastParagraph | undefined\n return [schema.nodes.image_block.create({\n ...attrs,\n src: image.url,\n alt: image.alt ?? null,\n title: image.title ?? null,\n }, captionNode ? convertPhrasing(captionNode.children, schema, issues, path) : undefined)]\n }\n case 'divider':\n if (schema.nodes.divider) return [schema.nodes.divider.create(attrs)]\n break\n case 'math_block': {\n const math = inner.find((node) => node.type === 'math' || node.type === 'code' || node.type === 'paragraph')\n if (schema.nodes.math_block && math) {\n return [schema.nodes.math_block.create({\n ...attrs,\n tex: 'value' in math ? math.value : nodeToText(math),\n })]\n }\n break\n }\n case 'table': {\n const table = inner.find((node) => node.type === 'table')\n if (table) {\n const parsed = tableFromMdast({ schema, issues }, table)\n if (parsed) return [restoreWrappedTable(schema, parsed, attrs)]\n }\n break\n }\n case 'toggle_list': {\n const parsed = toggleListFromWrappedMdast({ schema, issues }, inner, wrapper.attrs)\n if (parsed) return [parsed]\n break\n }\n case 'embed_block':\n if (schema.nodes.embed_block) return [schema.nodes.embed_block.create(attrs)]\n break\n }\n issues.push(issue('RICH_BLOCK_ATTR_FALLBACK', 'warn', path, `Refinex block \"${wrapper.type}\" could not be restored and its content was imported normally.`))\n return inner.flatMap((node, index) => convertBlock(node, schema, options, issues, `${path}.children[${String(index)}]`, undefined, extensionNames))\n}\n\nfunction isGfmTableCellType(table: ProseMirrorNode, rowIndex: number, cellTypeName: string): boolean {\n if (rowIndex === 0) return cellTypeName === 'table_header'\n if (cellTypeName !== 'table_cell') return false\n if (table.childCount === 0) return false\n for (let columnIndex = 0; columnIndex < table.child(0).childCount; columnIndex += 1) {\n if (table.child(0).child(columnIndex).type.name !== 'table_header') return false\n }\n return true\n}\n\nfunction hasComplexTableCellAttrs(cell: ProseMirrorNode): boolean {\n return Boolean(\n cell.attrs.background\n || cell.attrs.colwidth\n || cell.attrs.metadata\n || (cell.attrs.colspan !== undefined && cell.attrs.colspan !== 1)\n || (cell.attrs.rowspan !== undefined && cell.attrs.rowspan !== 1),\n )\n}\n\nfunction tableWrapperCells(table: ProseMirrorNode): unknown[] {\n const rows: unknown[] = []\n table.forEach((row) => {\n const cells: unknown[] = []\n row.forEach((cell) => {\n cells.push({\n type: cell.type.name,\n attrs: tableWrapperCellAttrs(cell),\n })\n })\n rows.push(cells)\n })\n return rows\n}\n\nfunction tableWrapperCellAttrs(cell: ProseMirrorNode): Record<string, unknown> {\n return Object.fromEntries(Object.entries({\n align: normalizeTableAlign(cell.attrs.align),\n background: cell.attrs.background ?? null,\n colspan: cell.attrs.colspan === 1 ? null : cell.attrs.colspan,\n rowspan: cell.attrs.rowspan === 1 ? null : cell.attrs.rowspan,\n colwidth: cell.attrs.colwidth ?? null,\n metadata: cell.attrs.metadata ?? null,\n }).filter(([, value]) => value !== null && value !== undefined))\n}\n\nfunction restoreWrappedTable(schema: Schema, parsed: ProseMirrorNode, attrs: Record<string, unknown>): ProseMirrorNode {\n const cellSpecs = Array.isArray(attrs.cells) ? attrs.cells : []\n const rows: ProseMirrorNode[] = []\n parsed.forEach((row, _rowOffset, rowIndex) => {\n const restoredCells: ProseMirrorNode[] = []\n const rowSpecs = Array.isArray(cellSpecs[rowIndex]) ? cellSpecs[rowIndex] as unknown[] : []\n row.forEach((cell, _cellOffset, columnIndex) => {\n const spec = isRecord(rowSpecs[columnIndex]) ? rowSpecs[columnIndex] : {}\n const typeName = spec.type === 'table_header' ? 'table_header' : 'table_cell'\n const cellType = schema.nodes[typeName] ?? cell.type\n const restoredAttrs = {\n ...cell.attrs,\n ...(isRecord(spec.attrs) ? spec.attrs : {}),\n }\n restoredCells.push(cellType.create(restoredAttrs, cell.content, cell.marks))\n })\n rows.push(row.type.create(row.attrs, rowsToFragment(restoredCells), row.marks))\n })\n const { cells: _cells, ...tableAttrs } = attrs\n return parsed.type.create({ ...parsed.attrs, ...tableAttrs }, rowsToFragment(rows), parsed.marks)\n}\n\nfunction rowsToFragment(nodes: readonly ProseMirrorNode[]): Fragment {\n return nodes.length > 0 ? Fragment.fromArray([...nodes]) : Fragment.empty\n}\n\nfunction tableToPlainText(table: MdastTable): string {\n const rows = table.children.map((row) => row.children.map((cell) => phrasingToText(cell.children)))\n return rows.map((row) => row.join('\\t')).join('\\n')\n}\n\nfunction isHtmlOnlyParagraph(node: MdastParagraph): boolean {\n let hasHtml = false\n return node.children.length > 0 && node.children.every((child) => {\n if (child.type === 'html') {\n hasHtml = true\n return true\n }\n return child.type === 'text'\n }) && hasHtml\n}\n\nfunction phrasingToText(nodes: readonly MdastPhrasing[]): string {\n return nodes.map((node) => {\n if ('value' in node) return node.value\n if ('children' in node) return phrasingToText(node.children as MdastPhrasing[])\n if (node.type === 'image') return node.alt ?? ''\n return ''\n }).join('')\n}\n\nfunction nodeToText(node: MdastNode): string {\n if ('value' in node) return node.value\n if ('children' in node) return node.children.map(nodeToText).join('')\n return ''\n}\n\nfunction readTaskMetadata(node: ProseMirrorNode): boolean | null | undefined {\n const metadata = node.attrs.metadata\n if (!isRecord(metadata)) return undefined\n const task = metadata.task\n if (!isRecord(task) || typeof task.checked !== 'boolean') return undefined\n return task.checked\n}\n\nfunction readMarkdownMetadata(node: ProseMirrorNode): Record<string, unknown> | undefined {\n const metadata = node.attrs.metadata\n if (!isRecord(metadata) || !isRecord(metadata.markdown)) return undefined\n return metadata.markdown\n}\n\nfunction clampHeading(level: unknown): 1 | 2 | 3 | 4 | 5 | 6 {\n return typeof level === 'number' && level >= 1 && level <= 6 ? level as 1 | 2 | 3 | 4 | 5 | 6 : 1\n}\n\nfunction isRefinexDoc(input: unknown): input is RefinexDoc {\n return isRecord(input) && input.refinexDocVersion === '1.0.0' && isRecord(input.content)\n}\n\nfunction isProseMirrorNode(input: unknown): input is ProseMirrorNode {\n return isRecord(input) && typeof input.type === 'object' && typeof input.toJSON === 'function'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction issue(\n code: MarkdownTransformIssueCode,\n severity: MarkdownIssueSeverity,\n path: string,\n message: string,\n): MarkdownTransformIssue {\n return { code, severity, path, message }\n}\n\nexport { defaultSchema }\n"],"names":["defaultFormat","parseMarkdown","markdown","options","parseMarkdownDocument","serializeMarkdown","doc","serializeMarkdownDocument","markdownToDoc","docToMarkdown","schema","createRefinexSchema","issues","tree","parseToMdast","normalizeMarkdownMathBlocks","frontmatter","children","extractFrontmatter","nodes","extensionNames","convertBlocks","docNode","createRefinexDoc","extension","promoteFrontmatter","normalized","validateDoc","createBlockId","issue","modelIssue","nextDoc","_match","lineStart","prefix","tex","input","inputToNode","root","pmBlocksToMdast","frontmatterToYaml","stringifyMdast","createMarkdownTransformer","parseOptions","serializeOptions","createRichBlockMarkdownExtension","node","image","_a","context","imageBlockToMdast","calloutFromMdast","calloutToMdast","taskListFromMdast","taskListToMdast","toggleListToMdast","_context","wrapRefinexBlock","tableFromMdast","tableToMdastNode","first","phrasingToText","title","unified","remarkParse","remarkFrontmatter","remarkGfm","remarkMath","error","format","remarkStringify","parsed","parseYaml","isRecord","metadata","key","result","pendingBlockId","index","blockId","parseBlockIdComment","wrapper","parseRefinexBlockStart","inner","cursor","candidate","isRefinexBlockEnd","convertRefinexBlockWrapper","converted","convertBlock","path","extensionResult","parseWithExtension","isHtmlOnlyParagraph","blockAttrs","textOrUndefined","convertPhrasing","child","language","normalizeCodeLanguage","normalizeCodeBlockDisplayMode","convertList","tableToPlainText","handleUnknownBlock","item","childIndex","itemNodes","marks","convertPhrasingNode","block","pmBlockToMdast","blocks","entry","_c","_b","serialized","_e","_d","target","pmInlineToMdast","mergeAdjacent","clampHeading","flattenChildren","codeBlockToMdast","listToMdast","handleUnsupportedPmNode","parent","_options","mark","current","itemChildren","task","readTaskMetadata","value","_language","readMarkdownMetadata","isRefinexDoc","raw","stringifyYaml","isProseMirrorNode","nodeToText","codec","schemaExtensionNames","schemaExtension","previous","caption","hasCaption","attrs","defaultAttrs","imageParagraph","marker","kind","normalizeCalloutKind","markerRest","titleLine","bodyLines","body","simpleBlocksFromMdast","items","list","toggleListNodeToMdastList","states","state","nestedStates","toggleListFromWrappedMdast","itemStates","readToggleItemStates","toggleItemFromMdast","nestedItem","rows","row","rowIndex","cell","columnIndex","cellType","align","complex","_rowOffset","cells","_cellOffset","isGfmTableCellType","hasComplexTableCellAttrs","normalizeTableAlign","table","tableWrapperCells","type","cleaned","match","captionNode","math","restoreWrappedTable","cellTypeName","tableWrapperCellAttrs","cellSpecs","restoredCells","rowSpecs","spec","typeName","restoredAttrs","rowsToFragment","_cells","tableAttrs","Fragment","hasHtml","level","code","severity","message"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { Fragment, type Mark, type Node as ProseMirrorNode, type Schema } from 'prosemirror-model'\nimport remarkFrontmatter from 'remark-frontmatter'\nimport remarkGfm from 'remark-gfm'\nimport remarkMath from 'remark-math'\nimport remarkParse from 'remark-parse'\nimport remarkStringify from 'remark-stringify'\nimport { unified } from 'unified'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\nimport {\n createBlockId,\n createRefinexDoc,\n createRefinexSchema,\n defaultSchema,\n validateDoc,\n type ProseMirrorDocJSON,\n type RefinexDoc,\n type RefinexDocMetadata,\n type RefinexSchemaExtension,\n} from '@refinex-md/model'\n\nexport type MarkdownTransformIssueCode =\n | 'MARKDOWN_PARSE_FAILED'\n | 'FRONTMATTER_INVALID'\n | 'FRONTMATTER_UNSERIALIZABLE'\n | 'MDAST_NODE_UNSUPPORTED'\n | 'PMAST_NODE_UNSUPPORTED'\n | 'MARK_UNSUPPORTED'\n | 'EXTENSION_CODEC_CONFLICT'\n | 'EXTENSION_CODEC_FAILED'\n | 'BLOCK_ID_COMMENT_INVALID'\n | 'GFM_TABLE_FALLBACK'\n | 'GFM_TASK_LIST_ITEM'\n | 'HTML_FALLBACK'\n | 'RICH_BLOCK_ATTR_FALLBACK'\n | 'TABLE_COMPLEX_MARKDOWN_FALLBACK'\n | 'MATH_PARSE_WARNING'\n | 'ROUNDTRIP_LOSSY'\n | 'DOC_VALIDATION_FAILED'\n\nexport type MarkdownIssueSeverity = 'error' | 'warn' | 'info'\nexport type FrontmatterMode = 'preserve' | 'drop' | 'metadata-only'\nexport type SerializeFrontmatterMode = 'emit' | 'drop'\nexport type BlockIdMode = 'regenerate' | 'preserve-trusted' | 'preserve-comments'\nexport type SerializeBlockIds = 'drop' | 'html-comments'\nexport type UnknownNodePolicy = 'warn-and-drop' | 'warn-and-paragraph' | 'error'\nexport type UnsupportedNodePolicy = 'warn-and-drop' | 'warn-and-code-fence' | 'error'\n\nexport interface MarkdownTransformIssue {\n readonly code: MarkdownTransformIssueCode\n readonly severity: MarkdownIssueSeverity\n readonly path: string\n readonly message: string\n}\n\nexport interface MarkdownFormatOptions {\n readonly bullet: '-' | '*' | '+'\n readonly emphasis: '*' | '_'\n readonly strong: '*' | '_'\n readonly bulletOrdered: '.' | ')'\n readonly incrementListMarker: boolean\n readonly fences: boolean\n readonly listItemIndent: 'one' | 'tab' | 'mixed'\n readonly rule: '-' | '*' | '_'\n readonly ruleRepetition: number\n readonly setext: boolean\n}\n\nexport interface ParseMarkdownOptions {\n readonly schemaExtensions?: readonly RefinexSchemaExtension[]\n readonly markdownExtensions?: readonly RefinexMarkdownExtension[]\n readonly frontmatter?: FrontmatterMode\n readonly blockIdMode?: BlockIdMode\n readonly unknownNodePolicy?: UnknownNodePolicy\n readonly source?: RefinexDocMetadata['source']\n}\n\nexport interface SerializeMarkdownOptions {\n readonly schemaExtensions?: readonly RefinexSchemaExtension[]\n readonly markdownExtensions?: readonly RefinexMarkdownExtension[]\n readonly frontmatter?: SerializeFrontmatterMode\n readonly blockIds?: SerializeBlockIds\n readonly unsupportedNodePolicy?: UnsupportedNodePolicy\n readonly format?: Partial<MarkdownFormatOptions>\n}\n\nexport interface ParseMarkdownResult {\n readonly doc: RefinexDoc\n readonly issues: readonly MarkdownTransformIssue[]\n readonly frontmatter: Record<string, unknown>\n}\n\nexport interface SerializeMarkdownResult {\n readonly markdown: string\n readonly issues: readonly MarkdownTransformIssue[]\n}\n\nexport interface MarkdownTransformerOptions {\n readonly schemaExtensions?: readonly RefinexSchemaExtension[]\n readonly markdownExtensions?: readonly RefinexMarkdownExtension[]\n readonly parse?: Omit<ParseMarkdownOptions, 'schemaExtensions' | 'markdownExtensions'>\n readonly serialize?: Omit<SerializeMarkdownOptions, 'schemaExtensions' | 'markdownExtensions'>\n}\n\nexport interface MarkdownTransformer {\n parse(markdown: string, options?: ParseMarkdownOptions): ParseMarkdownResult\n serialize(doc: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode, options?: SerializeMarkdownOptions): SerializeMarkdownResult\n}\n\nexport interface MarkdownParseContext {\n readonly schema: Schema\n readonly issues: MarkdownTransformIssue[]\n}\n\nexport interface MarkdownSerializeContext {\n readonly node: ProseMirrorNode\n readonly issues: MarkdownTransformIssue[]\n serializeInline(node: ProseMirrorNode): MdastPhrasing[]\n}\n\nexport interface MarkdownNodeCodec {\n parse?(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | ProseMirrorNode[] | null\n serialize?(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastNode | MdastNode[] | null\n readonly fallback: 'paragraph' | 'code_block' | 'html-comment' | 'drop' | 'error'\n}\n\nexport interface MarkdownMarkCodec {\n readonly fallback: 'drop' | 'code' | 'html-comment' | 'error'\n}\n\nexport interface RefinexMarkdownExtension {\n readonly name: string\n readonly version: string\n readonly nodes?: Record<string, MarkdownNodeCodec>\n readonly marks?: Record<string, MarkdownMarkCodec>\n}\n\ninterface MdastParent {\n children: MdastNode[]\n}\n\ninterface MdastLiteral {\n value: string\n}\n\ntype MdastNode =\n | MdastRoot\n | MdastYaml\n | MdastText\n | MdastBreak\n | MdastInlineCode\n | MdastInlineMath\n | MdastEmphasis\n | MdastStrong\n | MdastDelete\n | MdastLink\n | MdastImage\n | MdastHtml\n | MdastParagraph\n | MdastHeading\n | MdastBlockquote\n | MdastCode\n | MdastMath\n | MdastThematicBreak\n | MdastList\n | MdastListItem\n | MdastTable\n | MdastTableRow\n | MdastTableCell\n\ninterface MdastRoot extends MdastParent { type: 'root' }\ninterface MdastYaml extends MdastLiteral { type: 'yaml' }\ninterface MdastText extends MdastLiteral { type: 'text' }\ninterface MdastBreak { type: 'break' }\ninterface MdastInlineCode extends MdastLiteral { type: 'inlineCode' }\ninterface MdastInlineMath extends MdastLiteral { type: 'inlineMath' }\ninterface MdastEmphasis extends MdastParent { type: 'emphasis'; children: MdastPhrasing[] }\ninterface MdastStrong extends MdastParent { type: 'strong'; children: MdastPhrasing[] }\ninterface MdastDelete extends MdastParent { type: 'delete'; children: MdastPhrasing[] }\ninterface MdastLink extends MdastParent { type: 'link'; url: string; title?: string | null; children: MdastPhrasing[] }\ninterface MdastImage { type: 'image'; url: string; alt?: string; title?: string | null }\ninterface MdastHtml extends MdastLiteral { type: 'html' }\ninterface MdastParagraph extends MdastParent { type: 'paragraph'; children: MdastPhrasing[] }\ninterface MdastHeading extends MdastParent { type: 'heading'; depth: 1 | 2 | 3 | 4 | 5 | 6; children: MdastPhrasing[] }\ninterface MdastBlockquote extends MdastParent { type: 'blockquote'; children: MdastBlock[] }\ninterface MdastCode extends MdastLiteral { type: 'code'; lang?: string | null }\ninterface MdastMath extends MdastLiteral { type: 'math'; meta?: string | null }\ninterface MdastThematicBreak { type: 'thematicBreak' }\ninterface MdastList extends MdastParent { type: 'list'; ordered?: boolean | null; start?: number | null; spread?: boolean | null; children: MdastListItem[] }\ninterface MdastListItem extends MdastParent { type: 'listItem'; checked?: boolean | null; spread?: boolean | null; children: MdastBlock[] }\ninterface MdastTable extends MdastParent { type: 'table'; align?: Array<'left' | 'right' | 'center' | null>; children: MdastTableRow[] }\ninterface MdastTableRow extends MdastParent { type: 'tableRow'; children: MdastTableCell[] }\ninterface MdastTableCell extends MdastParent { type: 'tableCell'; children: MdastPhrasing[] }\n\ntype MdastPhrasing = MdastText | MdastBreak | MdastInlineCode | MdastInlineMath | MdastEmphasis | MdastStrong | MdastDelete | MdastLink | MdastImage | MdastHtml\ntype MdastBlock = MdastParagraph | MdastHeading | MdastBlockquote | MdastCode | MdastMath | MdastThematicBreak | MdastList | MdastTable | MdastHtml\n\nconst defaultFormat: MarkdownFormatOptions = {\n bullet: '-',\n emphasis: '*',\n strong: '*',\n bulletOrdered: '.',\n incrementListMarker: true,\n fences: true,\n listItemIndent: 'one',\n rule: '-',\n ruleRepetition: 3,\n setext: false,\n}\n\nexport function parseMarkdown(markdown: string, options: ParseMarkdownOptions = {}): ProseMirrorNode {\n return parseMarkdownDocument(markdown, options).docNode\n}\n\nexport function serializeMarkdown(\n doc: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions = {},\n): string {\n return serializeMarkdownDocument(doc, options).markdown\n}\n\nexport function markdownToDoc(markdown: string, options: ParseMarkdownOptions = {}): ParseMarkdownResult {\n return parseMarkdownDocument(markdown, options)\n}\n\nexport function docToMarkdown(\n doc: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions = {},\n): SerializeMarkdownResult {\n return serializeMarkdownDocument(doc, options)\n}\n\nexport function parseMarkdownDocument(markdown: string, options: ParseMarkdownOptions = {}): ParseMarkdownResult & { readonly docNode: ProseMirrorNode } {\n const schema = createRefinexSchema({ extensions: options.schemaExtensions })\n const issues: MarkdownTransformIssue[] = []\n const tree = parseToMdast(normalizeMarkdownMathBlocks(markdown), issues)\n const { frontmatter, children } = extractFrontmatter(tree, options, issues)\n const { nodes, extensionNames } = convertBlocks(children, schema, options, issues)\n const docNode = schema.nodes.doc.create(null, nodes.length > 0 ? nodes : undefined)\n const doc = createRefinexDoc(docNode, {\n schema: {\n extensions: [\n ...extensionNames,\n ...(options.schemaExtensions ?? []).map((extension) => ({ name: extension.name, version: extension.version })),\n ],\n },\n metadata: {\n source: options.source ?? 'markdown-import',\n ...promoteFrontmatter(frontmatter),\n },\n })\n const normalized = validateDoc(doc, {\n mode: 'repair',\n extensions: options.schemaExtensions,\n createId: createBlockId,\n })\n\n if (!normalized.ok) {\n issues.push(issue('DOC_VALIDATION_FAILED', 'error', '$.content', 'Markdown produced an invalid RefinexDoc.'))\n }\n for (const modelIssue of normalized.issues) {\n if (modelIssue.code === 'BLOCK_ID_MISSING') continue\n if (modelIssue.severity !== 'info') {\n issues.push(issue('ROUNDTRIP_LOSSY', modelIssue.severity, modelIssue.path, modelIssue.message))\n }\n }\n\n const nextDoc = normalized.normalized ?? normalized.doc ?? doc\n return {\n doc: nextDoc,\n docNode: schema.nodeFromJSON(nextDoc.content),\n issues,\n frontmatter,\n }\n}\n\nfunction normalizeMarkdownMathBlocks(markdown: string): string {\n return markdown.replace(\n /(^|\\n)([^\\n$]*?[::])?\\s*\\$\\$\\s*([^\\n$][^\\n]*?)\\s*\\$\\$(?=\\n|$)/g,\n (_match, lineStart: string, prefix: string | undefined, tex: string) =>\n `${lineStart}${prefix ? `${prefix.trim()}\\n\\n` : ''}$$\\n${tex.trim()}\\n$$`,\n )\n}\n\nexport function serializeMarkdownDocument(\n input: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions = {},\n): SerializeMarkdownResult {\n const schema = createRefinexSchema({ extensions: options.schemaExtensions })\n const issues: MarkdownTransformIssue[] = []\n const docNode = inputToNode(input, schema)\n const blocks = pmBlocksToMdast(docNode, options, issues)\n const root: MdastRoot = { type: 'root', children: blocks }\n const frontmatter = frontmatterToYaml(input, options, issues)\n if (frontmatter) root.children.unshift({ type: 'yaml', value: frontmatter })\n const markdown = stringifyMdast(root, options)\n return { markdown, issues }\n}\n\nexport function createMarkdownTransformer(options: MarkdownTransformerOptions = {}): MarkdownTransformer {\n return {\n parse(markdown, parseOptions = {}) {\n return parseMarkdownDocument(markdown, {\n schemaExtensions: options.schemaExtensions,\n markdownExtensions: options.markdownExtensions,\n ...options.parse,\n ...parseOptions,\n })\n },\n serialize(doc, serializeOptions = {}) {\n return serializeMarkdownDocument(doc, {\n schemaExtensions: options.schemaExtensions,\n markdownExtensions: options.markdownExtensions,\n ...options.serialize,\n ...serializeOptions,\n })\n },\n }\n}\n\nexport function createRichBlockMarkdownExtension(): RefinexMarkdownExtension {\n return {\n name: 'rich_blocks',\n version: '1.0.0',\n nodes: {\n image_block: {\n parse({ schema }, node) {\n if (node.type !== 'paragraph' || !schema.nodes.image_block) return null\n const image = node.children.length === 1 && node.children[0]?.type === 'image' ? node.children[0] : null\n if (!image) return null\n return schema.nodes.image_block.create({\n src: image.url,\n alt: image.alt ?? null,\n title: image.title ?? null,\n })\n },\n serialize(context, node) {\n return imageBlockToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n callout: {\n parse(context, node) {\n return calloutFromMdast(context, node)\n },\n serialize(context, node) {\n return calloutToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n task_list: {\n parse(context, node) {\n return taskListFromMdast(context, node)\n },\n serialize(context, node) {\n return taskListToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n toggle_list: {\n parse() {\n return null\n },\n serialize(context, node) {\n return toggleListToMdast(context, node)\n },\n fallback: 'paragraph',\n },\n divider: {\n parse({ schema }, node) {\n return node.type === 'thematicBreak' && schema.nodes.divider\n ? schema.nodes.divider.create({ variant: 'solid' })\n : null\n },\n serialize(_context, node) {\n if (node.attrs.variant === 'solid' || !node.attrs.variant) return { type: 'thematicBreak' }\n return wrapRefinexBlock('divider', { variant: node.attrs.variant }, [{ type: 'thematicBreak' }])\n },\n fallback: 'paragraph',\n },\n table: {\n parse(context, node) {\n return tableFromMdast(context, node)\n },\n serialize(context, node) {\n return tableToMdastNode(context, node)\n },\n fallback: 'code_block',\n },\n math_block: {\n parse({ schema }, node) {\n if (!schema.nodes.math_block) return null\n if (node.type === 'math') return schema.nodes.math_block.create({ tex: node.value })\n if (node.type === 'code' && node.lang === 'math') return schema.nodes.math_block.create({ tex: node.value })\n return null\n },\n serialize(_context, node) {\n if (node.attrs.numbered || node.attrs.label || node.attrs.align === 'left') {\n return wrapRefinexBlock('math_block', {\n numbered: Boolean(node.attrs.numbered),\n label: node.attrs.label,\n align: node.attrs.align,\n }, [{ type: 'math', value: node.attrs.tex as string }])\n }\n return { type: 'math', value: node.attrs.tex as string }\n },\n fallback: 'code_block',\n },\n embed_block: {\n parse({ schema }, node) {\n if (node.type !== 'paragraph' || !schema.nodes.embed_block) return null\n const first = node.children[0]\n if (node.children.length !== 1 || first?.type !== 'link') return null\n return schema.nodes.embed_block.create({\n url: first.url,\n title: phrasingToText(first.children),\n embedType: 'bookmark',\n status: 'unresolved',\n })\n },\n serialize(_context, node) {\n const title = typeof node.attrs.title === 'string' && node.attrs.title.length > 0\n ? node.attrs.title\n : node.attrs.url\n return {\n type: 'paragraph',\n children: [{\n type: 'link',\n url: node.attrs.url as string,\n title: null,\n children: [{ type: 'text', value: title as string }],\n }],\n }\n },\n fallback: 'paragraph',\n },\n },\n }\n}\n\nfunction parseToMdast(markdown: string, issues: MarkdownTransformIssue[]): MdastRoot {\n try {\n return unified()\n .use(remarkParse)\n .use(remarkFrontmatter, ['yaml'])\n .use(remarkGfm, { singleTilde: false })\n .use(remarkMath)\n .parse(markdown) as unknown as MdastRoot\n } catch (error) {\n issues.push(issue('MARKDOWN_PARSE_FAILED', 'error', '$', error instanceof Error ? error.message : 'Markdown parse failed.'))\n return { type: 'root', children: [] }\n }\n}\n\nfunction stringifyMdast(root: MdastRoot, options: SerializeMarkdownOptions): string {\n const format = { ...defaultFormat, ...options.format }\n return String(unified()\n .use(remarkGfm, { singleTilde: false, tablePipeAlign: false, tableCellPadding: true })\n .use(remarkMath)\n .use(remarkFrontmatter, ['yaml'])\n .use(remarkStringify, format)\n .stringify(root as never))\n .replace(/(<!-- refinex:block-id blk_[A-Za-z0-9_-]{8,36} -->)\\n\\n/g, '$1\\n')\n .replace(/^(---\\n[\\s\\S]*?\\n---)\\n\\n/, '$1\\n')\n}\n\nfunction extractFrontmatter(\n root: MdastRoot,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): { frontmatter: Record<string, unknown>; children: MdastNode[] } {\n const first = root.children[0]\n if (!first || first.type !== 'yaml') return { frontmatter: {}, children: root.children }\n if (options.frontmatter === 'drop') return { frontmatter: {}, children: root.children.slice(1) }\n\n try {\n const parsed = parseYaml(first.value) as unknown\n if (!isRecord(parsed)) {\n issues.push(issue('FRONTMATTER_INVALID', 'warn', '$.frontmatter', 'YAML frontmatter must be an object.'))\n return { frontmatter: { frontmatterRaw: first.value }, children: root.children.slice(1) }\n }\n return { frontmatter: parsed, children: root.children.slice(1) }\n } catch (error) {\n issues.push(issue('FRONTMATTER_INVALID', 'warn', '$.frontmatter', error instanceof Error ? error.message : 'Invalid YAML frontmatter.'))\n return { frontmatter: { frontmatterRaw: first.value }, children: root.children.slice(1) }\n }\n}\n\nfunction promoteFrontmatter(frontmatter: Record<string, unknown>): RefinexDocMetadata {\n const metadata: Record<string, unknown> = {}\n for (const key of ['title', 'createdAt', 'updatedAt', 'createdBy', 'updatedBy'] as const) {\n if (typeof frontmatter[key] === 'string') {\n metadata[key] = frontmatter[key]\n }\n }\n if (Object.keys(frontmatter).length > 0) {\n metadata.custom = { frontmatter }\n }\n return metadata as RefinexDocMetadata\n}\n\nfunction convertBlocks(\n nodes: readonly MdastNode[],\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): { nodes: ProseMirrorNode[]; extensionNames: Array<{ name: string; version: string }> } {\n const result: ProseMirrorNode[] = []\n const extensionNames: Array<{ name: string; version: string }> = []\n let pendingBlockId: string | undefined\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]\n if (node.type === 'html') {\n const blockId = parseBlockIdComment(node.value)\n if (blockId) {\n if (options.blockIdMode === 'preserve-comments') pendingBlockId = blockId\n continue\n }\n const wrapper = parseRefinexBlockStart(node.value)\n if (wrapper) {\n const inner: MdastNode[] = []\n let cursor = index + 1\n while (cursor < nodes.length) {\n const candidate = nodes[cursor]\n if (candidate.type === 'html' && isRefinexBlockEnd(candidate.value)) break\n inner.push(candidate)\n cursor += 1\n }\n if (cursor < nodes.length) {\n result.push(...convertRefinexBlockWrapper(wrapper, inner, schema, options, issues, `$.children[${String(index)}]`, pendingBlockId, extensionNames))\n pendingBlockId = undefined\n index = cursor\n continue\n }\n }\n }\n\n const converted = convertBlock(node, schema, options, issues, `$.children[${String(index)}]`, pendingBlockId, extensionNames)\n pendingBlockId = undefined\n result.push(...converted)\n }\n\n return { nodes: result, extensionNames }\n}\n\nfunction convertBlock(\n node: MdastNode,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n blockId: string | undefined,\n extensionNames: Array<{ name: string; version: string }>,\n): ProseMirrorNode[] {\n const extensionResult = parseWithExtension(node, schema, options, issues)\n if (extensionResult) {\n extensionNames.push(...extensionResult.extensionNames)\n return Array.isArray(extensionResult.node) ? extensionResult.node : [extensionResult.node]\n }\n\n switch (node.type) {\n case 'paragraph':\n if (isHtmlOnlyParagraph(node)) {\n issues.push(issue('HTML_FALLBACK', 'warn', path, 'HTML block is preserved as html code block.'))\n return [schema.nodes.code_block.create({ language: 'html', ...blockAttrs(blockId) }, textOrUndefined(schema, phrasingToText(node.children)))]\n }\n return [schema.nodes.paragraph.create(blockAttrs(blockId), convertPhrasing(node.children, schema, issues, path))]\n case 'heading':\n return [schema.nodes.heading.create({ level: node.depth, ...blockAttrs(blockId) }, convertPhrasing(node.children, schema, issues, path))]\n case 'blockquote': {\n const children = node.children.flatMap((child, index) => convertBlock(child, schema, options, issues, `${path}.children[${String(index)}]`, undefined, extensionNames))\n return [schema.nodes.blockquote.create(blockAttrs(blockId), children.length > 0 ? children : [schema.nodes.paragraph.create(blockAttrs())])]\n }\n case 'code':\n {\n const language = normalizeCodeLanguage(node.lang)\n return [schema.nodes.code_block.create({\n language,\n displayMode: normalizeCodeBlockDisplayMode(language),\n ...blockAttrs(blockId),\n }, textOrUndefined(schema, node.value))]\n }\n case 'math':\n if (schema.nodes.math_block) {\n return [schema.nodes.math_block.create({ tex: node.value, ...blockAttrs(blockId) })]\n }\n return [schema.nodes.code_block.create({ language: 'math', ...blockAttrs(blockId) }, textOrUndefined(schema, node.value))]\n case 'thematicBreak':\n return [schema.nodes.horizontal_rule.create(blockAttrs(blockId))]\n case 'list':\n return [convertList(node, schema, options, issues, path)]\n case 'table':\n issues.push(issue('GFM_TABLE_FALLBACK', 'warn', path, 'GFM table is preserved as markdown-table code block until table nodes exist.'))\n return [schema.nodes.code_block.create(\n { language: 'markdown-table', ...blockAttrs(blockId), metadata: { markdown: { type: 'table', table: node } } },\n textOrUndefined(schema, tableToPlainText(node)),\n )]\n case 'html':\n issues.push(issue('HTML_FALLBACK', 'warn', path, 'HTML block is preserved as html code block.'))\n return [schema.nodes.code_block.create({ language: 'html', ...blockAttrs(blockId) }, textOrUndefined(schema, node.value))]\n case 'yaml':\n return []\n default:\n return handleUnknownBlock(node, schema, options, issues, path)\n }\n}\n\nfunction convertList(\n node: MdastList,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n): ProseMirrorNode {\n const hasTaskItems = !node.ordered && node.children.some((item) => typeof item.checked === 'boolean')\n if (hasTaskItems && schema.nodes.task_list && schema.nodes.task_item) {\n return schema.nodes.task_list.create({ metadata: null }, node.children.map((item, index) => {\n const children = item.children.flatMap((child, childIndex) => convertBlock(child, schema, options, issues, `${path}.children[${String(index)}].children[${String(childIndex)}]`, undefined, []))\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(schema.nodes.paragraph.create(blockAttrs()))\n }\n return schema.nodes.task_item.create(\n { checked: item.checked === true, ...blockAttrs() },\n children,\n )\n }))\n }\n const itemNodes = node.children.map((item, index) => {\n if (typeof item.checked === 'boolean') {\n issues.push(issue('GFM_TASK_LIST_ITEM', 'warn', `${path}.children[${String(index)}]`, 'Task list item state is stored in list item metadata.'))\n }\n const children = item.children.flatMap((child, childIndex) => convertBlock(child, schema, options, issues, `${path}.children[${String(index)}].children[${String(childIndex)}]`, undefined, []))\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(schema.nodes.paragraph.create(blockAttrs()))\n }\n return schema.nodes.list_item.create(\n { ...blockAttrs(), metadata: typeof item.checked === 'boolean' ? { task: { checked: item.checked } } : null },\n children,\n )\n })\n return node.ordered\n ? schema.nodes.ordered_list.create({ order: node.start ?? 1, metadata: null }, itemNodes)\n : schema.nodes.bullet_list.create({ metadata: null }, itemNodes)\n}\n\nfunction convertPhrasing(\n nodes: readonly MdastPhrasing[],\n schema: Schema,\n issues: MarkdownTransformIssue[],\n path: string,\n marks: readonly Mark[] = [],\n): ProseMirrorNode[] {\n return nodes.flatMap((node, index) => convertPhrasingNode(node, schema, issues, `${path}.children[${String(index)}]`, marks))\n}\n\nfunction convertPhrasingNode(\n node: MdastPhrasing,\n schema: Schema,\n issues: MarkdownTransformIssue[],\n path: string,\n marks: readonly Mark[],\n): ProseMirrorNode[] {\n switch (node.type) {\n case 'text':\n return node.value.length > 0 ? [schema.text(node.value, marks)] : []\n case 'strong':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.bold.create()])\n case 'emphasis':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.italic.create()])\n case 'delete':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.strikethrough.create()])\n case 'inlineCode':\n return [schema.text(node.value, [schema.marks.code.create()])]\n case 'inlineMath':\n if (schema.nodes.math_inline) return [schema.nodes.math_inline.create({ tex: node.value })]\n issues.push(issue('MATH_PARSE_WARNING', 'warn', path, 'Inline math is preserved as plain text because math nodes are not enabled.'))\n return [schema.text(`$${node.value}$`, marks)]\n case 'link':\n return convertPhrasing(node.children, schema, issues, path, [...marks, schema.marks.link.create({ href: node.url, title: node.title ?? null })])\n case 'image':\n return [schema.nodes.image.create({ src: node.url, alt: node.alt ?? null, title: node.title ?? null, metadata: null, permissions: null })]\n case 'break':\n return [schema.nodes.hard_break.create()]\n case 'html':\n issues.push(issue('HTML_FALLBACK', 'warn', path, 'Inline HTML is preserved as text.'))\n return [schema.text(node.value, marks)]\n }\n}\n\nfunction pmBlocksToMdast(\n doc: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode[] {\n const result: MdastNode[] = []\n doc.forEach((child) => {\n const block = pmBlockToMdast(child, options, issues)\n const blocks = Array.isArray(block) ? block : [block]\n for (const entry of blocks) {\n if (options.blockIds === 'html-comments' && typeof child.attrs.blockId === 'string') {\n result.push({ type: 'html', value: `<!-- refinex:block-id ${child.attrs.blockId as string} -->` })\n }\n result.push(entry)\n }\n })\n return result\n}\n\nfunction pmBlockToMdast(\n node: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode | MdastNode[] {\n const extension = options.markdownExtensions?.find((entry) => entry.nodes?.[node.type.name])\n if (extension?.nodes?.[node.type.name]?.serialize) {\n try {\n const serialized = extension.nodes[node.type.name].serialize?.({\n node,\n issues,\n serializeInline: (target) => pmInlineToMdast(target, options, issues),\n }, node)\n if (serialized) return serialized\n } catch (error) {\n issues.push(issue('EXTENSION_CODEC_FAILED', 'error', `$.${node.type.name}`, error instanceof Error ? error.message : 'Extension codec failed.'))\n }\n }\n\n switch (node.type.name) {\n case 'paragraph':\n return { type: 'paragraph', children: mergeAdjacent(pmInlineToMdast(node, options, issues)) }\n case 'heading':\n return { type: 'heading', depth: clampHeading(node.attrs.level), children: mergeAdjacent(pmInlineToMdast(node, options, issues)) }\n case 'blockquote':\n return { type: 'blockquote', children: flattenChildren(node, options, issues) as MdastBlock[] }\n case 'code_block':\n return codeBlockToMdast(node)\n case 'horizontal_rule':\n return { type: 'thematicBreak' }\n case 'bullet_list':\n case 'ordered_list':\n return listToMdast(node, options, issues)\n default:\n return handleUnsupportedPmNode(node, options, issues)\n }\n}\n\nfunction pmInlineToMdast(\n parent: ProseMirrorNode,\n _options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastPhrasing[] {\n const result: MdastPhrasing[] = []\n parent.forEach((child) => {\n if (child.type.name === 'hard_break') {\n result.push({ type: 'break' })\n return\n }\n if (child.type.name === 'image') {\n result.push({\n type: 'image',\n url: child.attrs.src as string,\n alt: (child.attrs.alt as string | null) ?? undefined,\n title: (child.attrs.title as string | null) ?? null,\n })\n return\n }\n if (child.type.name === 'math_inline') {\n result.push({ type: 'inlineMath', value: child.attrs.tex as string })\n return\n }\n if (!child.isText) return\n\n const codeMark = child.marks.find((mark) => mark.type.name === 'code')\n if (codeMark) {\n result.push({ type: 'inlineCode', value: child.text ?? '' })\n return\n }\n\n let current: MdastPhrasing = { type: 'text', value: child.text ?? '' }\n for (const mark of [...child.marks].reverse()) {\n switch (mark.type.name) {\n case 'bold':\n current = { type: 'strong', children: [current] }\n break\n case 'italic':\n current = { type: 'emphasis', children: [current] }\n break\n case 'strikethrough':\n current = { type: 'delete', children: [current] }\n break\n case 'link':\n current = {\n type: 'link',\n url: mark.attrs.href as string,\n title: (mark.attrs.title as string | null) ?? null,\n children: [current],\n }\n break\n case 'underline':\n issues.push(issue('MARK_UNSUPPORTED', 'warn', '$.marks.underline', 'Underline has no portable Markdown representation and was dropped.'))\n break\n }\n }\n result.push(current)\n })\n return result\n}\n\nfunction listToMdast(\n node: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastList {\n const children: MdastListItem[] = []\n node.forEach((item) => {\n const itemChildren = flattenChildren(item, options, issues) as MdastBlock[]\n const task = readTaskMetadata(item)\n children.push({\n type: 'listItem',\n checked: task,\n spread: false,\n children: itemChildren,\n })\n })\n return {\n type: 'list',\n ordered: node.type.name === 'ordered_list',\n start: node.type.name === 'ordered_list' ? node.attrs.order as number : undefined,\n spread: false,\n children,\n }\n}\n\nfunction normalizeCodeLanguage(value: unknown): string | null {\n const normalized = String(value ?? '').trim().toLowerCase()\n return normalized.length > 0 ? normalized : null\n}\n\nfunction normalizeCodeBlockDisplayMode(language: string | null): 'source' | 'preview' {\n return language === 'mermaid' ? 'preview' : 'source'\n}\n\nfunction codeBlockToMdast(node: ProseMirrorNode): MdastNode {\n const metadata = readMarkdownMetadata(node)\n if (metadata?.type === 'table' && metadata.table) return metadata.table as MdastTable\n return {\n type: 'code',\n lang: (node.attrs.language as string | null) ?? undefined,\n value: node.textContent,\n }\n}\n\nfunction flattenChildren(\n parent: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode[] {\n const result: MdastNode[] = []\n parent.forEach((child) => {\n const converted = pmBlockToMdast(child, options, issues)\n result.push(...(Array.isArray(converted) ? converted : [converted]))\n })\n return result\n}\n\nfunction frontmatterToYaml(\n input: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): string | undefined {\n if (options.frontmatter === 'drop' || !isRefinexDoc(input)) return undefined\n const raw = {\n ...(input.metadata.custom?.frontmatter as Record<string, unknown> | undefined),\n title: input.metadata.title,\n createdAt: input.metadata.createdAt,\n updatedAt: input.metadata.updatedAt,\n createdBy: input.metadata.createdBy,\n updatedBy: input.metadata.updatedBy,\n }\n const frontmatter = Object.fromEntries(Object.entries(raw).filter(([, value]) => value !== undefined))\n if (Object.keys(frontmatter).length === 0) return undefined\n\n try {\n return stringifyYaml(frontmatter).trimEnd()\n } catch (error) {\n issues.push(issue('FRONTMATTER_UNSERIALIZABLE', 'warn', '$.metadata', error instanceof Error ? error.message : 'Frontmatter is not serializable.'))\n return undefined\n }\n}\n\nfunction inputToNode(input: RefinexDoc | ProseMirrorDocJSON | ProseMirrorNode, schema: Schema): ProseMirrorNode {\n if (isProseMirrorNode(input)) return input\n if (isRefinexDoc(input)) return schema.nodeFromJSON(input.content)\n return schema.nodeFromJSON(input)\n}\n\nfunction handleUnknownBlock(\n node: MdastNode,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n): ProseMirrorNode[] {\n if (options.unknownNodePolicy === 'error') {\n issues.push(issue('MDAST_NODE_UNSUPPORTED', 'error', path, `Unsupported mdast node \"${node.type}\".`))\n return []\n }\n issues.push(issue('MDAST_NODE_UNSUPPORTED', 'warn', path, `Unsupported mdast node \"${node.type}\" was dropped.`))\n if (options.unknownNodePolicy === 'warn-and-paragraph') {\n return [schema.nodes.paragraph.create(blockAttrs(), schema.text(nodeToText(node)))]\n }\n return []\n}\n\nfunction handleUnsupportedPmNode(\n node: ProseMirrorNode,\n options: SerializeMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): MdastNode[] {\n if (options.unsupportedNodePolicy === 'error') {\n issues.push(issue('PMAST_NODE_UNSUPPORTED', 'error', `$.${node.type.name}`, `Unsupported ProseMirror node \"${node.type.name}\".`))\n return []\n }\n issues.push(issue('PMAST_NODE_UNSUPPORTED', 'warn', `$.${node.type.name}`, `Unsupported ProseMirror node \"${node.type.name}\" was dropped.`))\n if (options.unsupportedNodePolicy === 'warn-and-code-fence') {\n return [{ type: 'code', lang: 'json', value: JSON.stringify(node.toJSON(), null, 2) }]\n }\n return []\n}\n\nfunction parseWithExtension(\n node: MdastNode,\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n): { node: ProseMirrorNode | ProseMirrorNode[]; extensionNames: Array<{ name: string; version: string }> } | undefined {\n for (const extension of options.markdownExtensions ?? []) {\n for (const codec of Object.values(extension.nodes ?? {})) {\n if (!codec.parse) continue\n try {\n const parsed = codec.parse({ schema, issues }, node)\n if (parsed) {\n const schemaExtensionNames = new Set((options.schemaExtensions ?? []).map((schemaExtension) => schemaExtension.name))\n return {\n node: parsed,\n extensionNames: schemaExtensionNames.has(extension.name)\n ? [{ name: extension.name, version: extension.version }]\n : [],\n }\n }\n } catch (error) {\n issues.push(issue('EXTENSION_CODEC_FAILED', 'error', `$.${node.type}`, error instanceof Error ? error.message : 'Extension codec failed.'))\n }\n }\n }\n return undefined\n}\n\nfunction mergeAdjacent(nodes: MdastPhrasing[]): MdastPhrasing[] {\n const result: MdastPhrasing[] = []\n for (const node of nodes) {\n const previous = result[result.length - 1]\n if (previous?.type === 'text' && node.type === 'text') {\n previous.value += node.value\n continue\n }\n if (previous?.type === 'strong' && node.type === 'strong') {\n previous.children.push(...node.children)\n continue\n }\n if (previous?.type === 'emphasis' && node.type === 'emphasis') {\n previous.children.push(...node.children)\n continue\n }\n if (previous?.type === 'delete' && node.type === 'delete') {\n previous.children.push(...node.children)\n continue\n }\n result.push(node)\n }\n return result\n}\n\nfunction imageBlockToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastNode | MdastNode[] {\n const image: MdastImage = {\n type: 'image',\n url: node.attrs.src as string,\n alt: (node.attrs.alt as string | null) ?? undefined,\n title: (node.attrs.title as string | null) ?? null,\n }\n const caption = mergeAdjacent(context.serializeInline(node))\n const hasCaption = caption.length > 0\n const attrs = {\n align: node.attrs.align,\n widthPercent: node.attrs.widthPercent,\n aspectRatio: node.attrs.aspectRatio,\n status: node.attrs.status,\n }\n const defaultAttrs = (attrs.align === 'center' || attrs.align == null)\n && (attrs.widthPercent === 100 || attrs.widthPercent == null)\n && !attrs.aspectRatio\n && (attrs.status === 'ready' || attrs.status == null)\n const imageParagraph: MdastParagraph = { type: 'paragraph', children: [image] }\n if (!hasCaption && defaultAttrs) return imageParagraph\n return wrapRefinexBlock('image_block', attrs, [\n imageParagraph,\n ...(hasCaption ? [{ type: 'paragraph', children: caption } satisfies MdastParagraph] : []),\n ])\n}\n\nfunction calloutFromMdast(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | null {\n if (node.type !== 'blockquote' || !context.schema.nodes.callout) return null\n const first = node.children[0]\n if (first?.type !== 'paragraph') return null\n const marker = phrasingToText(first.children).match(/^\\[!(NOTE|INFO|TIP|IMPORTANT|WARNING|CAUTION|ERROR)\\]\\s*([\\s\\S]*)$/i)\n if (!marker) return null\n const kind = normalizeCalloutKind(marker[1])\n const markerRest = marker[2]?.trim() || ''\n const [titleLine, ...bodyLines] = markerRest.split(/\\n+/)\n const title = titleLine || null\n const body: ProseMirrorNode[] = []\n if (bodyLines.length > 0) {\n body.push(context.schema.nodes.paragraph.create(blockAttrs(), context.schema.text(bodyLines.join('\\n'))))\n } else if (title) {\n body.push(context.schema.nodes.paragraph.create(blockAttrs(), context.schema.text(title)))\n }\n for (const child of node.children.slice(1)) {\n body.push(...simpleBlocksFromMdast(context, child))\n }\n return context.schema.nodes.callout.create(\n { kind, title, ...blockAttrs() },\n body.length > 0 ? body : [context.schema.nodes.paragraph.create(blockAttrs())],\n )\n}\n\nfunction calloutToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastBlockquote {\n const kind = normalizeCalloutKind(node.attrs.kind).toUpperCase()\n const title = typeof node.attrs.title === 'string' && node.attrs.title.length > 0 ? ` ${node.attrs.title}` : ''\n const children = flattenChildren(node, { markdownExtensions: [createRichBlockMarkdownExtension()] }, context.issues) as MdastBlock[]\n const first = children[0]\n if (!title && first?.type === 'paragraph') {\n return {\n type: 'blockquote',\n children: [\n {\n type: 'paragraph',\n children: [\n { type: 'text', value: `[!${kind}]\\n` },\n ...first.children,\n ],\n },\n ...children.slice(1),\n ],\n }\n }\n return {\n type: 'blockquote',\n children: [\n { type: 'paragraph', children: [{ type: 'text', value: `[!${kind}]${title}` }] },\n ...children,\n ],\n }\n}\n\nfunction normalizeCalloutKind(value: unknown): 'note' | 'tip' | 'important' | 'warning' | 'caution' {\n const normalized = String(value ?? 'note').toLowerCase()\n if (normalized === 'tip' || normalized === 'important' || normalized === 'warning' || normalized === 'caution') return normalized\n if (normalized === 'error') return 'caution'\n return 'note'\n}\n\nfunction taskListFromMdast(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | null {\n if (node.type !== 'list' || node.ordered || !context.schema.nodes.task_list || !context.schema.nodes.task_item) return null\n if (!node.children.some((item) => typeof item.checked === 'boolean')) return null\n return context.schema.nodes.task_list.create({ metadata: null }, node.children.map((item) => {\n const children = item.children.flatMap((child) => simpleBlocksFromMdast(context, child))\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(context.schema.nodes.paragraph.create(blockAttrs()))\n }\n return context.schema.nodes.task_item.create({ checked: item.checked === true, ...blockAttrs() }, children)\n }))\n}\n\nfunction taskListToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastList {\n const children: MdastListItem[] = []\n node.forEach((item) => {\n children.push({\n type: 'listItem',\n checked: item.attrs.checked === true,\n spread: false,\n children: flattenChildren(item, { markdownExtensions: [createRichBlockMarkdownExtension()] }, context.issues) as MdastBlock[],\n })\n })\n return { type: 'list', ordered: false, spread: false, children }\n}\n\ninterface ToggleItemState {\n readonly collapsed: boolean\n readonly children?: readonly ToggleItemState[]\n}\n\nfunction toggleListToMdast(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastNode[] {\n const items: ToggleItemState[] = []\n const list = toggleListNodeToMdastList(context, node, items)\n return wrapRefinexBlock('toggle_list', { items }, [list])\n}\n\nfunction toggleListNodeToMdastList(\n context: MarkdownSerializeContext,\n node: ProseMirrorNode,\n states: ToggleItemState[],\n): MdastList {\n const children: MdastListItem[] = []\n node.forEach((item) => {\n const state: { collapsed: boolean; children?: ToggleItemState[] } = { collapsed: item.attrs.collapsed === true }\n states.push(state)\n const itemChildren: MdastBlock[] = []\n item.forEach((child) => {\n if (child.type.name === 'toggle_list') {\n const nestedStates: ToggleItemState[] = []\n itemChildren.push(toggleListNodeToMdastList(context, child, nestedStates))\n state.children = nestedStates\n return\n }\n const converted = pmBlockToMdast(child, { markdownExtensions: [createRichBlockMarkdownExtension()] }, context.issues)\n const blocks = (Array.isArray(converted) ? converted : [converted]) as MdastBlock[]\n itemChildren.push(...blocks)\n })\n if (itemChildren.length === 0 || itemChildren[0]?.type !== 'paragraph') {\n itemChildren.unshift({ type: 'paragraph', children: [] })\n }\n children.push({ type: 'listItem', checked: null, spread: itemChildren.length > 1, children: itemChildren })\n })\n return { type: 'list', ordered: false, spread: children.some((item) => item.spread), children }\n}\n\nfunction toggleListFromWrappedMdast(\n context: MarkdownParseContext,\n inner: readonly MdastNode[],\n attrs: Record<string, unknown>,\n): ProseMirrorNode | null {\n if (!context.schema.nodes.toggle_list || !context.schema.nodes.toggle_item) return null\n const list = inner.find((node): node is MdastList => node.type === 'list' && !node.ordered)\n if (!list) return null\n const itemStates = readToggleItemStates(attrs.items)\n return context.schema.nodes.toggle_list.create(\n { metadata: null },\n list.children.map((item, index) => toggleItemFromMdast(context, item, itemStates[index])),\n )\n}\n\nfunction toggleItemFromMdast(\n context: MarkdownParseContext,\n item: MdastListItem,\n state: ToggleItemState | undefined,\n): ProseMirrorNode {\n const children: ProseMirrorNode[] = []\n const nestedStates = state?.children ?? []\n item.children.forEach((child) => {\n if (child.type === 'list' && !child.ordered && nestedStates.length > 0) {\n children.push(context.schema.nodes.toggle_list.create(\n { metadata: null },\n child.children.map((nestedItem, index) => toggleItemFromMdast(context, nestedItem, nestedStates[index])),\n ))\n return\n }\n children.push(...simpleBlocksFromMdast(context, child))\n })\n if (children.length === 0 || children[0]?.type.name !== 'paragraph') {\n children.unshift(context.schema.nodes.paragraph.create(blockAttrs()))\n }\n return context.schema.nodes.toggle_item.create(\n { collapsed: state?.collapsed === true, ...blockAttrs() },\n children,\n )\n}\n\nfunction readToggleItemStates(value: unknown): ToggleItemState[] {\n if (!Array.isArray(value)) return []\n return value.map((entry) => {\n if (!isRecord(entry)) return { collapsed: false }\n const children = readToggleItemStates(entry.children)\n return {\n collapsed: entry.collapsed === true,\n ...(children.length > 0 ? { children } : {}),\n }\n })\n}\n\nfunction tableFromMdast(context: MarkdownParseContext, node: MdastNode): ProseMirrorNode | null {\n const schema = context.schema\n if (node.type !== 'table' || !schema.nodes.table || !schema.nodes.table_row || !schema.nodes.table_cell || !schema.nodes.table_header) return null\n const rows = node.children.map((row, rowIndex) => schema.nodes.table_row.create(null, row.children.map((cell, columnIndex) => {\n const cellType = rowIndex === 0 ? schema.nodes.table_header : schema.nodes.table_cell\n const align = node.align?.[columnIndex] ?? null\n return cellType.create({ align }, [\n schema.nodes.paragraph.create(blockAttrs(), convertPhrasing(cell.children, schema, context.issues, '$.table')),\n ])\n })))\n return schema.nodes.table.create({ ...blockAttrs(), layout: 'auto', columnWidths: null, caption: null }, rows)\n}\n\nfunction tableToMdastNode(context: MarkdownSerializeContext, node: ProseMirrorNode): MdastTable | MdastNode[] {\n const rows: MdastTableRow[] = []\n const align: Array<'left' | 'right' | 'center' | null> = []\n let complex = false\n node.forEach((row, _rowOffset, rowIndex) => {\n const cells: MdastTableCell[] = []\n row.forEach((cell, _cellOffset, columnIndex) => {\n if (cell.attrs.colspan !== 1 || cell.attrs.rowspan !== 1 || cell.childCount !== 1 || cell.firstChild?.type.name !== 'paragraph') {\n complex = true\n }\n if (!isGfmTableCellType(node, rowIndex, cell.type.name)) complex = true\n if (hasComplexTableCellAttrs(cell)) complex = true\n if (rowIndex === 0) align[columnIndex] = normalizeTableAlign(cell.attrs.align)\n cells.push({ type: 'tableCell', children: cell.firstChild ? pmInlineToMdast(cell.firstChild, {}, context.issues) : [] })\n })\n rows.push({ type: 'tableRow', children: cells })\n })\n const table: MdastTable = { type: 'table', align, children: rows }\n if (complex || node.attrs.caption || node.attrs.columnWidths) {\n context.issues.push(issue('TABLE_COMPLEX_MARKDOWN_FALLBACK', 'warn', '$.table', 'Complex table attributes require Refinex block wrapper.'))\n return wrapRefinexBlock('table', {\n caption: node.attrs.caption,\n columnWidths: node.attrs.columnWidths,\n layout: node.attrs.layout,\n cells: tableWrapperCells(node),\n }, [table])\n }\n return table\n}\n\nfunction simpleBlocksFromMdast(context: MarkdownParseContext, node: MdastBlock): ProseMirrorNode[] {\n switch (node.type) {\n case 'paragraph':\n return [context.schema.nodes.paragraph.create(blockAttrs(), convertPhrasing(node.children, context.schema, context.issues, '$.rich'))]\n case 'heading':\n return [context.schema.nodes.heading.create({ level: node.depth, ...blockAttrs() }, convertPhrasing(node.children, context.schema, context.issues, '$.rich'))]\n case 'code':\n {\n const language = normalizeCodeLanguage(node.lang)\n return [context.schema.nodes.code_block.create({\n language,\n displayMode: normalizeCodeBlockDisplayMode(language),\n ...blockAttrs(),\n }, textOrUndefined(context.schema, node.value))]\n }\n case 'math':\n return context.schema.nodes.math_block ? [context.schema.nodes.math_block.create({ tex: node.value, ...blockAttrs() })] : []\n case 'list':\n return [convertList(node, context.schema, {}, context.issues, '$.rich')]\n case 'thematicBreak':\n return [context.schema.nodes.horizontal_rule.create(blockAttrs())]\n case 'blockquote':\n return [context.schema.nodes.blockquote.create(blockAttrs(), node.children.flatMap((child) => simpleBlocksFromMdast(context, child)))]\n case 'table': {\n const table = tableFromMdast(context, node)\n return table ? [table] : []\n }\n case 'html':\n return [context.schema.nodes.code_block.create({ language: 'html', ...blockAttrs() }, textOrUndefined(context.schema, node.value))]\n }\n}\n\nfunction wrapRefinexBlock(type: string, attrs: Record<string, unknown>, children: MdastNode[]): MdastNode[] {\n const cleaned = Object.fromEntries(Object.entries(attrs).filter(([, value]) => value !== undefined && value !== null))\n return [\n { type: 'html', value: `<!-- refinex:block ${JSON.stringify({ type, attrs: cleaned })} -->` },\n ...children,\n { type: 'html', value: '<!-- /refinex:block -->' },\n ]\n}\n\nfunction normalizeTableAlign(value: unknown): 'left' | 'right' | 'center' | null {\n return value === 'left' || value === 'right' || value === 'center' ? value : null\n}\n\nfunction blockAttrs(blockId?: string): Record<string, unknown> {\n return {\n blockId: blockId ?? null,\n metadata: null,\n permissions: null,\n }\n}\n\nfunction textOrUndefined(schema: Schema, value: string): ProseMirrorNode | undefined {\n return value.length > 0 ? schema.text(value) : undefined\n}\n\nfunction parseBlockIdComment(value: string): string | undefined {\n const match = /^<!--\\s*refinex:block-id\\s+(blk_[A-Za-z0-9_-]{8,36})\\s*-->$/.exec(value.trim())\n return match?.[1]\n}\n\nfunction parseRefinexBlockStart(value: string): { type: string; attrs: Record<string, unknown> } | undefined {\n const match = /^<!--\\s*refinex:block\\s+(\\{[\\s\\S]*\\})\\s*-->$/.exec(value.trim())\n if (!match) return undefined\n try {\n const parsed = JSON.parse(match[1]) as unknown\n if (!isRecord(parsed) || typeof parsed.type !== 'string') return undefined\n return {\n type: parsed.type,\n attrs: isRecord(parsed.attrs) ? parsed.attrs : {},\n }\n } catch {\n return undefined\n }\n}\n\nfunction isRefinexBlockEnd(value: string): boolean {\n return /^<!--\\s*\\/refinex:block\\s*-->$/.test(value.trim())\n}\n\nfunction convertRefinexBlockWrapper(\n wrapper: { type: string; attrs: Record<string, unknown> },\n inner: readonly MdastNode[],\n schema: Schema,\n options: ParseMarkdownOptions,\n issues: MarkdownTransformIssue[],\n path: string,\n blockId: string | undefined,\n extensionNames: Array<{ name: string; version: string }>,\n): ProseMirrorNode[] {\n const attrs = { ...wrapper.attrs, ...blockAttrs(blockId) }\n switch (wrapper.type) {\n case 'image_block': {\n const first = inner[0]\n const image = first?.type === 'paragraph' && first.children[0]?.type === 'image' ? first.children[0] : undefined\n if (!image || !schema.nodes.image_block) break\n const captionNode = inner.find((node, index) => index > 0 && node.type === 'paragraph') as MdastParagraph | undefined\n return [schema.nodes.image_block.create({\n ...attrs,\n src: image.url,\n alt: image.alt ?? null,\n title: image.title ?? null,\n }, captionNode ? convertPhrasing(captionNode.children, schema, issues, path) : undefined)]\n }\n case 'divider':\n if (schema.nodes.divider) return [schema.nodes.divider.create(attrs)]\n break\n case 'math_block': {\n const math = inner.find((node) => node.type === 'math' || node.type === 'code' || node.type === 'paragraph')\n if (schema.nodes.math_block && math) {\n return [schema.nodes.math_block.create({\n ...attrs,\n tex: 'value' in math ? math.value : nodeToText(math),\n })]\n }\n break\n }\n case 'table': {\n const table = inner.find((node) => node.type === 'table')\n if (table) {\n const parsed = tableFromMdast({ schema, issues }, table)\n if (parsed) return [restoreWrappedTable(schema, parsed, attrs)]\n }\n break\n }\n case 'toggle_list': {\n const parsed = toggleListFromWrappedMdast({ schema, issues }, inner, wrapper.attrs)\n if (parsed) return [parsed]\n break\n }\n case 'embed_block':\n if (schema.nodes.embed_block) return [schema.nodes.embed_block.create(attrs)]\n break\n }\n issues.push(issue('RICH_BLOCK_ATTR_FALLBACK', 'warn', path, `Refinex block \"${wrapper.type}\" could not be restored and its content was imported normally.`))\n return inner.flatMap((node, index) => convertBlock(node, schema, options, issues, `${path}.children[${String(index)}]`, undefined, extensionNames))\n}\n\nfunction isGfmTableCellType(table: ProseMirrorNode, rowIndex: number, cellTypeName: string): boolean {\n if (rowIndex === 0) return cellTypeName === 'table_header'\n if (cellTypeName !== 'table_cell') return false\n if (table.childCount === 0) return false\n for (let columnIndex = 0; columnIndex < table.child(0).childCount; columnIndex += 1) {\n if (table.child(0).child(columnIndex).type.name !== 'table_header') return false\n }\n return true\n}\n\nfunction hasComplexTableCellAttrs(cell: ProseMirrorNode): boolean {\n return Boolean(\n cell.attrs.background\n || cell.attrs.colwidth\n || cell.attrs.metadata\n || (cell.attrs.colspan !== undefined && cell.attrs.colspan !== 1)\n || (cell.attrs.rowspan !== undefined && cell.attrs.rowspan !== 1),\n )\n}\n\nfunction tableWrapperCells(table: ProseMirrorNode): unknown[] {\n const rows: unknown[] = []\n table.forEach((row) => {\n const cells: unknown[] = []\n row.forEach((cell) => {\n cells.push({\n type: cell.type.name,\n attrs: tableWrapperCellAttrs(cell),\n })\n })\n rows.push(cells)\n })\n return rows\n}\n\nfunction tableWrapperCellAttrs(cell: ProseMirrorNode): Record<string, unknown> {\n return Object.fromEntries(Object.entries({\n align: normalizeTableAlign(cell.attrs.align),\n background: cell.attrs.background ?? null,\n textColor: cell.attrs.textColor ?? null,\n colspan: cell.attrs.colspan === 1 ? null : cell.attrs.colspan,\n rowspan: cell.attrs.rowspan === 1 ? null : cell.attrs.rowspan,\n colwidth: cell.attrs.colwidth ?? null,\n metadata: cell.attrs.metadata ?? null,\n }).filter(([, value]) => value !== null && value !== undefined))\n}\n\nfunction restoreWrappedTable(schema: Schema, parsed: ProseMirrorNode, attrs: Record<string, unknown>): ProseMirrorNode {\n const cellSpecs = Array.isArray(attrs.cells) ? attrs.cells : []\n const rows: ProseMirrorNode[] = []\n parsed.forEach((row, _rowOffset, rowIndex) => {\n const restoredCells: ProseMirrorNode[] = []\n const rowSpecs = Array.isArray(cellSpecs[rowIndex]) ? cellSpecs[rowIndex] as unknown[] : []\n row.forEach((cell, _cellOffset, columnIndex) => {\n const spec = isRecord(rowSpecs[columnIndex]) ? rowSpecs[columnIndex] : {}\n const typeName = spec.type === 'table_header' ? 'table_header' : 'table_cell'\n const cellType = schema.nodes[typeName] ?? cell.type\n const restoredAttrs = {\n ...cell.attrs,\n ...(isRecord(spec.attrs) ? spec.attrs : {}),\n }\n restoredCells.push(cellType.create(restoredAttrs, cell.content, cell.marks))\n })\n rows.push(row.type.create(row.attrs, rowsToFragment(restoredCells), row.marks))\n })\n const { cells: _cells, ...tableAttrs } = attrs\n return parsed.type.create({ ...parsed.attrs, ...tableAttrs }, rowsToFragment(rows), parsed.marks)\n}\n\nfunction rowsToFragment(nodes: readonly ProseMirrorNode[]): Fragment {\n return nodes.length > 0 ? Fragment.fromArray([...nodes]) : Fragment.empty\n}\n\nfunction tableToPlainText(table: MdastTable): string {\n const rows = table.children.map((row) => row.children.map((cell) => phrasingToText(cell.children)))\n return rows.map((row) => row.join('\\t')).join('\\n')\n}\n\nfunction isHtmlOnlyParagraph(node: MdastParagraph): boolean {\n let hasHtml = false\n return node.children.length > 0 && node.children.every((child) => {\n if (child.type === 'html') {\n hasHtml = true\n return true\n }\n return child.type === 'text'\n }) && hasHtml\n}\n\nfunction phrasingToText(nodes: readonly MdastPhrasing[]): string {\n return nodes.map((node) => {\n if ('value' in node) return node.value\n if ('children' in node) return phrasingToText(node.children as MdastPhrasing[])\n if (node.type === 'image') return node.alt ?? ''\n return ''\n }).join('')\n}\n\nfunction nodeToText(node: MdastNode): string {\n if ('value' in node) return node.value\n if ('children' in node) return node.children.map(nodeToText).join('')\n return ''\n}\n\nfunction readTaskMetadata(node: ProseMirrorNode): boolean | null | undefined {\n const metadata = node.attrs.metadata\n if (!isRecord(metadata)) return undefined\n const task = metadata.task\n if (!isRecord(task) || typeof task.checked !== 'boolean') return undefined\n return task.checked\n}\n\nfunction readMarkdownMetadata(node: ProseMirrorNode): Record<string, unknown> | undefined {\n const metadata = node.attrs.metadata\n if (!isRecord(metadata) || !isRecord(metadata.markdown)) return undefined\n return metadata.markdown\n}\n\nfunction clampHeading(level: unknown): 1 | 2 | 3 | 4 | 5 | 6 {\n return typeof level === 'number' && level >= 1 && level <= 6 ? level as 1 | 2 | 3 | 4 | 5 | 6 : 1\n}\n\nfunction isRefinexDoc(input: unknown): input is RefinexDoc {\n return isRecord(input) && input.refinexDocVersion === '1.0.0' && isRecord(input.content)\n}\n\nfunction isProseMirrorNode(input: unknown): input is ProseMirrorNode {\n return isRecord(input) && typeof input.type === 'object' && typeof input.toJSON === 'function'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction issue(\n code: MarkdownTransformIssueCode,\n severity: MarkdownIssueSeverity,\n path: string,\n message: string,\n): MarkdownTransformIssue {\n return { code, severity, path, message }\n}\n\nexport { defaultSchema }\n"],"names":["defaultFormat","parseMarkdown","markdown","options","parseMarkdownDocument","serializeMarkdown","doc","serializeMarkdownDocument","markdownToDoc","docToMarkdown","schema","createRefinexSchema","issues","tree","parseToMdast","normalizeMarkdownMathBlocks","frontmatter","children","extractFrontmatter","nodes","extensionNames","convertBlocks","docNode","createRefinexDoc","extension","promoteFrontmatter","normalized","validateDoc","createBlockId","issue","modelIssue","nextDoc","_match","lineStart","prefix","tex","input","inputToNode","root","pmBlocksToMdast","frontmatterToYaml","stringifyMdast","createMarkdownTransformer","parseOptions","serializeOptions","createRichBlockMarkdownExtension","node","image","_a","context","imageBlockToMdast","calloutFromMdast","calloutToMdast","taskListFromMdast","taskListToMdast","toggleListToMdast","_context","wrapRefinexBlock","tableFromMdast","tableToMdastNode","first","phrasingToText","title","unified","remarkParse","remarkFrontmatter","remarkGfm","remarkMath","error","format","remarkStringify","parsed","parseYaml","isRecord","metadata","key","result","pendingBlockId","index","blockId","parseBlockIdComment","wrapper","parseRefinexBlockStart","inner","cursor","candidate","isRefinexBlockEnd","convertRefinexBlockWrapper","converted","convertBlock","path","extensionResult","parseWithExtension","isHtmlOnlyParagraph","blockAttrs","textOrUndefined","convertPhrasing","child","language","normalizeCodeLanguage","normalizeCodeBlockDisplayMode","convertList","tableToPlainText","handleUnknownBlock","item","childIndex","itemNodes","marks","convertPhrasingNode","block","pmBlockToMdast","blocks","entry","_c","_b","serialized","_e","_d","target","pmInlineToMdast","mergeAdjacent","clampHeading","flattenChildren","codeBlockToMdast","listToMdast","handleUnsupportedPmNode","parent","_options","mark","current","itemChildren","task","readTaskMetadata","value","readMarkdownMetadata","isRefinexDoc","raw","stringifyYaml","isProseMirrorNode","nodeToText","codec","schemaExtensionNames","schemaExtension","previous","caption","hasCaption","attrs","defaultAttrs","imageParagraph","marker","kind","normalizeCalloutKind","markerRest","titleLine","bodyLines","body","simpleBlocksFromMdast","items","list","toggleListNodeToMdastList","states","state","nestedStates","toggleListFromWrappedMdast","itemStates","readToggleItemStates","toggleItemFromMdast","nestedItem","rows","row","rowIndex","cell","columnIndex","cellType","align","complex","_rowOffset","cells","_cellOffset","isGfmTableCellType","hasComplexTableCellAttrs","normalizeTableAlign","table","tableWrapperCells","type","cleaned","match","captionNode","math","restoreWrappedTable","cellTypeName","tableWrapperCellAttrs","cellSpecs","restoredCells","rowSpecs","spec","typeName","restoredAttrs","rowsToFragment","_cells","tableAttrs","Fragment","hasHtml","level","code","severity","message"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@refinex-md/markdown",
3
- "version": "0.1.0-canary.1",
3
+ "version": "0.1.0-canary.2",
4
4
  "description": "Markdown transformer for RefinexDoc documents.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "remark-stringify": "^11.0.0",
33
33
  "unified": "^11.0.5",
34
34
  "yaml": "^2.8.1",
35
- "@refinex-md/model": "^0.1.0-canary.1"
35
+ "@refinex-md/model": "^0.1.0-canary.2"
36
36
  },
37
37
  "repository": {
38
38
  "type": "git",