docs/docs/.vitepress/config.mts
2025-02-05 15:56:38 +00:00

135 lines
3.3 KiB
TypeScript

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))
}