4.1.5 • Published 10 months ago

zod-mysql v4.1.5

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

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()"
  }
}
OptionDescription
tablesFilter the tables to include only those specified.
ignoreFilter the tables to exclude those specified. If a table name begins and ends with "/", it will be processed as a regular expression.
folderSpecify the output directory.
suffixSuffix to the name of a generated file. (eg: user.table.ts)
camelCaseConvert all table names and their properties to camelcase. (eg: profile_picture becomes profilePicture)
nullishSet schema as nullish instead of nullable
requiredStringAdd min(1) for string schema
sslSSL credentials to use when connecting to server.
useDateTypeUse a specialized Zod type for date-like fields instead of string
useTrimUse z.string().trim() instead of z.string()
silentDon't log anything to the console
overrideTypesOverride zod types for specific field types
3.4.3

10 months ago

4.1.4

10 months ago

4.1.3

10 months ago

4.1.5

10 months ago

4.1.0

10 months ago

4.0.0

10 months ago

4.1.2

10 months ago

4.1.1

10 months ago

3.4.2

1 year ago

3.4.1

1 year ago

3.4.0

2 years ago

3.3.0

2 years ago

3.2.0

2 years ago