2日遅れで Deno Advent Calendar 2019 の記事を書いています。
はじめに
ちなみにJSConf JP 2019で改めてDenoに興味が湧き、触った感じではベースは慣れているTypeScriptが好ましかったです。
しっかり設計されていればNodeで書かれていたWeb APIのコードを移行には困らない優等生の印象なのでネタに困りました。
denolib/awesome-denoを眺めていたところValidatorライブラリがないことが気が付きました。
Validatorは地味ではありますが、Web APIを作るときにはあるととても便利です。
Denoの周辺ツールに慣れるためにもValidatorライブラリを作ってみました。
https://github.com/nana4gonta/validator
(突貫で作ったのでREADMEは後ほど書きます。。)
実装まわり
- 特定のフレームワークには依存したくない
- APIは必要最低限にしたい
- (できれば)バリデーションのみしたい
以上から@angular/formsのコードを参考にしています。
結果的には実装順が逆になりましたが、pattern
関数で正規表現を使いつつ、バリデーション関数のショートハンドと、独自関数が実装できれば大体のバリデーションはできるという想定です。
自分がAngularでフォームバリデーションをする際にもそのあたりの感覚があったため、@hapi/joiも悪くはなかったのですがAPIが多かったり、メソッドチェーンが好きになれなかった気持ちもあります。
Denoまわり
Validatorライブラリを作りましただけだとTypeScriptの話になるのでDenoの話も。
実際に触ったのは deno fmt
のサブコマンドや std/testing
のライブラリです。
deno fmt
は最初何が使われるか分からなかったのですが、内部的にはPrettierと触り慣れているツールで設定しやすいのはよかったです。
このあたりPrettierは使いつつも設定は隠蔽してフォーマットは強制してもよかったのでは、とはちょっと思いました。
std/testing
のライブラリはシンプルで使いやすいライブラリでした。
やっぱりstdに色々集約されているのはいいですね。
今回は別実装で済ませましたが、早くcryptoライブラリも欲しいことです。
まとめ
改めてDeno向けにValidatorライブラリを作りました。
今後はArrayやObjectに対応し、リクエストボディをそのままバリデーションかけられるようにしたいと思います。
2020年はNodeとDenoをもっとやっていくぞ!!!