In-Memory Database
TTL, conditional updates, and version history
Ownership and transitions
History lookup first chooses the latest processed version at or before the queried time, then tests only that version for expiration. Searching backwards for any unexpired value wrongly resurrects overwritten content. Deletions append tombstones, and equal-timestamp reads select the last processed write. Version append is amortized O(1); binary search can make lookback O(log history), while scans visit known fields and sort names.
JavaScript boundaries
Use native classes with per-instance state and plain object/array snapshots. Object assignment shares a reference; copy retained inputs and every outward mutable container, including nested arrays. null means absence. Map handles arbitrary string keys safely, including "__proto__"; do not confuse a missing key with zero or an empty string. Domain validation uses RangeError. Numeric inputs must satisfy Number.isSafeInteger, so booleans, fractions, infinities, and NaN are invalid where an integer is required. All documented aggregate results and timestamp-plus-duration sums fit the safe-integer range. Strings use exact case-sensitive equality; lexical order compares JavaScript UTF-16 code units. Calls are serialized and synchronous.
const internal = ["initial"];
const snapshot = [...internal];
snapshot.length = 0;
console.assert(internal.length === 1);A detached snapshot protects ownership; the service still has to validate and commit a coherent transition.
Put it into practice
Implement the exercise in a full-screen workspace, then run its tests.