[Data.ByteString.Lazy.ByteString]この広告は、90日以上更新していないブログに表示しています。2018-12-17bs-winstonを作ろうとする過程1winstonjsありますよね。jsのlogライブラリ。github.comBuckleScriptから使いたくなりません?というわけで、作りながら書いていきます。今回は作る過程を描く感じで完成してpublishはしないです。2READMEを読めばぼんやり使い方はわかると思うので、まずはtsの型定義から見ていきます。https://github.com/winstonjs/winston/blob/master/index.d.tscreateLoggerに色々オプションを渡すとLoggerが出てくる感じです。optionで、これがかなり胆になってきます。number;}objectで表現されたMap<string,number>型なんですが、winstonはこれのkey情報を使ってmeta的にLoggerにmethodを生やしてきます。1,}というオプションを渡せばlogger.hogeやlogger.fugaみたいなmethodが生えるわけですが、それに対して型をつけるのは厳しいのでその部分は諦めますただ、どのlevelがlogに使えるかやどのlevel以上のlogを出力するかというオプションに関わってくるので上のlevelsオプションは作る必要があります。2logに使うlevelを文字列で渡す方法がありますが、そんな安全じゃない方法は取りたくないので今回はそれにうまく制約をつけていきます。"message"みたいな感じなれば嬉しいですねただ、どのようなlevelが使えるかというところはカスタマイズできるように作れるようにします。jsConverter]こういう感じにしていきます。上記から本来はlevelsオプションを生成したいわけですがそれはmetaプロになっちゃってきついのです。あとlevelの順序を定義する必要もあります。Debug]そしてここからlevelsを生成できます。3そういえばFFIの部分を書いてなかったので書いていきます。[@@bs.send]これはもうこんな感じとしかいえないですね。4あとは組み合わせると一旦は動くのですが、levelのカスタマイズができません。entryendこうすることでLogLevelを実装すればいい感じのLoggerモジュールができる設計になります。`Debugend)SyslogLoggerはこのように生成できます。levelにも対応することできます。levelが設定できるのですが一旦TODOにしました。optionのFFIを書くのがちょっと骨が折れるのでこれもTODOにしています。月別アーカイブはてなブログをはじめよう!hiroqnさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。