ریلی v21: پشتیبانی رسمی از TypeScript و React Server Components
خلاصهٔ کاملتر
Relay v21.0.0 یه نسخهی بزرگه که چند تغییر اساسی داره. مهمترین خبر اینه که پشتیبانی رسمی از TypeScript به صورت فایلهای .d.ts مستقیماً داخل پکیجهای relay-runtime و react-relay اضافه شده. یعنی دیگه نیازی به نصب @types/relay-runtime از DefinitelyTyped نداری و ایمپورتهای named در فایلهای .mjs هم حالا درست کار میکنن.
کاربران Flow یه کار واجب دارن: سینتکس تولید تایپ کاملاً مدرن شده. کستهای قدیمی (expr: Type) جای خودشون رو به (expr as Type) دادن (نیاز به Flow نسخه ۰.۲۵۰ یا بالاتر داری)، $ReadOnlyArray تبدیل به ReadonlyArray شده، mixed به unknown و $NonMaybeType به NonNullable تغییر پیدا کرده. بعد از آپگرید، باید کامپایلر Relay رو دوباره اجرا کنی تا همه آرتیفکتها دوباره تولید بشن.
دو تغییر شکنندهی دیگه هم هستن که مهمن: اول اینکه دایرکتیو @live_query کلاً حذف شده — اگه از polling استفاده میکردی باید به @client_polling(interval: ...) بری و برای آپدیتهای push از سرور هم باید از @live استفاده کنی. دوم اینکه سینتکس قدیمی Relay Resolvers دیگه پشتیبانی نمیشه؛ تگهای مستندات مثل @onType، @fieldName و @RelayResolver حذف شدن و جاشون رو به @relayField و @relayType دادن. کامپایلر میتونه این مهاجرت رو با دستور relay-compiler codemod fix-all خودکار انجام بده.
یه قابلیت جدید جالب هم اضافه شده: @oneOf حالا تایپ دقیقتری تولید میکنه — به جای یه آبجکت با همه فیلدهای اختیاری، یه discriminated union میسازه که فقط اجازه میده یه فیلد در هر بار ست بشه. این باگهایی رو که قبلاً سایلنت بودن حالا در زمان کامپایل میگیره. همچنین دایرکتیو @catch الان روی فیلدهای @connection و client edge هم کار میکنه.
React Server Components (آزمایشی): یه entry point جدید با نام react-relay/rsc_EXPERIMENTAL اضافه شده که API هایی مثل serverFetchQuery، serverReadFragment و serverPreloadQuery + useQueryFromServer رو در اختیار میذاره. این APIها برای واکشی دادههای GraphQL در server components طراحی شدن ولی هنوز آزمایشیان و احتمالاً در نسخههای بعدی تغییر میکنن.
از نظر باگفیکسهای مهم، یه stack overflow که روی اسکیماهای خیلی بزرگ (با بیش از ۱۰۰۰ فیلد) اتفاق میافتاد برطرف شده، مشکلات پایداری watch mode در کامپایلهای افزایشی بهتر شده، و کامپایلر دیگه فیلدهای @match متناقض رو درست شناسایی و گزارش میکنه.
نکات کلیدی:
- پشتیبانی مستقیم TypeScript در relay-runtime و react-relay — نیازی به @types/relay-runtime نیست
- کاربران Flow باید بعد از آپگرید حتماً کامپایلر رو دوباره اجرا کنن
- دایرکتیو @live_query حذف شده؛ جایگزین: @client_polling یا @live
- سینتکس قدیمی Relay Resolvers حذف شده؛ مهاجرت با relay-compiler codemod fix-all
- API آزمایشی برای React Server Components از طریق react-relay/rsc_EXPERIMENTAL
- @oneOf حالا discriminated union دقیقتر تولید میکنه




