2017-03-01 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 を構築する用途にも使うつもりだけど。