@ai-matrx/records 0.84.1 → 0.84.2

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.
@@ -196,6 +196,26 @@ function takePrimedTablePageBundle(organizationId, tableId, viewId) {
196
196
  primed.delete(key);
197
197
  return Date.now() - held.at < PRIMED_TTL_MS ? held.answer : null;
198
198
  }
199
+ var DOOR_REGISTRY = /* @__PURE__ */ Symbol.for("@ai-matrx/records/primed-door-answers");
200
+ function doorRegistry() {
201
+ const g = globalThis;
202
+ return g[DOOR_REGISTRY] ??= /* @__PURE__ */ new Map();
203
+ }
204
+ var PRIMED_DOOR_TTL_MS = 1e4;
205
+ function takePrimedDoorAnswer(key) {
206
+ const registry2 = doorRegistry();
207
+ const held = registry2.get(key);
208
+ if (!held) return null;
209
+ if (Date.now() - held.at < PRIMED_DOOR_TTL_MS) return { data: held.data };
210
+ registry2.delete(key);
211
+ return null;
212
+ }
213
+ function dropPrimedDoorAnswers() {
214
+ doorRegistry().clear();
215
+ }
216
+ function isWritingDoor(door) {
217
+ return /(_declare|_set(_|$)|_update|_write|_delete|_restore|_archive|_upsert|_reparent|_change|_duplicate|_move|_decide|_run$|_submit|_publish|_import_|_start$|_complete|_sign$|_add$|_retire|_propose|_promote|_land$|_pin$|_mute|_snooze|_unsnooze|_clear|_unclear|_revoke|_issue|_bind|_unbind|_apply|_backfill|_sync$|_decorate|_designate|_ensure|^migrate_|^home_add|^capture_|^claim_|^record_stage|^anon_|^io_import_|^io_comment_resolve|^enrich_(declare|land|pin)|^field_(declare|duplicate|propose|restore|retire|update)|^table_(declare|ensure|from_example|move|sync)|^value_restore|^relation_own)/.test(door);
218
+ }
199
219
 
200
220
  // src/core/recordChanges.ts
201
221
  var listeners = /* @__PURE__ */ new Set();
@@ -2692,7 +2712,16 @@ function createRecordsClient(given) {
2692
2712
  bundleAsked.delete(tableId);
2693
2713
  for (const key of [...bundleParts.keys()]) if (key.includes(tableId)) bundleParts.delete(key);
2694
2714
  }
2715
+ function primedFor(door, args) {
2716
+ if (isWritingDoor(door)) {
2717
+ dropPrimedDoorAnswers();
2718
+ return null;
2719
+ }
2720
+ return takePrimedDoorAnswer(`${door}|${canonicalArgs(args)}`);
2721
+ }
2695
2722
  async function callDoor(door, args, where) {
2723
+ const primed = primedFor(door, args);
2724
+ if (primed) return ok(primed.data);
2696
2725
  const bundled = await fromBundle(door, args);
2697
2726
  if (bundled) return ok(bundled.data);
2698
2727
  if (!doorReady(config, door)) {
@@ -2717,6 +2746,8 @@ function createRecordsClient(given) {
2717
2746
  }
2718
2747
  async function owedDoor(door, args, where) {
2719
2748
  if (doorExists(door)) return callDoor(door, args, where);
2749
+ const primed = primedFor(door, args);
2750
+ if (primed) return ok(primed.data);
2720
2751
  const response = await config.dataSource.rpc(door, args, { schema });
2721
2752
  if (response.error) {
2722
2753
  const code = response.error.code;
@@ -2782,6 +2813,8 @@ function createRecordsClient(given) {
2782
2813
  return ok(response.data);
2783
2814
  }
2784
2815
  async function drillDoor(door, args, where) {
2816
+ const primed = primedFor(door, args);
2817
+ if (primed) return ok(primed.data);
2785
2818
  const response = await config.dataSource.rpc(door, args, { schema: DRILL_SCHEMA });
2786
2819
  if (response.error) {
2787
2820
  const refusal2 = mapPgError(response.error, where);