Tasks
1. DataFetcher クラスの内部構造変更
- [x] 1.1 コンストラクタに
indexTtl オプション(デフォルト 30,000ms)を追加する
- [x] 1.2 プライベートフィールド
#indexCache({ data, timestamp } 形式)を追加する
- [x] 1.3 プライベートフィールド
#sessionCache(Map<string, Result> 形式)を追加する
- [x] 1.4 プライベートフィールド
#inflight(Map<string, Promise> 形式)を追加する
2. 重複排除メカニズムの実装
- [x] 2.1
#fetchJson(url) に inflight チェックを追加し、同一 URL の進行中 Promise を返す
- [x] 2.2 新規 fetch の Promise を
#inflight に登録し、解決後に削除する処理を追加する
3. index.json の TTL ベースキャッシュ実装
- [x] 3.1
fetchIndex() で TTL 内キャッシュヒット時にキャッシュから返却する処理を追加する
- [x] 3.2 TTL 超過時またはキャッシュ未設定時に新規リクエストを発行しキャッシュを更新する処理を追加する
- [x] 3.3 失敗レスポンス(
ok: false)をキャッシュに保存しないようにする
4. セッション JSON の永続キャッシュ実装
- [x] 4.1
fetchSession() でキャッシュヒット時に #sessionCache から返却する処理を追加する
- [x] 4.2 成功レスポンスを
#sessionCache に保存する処理を追加する
- [x] 4.3 失敗レスポンスをキャッシュに保存しないようにする
5. テストの追加
- [x] 5.1 TTL 内キャッシュヒットのテストを追加する(fetch が 1 回のみ呼ばれることを検証)
- [x] 5.2 TTL 超過後のキャッシュミスのテストを追加する(
vi.advanceTimersByTime を使用)
- [x] 5.3 失敗レスポンスが非キャッシュであるテストを追加する
- [x] 5.4 セッション JSON の永続キャッシュのテストを追加する
- [x] 5.5 異なる sessionId がキャッシュミスになるテストを追加する
- [x] 5.6 同時リクエストの重複排除テストを追加する(同一 URL の並行呼び出しで fetch が 1 回のみ)
- [x] 5.7 異なる URL は重複排除されないテストを追加する
- [x] 5.8 コンストラクタの
indexTtl カスタム値テストを追加する
- [x] 5.9 公開 API の後方互換性テストを追加する(戻り値の型検証)
6. 検証
- [x] 6.1
pnpm test で全テストがパスすることを確認する
- [x] 6.2
pnpm run lint でエラーがないことを確認する
- [x] 6.3
pnpm run build でビルドが成功することを確認する