Skip to content

Zod Custom types cannot be represented in JSON Schema #321

@seepine

Description

@seepine
const zodDayjs = () => {
  return z.custom<Dayjs>(
    (val: any) => dayjs(val).isValid() || val === null || val === undefined,
    {
      params: { expected: 'Dayjs', received: z.string() },
    },
  )

app = new Elysia()
  .use(openapi({
    mapJsonSchema: {
      zod: z.toJSONSchema,
    },
  }))
  .get(
  '',
  () =>
    ({
      status: 'ok',
      startTime: dayjs(),
    }) as const,
  {
    response: z.object({
      status: z.literal('ok'),
      startTime: zodDayjs(),
    }),
  },
).listen()

curl http://localhost:3000/openapi/json got error

warn: Custom types cannot be represented in JSON Schema
      at customProcessor (/Users/seepine/workspace/elysia/elysia-template/node_modules/zod/v4/core/json-schema-processors.js:245:19)
      at process (/Users/seepine/workspace/elysia/elysia-template/node_modules/zod/v4/core/to-json-schema.js:76:26)
      at objectProcessor (/Users/seepine/workspace/elysia/elysia-template/node_modules/zod/v4/core/json-schema-processors.js:323:32)
      at process (/Users/seepine/workspace/elysia/elysia-template/node_modules/zod/v4/core/to-json-schema.js:76:26)
      at /Users/seepine/workspace/elysia/elysia-template/node_modules/zod/v4/core/to-json-schema.js:434:5
      at unwrapSchema (/Users/seepine/workspace/elysia/elysia-template/node_modules/@elysiajs/openapi/dist/index.mjs:3267:47)
      at toOpenAPISchema (/Users/seepine/workspace/elysia/elysia-template/node_modules/@elysiajs/openapi/dist/index.mjs:3592:11)
      at openAPISchema (/Users/seepine/workspace/elysia/elysia-template/node_modules/@elysiajs/openapi/dist/index.mjs:10258:9)
      at handle (file:///Users/seepine/workspace/elysia/elysia-template/node_modules/elysia/dist/bun/index.js:12:47)
      at handle (file:///Users/seepine/workspace/elysia/elysia-template/node_modules/elysia/dist/bun/index.js:6:80)
      at handle (file:///Users/seepine/workspace/elysia/elysia-template/node_modules/elysia/dist/bun/index.js:6:76)
      at handle (file:///Users/seepine/workspace/elysia/elysia-template/node_modules/elysia/dist/bun/index.js:6:63)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions