Client/server Data Strategy

オープン
#38 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
明確に書かれている
活発さ
静か
技術スタック
typescript

調査の方向性

Start by reading the kernel's current in-process pipeline and ADR-0002; this issue names no implementation files or tests. Check blockers #28 and #37 before beginning. Done means both strategies produce identical output, delegatable stages use the specified serializable transport requests and server handlers, and clipping and layout remain client-side.

索引モデルが issue の本文から書いたものです。

説明

enhancement

Parent

https://github.com/TanStack/time/issues/25

What to build

Add a pluggable `strategy` option to the kernel (inspired by AG Grid's row model). In `'client'` mode all pipeline stages run in-process. In `'server'` mode the delegatable stages — recurrence-expand, conflict-detect, slot-generation — run server-side via the same isomorphic Validation Core; the client receives materialized results and only runs clip-to-viewport and layout.

The consumer's calendar API is identical in both modes. The observable output (`Day[]`, event layout, conflict arrays) must match regardless of which strategy is active.

This is computation push-down, not just data-sourcing. The boundary is serializable for free because ADR-0002 restricts all public types to native `Date`, `YYYY-MM-DD` strings, and plain objects — no Temporal instances, no class instances.

The kernel emits a serializable operation request per delegatable stage (e.g. `{ op: 'expandRange', range, events, config }`). This request is also the TanStack Query key, so caching and invalidation require no extra plumbing. The consumer provides a `transport` function that forwards the request to their endpoint, which calls the matching server-side handler from `@tanstack/time-server`.

In `'client'` mode advisory and authoritative validation collapse — the client is the only validator. In `'server'` mode the client runs advisory checks; the server is authoritative.

Acceptance criteria

  • `createCalendar({ strategy: 'client' })` behaves identically to the current in-process behaviour
  • `createCalendar({ strategy: 'server', transport })` forwards delegatable stages to the consumer's `transport` function
  • `transport` receives a serializable operation request and returns a plain-object result; it owns the fetch/RPC/auth
  • The operation request object is stable and suitable as a TanStack Query `queryKey`
  • `@tanstack/time-server` exports a handler per delegatable operation that the consumer's endpoint calls
  • Given the same event data, `strategy: 'client'` and `strategy: 'server'` (with a mock transport) produce identical `Day[]` output
  • Clip-to-viewport and layout always run client-side regardless of strategy

Blocked by

https://github.com/TanStack/time/issues/28
https://github.com/TanStack/time/issues/37

主要言語
TypeScript
スター
620
フォーク
6
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

TanStack/time のほかの issue

TanStack/time の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。