Capability first · transport second

RecordReviewStore.js

Stores normalized record-review decisions through native storage or app-scoped local fallback.

SDK 0.5.18Runtime 0.8.12Protocol arcane/1
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

JavaScript
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

BindingFormDeclaration or signatureParameter syntax
RECORD_REVIEW_STORE_ERROR_CODESvariable · valuevariable RECORD_REVIEW_STORE_ERROR_CODES
RECORD_REVIEW_STORE_EVENT_TYPESvariable · valuevariable RECORD_REVIEW_STORE_EVENT_TYPES
normalizeRecordIdfunctionfunction normalizeRecordId(value='')value=''
normalizeReviewfunctionfunction normalizeReview(value={})value={}
defaultdefault · classclass RecordReviewStore extends EventTarget
CallableKindExact public signatureParameter syntax
RecordReviewStore.loadpublic-memberasync load(options={})options={}
RecordReviewStore.getpublic-memberget(recordId)recordId
RecordReviewStore.setpublic-memberasync set(recordId,value={},options={})recordId,value={},options={}
RecordReviewStore.snapshotpublic-membersnapshot()
MemberKindExact public declarationParameter syntax
RecordReviewStore.constructorconstructorconstructor({namespace='records',adapter=null}={}){namespace='records',adapter=null}={}
RecordReviewStore.addEventListenermethodaddEventListener(type,listener,options)type,listener,options
RecordReviewStore.removeEventListenermethodremoveEventListener(type,listener,options)type,listener,options
RecordReviewStore.onmethodon(type,listener,options)type,listener,options
RecordReviewStore.dispatchEventmethoddispatchEvent(value)value
RecordReviewStore.loadasync methodasync load(options={})options={}
RecordReviewStore.getmethodget(recordId)recordId
RecordReviewStore.setasync methodasync set(recordId,value={},options={})recordId,value={},options={}
RecordReviewStore.snapshotmethodsnapshot()
RecordReviewStore.disposemethoddispose()
RecordReviewStore.destroymethoddestroy()

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

JavaScript
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.'}));