135 lines
3.3 KiB
TypeScript
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))
|
|
}
|