1.2.0 • Published 2 years ago
zodtyping v1.2.0
zodtyping
Generate zod from static types & JSON schema.
Instructions
Install
npm install zod
npm install -D zodtyping
Use from the command line
Create a file, in the root of your project, called "zodtyping.yml".
# zodtyping.yml targetFile: src/other-zod.ts # The file to create zodtypeFormat: {type}Zt # Optional: use a custom name format for the created zod type typeFormat: {type}Type # Optional: use a custom name format for the created type sourceTypes: exportStaticType: true # Optional: export static types as well (true by default) file: src/types.ts # The file where your type lives type: Foo # The type you want to convert to a zod type
You can also specify a list of target files, if you want to create more than one:
# zodtyping.yml - targetFile: src/other-zod.ts sourceTypes: file: src/types.ts type: Foo - targetFile: src/zod.ts sourceTypes: # Source types can also be a list - file: src/types.ts type: Foo - file: json/my-json-schema.json # You can even use JSON schema files!! type: [ExampleType, AnotherExampleType] # You may use an array of types
Then run:
npx zodtyping
Use from a script
Basic example:
import { Generator } from 'zodtyping'
const generator = new Generator({
targetFile: 'src/zod.ts',
// optional: runtypeFormat / typeFormat (see above)
})
generator
.generate([
{ file: 'src/types.ts', type: 'Foo' },
{ file: 'json/my-json-schema.json', type: 'ExampleType' },
])
.then((file) => file.save())
Passing a custom tsconfig file
const generator = new Generator({
targetFile: 'src/zod.ts',
tsConfigFile: '/path/to/tsconfig.json',
})
Passing a custom ts-morph project (for the internal compiler)
(see generate.ts for the defaults)
import { Project } from 'ts-morph'
const generator = new Generator({
targetFile: 'src/zod.ts',
project: new Project({
// ...
}),
})
Contributing
- Install Yarn
- Link your workspace
yarn
- If using VSCode, be sure to accept the workspace TypeScript version
- If using another editor, install the Yarn SDK for it (and commit with your PR)
Thanks
Inspired by a gist by skurfuerst.