forked from adeyahya/prisma-typebox-generator
-
Notifications
You must be signed in to change notification settings - Fork 18
additionalProperties option incorrectly applied to enum/union schemas → Ajv strictTypes error #51
Copy link
Copy link
Open
Description
When the Prismabox generator option additionalProperties = false is enabled, Prismabox applies additionalProperties: false to non-object schemas generated for Prisma enums (TypeBox Type.Union of literals). Ajv strict mode (strictTypes) rejects additionalProperties unless the schema is type: "object", causing schema compilation to fail.
Example error:
strict mode: missing type "object" for keyword "additionalProperties" at "#/properties/status" (strictTypes)
Reproduction
Prisma schema
generator prismabox {
provider = "prismabox"
additionalProperties = false
}
enum Status {
active
inactive
}
model User {
id String @id
status Status
}Generated output (excerpt)
status: Type.Union([Type.Literal("active"), Type.Literal("inactive")], {
additionalProperties: false,
}),Using with Ajv
import Ajv from "ajv";
import { UserPlain } from "./generated/User.js";
const ajv = new Ajv({ strict: true }); // strictTypes enabled by default in strict mode
ajv.compile(UserPlain); // throwsExpected behavior
additionalProperties should only be applied to object schemas, not enums/unions/literals/arrays. Enums should be generated without it:
status: Type.Union([Type.Literal("active"), Type.Literal("inactive")]),Suggested fix
When emitting TypeBox options, apply additionalProperties only for Type.Object(...) (and other object-like schemas, if any), not for unions/enums/literals/arrays.
Workaround
import { Type } from "@sinclair/typebox";
import { UserPlain } from "./generated/User.js";
import { Status } from "./generated/enums.js";
// Manual enum
export const status = Type.Enum(Status);
// Override in usage
export const UserSchema = Type.Composite([
Type.Omit(UserPlain, ["status"]),
Type.Object({ status }),
]);Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels