74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
import type { Plugin } from 'vuepress/core'
|
|
import type { MarkdownPowerPluginOptions } from '../shared/index.js'
|
|
import { addViteOptimizeDepsInclude } from '@vuepress/helper'
|
|
import { isPackageExists } from 'local-pkg'
|
|
import { containerPlugin } from './container/index.js'
|
|
import { demoPlugin, demoWatcher, extendsPageWithDemo, waitDemoRender } from './demo/index.js'
|
|
import { embedSyntaxPlugin } from './embed/index.js'
|
|
import { docsTitlePlugin } from './enhance/docsTitle.js'
|
|
import { imageSizePlugin } from './enhance/imageSize.js'
|
|
import { inlineSyntaxPlugin } from './inline/index.js'
|
|
import { prepareConfigFile } from './prepareConfigFile.js'
|
|
|
|
export function markdownPowerPlugin(
|
|
options: MarkdownPowerPluginOptions = {},
|
|
): Plugin {
|
|
return {
|
|
name: 'vuepress-plugin-md-power',
|
|
|
|
clientConfigFile: app => prepareConfigFile(app, options),
|
|
|
|
define: {
|
|
__MD_POWER_INJECT_OPTIONS__: options,
|
|
__MD_POWER_DASHJS_INSTALLED__: isPackageExists('dashjs'),
|
|
__MD_POWER_HLSJS_INSTALLED__: isPackageExists('hls.js'),
|
|
__MD_POWER_MPEGTSJS_INSTALLED__: isPackageExists('mpegts.js'),
|
|
},
|
|
|
|
extendsBundlerOptions(bundlerOptions, app) {
|
|
if (options.repl) {
|
|
addViteOptimizeDepsInclude(
|
|
bundlerOptions,
|
|
app,
|
|
['shiki/core', 'shiki/wasm', 'shiki/engine/oniguruma'],
|
|
)
|
|
}
|
|
if (options.artPlayer) {
|
|
addViteOptimizeDepsInclude(
|
|
bundlerOptions,
|
|
app,
|
|
['artplayer', 'dashjs', 'hls.js', 'mpegts.js/dist/mpegts.js'],
|
|
)
|
|
}
|
|
},
|
|
|
|
extendsMarkdown: async (md, app) => {
|
|
docsTitlePlugin(md)
|
|
embedSyntaxPlugin(md, options)
|
|
inlineSyntaxPlugin(md, options)
|
|
|
|
if (options.demo)
|
|
demoPlugin(app, md)
|
|
|
|
await containerPlugin(app, md, options)
|
|
await imageSizePlugin(app, md, options.imageSize)
|
|
},
|
|
|
|
onPrepared: async () => {
|
|
if (options.demo)
|
|
await waitDemoRender()
|
|
},
|
|
|
|
onWatched(app, watchers) {
|
|
if (options.demo) {
|
|
demoWatcher(app, watchers)
|
|
}
|
|
},
|
|
|
|
extendsPage: (page) => {
|
|
if (options.demo)
|
|
extendsPageWithDemo(page)
|
|
},
|
|
}
|
|
}
|