https://github.com/thomasthiebaud/fastify-schema-to-typescript
Convert JSON schema to typescript so your types always match Fastify validation
https://github.com/thomasthiebaud/fastify-schema-to-typescript
fastify jsonschema openapi swagger typescript
Last synced: 24 days ago
JSON representation
Convert JSON schema to typescript so your types always match Fastify validation
- Host: GitHub
- URL: https://github.com/thomasthiebaud/fastify-schema-to-typescript
- Owner: thomasthiebaud
- License: mit
- Created: 2020-06-11T17:28:30.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-12-08T13:42:00.000Z (5 months ago)
- Last Synced: 2025-03-25T23:51:19.584Z (about 1 month ago)
- Topics: fastify, jsonschema, openapi, swagger, typescript
- Language: TypeScript
- Homepage:
- Size: 1.38 MB
- Stars: 12
- Watchers: 2
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# fastify-schema-to-typescript
## How to install?
```sh
npm i -D fastify-schema-to-typescript
```## How to use?
Running `npx fastify-schema-to-typescript` will convert all `schema.json` files in `src` to `schema.ts`.
You can then import `schema.ts` directly```ts
import { RouteGeneric, schema } from "./schema";const options = {
schema: {
params: schema.params,
body: schema.body,
response: schema.response,
},
};app.get("/healthcheck", options, async () => {
return { ok: true };
});
```More options are available
```sh
npx fastify-schema-to-typescript -hUsage: fastify-schema-to-typescript [options]
Options:
-g, --glob glob matching JSON schema to convert (default: "src/**/schema.{json,yaml,yml}")
-p, --prefix prefix to use before interfaces' name (default: "")
-e, --ext file extension to use for generated files (default: ".ts")
-m, --module module to import the RouteHandler type from (default: "fastify")
-h, --help display help for command
```## Project example
Here is a project structure that I'm usually using with that module.
Each endpoint has a folder with a `schema.yaml` and `index.ts````
package.json
src/
app.ts
api/
healthcheck/
index.ts
schema.yaml
anotherEndpoint/
index.ts
schema.yaml
...
```Running `npx fastify-schema-to-typescript` will convert `schema.yaml` to `schema.ts` that you can then import in your apps like that
app.ts
```ts
import fastify from "fastify";
import { healthcheck } from "./api";export async function run() {
const app = fastify();
await app.register(healthcheck);await app.listen(3000);
}run();
```api/index.ts
```ts
export * from "./healthcheck";
```api/healthcheck/schema.yaml
```yml
headers:
type: object
properties: ...body:
type: object
properties: ...query:
type: object
properties: ...params:
type: object
properties: ...
```api/healthcheck/index.ts
```ts
import { FastifyPluginAsync } from "fastify";
import { RouteGeneric, schema } from "./schema";export const getHealthcheck: FastifyPluginAsync = async (app) => {
app.get("/healthcheck", { schema }, async () => {
return { ok: true };
});
};
```I usually add the following in my package.json so I'm sure the code is in sync with the schemas
package.json
```
...
"scripts": {
...
"build": "npm run clean && npm run generate && npm run compile",
"compile": "tsc",
"clean": "rimraf dist",
"generate": "npx fastify-schema-to-typescript",
...
}
```and I also update `.gitignore` to not include the generated `schema.ts`
.gitignore
```
...
schema.ts
...
```