Skip to content

feat: add multipart/form-data support for file uploads#4

Open
fdarian wants to merge 2 commits intoDokploy:mainfrom
fdarian:feat/multipart-form-data-support
Open

feat: add multipart/form-data support for file uploads#4
fdarian wants to merge 2 commits intoDokploy:mainfrom
fdarian:feat/multipart-form-data-support

Conversation

@fdarian
Copy link

@fdarian fdarian commented Mar 7, 2026

Resolves #3

Summary

  • Auto-detect zod-form-data file fields and set content type to multipart/form-data
  • Generate { type: "string", format: "binary" } OpenAPI schema for file fields
  • Add safe optionality check to avoid triggering zfd preprocessing during schema generation

Changes

src/utils/zod.ts

  • isSchemaOptional() — Checks optionality without triggering zfd preprocessing (which calls safeParse internally)
  • instanceofZodFormDataFile() — Detects zfd.file() schemas by matching the pipe(transform -> custom) pattern in Zod v4 (with Zod v3 ZodEffects fallback)
  • schemaContainsFileField() — Checks if an object schema contains any file fields

src/generator/schema.ts

  • generateFormDataSchema() — Replaces file fields with z.string().meta({ format: 'binary' }) so zod-openapi generates the correct binary format
  • getRequestBodyObject() — Auto-detects multipart/form-data when file fields are present

src/generator/paths.ts

  • Replaced safeParse(undefined) with isSchemaOptional() to avoid triggering zfd preprocessing

src/types.ts

  • Added 'multipart/form-data' to OpenApiContentType

Test plan

  • Auto-detects multipart/form-data for zfd.formData() with zfd.file() fields
  • Multiple file fields generate correct binary schemas
  • Backward compatibility — non-file schemas still use application/json
  • Required/optional fields are marked correctly
  • All existing tests pass (136/136)

- Add detection utilities for zod-form-data schemas (instanceofZodFormDataFile, schemaContainsFileField)
- Add safe optionality check to avoid triggering zfd preprocessing
- Auto-detect multipart/form-data when file fields present
- Generate proper OpenAPI schema with type: string, format: binary for files
- Add multipart/form-data to OpenApiContentType
- Add comprehensive tests for file upload scenarios
- Fix jest config to run tests (disable diagnostics for pre-existing TS errors)
- Add zod-form-data@2 as devDependency for testing
@fdarian fdarian force-pushed the feat/multipart-form-data-support branch from 9d285da to d95a785 Compare March 7, 2026 09:00
@fdarian
Copy link
Author

fdarian commented Mar 9, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: Add multipart/form-data support for file uploads

1 participant