Client/server Data Strategy

Offen
#38 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
25/100
Issue-Typ
Feature
Klarheit
Klar beschrieben
Aktivitätsstatus
Ruhig
Tech-Stack
typescript

Rechercherichtung

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.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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

Vorherrschende Sprache
TypeScript
Sterne
620
Forks
6
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus TanStack/time

Alle Issues in TanStack/time

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.