zod-mysql
TypeScript icon, indicating that this package has built-in type declarations

3.4.2 • Public • Published

zod-mysql

Generate Zod interfaces from MySQL database

This was a fork of mysql-zod but it diverged so much we decided to make it a separate project and publish it to npm.

Installation

Install zod-mysql with npm

npm install zod-mysql --save-dev

Usage/Examples

Create user table:

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL COMMENT '@zod{z.string().min(10).max(255)}', -- this will override the type 
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `profile_picture` varchar(255) DEFAULT NULL,
  `role` enum('admin','user') NOT NULL,
  PRIMARY KEY (`id`)
);

Use the zod-mysql API:

import { generate } from 'zod-mysql'

await generate({
  host: '127.0.0.1',
  port: 3306,
  user: 'root',
  password: 'secret',
  database: 'myapp',
})

The generator will create a user.ts file with the following contents:

import z from 'zod'

export const user = z.object({
  id: z.number().nonnegative(),
  name: z.string().min(10).max(255),
  username: z.string(),
  password: z.string(),
  profile_picture: z.string().nullable(),
  role: z.enum(['admin', 'user']),
})

export const insertable_user = z.object({
  name: z.string().min(10).max(255),
  username: z.string(),
  password: z.string(),
  profile_picture: z.string().nullable(),
  role: z.enum(['admin', 'user']),
})

export const updateable_user = z.object({
  name: z.string().min(10).max(255),
  username: z.string(),
  password: z.string(),
  profile_picture: z.string().nullable(),
  role: z.enum(['admin', 'user']),
})

export const selectable_user = z.object({
  id: z.number().nonnegative(),
  name: z.string().min(10).max(255),
  username: z.string(),
  password: z.string(),
  profile_picture: z.string().nullable(),
  role: z.enum(['admin', 'user']),
})

export type userType = z.infer<typeof user>
export type InsertableUserType = z.infer<typeof insertable_user>
export type UpdateableUserType = z.infer<typeof updateable_user>
export type SelectableUserType = z.infer<typeof selectable_user>

Config

{
  "host": "127.0.0.1",
  "port": 3306,
  "user": "root",
  "password": "secret",
  "database": "myapp",
  "tables": ["user", "log"],
  "ignore": ["log", "/^temp/"],
  "folder": "@zod",
  "suffix": "table",
  "camelCase": false,
  "nullish": false,
  "requiredString": false,
  "ssl": {
    "ca": "path/to/ca.pem",
    "cert": "path/to/cert.pem",
    "key": "path/to/key.pem"
  },
  "useTrim": false,
  "useDateType": false,
  "silent": false,
  "overrideTypes": {
    "tinyint": "z.boolean()"
  }
}
Option Description
tables Filter the tables to include only those specified.
ignore Filter the tables to exclude those specified. If a table name begins and ends with "/", it will be processed as a regular expression.
folder Specify the output directory.
suffix Suffix to the name of a generated file. (eg: user.table.ts)
camelCase Convert all table names and their properties to camelcase. (eg: profile_picture becomes profilePicture)
nullish Set schema as nullish instead of nullable
requiredString Add min(1) for string schema
ssl SSL credentials to use when connecting to server.
useDateType Use a specialized Zod type for date-like fields instead of string
useTrim Use z.string().trim() instead of z.string()
silent Don't log anything to the console
overrideTypes Override zod types for specific field types

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 3.4.2
    37
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 3.4.2
    37
  • 3.4.1
    0
  • 3.4.0
    0
  • 3.3.0
    0
  • 3.2.0
    0

Package Sidebar

Install

npm i zod-mysql

Weekly Downloads

37

Version

3.4.2

License

MIT

Unpacked Size

10.5 kB

Total Files

5

Last publish

Collaborators

  • thelinuxlich