Valibot v1.4: تبدیل فرمت رشتهها و بهبود پرفورمنس
خلاصهٔ کاملتر
Valibot یه کتابخانه اعتبارسنجی (validation) برای TypeScript/JavaScript هست که این روزها محبوبیت زیادی پیدا کرده. نسخه ۱.۴ این کتابخانه چند قابلیت جدید و مهم داره که باهم نگاهشون میکنیم.
تبدیل فرمت نامگذاری رشتهها یکی از مهمترین اضافههای این نسخهست. چهار اکشن جدید toCamelCase، toKebabCase، toPascalCase و toSnakeCase اضافه شدن. این اکشنها روی جداکنندههایی مثل _، -، فاصله، و مرزهای حروف بزرگ/کوچک کار میکنن و بدون نیاز به پیشپردازش روی انواع ورودیها درست عمل میکنن.
const SlugSchema = v.pipe(v.string(), v.toKebabCase());
v.parse(SlugSchema, 'My Blog Post'); // 'my-blog-post'
v.parse(SlugSchema, 'getUserByID'); // 'get-user-by-id'
v.parse(SlugSchema, 'first_name'); // 'first-name'این قابلیت مخصوصاً سر مرزهای API خیلی به درد میخوره؛ مثلاً وقتی میخوای فیلدهای فرم رو قبل از ذخیره نرمالسازی کنی یا کلیدهای JSON ورودی رو به فرمت مناسب سرویس داخلیت تبدیل کنی.
قابلیت جدید دیگه اکشن isoDateTimeSecond هست. قبلاً isoTimestamp نیاز به timezone داشت و isoDateTime فقط تا دقیقه (hh:mm) اعتبارسنجی میکرد. این اکشن جدید اون شکاف رو پر میکنه و تاریخ-زمانهای محلی که شامل ثانیه هستن ولی timezone ندارن رو قبول میکنه — مثل 1995-03-31T00:00:00. برای رویدادهای محلی، برنامهریزیها، یا ستونهای timestamp without time zone در PostgreSQL خیلی کاربردیه.
در بخش بهبود پرفورمنس، مسیرهای داغ اعتبارسنجی (hot validation paths) حالا آبجکتهای کمتری تخصیص میدن، و یه باگ قدیمی RangeError که موقع spread کردن آرایههای بزرگ issue رخ میداد رفع شده. علاوه بر این، typeهای داخلی مربوط به object و record سادهسازی شدن و در پروژههای بزرگ سرعت type inference و autocomplete در TypeScript به طور محسوسی بهتر شده.
از نظر سازگاری (compatibility) هم تغییراتی داشتیم: target بیلد به ES2020 تغییر کرده تا با محیطهایی که سینتکس جدیدتر رو پشتیبانی نمیکنن سازگار بمونه. همچنین Object.hasOwn که ES2022 هست با Object.prototype.hasOwnProperty.call جایگزین شده. بهعلاوه اسکیمای intersect دیگه مقادیر ورودی رو mutate نمیکنه، یعنی آبجکتها و آرایههای freezeشده رو هم میتونه بدون مشکل پردازش کنه.
نکات کلیدی:
- چهار اکشن جدید برای تبدیل فرمت نامگذاری:
toCamelCase،toKebabCase،toPascalCase،toSnakeCase - اکشن
isoDateTimeSecondبرای اعتبارسنجی تاریخ-زمان محلی بدون timezone - کاهش تخصیص حافظه در مسیرهای داغ و رفع باگ
RangeError - بهبود سرعت type inference و autocomplete در TypeScript
- تغییر target بیلد به ES2020 و حذف وابستگی به
Object.hasOwn - رفع باگ mutation در اسکیمای
intersect




