localspace؛ جانشین مدرن localForage
خلاصهٔ کاملتر
به گفتهٔ سازنده، خیلی از اپها هنوز به API آشنای localForage تکیه دارن، ولی دلشون تایپ قویتر، ارگونومی async و پایداری بیشتر میخواد بدون اینکه مجبور بشن همهچی رو بازنویسی کنن. localspace دقیقاً برای پر کردن همین شکاف ساخته شده: قرارداد قدیمی رو نگه میداره ولی زیرش تایپهای TypeScript، async/await بومی، پاکسازی مطمئن IndexedDB و یه معماری درایور تمیز داره. چرا از نو نوشتن بهجای fork؟ به گفتهٔ نویسنده، شروع از صفر اجازه داده بدهی فنی حذف بشه، در حالی که سازگاری API حفظ میمونه.
کار باهاش شبیه localForage ولی تایپداره؛ همون setItem/getItem آشنا، منتها با جنریک:
import localspace from 'localspace';
interface User { name: string; role: string; }
await localspace.setItem('user', { name: 'Ada', role: 'admin' });
const user = await localspace.getItem<User>('user');چندتا امکان فراتر از localForage هم داره. با setItems/getItems میتونی چندتا آیتم رو توی یه تراکنش IndexedDB بنویسی یا بخونی، با createInstance نمونههای ایزوله بسازی، و یه حالت آزمایشی «coalesced writes» هست که نوشتنهای تککلیدی پشتسرهم رو توی یه پنجرهٔ کوتاه (مثلاً ۸ میلیثانیه) با هم یکی میکنه؛ حالتهای سازگاری strong و eventual هم برای کنترل تازگی خوندن داره.
از نظر پلتفرم انعطاف داره. ترتیب پیشفرض درایورها IndexedDB بعد localStorage ـه و درایور حافظه فقط با انتخاب صریح خودت وارد میشه تا خطای ذخیرهسازی پنهون نمونه. روی React Native هم با تزریق AsyncStorage کار میکنه و خروجیهاش شامل ESM، CommonJS، UMD و فایلهای .d.ts ـه.
یه سیستم افزونهٔ آماده هم داره: TTL برای انقضای خودکار، رمزنگاری با AES-GCM از طریق Web Crypto، فشردهسازی برای مقادیر بزرگ، همگامسازی چندتب با BroadcastChannel و افزونهٔ سهمیه که با حذف LRU جلوی پر شدن فضا رو میگیره.
نکات کلیدی:
- سازگار با API localForage ولی بازنویسیشده با TypeScript و async/await
- عملیات دستهای، نمونههای ایزوله و نوشتنهای ادغامشدهٔ آزمایشی
- سقوط درایور IndexedDB → localStorage → حافظه و پشتیبانی React Native
- افزونههای TTL، رمزنگاری، فشردهسازی، همگامسازی چندتب و سهمیه




