edgedb-zod
edgedb-zod is a code generator for Zod schemas from your EdgeDB database schema.
2 types of schemas will be generated:
Create: All properties excluding link propertiesUpdate: All properties excluding link and readonly properties
CLI
To run the CLI: edgedb-zod [options]
Currently the supported options are:
--outputDir: The output directory relative from youredgedb.toml--target ts|mts: If set tomtswill include.jsin import statements
Supported features
| Feature | Status |
|---|---|
| Most scalars | |
| Ranges | |
| Arrays, tuples | |
| Union types | |
| Abstract objects | |
| Overloaded properties | |
| Regex constraints | |
| Min, max constraints | |
| Custom validators | |
| Property annotations |
Example output
Partial output of edgedb-zod/modules/default.ts:
// #region default::User
export const CreateUserSchema = z.
object({ // default::HasTimestamps
createdAt: z.date().optional(), // std::datetime
updatedAt: z.date().optional(), // std::datetime
})
.extend({ // default::User
name: z.string(), // std::str
emailAddress: z.string().regex(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/), // std::str
password: z.string(), // std::str
});
export const UpdateUserSchema = z.
object({ // default::HasTimestamps
updatedAt: z.date().optional(), // std::datetime
})
.extend({ // default::User
name: z.string(), // std::str
emailAddress: z.string().regex(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/), // std::str
password: z.string(), // std::str
});
// #endregion