@@ -2,12 +2,14 @@ import { Plugin } from 'obsidian'
22import type { EditorView , PluginValue , ViewUpdate } from '@codemirror/view'
33import { ViewPlugin } from '@codemirror/view'
44import { type App , createApp , defineComponent , h } from 'vue'
5+ import { compileTemplate } from '@vue/compiler-sfc'
56
67import { unified } from 'unified'
78import RemarkParse from 'remark-parse'
89import RemarkRehype from 'remark-rehype'
910import RehypeRaw from 'rehype-raw'
1011import { remove } from 'unist-util-remove'
12+ import { toHtml } from 'hast-util-to-html'
1113
1214function sleep ( ms : number ) {
1315 return new Promise ( resolve => setTimeout ( resolve , ms ) )
@@ -60,8 +62,26 @@ class VueViewPlugin implements PluginValue {
6062 . use ( ( ) => tree => remove ( tree , ( node , _ , parent ) => parent ?. type === 'root' && node . type === 'text' ) )
6163 . run ( parsedMarkdownAst )
6264
63- // eslint-disable-next-line no-console
64- console . log ( 'transformedHast' , transformedHast )
65+ let index = 0
66+ for ( const node of transformedHast . children ) {
67+ index ++
68+
69+ const componentTemplateStr = toHtml ( node )
70+
71+ const { code, errors } = compileTemplate ( {
72+ isProd : false ,
73+ source : componentTemplateStr ,
74+ filename : `some-${ index } ` ,
75+ id : index . toString ( ) ,
76+ } )
77+ if ( errors . length ) {
78+ console . error ( errors )
79+ throw new Error ( 'Failed to compile template' )
80+ }
81+
82+ // eslint-disable-next-line no-console
83+ console . log ( code )
84+ }
6585
6686 this . vueInstance ?. unmount ( )
6787
0 commit comments