diff --git a/packages/build-info/assets/logos/vike/dark.svg b/packages/build-info/assets/logos/vike/dark.svg new file mode 100644 index 0000000000..4302178261 --- /dev/null +++ b/packages/build-info/assets/logos/vike/dark.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/build-info/assets/logos/vike/light.svg b/packages/build-info/assets/logos/vike/light.svg new file mode 100644 index 0000000000..16d9daeae2 --- /dev/null +++ b/packages/build-info/assets/logos/vike/light.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/build-info/src/frameworks/index.ts b/packages/build-info/src/frameworks/index.ts index 1fe19e31f4..fb6a724e2c 100644 --- a/packages/build-info/src/frameworks/index.ts +++ b/packages/build-info/src/frameworks/index.ts @@ -42,6 +42,7 @@ import { SvelteKit } from './svelte-kit.js' import { Svelte } from './svelte.js' import { TanStackRouter } from './tanstack-router.js' import { TanStackStart } from './tanstack-start.js' +import { Vike } from './vike.js' import { Vite } from './vite.js' import { Vue } from './vue.js' import { VuePress } from './vuepress.js' @@ -86,6 +87,7 @@ export const frameworks = [ Zola, Observable, Analog, + Vike, // Front-end frameworks Angular, diff --git a/packages/build-info/src/frameworks/vike.test.ts b/packages/build-info/src/frameworks/vike.test.ts new file mode 100644 index 0000000000..c9923da162 --- /dev/null +++ b/packages/build-info/src/frameworks/vike.test.ts @@ -0,0 +1,43 @@ +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 Vike site', async ({ fs }) => { + const cwd = mockFileSystem({ + 'package.json': JSON.stringify({ + scripts: { + dev: 'vike dev', + build: 'vike build', + preview: 'vike build && vike preview', + }, + dependencies: { + vike: '^0.4.247', + react: '^19.2.0', + 'react-dom': '^19.2.0', + 'vike-react': '^0.6.13', + }, + devDependencies: { + typescript: '^5.9.3', + vite: '^7.2.6', + '@vitejs/plugin-react': '^5.1.1', + '@types/react': '^19.2.7', + '@types/react-dom': '^19.2.3', + }, + }), + }) + const detected = await new Project(fs, cwd).detectFrameworks() + + expect(detected?.length).toBe(1) + + expect(detected?.[0]?.id).toBe('vike') + expect(detected?.[0]?.build?.command).toBe('vike build') + expect(detected?.[0]?.build?.directory).toBe('dist/client') + expect(detected?.[0]?.dev?.command).toBe('vike dev') + expect(detected?.[0]?.dev?.port).toBe(3000) +}) diff --git a/packages/build-info/src/frameworks/vike.ts b/packages/build-info/src/frameworks/vike.ts new file mode 100644 index 0000000000..3ee5bae932 --- /dev/null +++ b/packages/build-info/src/frameworks/vike.ts @@ -0,0 +1,24 @@ +import { BaseFramework, Category, Framework } from './framework.js' + +export class Vike extends BaseFramework implements Framework { + readonly id = 'vike' + name = 'Vike' + npmDependencies = ['vike'] + category = Category.SSG + + dev = { + command: 'vike dev', + port: 3000, + } + + build = { + command: 'vike build', + directory: 'dist/client', + } + + logo = { + default: '/logos/vike/light.svg', + light: '/logos/vite/light.svg', + dark: '/logos/vite/dark.svg', + } +} diff --git a/packages/build-info/src/frameworks/vite.ts b/packages/build-info/src/frameworks/vite.ts index 0379c32ba0..ac27237b8f 100644 --- a/packages/build-info/src/frameworks/vite.ts +++ b/packages/build-info/src/frameworks/vite.ts @@ -20,6 +20,7 @@ export class Vite extends BaseFramework implements Framework { '@sveltejs/kit', '@analogjs/platform', '@react-router/dev', + 'vike', ] category = Category.BuildTool