@ai-matrx/records 0.84.1 → 0.84.3
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.
- package/CHANGELOG.md +12 -0
- package/dist/app-table/index.cjs +49 -0
- package/dist/app-table/index.cjs.map +1 -1
- package/dist/app-table/index.js +49 -0
- package/dist/app-table/index.js.map +1 -1
- package/dist/core/index.cjs +55 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +10 -1
- package/dist/core/index.d.ts +10 -1
- package/dist/core/index.js +55 -0
- package/dist/core/index.js.map +1 -1
- package/dist/data/index.cjs +49 -0
- package/dist/data/index.cjs.map +1 -1
- package/dist/data/index.js +49 -0
- package/dist/data/index.js.map +1 -1
- package/dist/react/index.cjs +58 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +17 -1
- package/dist/react/index.d.ts +17 -1
- package/dist/react/index.js +58 -1
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
package/dist/react/index.cjs
CHANGED
|
@@ -281,6 +281,7 @@ __export(react_exports, {
|
|
|
281
281
|
useRowActions: () => useRowActions,
|
|
282
282
|
useSeededAggregate: () => useSeededAggregate,
|
|
283
283
|
useSeededAnswer: () => useSeededAnswer,
|
|
284
|
+
useSeededAnswerAt: () => useSeededAnswerAt,
|
|
284
285
|
useSeededSource: () => useSeededSource,
|
|
285
286
|
useStoreTable: () => useStoreTable,
|
|
286
287
|
useTable: () => useTable,
|
|
@@ -321,6 +322,40 @@ function takePrimedTablePageBundle(organizationId, tableId, viewId) {
|
|
|
321
322
|
function primeRecordPageBundle(input) {
|
|
322
323
|
primeTablePageBundle({ organizationId: input.organizationId, tableId: `record:${input.recordId}`, answer: input.answer });
|
|
323
324
|
}
|
|
325
|
+
var DOOR_REGISTRY = /* @__PURE__ */ Symbol.for("@ai-matrx/records/primed-door-answers");
|
|
326
|
+
function doorRegistry() {
|
|
327
|
+
const g = globalThis;
|
|
328
|
+
return g[DOOR_REGISTRY] ??= /* @__PURE__ */ new Map();
|
|
329
|
+
}
|
|
330
|
+
var PRIMED_DOOR_TTL_MS = 1e4;
|
|
331
|
+
function primeDoorAnswer(key, data, at) {
|
|
332
|
+
doorRegistry().set(key, { data, at });
|
|
333
|
+
}
|
|
334
|
+
function takePrimedDoorAnswer(key) {
|
|
335
|
+
const registry2 = doorRegistry();
|
|
336
|
+
const held = registry2.get(key);
|
|
337
|
+
if (!held) return null;
|
|
338
|
+
if (Date.now() - held.at < PRIMED_DOOR_TTL_MS) return { data: held.data };
|
|
339
|
+
registry2.delete(key);
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
function dropPrimedDoorAnswers(doors) {
|
|
343
|
+
const registry2 = doorRegistry();
|
|
344
|
+
if (!doors) {
|
|
345
|
+
registry2.clear();
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
for (const key of [...registry2.keys()]) if (doors.some((door) => key.startsWith(`${door}|`))) registry2.delete(key);
|
|
349
|
+
}
|
|
350
|
+
var LOOK_WRITES = {
|
|
351
|
+
view_declare: ["views", "view_look_read", "grid_layout", "table_page_bundle"],
|
|
352
|
+
view_designate: ["views", "view_look_read", "grid_layout", "table_page_bundle"],
|
|
353
|
+
view_look_set: ["views", "view_look_read", "grid_layout", "table_page_bundle"],
|
|
354
|
+
view_record_order_set: ["views", "view_look_read", "grid_layout", "table_page_bundle"]
|
|
355
|
+
};
|
|
356
|
+
function isWritingDoor(door) {
|
|
357
|
+
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);
|
|
358
|
+
}
|
|
324
359
|
|
|
325
360
|
// src/core/recordChanges.ts
|
|
326
361
|
var listeners = /* @__PURE__ */ new Set();
|
|
@@ -4518,7 +4553,21 @@ function createRecordsClient(given) {
|
|
|
4518
4553
|
bundleAsked.delete(tableId);
|
|
4519
4554
|
for (const key of [...bundleParts.keys()]) if (key.includes(tableId)) bundleParts.delete(key);
|
|
4520
4555
|
}
|
|
4556
|
+
function primedFor(door, args) {
|
|
4557
|
+
const look = LOOK_WRITES[door];
|
|
4558
|
+
if (look) {
|
|
4559
|
+
dropPrimedDoorAnswers(look);
|
|
4560
|
+
return null;
|
|
4561
|
+
}
|
|
4562
|
+
if (isWritingDoor(door)) {
|
|
4563
|
+
dropPrimedDoorAnswers();
|
|
4564
|
+
return null;
|
|
4565
|
+
}
|
|
4566
|
+
return takePrimedDoorAnswer(`${door}|${canonicalArgs(args)}`);
|
|
4567
|
+
}
|
|
4521
4568
|
async function callDoor(door, args, where) {
|
|
4569
|
+
const primed = primedFor(door, args);
|
|
4570
|
+
if (primed) return ok(primed.data);
|
|
4522
4571
|
const bundled = await fromBundle(door, args);
|
|
4523
4572
|
if (bundled) return ok(bundled.data);
|
|
4524
4573
|
if (!doorReady(config, door)) {
|
|
@@ -4543,6 +4592,8 @@ function createRecordsClient(given) {
|
|
|
4543
4592
|
}
|
|
4544
4593
|
async function owedDoor(door, args, where) {
|
|
4545
4594
|
if (doorExists(door)) return callDoor(door, args, where);
|
|
4595
|
+
const primed = primedFor(door, args);
|
|
4596
|
+
if (primed) return ok(primed.data);
|
|
4546
4597
|
const response = await config.dataSource.rpc(door, args, { schema });
|
|
4547
4598
|
if (response.error) {
|
|
4548
4599
|
const code = response.error.code;
|
|
@@ -4608,6 +4659,8 @@ function createRecordsClient(given) {
|
|
|
4608
4659
|
return ok(response.data);
|
|
4609
4660
|
}
|
|
4610
4661
|
async function drillDoor(door, args, where) {
|
|
4662
|
+
const primed = primedFor(door, args);
|
|
4663
|
+
if (primed) return ok(primed.data);
|
|
4611
4664
|
const response = await config.dataSource.rpc(door, args, { schema: DRILL_SCHEMA });
|
|
4612
4665
|
if (response.error) {
|
|
4613
4666
|
const refusal3 = mapPgError(response.error, where);
|
|
@@ -8152,6 +8205,7 @@ function storeFor(seed) {
|
|
|
8152
8205
|
};
|
|
8153
8206
|
stores.set(seed, store);
|
|
8154
8207
|
if (typeof window !== "undefined") {
|
|
8208
|
+
for (const [key, data] of index) primeDoorAnswer(key, data, typeof seed.at === "number" ? seed.at : Date.now());
|
|
8155
8209
|
for (const a of seed.answers) {
|
|
8156
8210
|
const org = a.args["p_organization_id"];
|
|
8157
8211
|
if (typeof org !== "string") continue;
|
|
@@ -8255,11 +8309,14 @@ function useAsync(run, key, live) {
|
|
|
8255
8309
|
return { ...shown, reload, setData };
|
|
8256
8310
|
}
|
|
8257
8311
|
function useSeededAnswer(key, run) {
|
|
8312
|
+
return useSeededAnswerAt(key, run)?.data;
|
|
8313
|
+
}
|
|
8314
|
+
function useSeededAnswerAt(key, run) {
|
|
8258
8315
|
const client = useRecordsClient();
|
|
8259
8316
|
const seed = useSeedStore();
|
|
8260
8317
|
if (!seed || key === null) return void 0;
|
|
8261
8318
|
const outcome = (0, import_react4.use)(seed.run(`${identityOf(client)}|own:${key}`, run, client.config));
|
|
8262
|
-
return outcome.seeded ? outcome.data : void 0;
|
|
8319
|
+
return outcome.seeded ? { data: outcome.data, at: seed.at } : void 0;
|
|
8263
8320
|
}
|
|
8264
8321
|
function useSeededAggregate(tableId, spec) {
|
|
8265
8322
|
return useSeededAnswer(
|