chore: prepare v1.0.0 release
This commit is contained in:
+2
-21
@@ -4,19 +4,11 @@ import { sanitizeFilename } from './sanitize'
|
||||
import { ALL_ALLOWED_EXTENSIONS, MODEL_EXTENSIONS, MAX_FILE_SIZE } from './constants'
|
||||
import type { ParsedFile } from './types'
|
||||
|
||||
export interface ParsedUpload {
|
||||
interface ParsedUpload {
|
||||
folderName: string
|
||||
files: ParsedFile[]
|
||||
/** Any extra string fields from the FormData (e.g. "action") */
|
||||
extra: Record<string, string>
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a multi-file FormData upload request.
|
||||
* Validates file extensions, file sizes, and returns parsed files.
|
||||
* Extra string fields (beyond folderName, files, fileTypes, textureNames)
|
||||
* are returned in `extra`.
|
||||
*/
|
||||
export async function parseMultiUpload(req: NextRequest): Promise<ParsedUpload> {
|
||||
const formData = await req.formData()
|
||||
const folderValue = formData.get('folderName')
|
||||
@@ -27,16 +19,6 @@ export async function parseMultiUpload(req: NextRequest): Promise<ParsedUpload>
|
||||
const fileTypes = formData.getAll('fileTypes').filter((value): value is string => typeof value === 'string')
|
||||
const textureNames = formData.getAll('textureNames').filter((value): value is string => typeof value === 'string')
|
||||
|
||||
// Collect extra string fields
|
||||
const knownKeys = new Set(['folderName', 'files', 'fileTypes', 'textureNames'])
|
||||
const extra: Record<string, string> = {}
|
||||
for (const [key, value] of formData.entries()) {
|
||||
if (!knownKeys.has(key) && typeof value === 'string') {
|
||||
extra[key] = value
|
||||
}
|
||||
}
|
||||
|
||||
// Runtime validation: ensure entries are actual File objects
|
||||
const fileEntries: File[] = []
|
||||
for (const entry of rawFiles) {
|
||||
if (!(entry instanceof File)) {
|
||||
@@ -56,7 +38,6 @@ export async function parseMultiUpload(req: NextRequest): Promise<ParsedUpload>
|
||||
const file = fileEntries[i]
|
||||
if (!file || file.size === 0) continue
|
||||
|
||||
// File size limit
|
||||
if (file.size > MAX_FILE_SIZE) {
|
||||
throw new Error(
|
||||
`Fichier "${file.name}" trop volumineux (${(file.size / 1024 / 1024).toFixed(1)} MB). Maximum: ${MAX_FILE_SIZE / 1024 / 1024} MB.`,
|
||||
@@ -100,5 +81,5 @@ export async function parseMultiUpload(req: NextRequest): Promise<ParsedUpload>
|
||||
throw new Error('Un seul fichier model.gltf est autorise')
|
||||
}
|
||||
|
||||
return { folderName: safeFolderName, files: parsed, extra }
|
||||
return { folderName: safeFolderName, files: parsed }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user