pengzhanbo a9f6bd0a0c
feat(plugin-md-power): add demo syntax (#415)
* feat(plugin-md-power): add `demo` syntax
2025-01-10 11:17:23 +08:00

43 lines
1.0 KiB
TypeScript

import type { App } from 'vuepress'
import type { MarkdownEnv } from 'vuepress/markdown'
import fs from 'node:fs'
import { createRequire } from 'node:module'
import path from 'node:path'
import process from 'node:process'
const require = createRequire(process.cwd())
export function findFile(app: App, env: MarkdownEnv, url: string): string {
if (url.startsWith('/'))
return app.dir.source(url.slice(1))
if (url.startsWith('./') || url.startsWith('../'))
return app.dir.source(path.dirname(env.filePathRelative!), url)
if (url.startsWith('@source/')) {
return app.dir.source(url.slice('@source/'.length))
}
try {
return require.resolve(url)
}
catch {
return url
}
}
export function readFileSync(filepath: string): string | false {
try {
return fs.readFileSync(filepath, 'utf-8')
}
catch {
return false
}
}
export function writeFileSync(filepath: string, content: string): void {
const dirname = path.dirname(filepath)
fs.mkdirSync(dirname, { recursive: true })
fs.writeFileSync(filepath, content, 'utf-8')
}