import fs from 'node:fs/promises' import path from 'node:path' import { tmpdir } from 'node:os' import { expect, test } from 'vitest' import { updateComponentMeta } from './update-component-meta' test('writes and checks the unified video resource metadata file', async () => { const projectRoot = await fs.mkdtemp(path.join(tmpdir(), 'component-project-helper-meta-')) const packageRoot = path.join(projectRoot, 'node_modules', '@vibecuting', 'demo-pack') const srcRoot = path.join(packageRoot, 'src') await fs.mkdir(srcRoot, { recursive: true }) await fs.writeFile( path.join(packageRoot, 'package.json'), JSON.stringify({ name: '@vibecuting/demo-pack', version: '0.1.0', main: './src/index.ts', types: './src/index.ts', }), 'utf8', ) await fs.writeFile( path.join(srcRoot, 'index.ts'), ` export const sceneMetadata = defineScenePluginMetadata({ resourceKind: 'scene', name: 'DemoScene', description: 'Demo scene resource', sourceFile: 'src/index.ts', pluginKey: 'demo.scene', tags: ['demo'], aspectRatio: '16:9', sceneType: 'scene', motion: 'static', sceneFamily: 'custom', rootLayout: 'absolute-fill', }) export const DemoScene = VideoComponent(sceneMetadata)( defineSceneComponent({ family: 'custom', propsSchema: null, component: function DemoScene() { return null }, }), ) `, 'utf8', ) await updateComponentMeta(projectRoot) const generatedFilePath = path.join(projectRoot, '.vibecuting', 'video-resource-meta.generated.ts') const generatedContents = await fs.readFile(generatedFilePath, 'utf8') expect(generatedContents).toContain('installedScenePluginRegistry') expect(generatedContents).toContain('DemoScene') await expect(updateComponentMeta(projectRoot, true)).resolves.toBeUndefined() })