@ai-matrx/records 0.84.0 → 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.
@@ -376,6 +376,26 @@ function takePrimedTablePageBundle(organizationId, tableId, viewId) {
376
376
  primed.delete(key);
377
377
  return Date.now() - held.at < PRIMED_TTL_MS ? held.answer : null;
378
378
  }
379
+ var DOOR_REGISTRY = /* @__PURE__ */ Symbol.for("@ai-matrx/records/primed-door-answers");
380
+ function doorRegistry() {
381
+ const g = globalThis;
382
+ return g[DOOR_REGISTRY] ??= /* @__PURE__ */ new Map();
383
+ }
384
+ var PRIMED_DOOR_TTL_MS = 1e4;
385
+ function takePrimedDoorAnswer(key) {
386
+ const registry2 = doorRegistry();
387
+ const held = registry2.get(key);
388
+ if (!held) return null;
389
+ if (Date.now() - held.at < PRIMED_DOOR_TTL_MS) return { data: held.data };
390
+ registry2.delete(key);
391
+ return null;
392
+ }
393
+ function dropPrimedDoorAnswers() {
394
+ doorRegistry().clear();
395
+ }
396
+ function isWritingDoor(door) {
397
+ 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);
398
+ }
379
399
 
380
400
  // src/core/recordChanges.ts
381
401
  var listeners = /* @__PURE__ */ new Set();
@@ -2848,7 +2868,16 @@ function createRecordsClient(given) {
2848
2868
  bundleAsked.delete(tableId);
2849
2869
  for (const key of [...bundleParts.keys()]) if (key.includes(tableId)) bundleParts.delete(key);
2850
2870
  }
2871
+ function primedFor(door, args) {
2872
+ if (isWritingDoor(door)) {
2873
+ dropPrimedDoorAnswers();
2874
+ return null;
2875
+ }
2876
+ return takePrimedDoorAnswer(`${door}|${canonicalArgs(args)}`);
2877
+ }
2851
2878
  async function callDoor(door, args, where) {
2879
+ const primed = primedFor(door, args);
2880
+ if (primed) return ok(primed.data);
2852
2881
  const bundled = await fromBundle(door, args);
2853
2882
  if (bundled) return ok(bundled.data);
2854
2883
  if (!doorReady(config, door)) {
@@ -2873,6 +2902,8 @@ function createRecordsClient(given) {
2873
2902
  }
2874
2903
  async function owedDoor(door, args, where) {
2875
2904
  if (doorExists(door)) return callDoor(door, args, where);
2905
+ const primed = primedFor(door, args);
2906
+ if (primed) return ok(primed.data);
2876
2907
  const response = await config.dataSource.rpc(door, args, { schema });
2877
2908
  if (response.error) {
2878
2909
  const code = response.error.code;
@@ -2938,6 +2969,8 @@ function createRecordsClient(given) {
2938
2969
  return ok(response.data);
2939
2970
  }
2940
2971
  async function drillDoor(door, args, where) {
2972
+ const primed = primedFor(door, args);
2973
+ if (primed) return ok(primed.data);
2941
2974
  const response = await config.dataSource.rpc(door, args, { schema: DRILL_SCHEMA });
2942
2975
  if (response.error) {
2943
2976
  const refusal2 = mapPgError(response.error, where);