Files
static-php-cli/docs/.vitepress/extensions.data.js
2026-04-19 18:01:56 +08:00

41 lines
1.3 KiB
JavaScript

import { readFileSync, existsSync } from 'node:fs'
import { resolve, dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = dirname(fileURLToPath(import.meta.url))
const DATA_PATH = resolve(__dirname, 'ext-data.json')
const NOTES_PATH = resolve(__dirname, '../en/guide/extension-notes.md')
export default {
watch: [DATA_PATH, NOTES_PATH],
load() {
if (!existsSync(DATA_PATH)) {
console.warn(
'[extensions.data.js] ext-data.json not found. ' +
'Run `bin/spc dev:gen-ext-docs` to generate it.'
)
return { extensions: [], missing: true }
}
const raw = JSON.parse(readFileSync(DATA_PATH, 'utf-8'))
// Build the set of extension names that have a section in extension-notes.md.
// Headings at level 2 or 3 are matched; leading/trailing whitespace is stripped.
const notesSet = new Set()
if (existsSync(NOTES_PATH)) {
const notesContent = readFileSync(NOTES_PATH, 'utf-8')
for (const match of notesContent.matchAll(/^#{2,3}\s+(\S+)/gm)) {
notesSet.add(match[1].toLowerCase())
}
}
const extensions = raw.extensions.map(ext => ({
...ext,
hasNotes: notesSet.has(ext.name.toLowerCase()),
}))
return { extensions, missing: false }
},
}