Kernel + module registration API

未關閉
#28 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
5/5
預估耗時
一週以上
新手友好度
25/100
Issue 類型
功能
描述清晰度
基本清楚
活躍度
冷清
技術堆疊
typescript

研究方向

Start with the parent issue #25 and resolve the stated blocker, issue #27, before taking this on. The issue names no files or tests; use its acceptance criteria to define and verify the kernel, module contract, typed registration, and Calendar factory, including that unused modules tree-shake and navigation recomputes the projection.

由索引模型根據 Issue 內容生成。

描述

enhancement

Parent

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

What to build

Define and implement the feature-agnostic kernel and the module registration contract. This is the architectural centrepiece of v1: a small, stateful core that owns the event collection, viewport, and date-range projection, extended by opt-in modules whose unused code tree-shakes away.

The kernel owns: event collection, viewport (current period + view mode), navigation, the date-range projection (events → occurrences mapped to the visible range), and plain create/edit/remove. Nothing domain-specific (no availability, recurrence, dependencies, drag, or undo) lives in the kernel itself.

Modules attach via two ordered pipelines with kernel-defined stages and per-module priority within a stage:

  • Read pipeline: `recurrence-expand → clip-to-viewport → layout`
  • Write pipeline: `recurrence-materialize → dependency-transform → availability-validate → commit → undo-snapshot/emit`

Stage order is fixed and kernel-defined. A module declares which stage(s) it participates in and a numeric priority — it does not run in registration order. Writes are committed as atomic batches so undo/redo and devtools observe one logical action.

The Calendar product is a convenience factory that wires the kernel with the recurrence, drag-resize, and availability modules pre-registered.

Acceptance criteria

  • `createCalendar({ modules: [...], strategy: 'client' })` constructs a kernel instance
  • A module is a plain object declaring `{ stage, priority, ... handlers }` — no class required
  • Unused modules do not appear in the production bundle (verified via bundle analysis or import tracing)
  • The kernel exposes `getRequiredRange(write)` returning the date range needed to validate the write; it does not fetch
  • The kernel exposes `rollback(batch)` to reverse an atomic write batch
  • `getDaysWithEvents()` returns `Day[]` with `Day.date` as `YYYY-MM-DD` (per #27)
  • Navigation (`goToNext`, `goToPrevious`, `goToToday`, `goToSpecificPeriod`) updates the viewport and recomputes the projection
  • The Calendar product factory (`createCalendar`) is exported and produces a kernel pre-configured with core Calendar modules
  • TypeScript: module registration is fully typed; a module with wrong stage/priority shape is a compile error

Blocked by

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

主要語言
TypeScript
星號
620
分支
6
PR 合併指標
30 天內沒有已合併 PR

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

TanStack/time 的其他 Issue

查看 TanStack/time 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。