import fs from 'node:fs/promises' import path from 'node:path' import { discoverVideoResources } from '../discovery/index.ts' import { generateVideoResourceMeta } from './generate-video-resource-meta.ts' export async function updateComponentMeta(projectRoot: string, checkOnly = false): Promise { const resources = await discoverVideoResources(projectRoot) const generated = await generateVideoResourceMeta({ projectRoot, resources }) const currentContents = await readOptionalFile(generated.filePath) if (checkOnly) { if (currentContents?.trimEnd() !== generated.contents.trimEnd()) { throw new Error('Generated video resource metadata is stale. Run pnpm run update-component-meta') } return } await fs.mkdir(path.dirname(generated.filePath), { recursive: true }) const tempFilePath = `${generated.filePath}.tmp` await fs.writeFile(tempFilePath, `${generated.contents}\n`, 'utf8') await fs.rename(tempFilePath, generated.filePath) } async function readOptionalFile(filePath: string): Promise { try { return await fs.readFile(filePath, 'utf8') } catch (error) { if ((error as NodeJS.ErrnoException).code === 'ENOENT') { return undefined } throw error } } if (import.meta.url === `file://${process.argv[1]}`) { const checkOnly = process.argv.includes('--check') const cwd = process.cwd() updateComponentMeta(cwd, checkOnly).catch((error: unknown) => { const message = error instanceof Error ? error.message : String(error) console.error(message) process.exitCode = 1 }) }