@ai-matrx/records 0.98.8 → 0.98.9
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 +6 -0
- package/dist/{table-kind-CboiMJuE.d.cts → client-9fzhCPD5.d.cts} +2771 -4
- package/dist/{table-kind-B4sdlvHf.d.ts → client-DcWZjmg2.d.ts} +2771 -4
- package/dist/core/index.cjs +100 -3
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +19 -17
- package/dist/core/index.d.ts +19 -17
- package/dist/core/index.js +100 -3
- package/dist/core/index.js.map +1 -1
- package/dist/data/index.cjs +52 -0
- package/dist/data/index.cjs.map +1 -1
- package/dist/data/index.d.cts +11 -12
- package/dist/data/index.d.ts +11 -12
- package/dist/data/index.js +52 -0
- package/dist/data/index.js.map +1 -1
- package/dist/{declareTable-BIuPJ3Vj.d.ts → declareTable-B6ic3leL.d.ts} +3 -4
- package/dist/{declareTable-d-HxRmF0.d.cts → declareTable-_GwN-ERY.d.cts} +3 -4
- package/dist/{doors-Bx3Shs3z.d.cts → doors-Dm5q9H8Y.d.cts} +1 -1
- package/dist/{doors-BTifsjNv.d.ts → doors-t-Oc2l9E.d.ts} +1 -1
- package/dist/entity/index.d.cts +7 -7
- package/dist/entity/index.d.ts +7 -7
- package/dist/{field-CJtssH3q.d.ts → field-BIRNApm1.d.ts} +2 -2
- package/dist/{field-DoVl2I9K.d.cts → field-BLy8drjM.d.cts} +2 -2
- package/dist/forms/index.d.cts +3 -3
- package/dist/forms/index.d.ts +3 -3
- package/dist/index.cjs +45 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -13
- package/dist/index.d.ts +30 -13
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.cts +7 -7
- package/dist/memory/index.d.ts +7 -7
- package/dist/{objectOrganization-Crk9gJUM.d.ts → objectOrganization-D5Ytjah7.d.ts} +1 -1
- package/dist/{objectOrganization-CUa6jjhV.d.cts → objectOrganization-zgpoUAH1.d.cts} +1 -1
- package/dist/{port-CRP5g9l9.d.cts → port-B9glCG2h.d.cts} +3 -3
- package/dist/{port-CtnELAJQ.d.ts → port-C-p-_lAu.d.ts} +3 -3
- package/dist/{portal-DW5NGBT0.d.ts → portal-B9HCNPTc.d.ts} +2 -2
- package/dist/{portal-C4N9ByaY.d.cts → portal-C_LgvDeh.d.cts} +2 -2
- package/dist/{ports-WwHHNwge.d.ts → ports-BE_5jz-c.d.ts} +2 -2
- package/dist/{ports-YIh9jrCZ.d.cts → ports-BIdYUS-C.d.cts} +2 -2
- package/dist/questions/index.d.cts +9 -10
- package/dist/questions/index.d.ts +9 -10
- package/dist/react/index.cjs +97 -0
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +86 -1
- package/dist/react/index.d.ts +86 -1
- package/dist/react/index.js +97 -0
- package/dist/react/index.js.map +1 -1
- package/dist/realtime/index.d.cts +3 -3
- package/dist/realtime/index.d.ts +3 -3
- package/dist/{record-CxGK1OEK.d.cts → record-BrJNCmH1.d.cts} +1 -1
- package/dist/{record-CxGK1OEK.d.ts → record-BrJNCmH1.d.ts} +1 -1
- package/dist/{relation-Dh-lCkkh.d.ts → relation-BxGXLRaG.d.ts} +3 -3
- package/dist/{relation-DSGhM3tO.d.cts → relation-R10qQyQU.d.cts} +3 -3
- package/dist/{rule-DQpC7WqT.d.cts → rule-BGtYd6Pf.d.cts} +2 -2
- package/dist/{rule-xNwJF6Qo.d.ts → rule-BtjrE42J.d.ts} +2 -2
- package/dist/scopes/index.d.cts +3 -3
- package/dist/scopes/index.d.ts +3 -3
- package/dist/search/index.d.cts +1 -1
- package/dist/search/index.d.ts +1 -1
- package/dist/setup/index.cjs +52 -0
- package/dist/setup/index.cjs.map +1 -1
- package/dist/setup/index.d.cts +12 -13
- package/dist/setup/index.d.ts +12 -13
- package/dist/setup/index.js +52 -0
- package/dist/setup/index.js.map +1 -1
- package/dist/{subscription-BVCn1PVe.d.cts → subscription-BEM4B4dR.d.cts} +3 -3
- package/dist/{subscription-DQzPVKBR.d.ts → subscription-Ca15Z7Gu.d.ts} +3 -3
- package/dist/templates/index.d.cts +10 -10
- package/dist/templates/index.d.ts +10 -10
- package/dist/typed-table/index.cjs +52 -0
- package/dist/typed-table/index.cjs.map +1 -1
- package/dist/typed-table/index.d.cts +10 -11
- package/dist/typed-table/index.d.ts +10 -11
- package/dist/typed-table/index.js +52 -0
- package/dist/typed-table/index.js.map +1 -1
- package/dist/{types-3lM5f6b0.d.cts → types-5ql9_q-o.d.cts} +2 -2
- package/dist/{types-04kFNi3-.d.ts → types-BALEbMc8.d.ts} +2 -2
- package/dist/{types-DKJO83lQ.d.cts → types-BhnjvJ8U.d.cts} +2 -2
- package/dist/{types-SUAmeBId.d.ts → types-CURw95qc.d.ts} +2 -2
- package/dist/{types-DKeGkHpE.d.cts → types-DRMeL0uW.d.cts} +2 -2
- package/dist/{types-DJVccwh0.d.ts → types-_odOqLOe.d.ts} +2 -2
- package/dist/use-cases/index.d.cts +5 -5
- package/dist/use-cases/index.d.ts +5 -5
- package/dist/{validate-BIJtP2KB.d.cts → validate-Cdtk0y18.d.cts} +1 -1
- package/dist/{validate--y-pPc-c.d.ts → validate-ChibJPPI.d.ts} +1 -1
- package/dist/views/index.d.cts +9 -10
- package/dist/views/index.d.ts +9 -10
- package/package.json +3 -3
- package/dist/client-C1B-MNzb.d.ts +0 -2704
- package/dist/client-D2jAgJNn.d.cts +0 -2704
package/dist/core/index.cjs
CHANGED
|
@@ -119,6 +119,7 @@ __export(core_exports, {
|
|
|
119
119
|
addressMapUrl: () => addressMapUrl,
|
|
120
120
|
addressText: () => addressText,
|
|
121
121
|
allowsOtherValues: () => allowsOtherValues,
|
|
122
|
+
alternatePatch: () => alternatePatch,
|
|
122
123
|
announceRecordChanged: () => announceRecordChanged,
|
|
123
124
|
announceTableStructureChanged: () => announceTableStructureChanged,
|
|
124
125
|
archivedByLine: () => archivedByLine,
|
|
@@ -143,6 +144,7 @@ __export(core_exports, {
|
|
|
143
144
|
choiceSlug: () => choiceSlug,
|
|
144
145
|
choiceValuesOf: () => choiceValuesOf,
|
|
145
146
|
choicesOf: () => choicesOf,
|
|
147
|
+
chooseAlternate: () => chooseAlternate,
|
|
146
148
|
coerceTypedAnswer: () => coerceTypedAnswer,
|
|
147
149
|
coerceTypedAnswers: () => coerceTypedAnswers,
|
|
148
150
|
coercionLabel: () => coercionLabel,
|
|
@@ -5457,6 +5459,49 @@ function tableRenderSchema(facts) {
|
|
|
5457
5459
|
return { kind: slug, fields: out };
|
|
5458
5460
|
}
|
|
5459
5461
|
|
|
5462
|
+
// src/alternates.ts
|
|
5463
|
+
function refuse(code, message, hint) {
|
|
5464
|
+
return { ok: false, error: { code, message, hint, ours: true } };
|
|
5465
|
+
}
|
|
5466
|
+
function alternatePatch(document, field_key, alternate_index) {
|
|
5467
|
+
const block = document._values ?? {};
|
|
5468
|
+
const envelope = block[field_key];
|
|
5469
|
+
const alternates = Array.isArray(envelope?.alternates) ? envelope.alternates : [];
|
|
5470
|
+
const chosen = alternates[alternate_index];
|
|
5471
|
+
if (!envelope || !chosen) return { ok: false, message: "That other value is no longer on this record." };
|
|
5472
|
+
const kept = alternates.filter((_, i) => i !== alternate_index);
|
|
5473
|
+
const current = document[field_key];
|
|
5474
|
+
const next = [...kept];
|
|
5475
|
+
if (current !== null && current !== void 0) {
|
|
5476
|
+
const taken = new Set(kept.map((a) => a.rank));
|
|
5477
|
+
let rank = 1;
|
|
5478
|
+
while (taken.has(rank)) rank += 1;
|
|
5479
|
+
next.push({ value: current, ...envelope.src ? { src: envelope.src } : {}, rank });
|
|
5480
|
+
}
|
|
5481
|
+
const { ver: _ver, actor: _actor, at: _at, on_behalf_of: _on, absent: _absent, alternates: _alts, src: _src, ...rest } = envelope;
|
|
5482
|
+
const changed = { ...rest, ...chosen.src ? { src: chosen.src } : {} };
|
|
5483
|
+
if (next.length > 0) changed["alternates"] = next;
|
|
5484
|
+
return {
|
|
5485
|
+
ok: true,
|
|
5486
|
+
patch: {
|
|
5487
|
+
[field_key]: chosen.value,
|
|
5488
|
+
// THE WHOLE BLOCK — every other field's envelope and alternates travel with it.
|
|
5489
|
+
_values: { ...block, [field_key]: changed }
|
|
5490
|
+
}
|
|
5491
|
+
};
|
|
5492
|
+
}
|
|
5493
|
+
async function chooseAlternate(client, { record_id, field_key, alternate_index }) {
|
|
5494
|
+
const read = await client.recordRead({ record_id, withVersion: true });
|
|
5495
|
+
if (!read.ok) return read;
|
|
5496
|
+
const version = read.data.version;
|
|
5497
|
+
if (version === null || version === void 0) {
|
|
5498
|
+
return refuse("stale_read", "Nothing was saved: this record's latest changes could not be checked.", "Reload, then try again.");
|
|
5499
|
+
}
|
|
5500
|
+
const built = alternatePatch(read.data.document, field_key, alternate_index);
|
|
5501
|
+
if (!built.ok) return refuse("not_found", built.message, "Reload, then look again.");
|
|
5502
|
+
return client.recordUpdate({ record_id, patch: built.patch, expectedVersion: version });
|
|
5503
|
+
}
|
|
5504
|
+
|
|
5460
5505
|
// src/core/primedBundle.ts
|
|
5461
5506
|
var PRIMED_TTL_MS = 15e3;
|
|
5462
5507
|
var REGISTRY = /* @__PURE__ */ Symbol.for("@ai-matrx/records/primed-table-page-bundles");
|
|
@@ -6491,6 +6536,14 @@ var DOORS = {
|
|
|
6491
6536
|
// archived and aliased), and put any recorded Migration back.
|
|
6492
6537
|
migrateMerge: "migrate_merge",
|
|
6493
6538
|
migrateUndo: "migrate_undo",
|
|
6539
|
+
// CORE-VISION (2026-10-10): the structural Migrations a person runs on ONE record from its menu.
|
|
6540
|
+
// Split moves the named values to a new record of the same Table (the original keeps its id);
|
|
6541
|
+
// extract parent copies the named values up into a new record of another Table and puts this
|
|
6542
|
+
// record under it. Both answer a `migration_id` that `migrateUndo` takes. `migrations` lists
|
|
6543
|
+
// the Migration log for one target, newest first.
|
|
6544
|
+
migrateSplit: "migrate_split",
|
|
6545
|
+
migrateExtractParent: "migrate_extract_parent",
|
|
6546
|
+
migrations: "migrations",
|
|
6494
6547
|
recordValues: "record_values",
|
|
6495
6548
|
recordValuesVersioned: "record_values_versioned",
|
|
6496
6549
|
valueRead: "value_read",
|
|
@@ -7045,7 +7098,7 @@ function doorCensus() {
|
|
|
7045
7098
|
}
|
|
7046
7099
|
|
|
7047
7100
|
// src/core/supabase.ts
|
|
7048
|
-
function
|
|
7101
|
+
function refuse2(code, message, hint) {
|
|
7049
7102
|
return { data: null, error: { code, message, hint, details: "" } };
|
|
7050
7103
|
}
|
|
7051
7104
|
function supabaseDataSource(client) {
|
|
@@ -7058,7 +7111,7 @@ function supabaseDataSource(client) {
|
|
|
7058
7111
|
rpc(fn, args, options) {
|
|
7059
7112
|
if (!hasSchema) {
|
|
7060
7113
|
return Promise.resolve(
|
|
7061
|
-
|
|
7114
|
+
refuse2(
|
|
7062
7115
|
"data_source_unbound",
|
|
7063
7116
|
`The records client was given something that is not a supabase client: it has no schema() method, so the door ${fn} cannot be called in the schema it lives in.`,
|
|
7064
7117
|
"Pass a supabase-js v2 client (createClient(...)) to supabaseDataSource()."
|
|
@@ -7068,7 +7121,7 @@ function supabaseDataSource(client) {
|
|
|
7068
7121
|
const name = options?.schema;
|
|
7069
7122
|
if (!name) {
|
|
7070
7123
|
return Promise.resolve(
|
|
7071
|
-
|
|
7124
|
+
refuse2(
|
|
7072
7125
|
"schema_unsaid",
|
|
7073
7126
|
`The door ${fn} was called without saying which schema it lives in. Every door of this store is custom.${fn} and every trust door is iam.${fn}; an unqualified call reaches PostgREST's default profile (public) and is refused there.`,
|
|
7074
7127
|
"This is a bug in the caller, not in your data: /core says the schema on every call."
|
|
@@ -8419,6 +8472,49 @@ function createRecordsClient(given) {
|
|
|
8419
8472
|
}
|
|
8420
8473
|
return result;
|
|
8421
8474
|
},
|
|
8475
|
+
async migrateSplit({ record_id, moved_keys, note }) {
|
|
8476
|
+
const result = await callDoor(
|
|
8477
|
+
DOORS.migrateSplit,
|
|
8478
|
+
{ p_organization_id: org, p_record_id: record_id, p_moved_keys: moved_keys, p_note: note ?? null },
|
|
8479
|
+
"migrateSplit"
|
|
8480
|
+
);
|
|
8481
|
+
if (result.ok) {
|
|
8482
|
+
announceRecordChanged(record_id);
|
|
8483
|
+
announceRecordChanged(result.data.new_record);
|
|
8484
|
+
}
|
|
8485
|
+
return result;
|
|
8486
|
+
},
|
|
8487
|
+
async migrateExtractParent({ record_id, parent_table_id, moved_keys, note }) {
|
|
8488
|
+
const result = await callDoor(
|
|
8489
|
+
DOORS.migrateExtractParent,
|
|
8490
|
+
{ p_organization_id: org, p_id: record_id, p_parent_table_id: parent_table_id, p_moved_keys: moved_keys, p_note: note ?? null },
|
|
8491
|
+
"migrateExtractParent"
|
|
8492
|
+
);
|
|
8493
|
+
if (result.ok) {
|
|
8494
|
+
announceRecordChanged(record_id);
|
|
8495
|
+
announceRecordChanged(result.data.parent);
|
|
8496
|
+
}
|
|
8497
|
+
return result;
|
|
8498
|
+
},
|
|
8499
|
+
async migrations({ target_id, limit }) {
|
|
8500
|
+
return callDoor(
|
|
8501
|
+
DOORS.migrations,
|
|
8502
|
+
{ p_organization_id: org, p_target_id: target_id ?? null, p_limit: limit ?? 100 },
|
|
8503
|
+
"migrations"
|
|
8504
|
+
);
|
|
8505
|
+
},
|
|
8506
|
+
async recordAsOf({ record_id, recorded_at, world_on }) {
|
|
8507
|
+
return callDoor(
|
|
8508
|
+
DOORS.queryRecordAsOf,
|
|
8509
|
+
{
|
|
8510
|
+
p_organization_id: org,
|
|
8511
|
+
p_record_id: record_id,
|
|
8512
|
+
...recorded_at ? { p_recorded_at: recorded_at } : {},
|
|
8513
|
+
...world_on ? { p_world_on: world_on.slice(0, 10) } : {}
|
|
8514
|
+
},
|
|
8515
|
+
"recordAsOf"
|
|
8516
|
+
);
|
|
8517
|
+
},
|
|
8422
8518
|
async migrateUndo({ migration_id }) {
|
|
8423
8519
|
const result = await callDoor(
|
|
8424
8520
|
DOORS.migrateUndo,
|
|
@@ -8426,6 +8522,7 @@ function createRecordsClient(given) {
|
|
|
8426
8522
|
"migrateUndo"
|
|
8427
8523
|
);
|
|
8428
8524
|
if (result.ok && result.data.record_id) announceRecordChanged(result.data.record_id);
|
|
8525
|
+
if (result.ok && result.data.removed) announceRecordChanged(result.data.removed);
|
|
8429
8526
|
return result;
|
|
8430
8527
|
},
|
|
8431
8528
|
async fieldUpdate({ field_id, patch }) {
|