Giper Baza یک پروژهٔ جداگانه و اختیاری است — نه بخشی توکار از $mol. سازندگانش آن را یک پایگاهدادهٔ غیرمتمرکز و پُردسترس با همگامسازیِ بیدرگیریِ بیدرنگ توصیف میکنند: یک انبارِ CRDT که بهصورت محلی پایدار میماند و بدون سرورِ مرکزی میان کلاینتها تکثیر میشود، همراه با امضای دیجیتال و رمزنگاریِ سرتاسری. برای ساختِ یک اپِ $mol هرگز به آن نیاز ندارید؛ تنها زمانی سراغش بروید که چند کلاینت یا دستگاه باید دادهٔ زندهٔ یکسانی را بهاشتراک بگذارند.فقط میخواهید اپتان بدون شبکه هم کار کند؟ آن آفلاینِ ساده است و $mol آن را با یک service worker مدیریت میکند — آفلاین را ببینید. Giper Baza یک گام جلوتر است: همگامسازیِ داده میانِ کلاینتها، نه کشکردنِ داراییِ یک کلاینت.وقتی واقعاً با آن داده را مدل میکنید، موجودیتها مانند ویژگیهای واکنشگرای معمولی به نظر میرسند، و تکثیر خودبهخود رخ میدهد.این صفحه شکلِ API را معرفی میکند. Giper Baza موضوعی بزرگ است — این را یک نقشه در نظر بگیرید، نه تمامِ سرزمین.
یک موجودیت یک طرحوارهٔ خالص است — مجموعهای از فیلدهای نوعدار. رفتار را بیرون نگه دارید؛ خواندن و نوشتن را در نماهایتان انجام دهید.1namespace ${2export class $my_taskextends$giper_baza_entity.with({3Title:$giper_baza_atom_text,4Done:$giper_baza_atom_bool,5CreatedAt:$giper_baza_atom_time,6}){}7}هر فیلد یک اتم است — یک سلولِ همگامشده با یک مقدارِ نوعدار.
انبار را بگیرید، به یک فهرست از موجودیتها برسید و بهصورت واکنشگرا روی آنها map کنید:1@ $mol_mem2tasks(){3return this.tasks_list().remote_list()4}56@ $mol_mem_key7task_done(id:string,next?:boolean){8const task=this.task(id)9if(next!==undefined)task.Done(null)!.val(next)10return task.Done()?.val()??false11}خواندن Done()?.val() مقدار کنونی را میدهد؛ نوشتن Done(null)!.val(next) آن را تنظیم میکند. هر نمایی که آن اتم را میخواند، وقتی خودش — یا یک همتای راهدور — آن را تغییر دهد دوباره رندر میشود.