🚀

OpenAPI 定義からyup定義を生成するRust製CLIを作ってみた

2022/10/30に公開

https://github.com/igtm/openapi-yup-generator

OpenAPIv3の定義ファイルからyupのバリデーション定義を自動生成してくれるCLIを作ってみました

使い方

openapi-yup-generator -f openapi3.yaml -o yup-defs.js

すると以下のようなjsファイルが生成される

/* tslint:disable */
/* eslint-disable */
//DO NOT EDIT MANUALLY

import { object, string, number, date, array, bool } from 'yup';

export const LightingSummary = object({
  zones: array().of(object({
    id: string(),
    name: string(),
    deviceId: number().integer(),
    deviceType: string(),
    zone: string(),
  })),
  zoneStatus: array().of(object({
    id: string(),
    name: string(),
    lastUpdate: date(),
    level: number().integer(),
  }).label('the status of the lighting zone.')),
}).label('ok');

export const LightingZone = object({
  id: string(),
  name: string(),
  deviceId: number().integer(),
  deviceType: string(),
  zone: string(),
});

インストール方法

brew install igtm/tap/openapi-yup-generator

作った背景

最近APIにgoa、FrontにReact(Typescript)、FrontのAPIまわりは openapi-generator-cliで自動生成させる構成をよくとっていました。
ただ、SPAを採用するとAPIとFrontの2重でバリデーション定義を管理しないといけないのが辛いので、openapi3.yamlからyupの定義ができたら良いなと思い、今回Rustの勉強も兼ねて作ってみました。

yupでよく使う定義は対応したつもりですが、これも使いたいなどあれば気軽にissue/PR化していただければなと思います。

Discussion