@ai-matrx/records 0.98.10 → 0.98.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13775,20 +13775,22 @@ function tableRenderSchema(facts) {
13775
13775
  function refuse4(code, message, hint) {
13776
13776
  return { ok: false, error: { code, message, hint, ours: true } };
13777
13777
  }
13778
- function alternatePatch(document, field_key, alternate_index) {
13778
+ function alternatePatch(document, field_key, alternate_index, rank) {
13779
13779
  const block = document._values ?? {};
13780
13780
  const envelope = block[field_key];
13781
13781
  const alternates = Array.isArray(envelope?.alternates) ? envelope.alternates : [];
13782
- const chosen = alternates[alternate_index];
13782
+ const at = rank === void 0 ? alternate_index : alternates.findIndex((a) => a.rank === rank);
13783
+ alternate_index = at;
13784
+ const chosen = alternates[at];
13783
13785
  if (!envelope || !chosen) return { ok: false, message: "That other value is no longer on this record." };
13784
13786
  const kept = alternates.filter((_, i) => i !== alternate_index);
13785
13787
  const current = document[field_key];
13786
13788
  const next = [...kept];
13787
13789
  if (current !== null && current !== void 0) {
13788
13790
  const taken = new Set(kept.map((a) => a.rank));
13789
- let rank = 1;
13790
- while (taken.has(rank)) rank += 1;
13791
- next.push({ value: current, ...envelope.src ? { src: envelope.src } : {}, rank });
13791
+ let rank2 = 1;
13792
+ while (taken.has(rank2)) rank2 += 1;
13793
+ next.push({ value: current, ...envelope.src ? { src: envelope.src } : {}, rank: rank2 });
13792
13794
  }
13793
13795
  const { ver: _ver, actor: _actor, at: _at, on_behalf_of: _on, absent: _absent, alternates: _alts, src: _src, ...rest } = envelope;
13794
13796
  const changed = { ...rest, ...chosen.src ? { src: chosen.src } : {} };
@@ -13802,14 +13804,20 @@ function alternatePatch(document, field_key, alternate_index) {
13802
13804
  }
13803
13805
  };
13804
13806
  }
13805
- async function chooseAlternate(client, { record_id, field_key, alternate_index }) {
13807
+ async function chooseAlternate(client, { record_id, field_key, alternate_index, rank }) {
13806
13808
  const read = await client.recordRead({ record_id, withVersion: true });
13807
13809
  if (!read.ok) return read;
13810
+ if (Object.keys(read.data.hidden ?? {}).length > 0) {
13811
+ return refuse4("refused_by_rule", "Some fields here are hidden from you, so this choice can't be saved safely.", "Ask someone who can see every field.");
13812
+ }
13808
13813
  const version = read.data.version;
13809
13814
  if (version === null || version === void 0) {
13810
13815
  return refuse4("stale_read", "Nothing was saved: this record's latest changes could not be checked.", "Reload, then try again.");
13811
13816
  }
13812
- const built = alternatePatch(read.data.document, field_key, alternate_index);
13817
+ const raw = await client.recordAsOf({ record_id, recorded_at: (/* @__PURE__ */ new Date()).toISOString() });
13818
+ if (!raw.ok) return raw;
13819
+ if (raw.data === null) return refuse4("not_found", "That record is no longer here.", "Reload, then look again.");
13820
+ const built = alternatePatch(raw.data, field_key, alternate_index, rank);
13813
13821
  if (!built.ok) return refuse4("not_found", built.message, "Reload, then look again.");
13814
13822
  return client.recordUpdate({ record_id, patch: built.patch, expectedVersion: version });
13815
13823
  }