UNPKG

prisma-zod-generator

Version:

Prisma 2+ generator to emit Zod schemas from your Prisma schema

867 lines 30.1 kB
{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Prisma Zod Generator Configuration", "description": "Configuration schema for the Prisma Zod Generator", "type": "object", "additionalProperties": false, "properties": { "$schema": { "type": "string", "description": "Path or URL to this schema, for editor completion. Typically ../node_modules/prisma-zod-generator/lib/config/schema.json relative to the config file." }, "mode": { "type": "string", "enum": [ "full", "minimal", "custom" ], "default": "full", "description": "Generation mode: full (all schemas), minimal (basic CRUD only), or custom" }, "output": { "type": "string", "minLength": 1, "pattern": "^[^<>:\"|?*\\x00-\\x1f]+$", "description": "Output directory path for generated schemas" }, "useMultipleFiles": { "type": "boolean", "default": true, "description": "When true (default), generate multiple files; when false, generate a single bundled file" }, "singleFileName": { "type": "string", "minLength": 1, "default": "schemas.ts", "description": "Name of the single bundled file when useMultipleFiles is false" }, "placeSingleFileAtRoot": { "type": "boolean", "default": true, "description": "When bundling to a single file, place it at the output root instead of a schemas/ subdirectory" }, "placeArrayVariantsAtRoot": { "type": "boolean", "default": false, "description": "When using array-based variants, place them at the schemas root. Default false: array variants are written under variants/ with a generated index.ts" }, "formatGeneratedSchemas": { "type": "boolean", "default": false, "description": "Whether to run a formatter on generated schemas" }, "exportTypedSchemas": { "type": "boolean", "default": true, "description": "Whether to export the Prisma-typed schemas (e.g. UserFindManySchema, typed against Prisma.UserFindManyArgs)" }, "exportZodSchemas": { "type": "boolean", "default": true, "description": "Whether to export the plain Zod schemas alongside the typed ones (e.g. UserFindManyZodSchema)" }, "typedSchemaSuffix": { "type": "string", "default": "Schema", "description": "Suffix appended to the exported name of each Prisma-typed schema" }, "zodSchemaSuffix": { "type": "string", "default": "ZodSchema", "description": "Suffix appended to the exported name of each plain Zod schema" }, "minimalOperations": { "type": "array", "items": { "type": "string" }, "description": "Overrides which operations minimal mode emits. An escape hatch: unlike `models.*.operations` it applies globally and is not part of the per-model filtering contract." }, "pureModels": { "type": "boolean", "default": false, "description": "Whether to generate pure model schemas" }, "pureModelsLean": { "type": "boolean", "default": true, "description": "Emit lean pure model schemas (no verbose JSDoc/statistics/comments)" }, "pureModelsIncludeRelations": { "type": "boolean", "default": false, "description": "When pureModels is true, include relation fields. Default false (omit relation fields for slimmer models)" }, "pureModelsExcludeCircularRelations": { "type": "boolean", "default": false, "description": "When pureModelsIncludeRelations is true, exclude relation fields that would create circular references. Keeps foreign key fields but omits relation object fields to avoid TypeScript circular dependency errors." }, "naming": { "type": "object", "additionalProperties": false, "description": "Optional naming customization settings (experimental)", "properties": { "preset": { "type": "string", "enum": [ "default", "zod-prisma", "zod-prisma-types", "legacy-model-suffix" ], "description": "Predefined naming preset to apply" }, "pureModel": { "type": "object", "additionalProperties": false, "description": "Overrides for pure model file and symbol naming", "properties": { "filePattern": { "type": "string", "minLength": 3, "maxLength": 80, "description": "Pattern for pure model file names. Tokens: {Model}, {model}, {camel}, {kebab}. Must end with .ts", "pattern": ".*\\.ts$" }, "schemaSuffix": { "type": "string", "minLength": 0, "maxLength": 30, "pattern": "^[A-Z][A-Za-z0-9_]*$|^$", "description": "Suffix appended to schema variable (e.g. Schema). Empty string allowed." }, "typeSuffix": { "type": "string", "minLength": 0, "maxLength": 30, "pattern": "^[A-Z][A-Za-z0-9_]*$|^$", "description": "Suffix appended to inferred type export (e.g. Type). Empty string allowed." }, "exportNamePattern": { "type": "string", "minLength": 0, "maxLength": 80, "description": "Pattern for schema export variable. Tokens: {Model} {model} plus optional suffix tokens {SchemaSuffix}. Defaults derived from schemaSuffix." }, "legacyAliases": { "type": "boolean", "default": false, "description": "Emit deprecated alias exports (e.g. UserModel) for compatibility when preset supplies them." } } }, "schema": { "type": "object", "additionalProperties": false, "description": "Overrides for CRUD operation schema file and symbol naming", "properties": { "filePattern": { "type": "string", "minLength": 3, "maxLength": 80, "description": "Pattern for schema file names. Tokens: {Model}, {model}, {camel}, {kebab}. Must end with .ts", "pattern": ".*\\.ts$" }, "exportNamePattern": { "type": "string", "minLength": 0, "maxLength": 80, "description": "Pattern for schema export variable. Tokens: {Model}, {model}, {Operation}." } } }, "input": { "type": "object", "additionalProperties": false, "description": "Overrides for input object file and symbol naming", "properties": { "filePattern": { "type": "string", "minLength": 3, "maxLength": 80, "description": "Pattern for input file names. Tokens: {Model}, {model}, {camel}, {kebab}, {InputType}. Must end with .ts", "pattern": ".*\\.ts$" }, "exportNamePattern": { "type": "string", "minLength": 0, "maxLength": 80, "description": "Pattern for input export variable. Tokens: {Model}, {model}, {InputType}." } } }, "enum": { "type": "object", "additionalProperties": false, "description": "Overrides for enum file and symbol naming", "properties": { "filePattern": { "type": "string", "minLength": 3, "maxLength": 80, "description": "Pattern for enum file names. Tokens: {Enum}, {enum}, {camel}, {kebab}. Must end with .ts", "pattern": ".*\\.ts$" }, "exportNamePattern": { "type": "string", "minLength": 0, "maxLength": 80, "description": "Pattern for enum export variable. Tokens: {Enum}, {enum}." } } } } }, "dateTimeStrategy": { "type": "string", "enum": [ "date", "coerce", "isoString" ], "default": "date", "description": "How DateTime fields are represented: date (z.date()), coerce (z.coerce.date()), isoString (ISO string validated & transformed)" }, "dateTimeSplitStrategy": { "type": "boolean", "default": true, "description": "When true and dateTimeStrategy is unset, use coerce for input schemas and date for pure/result schemas (split strategy)" }, "jsonSchemaCompatible": { "type": "boolean", "default": false, "description": "Generate schemas compatible with z.toJSONSchema() for API documentation. When enabled, overrides dateTimeStrategy and removes transforms. Trade-off: No runtime type conversion." }, "jsonSchemaOptions": { "type": "object", "properties": { "dateTimeFormat": { "type": "string", "enum": [ "isoString", "isoDate" ], "default": "isoString", "description": "Format for DateTime fields in JSON Schema compatible mode" }, "bigIntFormat": { "type": "string", "enum": [ "string", "number" ], "default": "string", "description": "Format for BigInt fields in JSON Schema compatible mode" }, "bytesFormat": { "type": "string", "enum": [ "base64String", "hexString" ], "default": "base64String", "description": "Format for Bytes fields in JSON Schema compatible mode" }, "conversionOptions": { "type": "object", "additionalProperties": false, "properties": { "unrepresentable": { "type": "string", "enum": [ "throw", "any" ], "default": "any" }, "cycles": { "type": "string", "enum": [ "ref", "throw" ], "default": "throw" }, "reused": { "type": "string", "enum": [ "inline", "ref" ], "default": "inline" } }, "description": "Options forwarded to z.toJSONSchema()" } }, "additionalProperties": false, "description": "Options for JSON Schema compatibility mode" }, "addSelectType": { "type": "boolean", "default": true, "description": "Generate Select schemas. On by default; set false to omit them. Forced off in minimal mode. Generator-block equivalent: isGenerateSelect" }, "addIncludeType": { "type": "boolean", "default": true, "description": "Generate Include schemas. On by default; set false to omit them. Forced off in minimal mode. Generator-block equivalent: isGenerateInclude" }, "strictCreateInputs": { "type": "boolean", "default": true, "description": "When true, Create-like inputs bypass exclusions and strictly match Prisma types" }, "preserveRequiredScalarsOnCreate": { "type": "boolean", "default": true, "description": "When strictCreateInputs is false, keep required non-auto scalars in Create-like inputs even if excluded" }, "inferCreateArgsFromSchemas": { "type": "boolean", "default": false, "description": "Reserved, currently no effect. Intended to let create-operation Args infer types from the generated schemas instead of Prisma.*; the generation pipeline does not read it yet. Create-input shape is controlled by strictCreateInputs and preserveRequiredScalarsOnCreate." }, "globalExclusions": { "type": "object", "additionalProperties": false, "description": "Global field exclusions applied to all models", "properties": { "input": { "type": "array", "items": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$" }, "uniqueItems": true, "description": "Fields to exclude from input schemas globally" }, "result": { "type": "array", "items": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$" }, "uniqueItems": true, "description": "Fields to exclude from result schemas globally" }, "pure": { "type": "array", "items": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$" }, "uniqueItems": true, "description": "Fields to exclude from pure model schemas globally" }, "operations": { "type": "array", "items": { "type": "string", "enum": [ "findMany", "findUnique", "findUniqueOrThrow", "findFirst", "findFirstOrThrow", "create", "createMany", "createManyAndReturn", "update", "updateMany", "updateManyAndReturn", "upsert", "delete", "deleteMany", "aggregate", "groupBy", "count" ] }, "uniqueItems": true, "minItems": 1, "description": "Operations to exclude globally from all models" } } }, "variants": { "description": "Configuration for schema variants: either the built-in pure/input/result object form, or an array of custom variants", "oneOf": [ { "type": "object", "additionalProperties": false, "description": "Built-in variants", "properties": { "pure": { "$ref": "#/definitions/variantConfig", "description": "Pure model schema variant configuration" }, "input": { "$ref": "#/definitions/variantConfig", "description": "Input schema variant configuration" }, "result": { "$ref": "#/definitions/variantConfig", "description": "Result schema variant configuration" } } }, { "type": "array", "description": "Custom variants, one object per emitted variant", "items": { "type": "object", "additionalProperties": false, "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Variant name, used in the emitted file name" }, "suffix": { "type": "string", "description": "Suffix for the emitted file and exported schema name" }, "exclude": { "type": "array", "items": { "type": "string" }, "description": "Field names to omit from this variant" }, "additionalValidation": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Extra Zod chained calls per field name" }, "makeOptional": { "type": "array", "items": { "type": "string" }, "description": "Field names to mark optional in this variant" }, "transformRequiredToOptional": { "type": "array", "items": { "type": "string" }, "description": "Required field names to turn optional" }, "transformOptionalToRequired": { "type": "boolean", "description": "Turn every optional field required in this variant" }, "removeValidation": { "type": "boolean", "description": "Drop field-level validation rules in this variant" } } } } ] }, "models": { "type": "object", "additionalProperties": false, "description": "Per-model configuration options", "patternProperties": { "^[A-Z][a-zA-Z0-9_]*$": { "$ref": "#/definitions/modelConfig", "description": "Model-specific configuration (model names must be PascalCase)" } } }, "zodImportTarget": { "type": "string", "enum": [ "auto", "v3", "v4" ], "default": "auto", "description": "How to import Zod in generated code: 'auto' uses import * as z from 'zod'; 'v3' uses import { z } from 'zod'; 'v4' uses import * as z from 'zod/v4'" }, "zodImportPath": { "type": "string", "description": "Custom module path to import z from instead of 'zod' (e.g. './lib/zod' re-exporting a configured Zod instance with an i18n error map). The binding style still follows zodImportTarget, so the module must export z to match." }, "optionalFieldBehavior": { "type": "string", "enum": [ "optional", "nullable", "nullish" ], "default": "nullish", "description": "How schema-optional fields are wrapped in pure model schemas: optional() (undefined), nullable() (null) or nullish() (both)." }, "decimalMode": { "type": "string", "enum": [ "number", "string", "decimal" ], "default": "decimal", "description": "How Decimal fields are represented: 'decimal' validates Prisma.Decimal instances via helpers, 'number' uses z.number(), 'string' uses z.string()." }, "emit": { "type": "object", "additionalProperties": false, "description": "Per-artifact emission switches. Each defaults to the legacy gating for that artifact (see docs: Emission Controls).", "properties": { "enums": { "type": "boolean", "description": "Emit enum schemas (enums/). Default true." }, "objects": { "type": "boolean", "description": "Emit object/input schemas (objects/). Default true unless suppressed." }, "crud": { "type": "boolean", "description": "Emit CRUD operation argument schemas. Default true unless suppressed." }, "results": { "type": "boolean", "description": "Emit result schemas (results/)." }, "pureModels": { "type": "boolean", "description": "Emit pure model schemas (models/). Mirrors pureModels when unspecified." }, "variants": { "type": "boolean", "description": "Emit variant wrapper schemas (variants/). Default true if any variant is enabled." } } }, "safety": { "type": "object", "additionalProperties": false, "description": "Output-path safety system that prevents the generator from deleting user code (see docs: Safety System).", "properties": { "level": { "type": "string", "enum": [ "strict", "standard", "permissive" ], "default": "standard", "description": "Safety preset: strict blocks warned paths, permissive only warns." }, "enabled": { "type": "boolean", "default": true, "description": "Master switch for all safety checks." }, "allowDangerousPaths": { "type": "boolean", "default": false, "description": "Allow generating into directories with risky names (src, lib, ...)." }, "allowProjectRoots": { "type": "boolean", "default": false, "description": "Allow generating into a directory that looks like a project root." }, "allowUserFiles": { "type": "boolean", "default": false, "description": "Allow cleanup when the output directory contains files that may be user code." }, "skipManifest": { "type": "boolean", "default": false, "description": "Skip writing/reading the generation manifest (disables tracked cleanup)." }, "warningsOnly": { "type": "boolean", "default": false, "description": "Downgrade blocking safety errors to warnings." }, "customDangerousPaths": { "type": "array", "items": { "type": "string" }, "description": "Additional directory names treated as dangerous." }, "customProjectFiles": { "type": "array", "items": { "type": "string" }, "description": "Additional file names that mark a directory as a project root." }, "maxUserFiles": { "type": "number", "description": "Maximum number of possible user files tolerated before blocking cleanup." } } }, "validateWhereUniqueAtLeastOne": { "type": "boolean", "default": false, "description": "Opt-in: add a minimal Zod superRefine to WhereUniqueInput schemas requiring at least one top-level unique selector to be present. Disabled by default." }, "strictMode": { "type": "object", "additionalProperties": false, "description": "Global strict mode configuration for generated Zod schemas", "properties": { "enabled": { "type": "boolean", "default": true, "description": "Global default for strict mode on all schemas (backward compatibility)" }, "operations": { "type": "boolean", "default": true, "description": "Apply strict mode to operation schemas (findMany, create, etc.)" }, "objects": { "type": "boolean", "default": true, "description": "Apply strict mode to object schemas (WhereInput, CreateInput, etc.)" }, "variants": { "type": "boolean", "default": true, "description": "Apply strict mode to variant schemas (pure, input, result)" }, "enums": { "type": "boolean", "default": true, "description": "No effect. Enum schemas are emitted as z.enum(...), which has no strict() to apply. Accepted for backward compatibility" } } } }, "definitions": { "variantConfig": { "type": "object", "additionalProperties": false, "description": "Configuration for a specific schema variant", "properties": { "enabled": { "type": "boolean", "default": true, "description": "Whether this variant should be generated" }, "suffix": { "type": "string", "minLength": 1, "maxLength": 20, "pattern": "^\\.[a-zA-Z][a-zA-Z0-9_]*$", "description": "File suffix for this variant (must start with a dot, e.g., \".model\")" }, "excludeFields": { "type": "array", "items": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$" }, "uniqueItems": true, "description": "Fields to exclude from this variant" }, "partial": { "type": "boolean", "default": false, "description": "Apply .partial() to the generated schema, making all fields optional" }, "strictMode": { "type": [ "boolean", "null" ], "description": "Override strict mode for this variant (null uses global/parent setting)" } } }, "modelConfig": { "type": "object", "additionalProperties": false, "description": "Configuration for a specific Prisma model", "properties": { "enabled": { "type": "boolean", "default": true, "description": "Whether schemas should be generated for this model" }, "operations": { "type": "array", "items": { "type": "string", "enum": [ "findMany", "findUnique", "findUniqueOrThrow", "findFirst", "findFirstOrThrow", "create", "createMany", "createManyAndReturn", "update", "updateMany", "updateManyAndReturn", "upsert", "delete", "deleteMany", "aggregate", "groupBy", "count" ] }, "uniqueItems": true, "minItems": 1, "description": "Which operations to generate schemas for" }, "strictMode": { "type": "object", "additionalProperties": false, "description": "Strict mode configuration for this model", "properties": { "enabled": { "type": [ "boolean", "null" ], "description": "Override global strict mode for this model (null uses global setting)" }, "operations": { "oneOf": [ { "type": "boolean" }, { "type": "array", "items": { "type": "string", "enum": [ "findMany", "findUnique", "findUniqueOrThrow", "findFirst", "findFirstOrThrow", "create", "createMany", "createManyAndReturn", "update", "updateMany", "updateManyAndReturn", "upsert", "delete", "deleteMany", "aggregate", "groupBy", "count" ] }, "uniqueItems": true }, { "type": "null" } ], "description": "Control strict mode for specific operations (boolean for all, array for specific, null for global)" }, "exclude": { "type": "array", "items": { "type": "string", "enum": [ "findMany", "findUnique", "findUniqueOrThrow", "findFirst", "findFirstOrThrow", "create", "createMany", "createManyAndReturn", "update", "updateMany", "updateManyAndReturn", "upsert", "delete", "deleteMany", "aggregate", "groupBy", "count" ] }, "uniqueItems": true, "description": "Operations to exclude from strict mode" }, "objects": { "type": [ "boolean", "null" ], "description": "Override strict mode for object schemas of this model (null uses global setting)" }, "variants": { "type": "object", "additionalProperties": false, "description": "Per-variant strict mode overrides for this model", "properties": { "pure": { "type": [ "boolean", "null" ], "description": "Override strict mode for pure variant of this model" }, "input": { "type": [ "boolean", "null" ], "description": "Override strict mode for input variant of this model" }, "result": { "type": [ "boolean", "null" ], "description": "Override strict mode for result variant of this model" } } } } }, "variants": { "type": "object", "additionalProperties": false, "description": "Variant-specific configuration for this model", "properties": { "pure": { "$ref": "#/definitions/variantConfig", "description": "Pure model variant configuration for this model" }, "input": { "$ref": "#/definitions/variantConfig", "description": "Input variant configuration for this model" }, "result": { "$ref": "#/definitions/variantConfig", "description": "Result variant configuration for this model" } } } } } } }