jsdom 31 با موتور CSS جدید و canvas تازه اومد
خلاصهٔ کاملتر
jsdom (یه پیادهسازی از DOM و APIهای وب برای Node.js که خیلی از تستهای فرانتاند روش اجرا میشن) نسخهٔ 31.0.0 رو منتشر کرده. این نسخه سه تغییر شکننده داره که بعد از ارتقا ممکنه خروجی تستها رو عوض کنن.
تغییر اول مربوط به canvas هست. backend اختیاری canvas و دیکود تصویر از پکیج canvas به @napi-rs/canvas عوض شده. باید @napi-rs/canvas نسخهٔ 1.0.13 یا بالاتر از سری 1.x رو کنار jsdom نصب کنی و نصب canvas تنها دیگه کافی نیست. این backend باینریهای آمادهٔ Skia داره، ولی رندر و بایتهای تصویر ممکنه با قبل فرق کنن. خروجی WebP هم از طریق canvas.toDataURL() و canvas.toBlob() اضافه شده.
تغییر دوم، یه پیادهسازی یکپارچهٔ جدید برای پارس CSS، تطبیق selectorها و computed styleهاست که هم پشتیبانی خیلی بیشتری داره و هم selector queryها و خوندنهای پشتسرهم استایل سریعتر شدن. حالا cascade layers، nesting، @scope، @property، attr() تایپدار، if() و استایلدهی shadow tree با :host و ::slotted() و ::part() پشتیبانی میشن. computed styleها هم با تغییر DOM زنده میمونن، ولی serialization و مقادیر محاسبهشده ممکنه با نسخههای قبل فرق کنن.
تغییر سوم اینه که پارس HTML و XML حالا پشت اسکریپتهای blocking صبر میکنه تا منابعشون آماده بشن. یعنی JSDOM و JSDOM.fromURL() و JSDOM.fromFile() ممکنه سندی برگردونن که هنوز کامل پارس نشده. برای درخت کامل باید منتظر DOMContentLoaded یا رویداد load پنجره بمونی، و اول document.readyState رو چک کنی که شاید رویداد قبلاً اجرا شده باشه.
کنار اینا کلی رفع باگ هم اومده. رویداد load صفحه حالا فقط روی window اجرا میشه، پس باید از window.addEventListener("load", ...) استفاده کنی نه document. window.reportError() اضافه شده، یه نشت حافظه که از v28.0.0 پنجرههای بسته رو نگه میداشت رفع شده، و رفتار focus و document.write() هم به استاندارد نزدیکتر شده.
نکات کلیدی:
- برای canvas حالا باید @napi-rs/canvas نسخهٔ 1.0.13 به بالا (سری 1.x) نصب بشه و canvas قدیمی دیگه کار نمیکنه.
- موتور جدید CSS از cascade layers، nesting، @scope، @property و adoptedStyleSheets پشتیبانی میکنه.
- JSDOM.fromURL() و JSDOM.fromFile() ممکنه سند نیمهکاره برگردونن؛ قبلش document.readyState رو چک کن.
- رویداد load صفحه دیگه روی document اجرا نمیشه و فقط روی window هست.
- نشت حافظهٔ مربوط به request interceptorها که از v28.0.0 بود رفع شده.




