diff --git a/packages/build-info/assets/logos/vitepress/default.svg b/packages/build-info/assets/logos/vitepress/default.svg new file mode 100644 index 0000000000..dac79e4048 --- /dev/null +++ b/packages/build-info/assets/logos/vitepress/default.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/build-info/src/frameworks/index.ts b/packages/build-info/src/frameworks/index.ts index ba68db6d4b..5151877180 100644 --- a/packages/build-info/src/frameworks/index.ts +++ b/packages/build-info/src/frameworks/index.ts @@ -45,6 +45,7 @@ import { TanStackRouter } from './tanstack-router.js' import { TanStackStart } from './tanstack-start.js' import { Vike } from './vike.js' import { Vite } from './vite.js' +import { VitePress } from './vitepress.js' import { Vue } from './vue.js' import { VuePress } from './vuepress.js' import { Waku } from './waku.js' @@ -91,6 +92,7 @@ export const frameworks = [ Analog, Vike, Waku, + VitePress, // Back-end frameworks Hono, diff --git a/packages/build-info/src/frameworks/vitepress.test.ts b/packages/build-info/src/frameworks/vitepress.test.ts new file mode 100644 index 0000000000..7f0f40b871 --- /dev/null +++ b/packages/build-info/src/frameworks/vitepress.test.ts @@ -0,0 +1,35 @@ +import { beforeEach, expect, test } from 'vitest' + +import { mockFileSystem } from '../../tests/mock-file-system.js' +import { NodeFS } from '../node/file-system.js' +import { Project } from '../project.js' + +beforeEach((ctx) => { + ctx.fs = new NodeFS() +}) + +test('detects a Vitepress site', async ({ fs }) => { + const cwd = mockFileSystem({ + 'package.json': JSON.stringify({ + private: true, + type: 'module', + scripts: { + 'docs:dev': 'vitepress dev docs', + 'docs:build': 'vitepress build docs', + 'docs:preview': 'vitepress preview docs', + }, + devDependencies: { + vitepress: '^2.0.0-alpha', + }, + }), + }) + const detected = await new Project(fs, cwd).detectFrameworks() + + expect(detected?.length).toBe(1) + + expect(detected?.[0]?.id).toBe('vitepress') + expect(detected?.[0]?.build?.command).toBe('vitepress build') + expect(detected?.[0]?.build?.directory).toBe('.vitepress/dist') + expect(detected?.[0]?.dev?.command).toBe('vitepress dev') + expect(detected?.[0]?.dev?.port).toBe(5173) +}) diff --git a/packages/build-info/src/frameworks/vitepress.ts b/packages/build-info/src/frameworks/vitepress.ts new file mode 100644 index 0000000000..cce5117e5f --- /dev/null +++ b/packages/build-info/src/frameworks/vitepress.ts @@ -0,0 +1,25 @@ +import { BaseFramework, Category, Framework } from './framework.js' + +export class VitePress extends BaseFramework implements Framework { + readonly id = 'vitepress' + name = 'VitePress' + npmDependencies = ['vitepress'] + category = Category.SSG + + dev = { + command: 'vitepress dev', + port: 5173, + pollingStrategies: [{ name: 'TCP' }], + } + + build = { + command: 'vitepress build', + directory: '.vitepress/dist', + } + + logo = { + default: '/logos/vitepress/default.svg', + light: '/logos/vitepress/default.svg', + dark: '/logos/vitepress/default.svg', + } +}