import type { NextApiRequest } from 'next' import { IncomingForm, File as FormidableFile } from 'formidable' import type { Files } from 'formidable' import fs from 'fs' import type { ParseResult, UploadedFile } from './types' const MAX_FILE_SIZE = 50 * 1024 * 1024 // 50MB export async function parseFileFromMultipartRequest(req: NextApiRequest): Promise { const form = new IncomingForm({ maxFileSize: MAX_FILE_SIZE, keepExtensions: true }) const parseResult = await new Promise((resolve, reject) => { form.parse(req, (err, fields, files) => { if (err) { console.error('Formidable parse error:', err) reject(err) return } resolve({ fields, files }) }) }) return getFirstFile(parseResult.files, 'file') } function getFirstFile(files: Files, fieldName: string): FormidableFile | null { const value = files[fieldName] if (!value) { return null } if (Array.isArray(value)) { const first = value[0] return first ?? null } return value } export function safeUnlink(filepath: string): void { try { fs.unlinkSync(filepath) } catch (unlinkError) { console.error('Error deleting temp file:', unlinkError) } }