@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.
@@ -240,6 +240,26 @@ function takePrimedTablePageBundle(organizationId, tableId, viewId) {
240
240
  primed.delete(key);
241
241
  return Date.now() - held.at < PRIMED_TTL_MS ? held.answer : null;
242
242
  }
243
+ var DOOR_REGISTRY = /* @__PURE__ */ Symbol.for("@ai-matrx/records/primed-door-answers");
244
+ function doorRegistry() {
245
+ const g = globalThis;
246
+ return g[DOOR_REGISTRY] ??= /* @__PURE__ */ new Map();
247
+ }
248
+ var PRIMED_DOOR_TTL_MS = 1e4;
249
+ function takePrimedDoorAnswer(key) {
250
+ const registry2 = doorRegistry();
251
+ const held = registry2.get(key);
252
+ if (!held) return null;
253
+ if (Date.now() - held.at < PRIMED_DOOR_TTL_MS) return { data: held.data };
254
+ registry2.delete(key);
255
+ return null;
256
+ }
257
+ function dropPrimedDoorAnswers() {
258
+ doorRegistry().clear();
259
+ }
260
+ function isWritingDoor(door) {
261
+ 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);
262
+ }
243
263
 
244
264
  // src/core/recordChanges.ts
245
265
  var listeners = /* @__PURE__ */ new Set();
@@ -2736,7 +2756,16 @@ function createRecordsClient(given) {
2736
2756
  bundleAsked.delete(tableId);
2737
2757
  for (const key of [...bundleParts.keys()]) if (key.includes(tableId)) bundleParts.delete(key);
2738
2758
  }
2759
+ function primedFor(door, args) {
2760
+ if (isWritingDoor(door)) {
2761
+ dropPrimedDoorAnswers();
2762
+ return null;
2763
+ }
2764
+ return takePrimedDoorAnswer(`${door}|${canonicalArgs(args)}`);
2765
+ }
2739
2766
  async function callDoor(door, args, where) {
2767
+ const primed = primedFor(door, args);
2768
+ if (primed) return ok(primed.data);
2740
2769
  const bundled = await fromBundle(door, args);
2741
2770
  if (bundled) return ok(bundled.data);
2742
2771
  if (!doorReady(config, door)) {
@@ -2761,6 +2790,8 @@ function createRecordsClient(given) {
2761
2790
  }
2762
2791
  async function owedDoor(door, args, where) {
2763
2792
  if (doorExists(door)) return callDoor(door, args, where);
2793
+ const primed = primedFor(door, args);
2794
+ if (primed) return ok(primed.data);
2764
2795
  const response = await config.dataSource.rpc(door, args, { schema });
2765
2796
  if (response.error) {
2766
2797
  const code = response.error.code;
@@ -2826,6 +2857,8 @@ function createRecordsClient(given) {
2826
2857
  return ok(response.data);
2827
2858
  }
2828
2859
  async function drillDoor(door, args, where) {
2860
+ const primed = primedFor(door, args);
2861
+ if (primed) return ok(primed.data);
2829
2862
  const response = await config.dataSource.rpc(door, args, { schema: DRILL_SCHEMA });
2830
2863
  if (response.error) {
2831
2864
  const refusal2 = mapPgError(response.error, where);