import { compressTextureBuffer } from '@/lib/texture-compression' import { classifyAssetCategory } from '@/lib/asset-classification' import type { ParsedFile, PreparedAssetSummary } from '@/lib/types' interface PushFile { path: string contentBase64: string } interface PrepareGitAssetsParams { folderName: string parsedFiles: ParsedFile[] } interface PrepareGitAssetsResult { filesToPush: PushFile[] modelFilename: string assetSummaries: PreparedAssetSummary[] compressed: boolean compressionError?: string } export async function prepareGitAssets({ folderName, parsedFiles, }: PrepareGitAssetsParams): Promise { const filesToPush: PushFile[] = [] const assetSummaries: PreparedAssetSummary[] = [] let modelFilename = '' let compressed = false let compressionError: string | undefined for (const pf of parsedFiles) { let content = pf.buffer if (pf.isModel) { modelFilename = pf.filename assetSummaries.push({ filename: pf.filename, kind: 'model', compressed: false, }) } else { const category = classifyAssetCategory(pf.filename) const textureResult = await compressTextureBuffer(pf.filename, pf.buffer) content = textureResult.buffer if (textureResult.error && !compressionError) { compressionError = textureResult.error } assetSummaries.push({ filename: pf.filename, kind: category === 'assets' ? 'asset' : 'texture', category, compressed: textureResult.compressed, }) } filesToPush.push({ path: `public/models/${folderName}/${pf.filename}`, contentBase64: content.toString('base64'), }) } return { filesToPush, modelFilename, assetSummaries, compressed, compressionError, } }