bouzuya.hatenablog.com

ぼうずやのにっき

bouzuya/bath 2.x をつくっている

今日は bouzuya/bath の 2.x をつくっていた。

path-to-regexp の機能から不要なものを削って自前で実装する。実行イメージは次のような感じ。

import * as assert from 'assert';
import { params } from 'bath/params';

const p1 = params('/users/{id}');
assert.deepEqual(p1('/users/123'), { id: '123' });
assert.deepEqual(p2('/users/abc'), { id: 'abc' });

const p2 = params('/users/{id}', { id: /^\d+$/ });
assert.deepEqual(p2('/users/123'), { id: '123' });
assert.deepEqual(p2('/users/abc'), null);

2.x で考えている path-to-regexp との違いは次のとおりだ。

  • regexp を強調しない
  • path と template + params の相互変換への配慮
  • template + path -> params な params と template + params -> path な path を必要な側だけ import できる
  • template を RFC 6570 の level 1 に近づけている

同じで言うと、 router における path との match に使う点だろうか。ぼくのほうは逆に path を構築する用途にも使うつもりだけど。