TanStack DB 1.0 RC1 اومد؛ تست با oracle به جای unit test
خلاصهٔ کاملتر
TanStack DB یه فریمورک دادهی واکنشی سمت کلاینته که رکوردهای API یا sync engine رو به collectionهای تایپدار تبدیل میکنه. کامپوننتها روی این collectionها کوئری زنده میزنن و ویرایشهای optimistic (یعنی تغییری که قبل از جواب سرور روی صفحه نشون داده میشه) فوری دیده میشن. حالا بعد از 18 ماه، نسخهی 1.0 RC1 اومده و به گفتهی تیم، API پایدار و آمادهی production هست.
از نسخهی 0.6 به این طرف، server rendering و ادغام با TanStack Start اضافه شده، adapterهایی برای Neon Realtime و Convex اومده و Preact هم ششمین فریمورک پشتیبانیشدهست. DB رو میشه قدمبهقدم آورد: از REST API و TanStack Query فعلی شروع میکنی و بعداً persistence محلی، mutationهای آفلاین یا sync زنده اضافه میکنی. پکیج @tanstack/db الان هفتهای بیش از یه میلیون دانلود داره و Prisma Studio و داشبورد Unkey ازش استفاده میکنن.
بخش اصلی مقاله دربارهی oracleهاست، یعنی یه مرجع مستقل که میگه رفتار درست چیه. نویسنده توضیح میده که unit test فقط جواب یه مثال خاص رو نگه میداره. property-based testing (یعنی تولید هزاران ورودی تصادفی و چک کردن یه قانون روی همهشون) یه قدم جلوتره، ولی oracle خودش جواب درست رو برای هر ورودی حساب میکنه. مثلاً برای این کوئری زنده که ده تسک باز با بیشترین اولویت رو برمیگردونه:
const topTasks = createLiveQueryCollection((q) =>
q
.from({ task: tasks })
.where(({ task }) => eq(task.completed, false))
.orderBy(({ task }) => task.priority, 'desc')
.orderBy(({ task }) => task.id, 'asc')
.limit(10),
)oracle یه مدل ساده با Map جاوااسکریپت داره که تسکها رو از اول فیلتر و مرتب میکنه و دهتای اول رو جدا میکنه. همون تغییرات به DB واقعی و به مدل داده میشه و بعد از هر batch، نتیجهها باید دقیقاً یکی باشن. یعنی ایجنت میتونه الگوریتم کوئری رو کامل عوض کنه و oracle چک میکنه رفتاری که قولش داده شده سالم مونده. برای sync از سرور به کلاینت هم خود Postgres نقش oracle رو بازی میکنه.
یه نمونهی واقعی: کاربری گزارش داد که حذف و درج دوبارهی یه key تو یه دور event loop باعث میشد subscriber پیام insert رو نگیره. بعد از fix، یه oracle اضافه شد که میگه subscriber با اعمال همهی پیامها باید به همون ردیفهای خوندن مستقیم برسه. وقتی قانون سختتر شد (insert فقط برای key غایب، update و delete فقط برای key موجود)، 26 تا از 378 کیس شکست خوردن و fix نهایی حتی کد رو کوچیکتر کرد.
نویسنده میگه الان 211 فایل تست oracle تو 15 پکیج دارن و تو این چند ماه حدود 420 هزار خط تست اضافه شده. برای طراحیهای سخت، اول مدل رو با TLA+ (یه زبان formal verification) میسازه و بعد به oracle تایپاسکریپتی تبدیلش میکنه. به قول خودش oracleها مثل «جرثقیل» برای ایجنتها هستن و تأثیرشون از هر ارتقای مدلی که دیده بیشتر بوده.
نکات کلیدی:
- TanStack DB 1.0 RC1 بعد از 18 ماه توسعه منتشر شده و APIش پایدار اعلام شده.
- Preact ششمین فریمورک پشتیبانیشدهست و adapterهای Neon Realtime و Convex هم اضافه شدن.
- پکیج @tanstack/db هفتهای بیش از یه میلیون دانلود npm داره.
- DB الان 211 فایل تست oracle تو 15 پکیج داره و حدود 420 هزار خط تست بهش اضافه شده.
- تیم داره تستهای مثالمحور رو کامل با oracle عوض میکنه و قراره با lint جلوی اضافه شدن تست مثالمحور جدید رو بگیره.




