fixpackにおけるscriptsフィールドのソート

package.jsonをフォーマットしなおしてくれるfixpackを愛用している。ひとつだけ気になるところがあり、それがscriptsフィールドがアルファベット順に並ぶことだ。つまりpre*post*コマンドがその元コマンドと関係ない場所へとまとめられてしまう。

例えばpre*post*コマンドを駆使した場合、fixpackを通すと以下のようになってしまう。

{
  "scripts": {
    "bar": "echo bar",
    "foo": "echo foo",
    "postbar": "echo postbar",
    "postfoo": "echo postfoo",
    "prebar": "echo prebar",
    "prefoo": "echo prefoo"
  }
}

元コマンドのソート順はアルファベット順で構わないが、pre*post*コマンドは元コマンドの前後にあるとわかりやすいはずだ。つまり以下のようになっていると望ましい。

{
  "scripts": {
    "prebar": "echo prebar",
    "bar": "echo bar",
    "postbar": "echo postbar",
    "prefoo": "echo prefoo",
    "foo": "echo foo",
    "postfoo": "echo postfoo"
  }
}

ここのところnpm run-scriptを使い倒してやろうという機運が高まっているため、このように管理しやすい形でソートしてくれると助かる。ということでこういった機能を実装したプルリクエストは投げておいた。


プリフィックス付きの文字列をうまい具合に一発でソートするアルゴリズムをちゃんと探して、2パスではない実装にしたい。