Joi
オブジェクトのバリデーション用の javascript ライブラリ。
https://github.com/hapijs/joi
Joi 自体は node.js 用だが、ブラウザ用のjoi-browser
というものある。
https://github.com/jeffbski/joi-browser
導入
yarn add joi
yarn add -D @types/joi
TypeScript で使う
joi-browser には型定義ファイルがないが、joi の型定義を(ほぼ?)そのまま使えるようなので、TypeScript で使う場合は代わりに joi の型定義を使うように設定すると型の恩恵が得られる。
インストール:
yarn add joi-browser
yarn add -D @types/joi
tsconfig.json
にパスのエイリアスを設定する。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
/* joi-browserの型定義がないので代わりにjoiの型定義を使う */
"joi-browser": ["node_modules/@types/joi/index.d.ts"]
}
}
}
これで、import
できる。
import Joi from "joi-browser";
tsconfig.json
の設定をしない場合は、次のようにrequire
するしかない。
// 型の恩恵は得られない
const Joi = require("joi-browser");
使い方
スキーマを定義する
詳しくはここを参照。
Joi | API Reference
export const noteInsertedSchema = Joi.object().keys({
// 数値型
a: Joi.number() // 数値または数値に変換可能な文字列
.integer() // 整数
.min(0)
.max(127)
.required(),
// 文字列型
b: Joi.string().required()
// 配列
// Array<string | number>
c: Joi.array().items(Joi.string(), Joi.number())
// 他のプロパティの値によってスキーマを分岐する
b: Joi.array()
.when('a', {
is: 1,
then: Joi.array().items(Joi.string()),
})
.when('a', {
is: 2,
then: Joi.array().items(Joi.number()),
})
// uuid
uuid: Joi.string().uuid({ version: 'uuidv4' }),
});