Nxdom Framework

Nusantara eXtreme Development Object Model — dokumentasi resmi

NX.Storage() — App.js & route

Pola pemakaian Storage di template route, hubungannya dengan endpoint di App.js, serta worker, cache, dan buckets (federated)

Diagram alur kerja NX.Storage

Muat skrip & inisialisasi global

nxdom.js mengimpor Storage dari NexaStorage.js, menempelkannya ke window.NX.Storage, lalu App.js membuat NX.Page sehingga NEXA.apiBase dan endpoint terisi.

Satu pemanggilan NX.Storage() di route

Dari templates/*.js, satu panggilan NX.Storage() membaca NEXA.apiBase, userid, lalu memakai worker/cache (jika aktif di App.js) untuk api / package / models / buckets, dll.

Berkas utama (referensi cepat)

Berkas Peran untuk Storage
index.html Memuat nxdom.js lalu App.js; kontainer #main.
assets/modules/nxdom.js Menempelkan Storage ke NX.
App.js NX.Page({ endpoint, webWorker, … }).
assets/modules/Buckets/NexaStorage.js Implementasi Storage().
assets/modules/Buckets/NexaFederated.js Dipakai buckets() untuk federasi penyimpanan.

Hubungan dengan endpoint (App.js)

endpoint: { url: "http://localhost:8001", urlApi: "http://localhost:3000", typicode: "https://jsonplaceholder.typicode.com/posts", },

Setelah NX.Page: NEXA.url, NEXA.apiBase, NEXA.typicode, snapshot NEXA.endpoint, dan NEXA.firebaseConfig (jika ada) dipakai Storage dan buckets. typicode adalah URL absolut untuk Storage().get(NEXA.typicode).

1. Storage().api(row, body) — POST ke API base

const res = await NX.Storage().api("test", { title: "Halo", slug: "halo" });

POST ke {NEXA.apiBase}/test; body + userid otomatis bila sesi mengizinkan.

2. Storage().get(NEXA.typicode) — GET ke URL dari endpoint

const res2 = await NX.Storage().get(NEXA.typicode);

GET ke URL penuh (bukan path relatif ke NEXA.apiBase).

3. Storage().package().method() — chain paket ke controller PHP

const Storage = await NX.Storage().example().news({ news: 1 });

Nama paket memetakan ke controller PHP; method dipanggil di server dengan payload terenkripsi.

4. Storage().models("ClassPhp", { method, params }) — model PHP langsung

const data1 = await NX.Storage().models("News", { method: "data", params: ["demo"], });

params harus array yang urutannya cocok dengan parameter method di PHP.

5. Storage().models("User").byAvatar(1) — chaining ke model PHP

const data2 = await NX.Storage().models("User").byAvatar(1);

6. Storage().model("news").select("*").get() — query builder tabel SQL

const complexQuery = await NX.Storage() .model("news") .select("*") .get();

model (tunggal) = nama tabel SQL, bukan class PHP. Berbeda dari models("News", …) yang memanggil class model PHP.

7. Storage().buckets(config) — Federated (database / IndexedDB / Firebase)

Membungkus NexaFederated lewat Storage(). Implementasi: NexaFederated.js.

Argumen config

Field utama: id (metadata nexaStore), settings.storage (database | indexedDB | firebase), key untuk indexedDB/Firebase, dan bentuk query untuk mode database. Singkatan: buckets("demo") sama dengan buckets({ id: "demo" }).

Objek yang dikembalikan

Method: get, set, del, upt, getRealtime, analysis, federated — lihat tabel lengkap di Storage.md.

Mode penyimpanan

  • database — via models("Office").executeOperation + worker/cache seperti Storage lain.
  • indexedDB — data di bucketsStore (DB NX).
  • firebase — perlu endpoint.firebaseConfig di App.js.

Konfigurasi Firebase (firebaseConfig)

Objek Firebase Web (apiKey, authDomain, databaseURL, projectId, …) di dalam endpoint; disalin ke NEXA.firebaseConfig oleh syncNexaEndpoints. Tanpa ini, operasi bucket Firebase mengembalikan skipped: true.

Contoh ringkas

const h = NX.Storage().buckets({ id: "demo", settings: { storage: "indexedDB" }, key: 261760199266386, }); await h.set({ name: "dantrik" }); const local = await h.get({ limit: 50 });

Realtime Firebase (getRealtime)

Untuk storage: "firebase", getRealtime(data, callback) memakai watch RTDB; mengembalikan fungsi stop() untuk unsubscribe. Mode lain memakai polling ~5 detik. Detail payload callback ada di Storage.md.

Metadata nexaStore vs fallback

Jika NX.ref.get("nexaStore", id) ada data, dipakai sebagai konfigurasi; jika null, NexaFederated memakai config yang Anda kirim ke buckets(...).

Web Worker & cache respons (App.js)

webWorker: { enabled: true, storage: true, indexedDB: true, storageCacheTtlMs: 86400000, debug: false, },

Memengaruhi fetch/cache Storage (termasuk cabang database di buckets). Ini terpisah dari lapisan metadata nexaStore / bucketsStore. Request Firebase tidak dipindahkan ke Web Worker.

Ringkasan alur data

App.js endpoint → NEXA.url, NEXA.apiBase, NEXA.typicode, … ↓ Route template → NX.Storage().api / .get / .package / .models / .model / .buckets ↓ NexaStorage.js (+ NexaModels, NexaFederated)

Untuk routing SPA dan endpoint lengkap, lihat panduan NXDOM; untuk IndexedDB (NX.ref).