feat(docs): discover package metadata
This commit is contained in:
+25
-2
@@ -7,12 +7,13 @@ import expressiveCode from "satteri-expressive-code"
|
||||
import { fileURLToPath } from "node:url"
|
||||
import { defineConfig, type Plugin } from "vite"
|
||||
import { satteri } from "vite-plugin-satteri"
|
||||
import { parse } from "yaml"
|
||||
|
||||
const packagesDirectory = fileURLToPath(new URL("../packages", import.meta.url))
|
||||
|
||||
/**
|
||||
* Vite 默认监听 docs 根目录。现有的外部 MDX 会作为模块被监听,但新建 package
|
||||
* 或新建 MDX 文件在首次进入模块图之前不会触发 import.meta.glob 重新计算。
|
||||
* Vite 默认监听 docs 根目录。现有的外部文档与元数据会作为模块被监听,但新建
|
||||
* package、meta.yaml 或 MDX 文件在首次进入模块图之前不会触发 glob 重新计算。
|
||||
*/
|
||||
function watchPackageDocs(): Plugin {
|
||||
return {
|
||||
@@ -23,6 +24,27 @@ function watchPackageDocs(): Plugin {
|
||||
}
|
||||
}
|
||||
|
||||
function loadYamlModules(): Plugin {
|
||||
return {
|
||||
name: "load-yaml-modules",
|
||||
enforce: "pre",
|
||||
transform(source, id) {
|
||||
if (!/\/meta\.ya?ml(?:\?|$)/.test(id)) return
|
||||
|
||||
try {
|
||||
return {
|
||||
code: `export default ${JSON.stringify(parse(source))}`,
|
||||
map: null,
|
||||
}
|
||||
} catch (error) {
|
||||
this.error(
|
||||
`Unable to parse ${id}: ${error instanceof Error ? error.message : String(error)}`
|
||||
)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
function loadDocSearchSources(): Plugin {
|
||||
const suffix = "?docs-search-raw"
|
||||
const virtualPrefix = "\0docs-search-raw:"
|
||||
@@ -60,6 +82,7 @@ function loadDocSearchSources(): Plugin {
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
watchPackageDocs(),
|
||||
loadYamlModules(),
|
||||
loadDocSearchSources(),
|
||||
satteri({
|
||||
features: {
|
||||
|
||||
Reference in New Issue
Block a user