Uppy 6.0 با پلاگین S3 بازنویسیشده
خلاصهٔ کاملتر
تیم Uppy تو اعلان نسخهٔ ۶ میگه این ریلیز بیشتر حموم بردن سگ خونهست تا یاد دادن حقهٔ جدید: کد تمیز شده، نه اینکه کلی فیچر اضافه شده باشه. شش پکیج نسخهٔ major گرفتن، ولی اگه از پکیج یکجای uppy یا باندل CDN استفاده میکنی، تقریباً هیچ کاری لازم نداری. بقیه باید سراغ راهنمای مهاجرت برن.
بزرگترین تغییر، بازنویسی کامل @uppy/aws-s3 ـه. قبلاً باید تا هشت تا کالبک مثل signPart و createMultipartUpload رو پیاده میکردی و هیچجا هم مشخص نبود کدومش به دردت میخوره؛ به گفتهٔ تیم، خیلیها ترکیبی مینوشتن که منطقی به نظر میرسید ولی بیسروصدا کار نمیکرد. حالا فقط سه حالت امضا هست و دقیقاً یکی رو انتخاب میکنی: getCredentials (امضا سمت کلاینت با SigV4)، signRequest (امضاکنندهٔ خودت) یا companionEndpoint (امضا با Companion).
new Uppy().use(AwsS3, {
s3Endpoint: 'https://my-bucket.s3.eu-west-1.amazonaws.com',
region: 'eu-west-1',
getCredentials: async () => fetch('/s3-credentials').then((r) => r.json()),
});مهمتر اینکه Companion و اصلاً خود AWS دیگه توی مسیر داده اجباری نیستن، پس Cloudflare R2 و MinIO و DigitalOcean Spaces بدون کد اختصاصی کار میکنن. کلی باگ قدیمی هم بسته شده: retry با backoff، منقضی شدن credential، تشخیص آفلاین بودن و شرایط رقابتی pause/resume وسط آپلود چندتکه. حالا تستها روی یه MinIO واقعی توی CI اجرا میشن نه mock، و چند تا از همین باگها اونجا لو رفتن.
چهار پکیج @uppy/utils، @uppy/store-default، @uppy/companion-client و @uppy/provider-views دیگه جدا منتشر نمیشن و کدشون به شکل subpath export داخل @uppy/core اومده. دلیلش فقط مرتبکاری نبوده: اینها زیردست همهٔ پلاگینها بودن و lockfile مرتب یه نسخهٔ قدیمی ازشون رو پین میکرد، بعد کاربر فقط میدید «Uppy خرابه» در حالی که دو نسخه از @uppy/utils توی درخت وابستگیها بود.
- import { fetcher } from '@uppy/utils'
+ import { fetcher } from '@uppy/core/utils'بقیهٔ تغییرها هم کم نیستن. @uppy/transloadit وضعیت assembly (یعنی همون کار پردازشی که روی فایل آپلودشده اجرا میشه) رو توی state پلاگین میذاره تا UI پیشرفت خودت رو بسازی، و فیلد lastAssemblyStatus نمیذاره بین دو آپلود صفحه خالی بشه. @uppy/golden-retriever متادیتای فایلها رو توی IndexedDB نگه میداره تا آپلودهای بزرگ که قبلاً به سقف localStorage میخوردن هم قابل بازیابی باشن. توکن OAuth در Companion حالا روی WebSocket جابهجا میشه که تغییر شکنندهایه و باید هر دو سمت رو با هم آپدیت کنی.
نکات کلیدی:
- پلاگین @uppy/aws-s3 از صفر بازنویسی شده و بهجای هشت کالبک، سه حالت امضا داره: getCredentials، signRequest و companionEndpoint
- Companion و AWS دیگه توی مسیر داده اجباری نیستن؛ R2، MinIO و DigitalOcean Spaces بدون کد اختصاصی کار میکنن
- چهار پکیج جانبی داخل @uppy/core ادغام شدن تا باگ نسخهٔ تکراری توی lockfile از بین بره
- @uppy/instagram حذف شد چون API اینستاگرام از ۲۰۲۴ خاموش شده، و Companion هم حالا روی Express 5 اجرا میشه
- برای امنیت زنجیرهٔ تأمین، پکیجها باید حداقل ۷ روز عمر داشته باشن تا Yarn نصبشون کنه و هر GitHub Action روی SHA پین شده




