import { SidebarItem, defineConfig } from 'vitepress' import { transformerTwoslash } from '@shikijs/vitepress-twoslash' import fs from 'node:fs' import path from 'node:path' // https://vitepress.dev/reference/site-config export default defineConfig({ title: 'Entity Seven Docs', description: 'Short and descriptive', lastUpdated: true, themeConfig: { // https://vitepress.dev/reference/default-theme-config sidebar: { '/rage-fw-rpc/': [getVersionsByFolder('rage-fw-rpc')], ...getFwSidebar() }, search: { provider: 'local' }, socialLinks: [ { icon: 'github', link: 'https://git.entityseven.com/entityseven' }, { icon: 'discord', link: 'https://discord.com/qPb7CmDF4C' } ], footer: { copyright: 'Copyright Entity Seven Group © 2024 - Present' } }, markdown: { codeTransformers: [transformerTwoslash()], languages: ['js', 'ts'] } }) function getFwSidebar() { const dir = 'rage-fw' const versions = getVersionsByFolder(dir) const base = { text: 'Documentation', collapsed: false } const sidebar = { [`/${dir}/`]: [versions] // [`/${dir}`]: [documentation('..'), versions], } for (const version of versions.items) { if (version.text.includes('latest')) { const files = listChildFiles(path.resolve('docs', dir)) sidebar[`/${dir}/`] = [ { ...base, items: files.map((f) => ({ text: formatFilename(f), link: `./${f}` })) }, versions ] continue } const v = version.text.replace('(latest)', '').trim() const files = listChildFiles(path.resolve('docs', dir, v)) sidebar[`/${dir}/${v}/`] = [ { ...base, items: files.map((f) => ({ text: formatFilename(f), link: `./${f}` })) }, versions ] } return sidebar function formatFilename(filename: string) { filename = filename.split('.')[0].replace('-', ' ').replace('_', ' ') return filename.charAt(0).toUpperCase() + filename.slice(1) } } function getVersionsByFolder(folder: string) { const folders = listChildFolders(path.resolve('docs', folder)) const versions: SidebarItem = { text: 'Versions', collapsed: true, items: [] } for (const v of folders) { versions.items.push({ text: v, link: `/${folder}/` + v }) } versions.items = versions.items.sort((a, b) => { const vA = parseInt(a.text.replaceAll('.', ''), 10) const vB = parseInt(b.text.replaceAll('.', ''), 10) return vB - vA }) versions.items[0].text += ' (latest)' versions.items[0].link = `/${folder}/` return versions } function listChildFolders(dir: string) { const result: string[] = [] const items = fs.readdirSync(dir) for (const item of items) { const fullPath = path.join(dir, item) const stats = fs.statSync(fullPath) if (stats.isDirectory()) result.push(item) } return result } function listChildFiles(dir: string) { const result: string[] = [] const items = fs.readdirSync(dir) for (const item of items) { const fullPath = path.join(dir, item) const stats = fs.statSync(fullPath) if (stats.isFile()) result.push(item) } return result .filter((e) => !e.startsWith('index')) .sort((a, b) => ('' + a.attr).localeCompare(b.attr)) }