diff --git a/electron.vite.config.ts b/electron.vite.config.ts index eb4fcaa..24c8376 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -1,6 +1,62 @@ +import { readFileSync } from 'node:fs' import { resolve } from 'node:path' import react from '@vitejs/plugin-react' import { defineConfig, externalizeDepsPlugin } from 'electron-vite' +import type { Plugin } from 'vite' + +type ProjectPackage = { + dependencies?: Record +} + +const projectPackage = JSON.parse( + readFileSync(resolve('package.json'), 'utf8') +) as ProjectPackage + +function requireDependencyVersion( + dependencies: Record | undefined, + name: string +): string { + const version = dependencies?.[name] + if (!version) { + throw new Error(`Missing ${name} dependency version`) + } + return version +} + +const deepSeekHarnessLlmVersion = requireDependencyVersion( + projectPackage.dependencies, + '@deepseek-ai/dsh-llm' +) + +export function serializeDeepSeekHarnessBundleManifest( + version: string +): string { + return `${JSON.stringify( + { + name: '@deepseek-ai/dsh-llm', + version, + private: true, + type: 'module' + }, + null, + 2 + )}\n` +} + +function deepSeekHarnessBundleManifestPlugin(): Plugin { + return { + name: 'deepseek-harness-bundle-manifest', + generateBundle() { + this.emitFile({ + type: 'asset', + fileName: 'package.json', + source: serializeDeepSeekHarnessBundleManifest( + deepSeekHarnessLlmVersion + ) + }) + } + } +} export default defineConfig({ main: { @@ -34,7 +90,8 @@ export default defineConfig({ 'yaml', 'zod' ] - }) + }), + deepSeekHarnessBundleManifestPlugin() ], build: { rollupOptions: { diff --git a/tests/electron-vite-config.test.ts b/tests/electron-vite-config.test.ts new file mode 100644 index 0000000..4bac58c --- /dev/null +++ b/tests/electron-vite-config.test.ts @@ -0,0 +1,18 @@ +// @vitest-environment node + +import { describe, expect, it } from 'vitest' +import { serializeDeepSeekHarnessBundleManifest } from '../electron.vite.config' + +describe('Electron Vite configuration', () => { + it('serializes the DeepSeek Harness bundle manifest', () => { + const source = serializeDeepSeekHarnessBundleManifest('1.2.3') + + expect(JSON.parse(source)).toEqual({ + name: '@deepseek-ai/dsh-llm', + version: '1.2.3', + private: true, + type: 'module' + }) + expect(source.endsWith('\n')).toBe(true) + }) +})