-
-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathindex.ts
47 lines (41 loc) · 1.23 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import type { UnpluginFactory } from 'unplugin'
import type { Options } from './types'
import { createUnplugin } from 'unplugin'
import { createFilter } from 'unplugin-utils'
import { createMarkdown } from './core/markdown'
import { resolveOptions } from './core/options'
const cssIdRE = /\.(css|postcss|sass|scss|less|stylus|styl)($|\?)/
export const unpluginFactory: UnpluginFactory<Options> = (userOptions = {}) => {
const options = resolveOptions(userOptions)
const markdownToVue = createMarkdown(options)
const filter = createFilter(
userOptions.include || /\.md$|\.md\?vue/,
userOptions.exclude || cssIdRE,
)
return {
name: 'unplugin-vue-markdown',
enforce: 'pre',
transformInclude(id) {
return filter(id)
},
async transform(raw, id) {
try {
return await markdownToVue(id, raw)
}
catch (e: any) {
this.error(e)
}
},
vite: {
async handleHotUpdate(ctx) {
if (!filter(ctx.file))
return
const defaultRead = ctx.read
ctx.read = async function () {
return (await markdownToVue(ctx.file, await defaultRead())).code
}
},
},
}
}
export default /* #__PURE__ */ createUnplugin(unpluginFactory)