Feedsmith 3.0: پارسر و سازندهٔ فید برای جاوااسکریپت
خلاصهٔ کاملتر
Feedsmith یه کتابخونهٔ جاوااسکریپته برای خوندن (parse) و ساختن (generate) فید. از RSS (نسخههای 0.9x و 2.0)، Atom (0.3 و 1.0)، RDF (0.9 و 1.0)، JSON Feed (1.0 و 1.1) و فایلهای OPML (یعنی همون فایلهایی که لیست اشتراکهای فید رو نگه میدارن) پشتیبانی میکنه. نسخهٔ 3.0 تازه منتشر شده و چندتا breaking change داره، برای همین کسایی که روی 2.x هستن باید راهنمای مهاجرت رو ببینن.
حرف اصلی سازندهها اینه که Feedsmith ساختار اصلی فید رو دقیقاً همونطور که تو استاندارد هر فرمت تعریف شده نگه میداره. خیلی از کتابخونههای دیگه سعی میکنن داده رو یکدست کنن. مثلاً author و dc:creator و creator رو تو یه فیلد میریزن، dc:date و pubDate رو بدون اینکه بگن از کجا اومده قاطی میکنن، یا از چندتا atom:link فقط اولی یا آخری رو نگه میدارن. این کار برای یه نگاه سریع خوبه، ولی اطلاعاتی که بعضی برنامهها لازم دارن (مثل دادههای namespaceهای خاص) از دست میره.
namespace یعنی پیشوندهایی مثل itunes: یا media: که فیلدهای اضافه به فید اضافه میکنن. Feedsmith بیشتر از ۳۰ تا namespace رو پشتیبانی میکنه، از Dublin Core و Media RSS گرفته تا iTunes، Podcast Index، Spotify، YouTube و GeoRSS. اگه یه فید پیشوند غیراستاندارد بذاره، Feedsmith اونو به پیشوند استاندارد برمیگردونه؛ مثلاً custom:creator تو خروجی میشه dc.creator.
کتابخونه با فیدهای واقعی و نامرتب هم کنار میاد. فیلدهای قدیمی رو به معادل جدیدشون تبدیل میکنه، به بزرگی و کوچیکی حروف حساس نیست، آدرسهای غیررسمی namespace (مثل نسخهٔ HTTPS یا اسلش آخر) رو قبول میکنه و از فیدهای خراب یا ناقص هم هرچی دادهٔ درست هست بیرون میکشه. یعنی لازم نیست خودت برای هر فید عجیبغریب کد جدا بنویسی.
از نظر فنی، با TypeScript نوشته شده و برای هر فرمت و namespace تایپ کامل داره، ولی با جاوااسکریپت ساده هم کار میکنه. tree-shakable هم هست، یعنی فقط بخشهایی که استفاده میکنی تو باندل نهایی میاد. هم روی Node.js کار میکنه هم تو مرورگرهای جدید، و بیشتر از ۴۰۰۰ تست با پوشش ۹۹ درصدی داره.
نکات کلیدی:
- نسخهٔ 3.0 منتشر شده و نسبت به 2.x تغییرات ناسازگار داره.
- هم parse و هم generate برای RSS، Atom، JSON Feed و OPML؛ ساختن فید RDF هنوز تو برنامهست.
- بیشتر از ۳۰ namespace مثل iTunes، Podcast Index، Spotify و Media RSS پشتیبانی میشه.
- فیلدهایی مثل author و dc:creator جدا میمونن و قاطی نمیشن.
- بیشتر از ۴۰۰۰ تست و ۹۹ درصد code coverage، روی Node.js و مرورگر.




