On this page
Overview
Stores normalized record-review decisions through native storage or app-scoped local fallback.
- Artifact
RecordReviewStore.js· esm - Classification
public first party - Availability
Browser/native hybrid - Normalization
Complete records preserved; unreadable stored content fails observably.
Import and lifecycle
import * as module from '/arcane/modules/RecordReviewStore.js';
Construction initializes memory only. load/set use an injected adapter, Arcane.storage, or app-scoped localStorage; set() persists the whole normalized map and timestamps the changed review.
Application-facing behavior: Event/error constants, default store, record/review normalizers; load(), get(), set(), snapshot(), state-free EventTarget/on change compatibility, and dispose().
Protocol and host implementation
Arcane.storage or localStorage + per-realm globalThis.arcaneEvents authority This detail does not widen the application-facing API or grant authority.
Exports, signatures, parameters, and results
| Binding | Form | Declaration or signature | Parameter syntax |
|---|---|---|---|
RECORD_REVIEW_STORE_ERROR_CODES | variable · value | variable RECORD_REVIEW_STORE_ERROR_CODES | — |
RECORD_REVIEW_STORE_EVENT_TYPES | variable · value | variable RECORD_REVIEW_STORE_EVENT_TYPES | — |
normalizeRecordId | function | function normalizeRecordId(value='') | value='' |
normalizeReview | function | function normalizeReview(value={}) | value={} |
default | default · class | class RecordReviewStore extends EventTarget | — |
| Callable | Kind | Exact public signature | Parameter syntax |
|---|---|---|---|
RecordReviewStore.load | public-member | async load(options={}) | options={} |
RecordReviewStore.get | public-member | get(recordId) | recordId |
RecordReviewStore.set | public-member | async set(recordId,value={},options={}) | recordId,value={},options={} |
RecordReviewStore.snapshot | public-member | snapshot() | — |
| Member | Kind | Exact public declaration | Parameter syntax |
|---|---|---|---|
RecordReviewStore.constructor | constructor | constructor({namespace='records',adapter=null}={}) | {namespace='records',adapter=null}={} |
RecordReviewStore.addEventListener | method | addEventListener(type,listener,options) | type,listener,options |
RecordReviewStore.removeEventListener | method | removeEventListener(type,listener,options) | type,listener,options |
RecordReviewStore.on | method | on(type,listener,options) | type,listener,options |
RecordReviewStore.dispatchEvent | method | dispatchEvent(value) | value |
RecordReviewStore.load | async method | async load(options={}) | options={} |
RecordReviewStore.get | method | get(recordId) | recordId |
RecordReviewStore.set | async method | async set(recordId,value={},options={}) | recordId,value={},options={} |
RecordReviewStore.snapshot | method | snapshot() | — |
RecordReviewStore.dispose | method | dispose() | — |
RecordReviewStore.destroy | method | destroy() | — |
Parameter meanings and results
normalizeRecordId(value) returns a trimmed id. normalizeReview(value) returns {status,classification,attributes,notes,updatedAt}. new Store({namespace='records',adapter?}); load() resolves a snapshot; get(id) returns a normalized review; set(id,patch) resolves the persisted review; snapshot() returns a record-map copy.
Events, side effects, and errors
Source-literal CustomEvent dispatches
No source-literal CustomEvent dispatch is part of this artifact.
Lifecycle and event flow
- record-review-change with {recordId,review}
Direct coded failures
This artifact directly assigns no stable coded failure.
Exported Error subclasses
This artifact exports no Error subclass.
Documented failure behavior
- TypeError for invalid id.
- Unreadable stored records fail with ARCANE_RECORD_REVIEW_STORED_RECORDS_INVALID instead of becoming an empty store.
- Native/local/injected storage failures propagate.
Availability and capabilities
Browser/native hybrid. Complete records preserved; unreadable stored content fails observably.
Native load uses storage.read; set uses storage.write. localStorage fallback has no Core authority.
Contract example
import RecordReviewStore from '/arcane/modules/RecordReviewStore.js';
let saved = {};
const store = new RecordReviewStore({adapter:{
async get(){return saved},
async set(value){saved=value}
}});
await store.load();
console.log(await store.set('A1000',{status:'reviewed',notes:'Checked.'}));