mirror of
https://github.com/morluto/rea.git
synced 2026-11-15 19:23:24 +00:00
fix(environment): own JSON fields across capture, state and replay
This commit is contained in:
1 parent
cc5a96933a
commit
e54bf1006e
57 files changed
+1019
-389
No files matched your search
@@ -1,6 +1,7 @@
|
||||
import { jsonTextCodeUnits } from "../jsonSerialization.js";
|
||||
import type { JsonValue } from "../jsonValue.js";
|
||||
import {
|
||||
ownMember,
|
||||
isObject,
|
||||
locateItem,
|
||||
at,
|
||||
@@ -103,7 +104,7 @@ export const clockEvidence = (
|
||||
draft: WriteDraft,
|
||||
field: string,
|
||||
): JsonValue | undefined =>
|
||||
draft.fixedWidth.get(field) ?? draft.observed?.[field];
|
||||
draft.fixedWidth.get(field) ?? ownMember(draft.observed, field);
|
||||
|
||||
/** A write observation plus the fields its selected read view actually covers, if any. */
|
||||
type UpdateObservation = Observed & {
|
||||
@@ -599,8 +600,8 @@ export const updateEntity = (
|
||||
(rule) =>
|
||||
recordedGeneratedValue(
|
||||
rule,
|
||||
entity.fields[rule.field],
|
||||
after.object[rule.field],
|
||||
ownMember(entity.fields, rule.field),
|
||||
ownMember(after.object, rule.field),
|
||||
),
|
||||
referencedIn(context),
|
||||
);
|
||||
@@ -663,7 +664,7 @@ const fitUpdateClocks = (
|
||||
return rule;
|
||||
const format = fittedClockFormat(
|
||||
rule.format,
|
||||
after[rule.field],
|
||||
ownMember(after, rule.field),
|
||||
clockEvidence(draft, rule.field),
|
||||
);
|
||||
return format === undefined ? rule : { ...rule, format };
|
||||
@@ -682,7 +683,10 @@ const fitUpdateClocks = (
|
||||
const held = planned.get(rule.field);
|
||||
return rule.rule === "clock" &&
|
||||
held?.rule === "clock" &&
|
||||
matchesClockFormat(held.format, readClock(after[rule.field]))
|
||||
matchesClockFormat(
|
||||
held.format,
|
||||
readClock(ownMember(after, rule.field)),
|
||||
)
|
||||
? { ...rule, format: held.format }
|
||||
: rule;
|
||||
}),
|
||||
@@ -710,7 +714,7 @@ const contradictsGeneratedClock = (
|
||||
)
|
||||
)
|
||||
return false;
|
||||
const previous = readClock(before[rule.field]);
|
||||
const previous = readClock(ownMember(before, rule.field));
|
||||
if (previous === undefined) return false;
|
||||
const next = readClock(after[rule.field]);
|
||||
return (
|
||||
|
||||
Reference in new issue
Block a user