Client/server Data Strategy
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 25/100
- Tipo de issue
- Funcionalidade
- Clareza
- Claramente especificada
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- typescript
- Domínio
- backend-api-design
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Linguagem predominante
- TypeScript
- Estrelas
- 620
- Forks
- 6
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de TanStack/time
-
Dependency DashboardAberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 5/100
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 32/100
-
enhancement
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
-
Undo/redo moduleAbertaenhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
Todas as issues de TanStack/time
Issues semelhantes
-
unwrapDatabaseError masks real DB errors with TypeError: Cannot convert object to primitive valueAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
NEARBuilders/everything-dev#798 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
vercel-labs/durable-harness#53 ·
Mantenedores costumam responder em até 1 dia
-
[Bug]: Redesign tab bars ignore clicks on Linux: hidden chat layers keep window drag regionsTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
experiência: a doc manda subir para o Micro do Supabase, mas não diz que exige plano pago nem quanto custaTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertaarea/docs area/ui enhancement
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
melgarafael/DeskcommCRM#4098 ·
Mantenedores costumam responder em até 1 dia
-
dependencies platform: ios
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 78/100
software-mansion/react-native-executorch#1617 ·
Mantenedores costumam responder em até 1 dia