thank-you-starsで利用しているnpmパッケージに気軽にスターを送る

先週、こういうツイートを見て、

共感したのでサクッと作った。

github.com

package.jsonと同じディレクトリで実行するだけで、depsとdevDepsのパッケージのGitHubリポジトリにスターできる。 事前にパーソナルトークンをホームディレクトリに保存しておく必要があるけど、その辺はREADMEを読んでくれ。

依存に入れて使っているということは、それなりに恩恵を受けているということなので、問答無用でスターを送ってしまって良いと思う。 孫依存のパッケージにも送るか迷ったけど、npm的にそこ含めると一気に数が膨れてしまうのでやめた。

これでみんなももりもりスターを送ろう!


package.jsonに関する知見

これだけの単純なパッケージながら多少の知見が得られたので共有。

package.jsonの正規化はnormalize-package-data

package.jsonのrepositoryプロパティは、正規形は

{type: "git", url: "git@github.com:facebook/react.git"}

のようなオブジェクト型だけど、文字列型でfacebook/reactなどの特殊形も認められていて扱いがめんど臭い。 npmの中で使っているパッケージを調べたらこれだったので同じものを使った。

これによって、typeとurlのあるオブジェクト型に統一される。他のプロパティも一通り正規化できるし、オプションによってバリデートも可能なので、package.jsonを扱うときに必要なら使うと良い。

Git repositoryの情報抽出はhosted-git-info

repositoryプロパティがオブジェクト型に統一されても、gitのURLにはssh, git, httpsというプロトコルの種類だけでなく、npmが認めているGitHub, Gist, BitBucket, GitLabなどの特殊な省略形式があって、これまた扱いが面倒。npmの内部ではこれを使っている。

これによって、URLをパースしてサービス、ドメイン、ユーザー、プロジェクトを抽出するだけでなく、各種プロトコル用のURLやinfo.bugs()GitHub IssuesのURLを生成できたりして、非常に便利。package.json以外の用途でもGitHubいじるときに使えそう。