commitizen の format をカスタマイズできるアダプターを作った

cz-format-extension をリリースした。
cz-format-extension

経緯

commitizen/cz-cliの format は自分で作ることが可能だが、そこを容易にしてくれる
cz-customizableが使いにくく、内部で使われているパッケージのバージョンが古いのでセキュリティ的な面で心配があったので、camcam_lemonと一緒につくろうってなった。

使い方

セットアップに関してはUsageを参照。
.czferc.jsという config ファイルに諸々設定を書いていく。

module.exports = {
  questions({inquirer, gitInfo}) {
    return [
      {...},
      {...},
    ]
  },
  commitMessage({answers, gitInfo}) {
    return ...
  }
}

questions

Inquirer.jsの prompt 関数の引数に渡す質問項目を返す。
cz-cli は cz-conventional-changelog など、アダプターを作り際に Inquirer.js のインスタンスを渡してくれている。
引数 inquirer には、そのインスタンスをそのまま渡しているので、new inquirer.Separator()とか使うことができる。
引数 gitInfo には、git-repo-infoで取得できる git の meta 情報が渡ってくる。この情報で条件分岐なんかも可能になる。

commitMessage

最終的なメッセージとなる文字列を返す。
引数 answers には、questions の結果のオブジェクトが渡ってくる。
引数 gitInfo は、questions のそれと同じ。

config ファイル向けの型を提供してる
JSDocs で書けば、エディタによっては補完してくれるはず。
VSCode ではできる。

終わりに

2 年前にフロントエンドエンジニアになりたて、JS 何もわからないって状態のときに、なにか npm パッケージ作りたいなってなってたときに作り出したパッケージで、そのあと 2 年弱寝かせてしまった。
先週やるかーってなって、すっと TS で書き直して一気に作れたので、成長を感じている。
types の置き場所未だに迷う。