たまにはTypescriptで書こう → ハマる
ついPythonで書いてしまったのだけれど、GraphQL部分は同じだし、せっかくなのでTypescriptで書いてみようと思ったらハマった話。
何が起きたのか
vulnerabilityAlerts の states が OPEN なものを抽出しようと思ったのだけれど、GraphQLをcodegenしようとしたらstatesなんて知らんと言われてしまった。
vulnerabilityAlerts(last: 100, states: OPEN) {
vulnerabilityAlertsのfilterがエラーになった。
Error 0: GraphQLDocumentError: Unknown argument "states" on field "Repository.vulnerabilityAlerts".
なぜ起きたのか
node_modulesからスキーマのファイル探して確認してみると確かに無い。
APIドキュメントにはあるのにな、というかPythonでは動いてるのだから機能としてはあるんだよな、と思いつついつ頃追加されたものなのか確認したら
2022/02/16にRepositoryVulnerabilityAlertの項目が追加されていた
GraphQL APIのchangelog の日付は2022年2月16日になっている。比較的最近追加されたモノのようだ。
@octokit/graphql-schema の2022年4月17日時点のバージョン10.73.0は7month ago、 GitHubのリポジトリ をみるとv10.73.0リリースタグの日付は2022年10月1日でした。
最近追加されたモノのようだ。
解決する
どういう状態なのだろう?とPRやIssueを見てみると、 fixedAtを追加というPR はあるのだけれど、なぜfixedAtだけ?となる。
Contributeの流儀を確認するのめんどうだなーなんて思いつつREADMEを見ていたら(今か!!)、
Update schema files (GITHUB_TOKEN requires no scope) という記述がありましたよ?
Updateしてみる
forkしてローカルにcloneしてきました。READMEにはnpm updateしろと書いてあるので、
yarn
yarn run update
としましたよ。変更点の中からvulnerabilityAlertsを確認すると、ありますあります。statesありますね。
変更をpushしてから、package.jsonの@octokit/graphql-schemaをforkしたものに差し替えてライブラリ更新後にcodegenし直し → ちゃんとgraphqlのtsファイルを生成できました。
もちろん、statesでfilterできましたとさ。めでたしめでたし