@nicia-ai/typegraph 0.65.0 → 0.66.0
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 +17 -0
- package/dist/{atomic-mutation-program-BznZQ06C.d.ts → atomic-mutation-program-BhP75Qn0.d.ts} +1 -1
- package/dist/{atomic-mutation-program-Bfu5z-je.d.cts → atomic-mutation-program-DMdmc4s0.d.cts} +1 -1
- package/dist/backend/drizzle/engine/index.cjs +13 -13
- package/dist/backend/drizzle/engine/index.d.cts +9 -9
- package/dist/backend/drizzle/engine/index.d.ts +9 -9
- package/dist/backend/drizzle/engine/index.js +8 -8
- package/dist/backend/drizzle/indexes.d.cts +1 -1
- package/dist/backend/drizzle/indexes.d.ts +1 -1
- package/dist/backend/index.cjs +91 -91
- package/dist/backend/index.d.cts +7 -7
- package/dist/backend/index.d.ts +7 -7
- package/dist/backend/index.js +8 -8
- package/dist/backend/postgres/index.cjs +23 -23
- package/dist/backend/postgres/index.d.cts +8 -8
- package/dist/backend/postgres/index.d.ts +8 -8
- package/dist/backend/postgres/index.js +8 -8
- package/dist/backend/postgres/pglite-store.cjs +1 -1
- package/dist/backend/postgres/pglite-store.d.cts +6 -6
- package/dist/backend/postgres/pglite-store.d.ts +6 -6
- package/dist/backend/postgres/pglite-store.js +1 -1
- package/dist/backend/postgres/pglite.cjs +10 -10
- package/dist/backend/postgres/pglite.d.cts +3 -3
- package/dist/backend/postgres/pglite.d.ts +3 -3
- package/dist/backend/postgres/pglite.js +9 -9
- package/dist/backend/sqlite/index.cjs +21 -21
- package/dist/backend/sqlite/index.d.cts +7 -7
- package/dist/backend/sqlite/index.d.ts +7 -7
- package/dist/backend/sqlite/index.js +8 -8
- package/dist/backend/sqlite/libsql.cjs +14 -14
- package/dist/backend/sqlite/libsql.d.cts +3 -3
- package/dist/backend/sqlite/libsql.d.ts +3 -3
- package/dist/backend/sqlite/libsql.js +8 -8
- package/dist/backend/sqlite/local-store.cjs +1 -1
- package/dist/backend/sqlite/local-store.d.cts +6 -6
- package/dist/backend/sqlite/local-store.d.ts +6 -6
- package/dist/backend/sqlite/local-store.js +1 -1
- package/dist/backend/sqlite/local.cjs +10 -10
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +9 -9
- package/dist/{chunk-337ONI2I.js → chunk-3SUZXB5X.js} +146 -80
- package/dist/chunk-3SUZXB5X.js.map +1 -0
- package/dist/{chunk-4VTCIEK3.js → chunk-4TQOIBWH.js} +3 -3
- package/dist/{chunk-4VTCIEK3.js.map → chunk-4TQOIBWH.js.map} +1 -1
- package/dist/{chunk-JRWKRBI5.cjs → chunk-5JOCIMQ3.cjs} +6 -6
- package/dist/{chunk-JRWKRBI5.cjs.map → chunk-5JOCIMQ3.cjs.map} +1 -1
- package/dist/{chunk-BWQA3POT.cjs → chunk-6B3LQUYG.cjs} +206 -138
- package/dist/chunk-6B3LQUYG.cjs.map +1 -0
- package/dist/{chunk-RQPCUHIH.js → chunk-6ECNYQDW.js} +3 -3
- package/dist/{chunk-RQPCUHIH.js.map → chunk-6ECNYQDW.js.map} +1 -1
- package/dist/{chunk-OLB75LRQ.js → chunk-6GKKAQMW.js} +5 -5
- package/dist/{chunk-OLB75LRQ.js.map → chunk-6GKKAQMW.js.map} +1 -1
- package/dist/{chunk-OC5ROP7V.cjs → chunk-6JRVV2SS.cjs} +8 -2
- package/dist/chunk-6JRVV2SS.cjs.map +1 -0
- package/dist/{chunk-JERQGJKG.cjs → chunk-732VS5PW.cjs} +18 -18
- package/dist/{chunk-JERQGJKG.cjs.map → chunk-732VS5PW.cjs.map} +1 -1
- package/dist/{chunk-DSX3P4S5.cjs → chunk-76OB5RSH.cjs} +6 -6
- package/dist/{chunk-DSX3P4S5.cjs.map → chunk-76OB5RSH.cjs.map} +1 -1
- package/dist/{chunk-DHRLOQLQ.cjs → chunk-7LQTDGV5.cjs} +11 -11
- package/dist/{chunk-DHRLOQLQ.cjs.map → chunk-7LQTDGV5.cjs.map} +1 -1
- package/dist/{chunk-Q25QYSOH.js → chunk-7YJHUY4T.js} +9 -9
- package/dist/{chunk-Q25QYSOH.js.map → chunk-7YJHUY4T.js.map} +1 -1
- package/dist/{chunk-BBOMNH44.js → chunk-BABP4D5B.js} +3 -3
- package/dist/{chunk-BBOMNH44.js.map → chunk-BABP4D5B.js.map} +1 -1
- package/dist/{chunk-EVGZ2TRQ.js → chunk-BE75G3M5.js} +3 -3
- package/dist/{chunk-EVGZ2TRQ.js.map → chunk-BE75G3M5.js.map} +1 -1
- package/dist/{chunk-FXGZT3WO.cjs → chunk-BX42F7IJ.cjs} +41 -41
- package/dist/{chunk-FXGZT3WO.cjs.map → chunk-BX42F7IJ.cjs.map} +1 -1
- package/dist/{chunk-VROJKWZ7.js → chunk-C3HNC3S6.js} +5 -5
- package/dist/{chunk-VROJKWZ7.js.map → chunk-C3HNC3S6.js.map} +1 -1
- package/dist/{chunk-G6T23JU7.js → chunk-CDKNGCE7.js} +3 -3
- package/dist/{chunk-G6T23JU7.js.map → chunk-CDKNGCE7.js.map} +1 -1
- package/dist/{chunk-BNTJ5YFO.cjs → chunk-EACDHXJL.cjs} +4 -4
- package/dist/{chunk-BNTJ5YFO.cjs.map → chunk-EACDHXJL.cjs.map} +1 -1
- package/dist/{chunk-SNDJUTMB.cjs → chunk-EBQX7MYL.cjs} +72 -72
- package/dist/{chunk-SNDJUTMB.cjs.map → chunk-EBQX7MYL.cjs.map} +1 -1
- package/dist/{chunk-GKSAEUX6.js → chunk-FXOFJ4FS.js} +7 -7
- package/dist/{chunk-GKSAEUX6.js.map → chunk-FXOFJ4FS.js.map} +1 -1
- package/dist/{chunk-ZOWRACZQ.cjs → chunk-G7OKJDMG.cjs} +5 -5
- package/dist/{chunk-ZOWRACZQ.cjs.map → chunk-G7OKJDMG.cjs.map} +1 -1
- package/dist/{chunk-VZRXXABW.js → chunk-HSLP6CVG.js} +5 -5
- package/dist/{chunk-VZRXXABW.js.map → chunk-HSLP6CVG.js.map} +1 -1
- package/dist/{chunk-MKJPBSID.cjs → chunk-I7SBZJI2.cjs} +4 -4
- package/dist/{chunk-MKJPBSID.cjs.map → chunk-I7SBZJI2.cjs.map} +1 -1
- package/dist/{chunk-H346QK3V.cjs → chunk-K7YACILO.cjs} +9 -9
- package/dist/{chunk-H346QK3V.cjs.map → chunk-K7YACILO.cjs.map} +1 -1
- package/dist/{chunk-L2GBVYRU.cjs → chunk-MGCPSR4C.cjs} +11 -11
- package/dist/{chunk-L2GBVYRU.cjs.map → chunk-MGCPSR4C.cjs.map} +1 -1
- package/dist/{chunk-KDNRACRG.cjs → chunk-MRUOOAIQ.cjs} +4 -4
- package/dist/{chunk-KDNRACRG.cjs.map → chunk-MRUOOAIQ.cjs.map} +1 -1
- package/dist/{chunk-PFXNQFFY.js → chunk-MUEPEWMQ.js} +67 -8
- package/dist/chunk-MUEPEWMQ.js.map +1 -0
- package/dist/{chunk-HTSJTWUT.js → chunk-OF63ZHSD.js} +4 -4
- package/dist/{chunk-HTSJTWUT.js.map → chunk-OF63ZHSD.js.map} +1 -1
- package/dist/{chunk-NGA3THGU.cjs → chunk-QR7W37HG.cjs} +14 -14
- package/dist/{chunk-NGA3THGU.cjs.map → chunk-QR7W37HG.cjs.map} +1 -1
- package/dist/{chunk-QFEO4M5W.js → chunk-RTPMG6LQ.js} +11 -11
- package/dist/{chunk-QFEO4M5W.js.map → chunk-RTPMG6LQ.js.map} +1 -1
- package/dist/{chunk-PFD4NUYV.js → chunk-SSDHR2C2.js} +3 -3
- package/dist/{chunk-PFD4NUYV.js.map → chunk-SSDHR2C2.js.map} +1 -1
- package/dist/{chunk-THK3SCQA.js → chunk-SYXTWPX6.js} +5 -5
- package/dist/{chunk-THK3SCQA.js.map → chunk-SYXTWPX6.js.map} +1 -1
- package/dist/{chunk-XSLQYGNR.cjs → chunk-T3VU3YRQ.cjs} +69 -69
- package/dist/{chunk-XSLQYGNR.cjs.map → chunk-T3VU3YRQ.cjs.map} +1 -1
- package/dist/{chunk-MIBWA6HX.js → chunk-TR7QTODF.js} +213 -33
- package/dist/chunk-TR7QTODF.js.map +1 -0
- package/dist/{chunk-AD3NLSV5.js → chunk-TU22BFMP.js} +8 -2
- package/dist/chunk-TU22BFMP.js.map +1 -0
- package/dist/{chunk-WTMSUIRO.js → chunk-UFKYMQJ5.js} +3 -3
- package/dist/{chunk-WTMSUIRO.js.map → chunk-UFKYMQJ5.js.map} +1 -1
- package/dist/{chunk-35LDKSMM.cjs → chunk-VNJMM2QQ.cjs} +30 -30
- package/dist/{chunk-35LDKSMM.cjs.map → chunk-VNJMM2QQ.cjs.map} +1 -1
- package/dist/{chunk-53ZEBIMD.js → chunk-WB55URNM.js} +6 -6
- package/dist/{chunk-53ZEBIMD.js.map → chunk-WB55URNM.js.map} +1 -1
- package/dist/{chunk-D2JPOFRZ.cjs → chunk-WY3IFEKV.cjs} +191 -191
- package/dist/{chunk-D2JPOFRZ.cjs.map → chunk-WY3IFEKV.cjs.map} +1 -1
- package/dist/{chunk-3KWF25MF.cjs → chunk-XQNKN3UF.cjs} +305 -246
- package/dist/chunk-XQNKN3UF.cjs.map +1 -0
- package/dist/{chunk-3RSFLZ7A.cjs → chunk-Y4X6ODVY.cjs} +943 -763
- package/dist/chunk-Y4X6ODVY.cjs.map +1 -0
- package/dist/core/index.d.cts +3 -3
- package/dist/core/index.d.ts +3 -3
- package/dist/{ddl-DvW9aobX.d.ts → ddl-2q7xLM1X.d.ts} +3 -3
- package/dist/{ddl-BjuXbPfw.d.cts → ddl-D_09BfbN.d.cts} +3 -3
- package/dist/graph-extension/index.d.cts +2 -2
- package/dist/graph-extension/index.d.ts +2 -2
- package/dist/graph-merge/index.cjs +156 -156
- package/dist/graph-merge/index.d.cts +7 -7
- package/dist/graph-merge/index.d.ts +7 -7
- package/dist/graph-merge/index.js +14 -14
- package/dist/{graph-templates-1vMqlPsu.d.cts → graph-templates-B5Q7oYAA.d.cts} +2 -2
- package/dist/{graph-templates-Y52w16dH.d.ts → graph-templates-D9N-Z9kw.d.ts} +2 -2
- package/dist/index.cjs +99 -99
- package/dist/index.d.cts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +18 -18
- package/dist/indexes/index.d.cts +4 -4
- package/dist/indexes/index.d.ts +4 -4
- package/dist/{ingestion-import-target-CCKeXZbW.d.ts → ingestion-import-target-B8EU6ug2.d.ts} +1 -1
- package/dist/{ingestion-import-target-774QRgkF.d.cts → ingestion-import-target-C5sHNFJF.d.cts} +1 -1
- package/dist/interchange/index.cjs +34 -34
- package/dist/interchange/index.d.cts +7 -7
- package/dist/interchange/index.d.ts +7 -7
- package/dist/interchange/index.js +11 -11
- package/dist/{local-store-impl-3E4VLFCI.cjs → local-store-impl-J6TJG45N.cjs} +22 -22
- package/dist/{local-store-impl-3E4VLFCI.cjs.map → local-store-impl-J6TJG45N.cjs.map} +1 -1
- package/dist/{local-store-impl-DFKS7QTV.js → local-store-impl-XKWR46WQ.js} +18 -18
- package/dist/{local-store-impl-DFKS7QTV.js.map → local-store-impl-XKWR46WQ.js.map} +1 -1
- package/dist/{pglite-store-impl-T75O3LVQ.cjs → pglite-store-impl-KXD5VWC5.cjs} +22 -22
- package/dist/{pglite-store-impl-T75O3LVQ.cjs.map → pglite-store-impl-KXD5VWC5.cjs.map} +1 -1
- package/dist/{pglite-store-impl-N63GGBU2.js → pglite-store-impl-LRZ4TO3H.js} +18 -18
- package/dist/{pglite-store-impl-N63GGBU2.js.map → pglite-store-impl-LRZ4TO3H.js.map} +1 -1
- package/dist/{postgres-2FYdVYCm.d.cts → postgres-BIm6TDfF.d.cts} +3 -3
- package/dist/{postgres-C9gitL71.d.ts → postgres-CRRB2qzy.d.ts} +3 -3
- package/dist/{postgres-BONrXHb4.d.cts → postgres-DOBXcZVg.d.cts} +1 -1
- package/dist/{postgres-DAFRdnTr.d.ts → postgres-DhZixg92.d.ts} +1 -1
- package/dist/{profile-Bmcg07Ki.d.cts → profile-CjAffcQt.d.cts} +2 -2
- package/dist/{profile-CAD65CqS.d.ts → profile-DVd70NA-.d.ts} +2 -2
- package/dist/profiler/index.d.cts +8 -8
- package/dist/profiler/index.d.ts +8 -8
- package/dist/provenance/index.cjs +22 -22
- package/dist/provenance/index.d.cts +6 -6
- package/dist/provenance/index.d.ts +6 -6
- package/dist/provenance/index.js +6 -6
- package/dist/{repair-validity-windows-CinP91t7.d.cts → repair-validity-windows-CpP_GpIx.d.cts} +1 -1
- package/dist/{repair-validity-windows-BJz4nffP.d.ts → repair-validity-windows-lfe275bY.d.ts} +1 -1
- package/dist/{resolve-DgOSlXx_.d.ts → resolve-CoYqHqno.d.cts} +7 -2
- package/dist/{resolve-DQXSEN_A.d.cts → resolve-DV0Iposp.d.ts} +7 -2
- package/dist/schema/index.cjs +37 -37
- package/dist/schema/index.d.cts +7 -7
- package/dist/schema/index.d.ts +7 -7
- package/dist/schema/index.js +7 -7
- package/dist/{searchable-DMdCwkXO.d.cts → searchable-C7Xt6g45.d.cts} +1 -1
- package/dist/{searchable-BPRF0Bah.d.ts → searchable-KKXrPet3.d.ts} +1 -1
- package/dist/{sqlite-DcDAAYow.d.ts → sqlite-BNwQ5pd7.d.ts} +3 -3
- package/dist/{sqlite-DgbYa-1Y.d.cts → sqlite-BkQM9ZeI.d.cts} +1 -1
- package/dist/{sqlite-UlG5prJQ.d.ts → sqlite-CcCSeXGg.d.ts} +1 -1
- package/dist/{sqlite-Co_uIpfs.d.cts → sqlite-DX9H3L7z.d.cts} +3 -3
- package/dist/{store-HxoFyQMu.d.cts → store-3nfPQK5j.d.cts} +30 -7
- package/dist/{store-C9T1c9Az.d.ts → store-C8ZPl7OW.d.ts} +30 -7
- package/dist/{types-CRCyg1fJ.d.cts → types-BynPp5kU.d.cts} +18 -2
- package/dist/{types-CRCyg1fJ.d.ts → types-BynPp5kU.d.ts} +18 -2
- package/dist/{types-Dg_prBqC.d.ts → types-C9YwrkSe.d.ts} +1 -1
- package/dist/{types-B5AUesS1.d.cts → types-JG-4CG6P.d.cts} +1 -1
- package/dist/{where-gRyc3jj_.d.cts → where-D1gBDqQ_.d.cts} +1 -1
- package/dist/{where-D-NDKMPw.d.ts → where-D2GqMFp-.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-337ONI2I.js.map +0 -1
- package/dist/chunk-3KWF25MF.cjs.map +0 -1
- package/dist/chunk-3RSFLZ7A.cjs.map +0 -1
- package/dist/chunk-AD3NLSV5.js.map +0 -1
- package/dist/chunk-BWQA3POT.cjs.map +0 -1
- package/dist/chunk-MIBWA6HX.js.map +0 -1
- package/dist/chunk-OC5ROP7V.cjs.map +0 -1
- package/dist/chunk-PFXNQFFY.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkXQNKN3UF_cjs = require('./chunk-XQNKN3UF.cjs');
|
|
4
|
+
var chunkI7SBZJI2_cjs = require('./chunk-I7SBZJI2.cjs');
|
|
5
|
+
var chunk6JRVV2SS_cjs = require('./chunk-6JRVV2SS.cjs');
|
|
6
6
|
var chunk7XYPLAPL_cjs = require('./chunk-7XYPLAPL.cjs');
|
|
7
7
|
var pglite = require('@electric-sql/pglite');
|
|
8
8
|
var pglite$1 = require('drizzle-orm/pglite');
|
|
@@ -20,7 +20,7 @@ async function loadDefaultPgvectorExtension() {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
async function createLocalPgliteBackend(options = {}) {
|
|
23
|
-
const tables2 = options.tables ??
|
|
23
|
+
const tables2 = options.tables ?? chunkXQNKN3UF_cjs.tables;
|
|
24
24
|
const vectorExtension = options.vector === false ? void 0 : options.vector ?? await loadDefaultPgvectorExtension();
|
|
25
25
|
const vectorEnabled = vectorExtension !== void 0;
|
|
26
26
|
const client = await pglite.PGlite.create({
|
|
@@ -28,28 +28,28 @@ async function createLocalPgliteBackend(options = {}) {
|
|
|
28
28
|
...vectorExtension === void 0 ? {} : { extensions: { vector: vectorExtension } }
|
|
29
29
|
});
|
|
30
30
|
try {
|
|
31
|
-
const migrationSql = vectorEnabled ?
|
|
31
|
+
const migrationSql = vectorEnabled ? chunkXQNKN3UF_cjs.generatePostgresMigrationSQL(tables2, options.fulltext) : chunkXQNKN3UF_cjs.generateVectorlessPostgresMigrationSQL(tables2, options.fulltext);
|
|
32
32
|
await client.exec(migrationSql);
|
|
33
33
|
const db = pglite$1.drizzle(client);
|
|
34
|
-
const backend =
|
|
34
|
+
const backend = chunkXQNKN3UF_cjs.createPostgresBackend(db, {
|
|
35
35
|
...options.schemaProvisioning === void 0 ? {} : { schemaProvisioning: options.schemaProvisioning },
|
|
36
36
|
tables: tables2,
|
|
37
37
|
...vectorEnabled ? {} : { vector: false },
|
|
38
38
|
...options.fulltext === void 0 ? {} : { fulltext: options.fulltext }
|
|
39
39
|
});
|
|
40
|
-
const managedBackend =
|
|
40
|
+
const managedBackend = chunk6JRVV2SS_cjs.wrapWithManagedClose(backend, async () => {
|
|
41
41
|
await client.close();
|
|
42
42
|
});
|
|
43
43
|
return {
|
|
44
|
-
backend:
|
|
44
|
+
backend: chunkI7SBZJI2_cjs.markBundledRootAutocommitEligible(managedBackend),
|
|
45
45
|
db,
|
|
46
46
|
client
|
|
47
47
|
};
|
|
48
48
|
} catch (error) {
|
|
49
|
-
return
|
|
49
|
+
return chunk6JRVV2SS_cjs.closeAfterFailure(client, error);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
exports.createLocalPgliteBackend = createLocalPgliteBackend;
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-MGCPSR4C.cjs.map
|
|
55
|
+
//# sourceMappingURL=chunk-MGCPSR4C.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/postgres/pglite.ts"],"names":["ConfigurationError","tables","PGlite","generatePostgresMigrationSQL","generateVectorlessPostgresMigrationSQL","drizzle","createPostgresBackend","wrapWithManagedClose","markBundledRootAutocommitEligible","closeAfterFailure"],"mappings":";;;;;;;;;AAsJA,eAAe,4BAAA,GAAmD;AAChE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAO,+BAA+B,CAAA;AAC5D,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAIA,oCAAA;AAAA,MACR,2PAAA;AAAA,MAIA,EAAE,OAAA,EAAS,QAAA,EAAU,UAAA,EAAY,+BAAA,EAAgC;AAAA,MACjE,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAoBA,eAAsB,wBAAA,CACpB,OAAA,GAAqC,EAAC,EACH;AACnC,EAAA,MAAMC,OAAAA,GAAS,QAAQ,MAAA,IAAUA,wBAAA;AAMjC,EAAA,MAAM,eAAA,GACJ,QAAQ,MAAA,KAAW,KAAA,GACjB,SACC,OAAA,CAAQ,MAAA,IAAW,MAAM,4BAAA,EAA6B;AAC3D,EAAA,MAAM,gBAAgB,eAAA,KAAoB,MAAA;AAO1C,EAAA,MAAM,MAAA,GAAS,MAAMC,aAAA,CAAO,MAAA,CAAO;AAAA,IACjC,GAAI,QAAQ,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACpE,GAAI,eAAA,KAAoB,MAAA,GACtB,EAAC,GACD,EAAE,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAgB;AAAE,GAC7C,CAAA;AAED,EAAA,IAAI;AAGF,IAAA,MAAM,YAAA,GACJ,aAAA,GACEC,8CAAA,CAA6BF,OAAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA,GACrDG,wDAAA,CAAuCH,OAAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA;AACnE,IAAA,MAAM,MAAA,CAAO,KAAK,YAAY,CAAA;AAE9B,IAAA,MAAM,EAAA,GAAKI,iBAAQ,MAAM,CAAA;AACzB,IAAA,MAAM,OAAA,GAAUC,wCAAsB,EAAA,EAAI;AAAA,MACxC,GAAI,QAAQ,kBAAA,KAAuB,KAAA,CAAA,GACjC,EAAC,GACD,EAAE,kBAAA,EAAoB,OAAA,CAAQ,kBAAA,EAAmB;AAAA,MACnD,MAAA,EAAAL,OAAAA;AAAA,MACA,GAAI,aAAA,GAAgB,EAAC,GAAI,EAAE,QAAQ,KAAA,EAAM;AAAA,MACzC,GAAI,QAAQ,QAAA,KAAa,KAAA,CAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA;AAAS,KACxE,CAAA;AACD,IAAA,MAAM,cAAA,GAAiBM,sCAAA,CAAqB,OAAA,EAAS,YAAY;AAC/D,MAAA,MAAM,OAAO,KAAA,EAAM;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,OAAA,EAASC,oDAAkC,cAAc,CAAA;AAAA,MACzD,EAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAOC,mCAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,EACxC;AACF","file":"chunk-L2GBVYRU.cjs","sourcesContent":["/**\n * Local PGlite backend — Postgres-in-WASM, running in-process.\n *\n * [PGlite](https://pglite.dev/) is a full Postgres compiled to WebAssembly\n * that runs inside the Node/Bun/Deno/browser process with no server and no\n * native addon. This is the batteries-included Postgres analog of\n * `createLocalSqliteBackend`: it constructs a PGlite instance, loads the\n * pgvector extension, runs the schema DDL, and returns a ready\n * `{ backend, db }` pair whose `close()` disposes the engine.\n *\n * `@electric-sql/pglite` is an optional peer dependency. Vector support\n * additionally needs `@electric-sql/pglite-pgvector` (PGlite ≥ 0.5 ships\n * pgvector as a separate package). Install what you need:\n *\n * ```bash\n * pnpm add @electric-sql/pglite @electric-sql/pglite-pgvector\n * ```\n *\n * @example In-memory database (default, vector enabled)\n * ```typescript\n * import { createLocalPgliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/postgres/pglite\";\n *\n * const { backend } = await createLocalPgliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Persistent on-disk database\n * ```typescript\n * const { backend, db } = await createLocalPgliteBackend({ dataDir: \"./pgdata\" });\n * ```\n *\n * @example No vector support (skip the pgvector extension)\n * ```typescript\n * const { backend } = await createLocalPgliteBackend({ vector: false });\n * ```\n *\n * PGlite is single-connection and serial: there is no pooling, so concurrent\n * `store.transaction()` calls queue rather than run in parallel.\n */\nimport { type Extension, PGlite } from \"@electric-sql/pglite\";\nimport { drizzle, type PgliteDatabase } from \"drizzle-orm/pglite\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { type FulltextStrategy } from \"../../query/dialect/fulltext-strategy\";\nimport { markBundledRootAutocommitEligible } from \"../capabilities/autocommit-single-statement\";\nimport { wrapWithManagedClose } from \"../derive-backend\";\nexport type { GraphIdentityConfig } from \"../../core/define-graph\";\nimport {\n generatePostgresMigrationSQL,\n generateVectorlessPostgresMigrationSQL,\n} from \"../drizzle/ddl\";\nimport { type AnyPgTransaction } from \"../drizzle/execution\";\nexport type { AnyPgDatabase, AnyPgTransaction } from \"../drizzle/execution\";\nimport {\n createPostgresBackend,\n type PostgresTables,\n tables as defaultTables,\n} from \"../drizzle/postgres\";\nimport {\n type AdapterBackend,\n closeAfterFailure,\n type SchemaProvisioning,\n} from \"../types\";\nexport type {\n ContributionDiagnostic,\n ContributionDiagnosticState,\n ContributionRepairEntry,\n ContributionRepairResult,\n} from \"../types\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a local PGlite backend.\n */\nexport type LocalPgliteBackendOptions = Readonly<{\n /**\n * PGlite data directory. Omit for an in-memory database (the default).\n * Accepts any PGlite data-dir spec: a filesystem path (`\"./pgdata\"`),\n * `\"memory://\"`, or a browser/runtime-specific scheme such as\n * `\"idb://my-db\"`.\n */\n dataDir?: string;\n\n /**\n * Custom table definitions. Defaults to standard TypeGraph table names.\n */\n tables?: PostgresTables;\n\n /**\n * Controls the pgvector stack:\n *\n * - **omitted (default)** — load pgvector from `@electric-sql/pglite-pgvector`\n * and run `CREATE EXTENSION vector`, so embedding fields work out of the\n * box. Throws a {@link ConfigurationError} if the package isn't installed.\n * - **`false`** — skip the extension entirely; the backend advertises no\n * vector capability (mirroring a SQLite connection without sqlite-vec).\n * Use when a graph carries no embeddings, or to avoid the extension dep.\n * - **a PGlite `Extension`** — bring your own pgvector build or custom\n * extension packaging. Decouples this helper from a specific pgvector\n * package version.\n */\n vector?: false | Extension;\n\n /**\n * Override the fulltext strategy. Defaults to `tsvectorStrategy`. Pass\n * `false` to disable fulltext support entirely — the backend then\n * advertises no `capabilities.fulltext` and omits the fulltext CRUD/search\n * methods, and the installation DDL never creates the fulltext table,\n * mirroring `vector: false`.\n */\n fulltext?: FulltextStrategy | false;\n /** Opt in to provisioning within caller-owned schema transactions. */\n schemaProvisioning?: SchemaProvisioning;\n}>;\n\n/**\n * Result of creating a local PGlite backend.\n */\nexport type LocalPgliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore. Its `close()`\n * disposes the underlying PGlite engine.\n */\n backend: AdapterBackend<AnyPgTransaction>;\n\n /**\n * The underlying Drizzle database instance. Useful for direct SQL access.\n */\n db: PgliteDatabase;\n\n /**\n * The raw PGlite instance, for engine-specific operations such as\n * `dumpDataDir()` / `clone()` not surfaced through Drizzle.\n */\n client: PGlite;\n}>;\n\n// ============================================================\n// Vector extension loading\n// ============================================================\n\n/**\n * Dynamically loads the default pgvector extension from\n * `@electric-sql/pglite-pgvector`. Kept as a runtime import so the package\n * stays an optional peer dependency — callers using `vector: false` or\n * supplying their own extension never need it installed.\n */\nasync function loadDefaultPgvectorExtension(): Promise<Extension> {\n try {\n const module_ = await import(\"@electric-sql/pglite-pgvector\");\n return module_.vector;\n } catch (error) {\n throw new ConfigurationError(\n \"createLocalPgliteBackend needs the pgvector extension but \" +\n \"`@electric-sql/pglite-pgvector` could not be loaded. Install it \" +\n \"(`pnpm add @electric-sql/pglite-pgvector`), pass your own `vector` \" +\n \"extension, or set `vector: false` to disable vector support.\",\n { backend: \"pglite\", dependency: \"@electric-sql/pglite-pgvector\" },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a TypeGraph backend backed by an in-process PGlite database.\n *\n * Constructs the PGlite engine (loading pgvector unless disabled), executes\n * the schema DDL, and wires the standard Postgres backend. The returned\n * backend owns the engine: call `backend.close()` to dispose it.\n *\n * For production Postgres, or a PGlite instance you construct yourself,\n * use `createPostgresBackend` directly with your own Drizzle database — the\n * execution fast path detects PGlite and routes it correctly.\n *\n * @param options - Configuration options\n * @returns Backend, Drizzle database, and raw PGlite client\n */\nexport async function createLocalPgliteBackend(\n options: LocalPgliteBackendOptions = {},\n): Promise<LocalPgliteBackendResult> {\n const tables = options.tables ?? defaultTables;\n\n // pgvector lives in the WASM instance, so the extension must be passed at\n // construction — `CREATE EXTENSION vector` alone can't pull it in. An\n // explicitly supplied extension wins; `false` disables; otherwise load the\n // default package.\n const vectorExtension =\n options.vector === false ?\n undefined\n : (options.vector ?? (await loadDefaultPgvectorExtension()));\n const vectorEnabled = vectorExtension !== undefined;\n\n // Construct via the single options-object form (passing `dataDir` as a\n // field), not the positional `create(dataDir, options)` overload: with a\n // leading `undefined` dataDir, that overload silently drops `extensions`\n // (\"extension vector is not available\"). The options form loads them for\n // both the in-memory and on-disk cases.\n const client = await PGlite.create({\n ...(options.dataDir === undefined ? {} : { dataDir: options.dataDir }),\n ...(vectorExtension === undefined ?\n {}\n : { extensions: { vector: vectorExtension } }),\n });\n\n try {\n // `exec` runs a multi-statement batch (DDL + the pgvector `CREATE\n // EXTENSION` when enabled) in one round trip.\n const migrationSql =\n vectorEnabled ?\n generatePostgresMigrationSQL(tables, options.fulltext)\n : generateVectorlessPostgresMigrationSQL(tables, options.fulltext);\n await client.exec(migrationSql);\n\n const db = drizzle(client);\n const backend = createPostgresBackend(db, {\n ...(options.schemaProvisioning === undefined ?\n {}\n : { schemaProvisioning: options.schemaProvisioning }),\n tables,\n ...(vectorEnabled ? {} : { vector: false }),\n ...(options.fulltext === undefined ? {} : { fulltext: options.fulltext }),\n });\n const managedBackend = wrapWithManagedClose(backend, async () => {\n await client.close();\n });\n\n return {\n backend: markBundledRootAutocommitEligible(managedBackend),\n db,\n client,\n };\n } catch (error) {\n return closeAfterFailure(client, error);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/backend/postgres/pglite.ts"],"names":["ConfigurationError","tables","PGlite","generatePostgresMigrationSQL","generateVectorlessPostgresMigrationSQL","drizzle","createPostgresBackend","wrapWithManagedClose","markBundledRootAutocommitEligible","closeAfterFailure"],"mappings":";;;;;;;;;AAsJA,eAAe,4BAAA,GAAmD;AAChE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAO,+BAA+B,CAAA;AAC5D,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAIA,oCAAA;AAAA,MACR,2PAAA;AAAA,MAIA,EAAE,OAAA,EAAS,QAAA,EAAU,UAAA,EAAY,+BAAA,EAAgC;AAAA,MACjE,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAoBA,eAAsB,wBAAA,CACpB,OAAA,GAAqC,EAAC,EACH;AACnC,EAAA,MAAMC,OAAAA,GAAS,QAAQ,MAAA,IAAUA,wBAAA;AAMjC,EAAA,MAAM,eAAA,GACJ,QAAQ,MAAA,KAAW,KAAA,GACjB,SACC,OAAA,CAAQ,MAAA,IAAW,MAAM,4BAAA,EAA6B;AAC3D,EAAA,MAAM,gBAAgB,eAAA,KAAoB,MAAA;AAO1C,EAAA,MAAM,MAAA,GAAS,MAAMC,aAAA,CAAO,MAAA,CAAO;AAAA,IACjC,GAAI,QAAQ,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACpE,GAAI,eAAA,KAAoB,MAAA,GACtB,EAAC,GACD,EAAE,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAgB;AAAE,GAC7C,CAAA;AAED,EAAA,IAAI;AAGF,IAAA,MAAM,YAAA,GACJ,aAAA,GACEC,8CAAA,CAA6BF,OAAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA,GACrDG,wDAAA,CAAuCH,OAAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA;AACnE,IAAA,MAAM,MAAA,CAAO,KAAK,YAAY,CAAA;AAE9B,IAAA,MAAM,EAAA,GAAKI,iBAAQ,MAAM,CAAA;AACzB,IAAA,MAAM,OAAA,GAAUC,wCAAsB,EAAA,EAAI;AAAA,MACxC,GAAI,QAAQ,kBAAA,KAAuB,KAAA,CAAA,GACjC,EAAC,GACD,EAAE,kBAAA,EAAoB,OAAA,CAAQ,kBAAA,EAAmB;AAAA,MACnD,MAAA,EAAAL,OAAAA;AAAA,MACA,GAAI,aAAA,GAAgB,EAAC,GAAI,EAAE,QAAQ,KAAA,EAAM;AAAA,MACzC,GAAI,QAAQ,QAAA,KAAa,KAAA,CAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA;AAAS,KACxE,CAAA;AACD,IAAA,MAAM,cAAA,GAAiBM,sCAAA,CAAqB,OAAA,EAAS,YAAY;AAC/D,MAAA,MAAM,OAAO,KAAA,EAAM;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,OAAA,EAASC,oDAAkC,cAAc,CAAA;AAAA,MACzD,EAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAOC,mCAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,EACxC;AACF","file":"chunk-MGCPSR4C.cjs","sourcesContent":["/**\n * Local PGlite backend — Postgres-in-WASM, running in-process.\n *\n * [PGlite](https://pglite.dev/) is a full Postgres compiled to WebAssembly\n * that runs inside the Node/Bun/Deno/browser process with no server and no\n * native addon. This is the batteries-included Postgres analog of\n * `createLocalSqliteBackend`: it constructs a PGlite instance, loads the\n * pgvector extension, runs the schema DDL, and returns a ready\n * `{ backend, db }` pair whose `close()` disposes the engine.\n *\n * `@electric-sql/pglite` is an optional peer dependency. Vector support\n * additionally needs `@electric-sql/pglite-pgvector` (PGlite ≥ 0.5 ships\n * pgvector as a separate package). Install what you need:\n *\n * ```bash\n * pnpm add @electric-sql/pglite @electric-sql/pglite-pgvector\n * ```\n *\n * @example In-memory database (default, vector enabled)\n * ```typescript\n * import { createLocalPgliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/postgres/pglite\";\n *\n * const { backend } = await createLocalPgliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Persistent on-disk database\n * ```typescript\n * const { backend, db } = await createLocalPgliteBackend({ dataDir: \"./pgdata\" });\n * ```\n *\n * @example No vector support (skip the pgvector extension)\n * ```typescript\n * const { backend } = await createLocalPgliteBackend({ vector: false });\n * ```\n *\n * PGlite is single-connection and serial: there is no pooling, so concurrent\n * `store.transaction()` calls queue rather than run in parallel.\n */\nimport { type Extension, PGlite } from \"@electric-sql/pglite\";\nimport { drizzle, type PgliteDatabase } from \"drizzle-orm/pglite\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { type FulltextStrategy } from \"../../query/dialect/fulltext-strategy\";\nimport { markBundledRootAutocommitEligible } from \"../capabilities/autocommit-single-statement\";\nimport { wrapWithManagedClose } from \"../derive-backend\";\nexport type { GraphIdentityConfig } from \"../../core/define-graph\";\nimport {\n generatePostgresMigrationSQL,\n generateVectorlessPostgresMigrationSQL,\n} from \"../drizzle/ddl\";\nimport { type AnyPgTransaction } from \"../drizzle/execution\";\nexport type { AnyPgDatabase, AnyPgTransaction } from \"../drizzle/execution\";\nimport {\n createPostgresBackend,\n type PostgresTables,\n tables as defaultTables,\n} from \"../drizzle/postgres\";\nimport {\n type AdapterBackend,\n closeAfterFailure,\n type SchemaProvisioning,\n} from \"../types\";\nexport type {\n ContributionDiagnostic,\n ContributionDiagnosticState,\n ContributionRepairEntry,\n ContributionRepairResult,\n} from \"../types\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a local PGlite backend.\n */\nexport type LocalPgliteBackendOptions = Readonly<{\n /**\n * PGlite data directory. Omit for an in-memory database (the default).\n * Accepts any PGlite data-dir spec: a filesystem path (`\"./pgdata\"`),\n * `\"memory://\"`, or a browser/runtime-specific scheme such as\n * `\"idb://my-db\"`.\n */\n dataDir?: string;\n\n /**\n * Custom table definitions. Defaults to standard TypeGraph table names.\n */\n tables?: PostgresTables;\n\n /**\n * Controls the pgvector stack:\n *\n * - **omitted (default)** — load pgvector from `@electric-sql/pglite-pgvector`\n * and run `CREATE EXTENSION vector`, so embedding fields work out of the\n * box. Throws a {@link ConfigurationError} if the package isn't installed.\n * - **`false`** — skip the extension entirely; the backend advertises no\n * vector capability (mirroring a SQLite connection without sqlite-vec).\n * Use when a graph carries no embeddings, or to avoid the extension dep.\n * - **a PGlite `Extension`** — bring your own pgvector build or custom\n * extension packaging. Decouples this helper from a specific pgvector\n * package version.\n */\n vector?: false | Extension;\n\n /**\n * Override the fulltext strategy. Defaults to `tsvectorStrategy`. Pass\n * `false` to disable fulltext support entirely — the backend then\n * advertises no `capabilities.fulltext` and omits the fulltext CRUD/search\n * methods, and the installation DDL never creates the fulltext table,\n * mirroring `vector: false`.\n */\n fulltext?: FulltextStrategy | false;\n /** Opt in to provisioning within caller-owned schema transactions. */\n schemaProvisioning?: SchemaProvisioning;\n}>;\n\n/**\n * Result of creating a local PGlite backend.\n */\nexport type LocalPgliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore. Its `close()`\n * disposes the underlying PGlite engine.\n */\n backend: AdapterBackend<AnyPgTransaction>;\n\n /**\n * The underlying Drizzle database instance. Useful for direct SQL access.\n */\n db: PgliteDatabase;\n\n /**\n * The raw PGlite instance, for engine-specific operations such as\n * `dumpDataDir()` / `clone()` not surfaced through Drizzle.\n */\n client: PGlite;\n}>;\n\n// ============================================================\n// Vector extension loading\n// ============================================================\n\n/**\n * Dynamically loads the default pgvector extension from\n * `@electric-sql/pglite-pgvector`. Kept as a runtime import so the package\n * stays an optional peer dependency — callers using `vector: false` or\n * supplying their own extension never need it installed.\n */\nasync function loadDefaultPgvectorExtension(): Promise<Extension> {\n try {\n const module_ = await import(\"@electric-sql/pglite-pgvector\");\n return module_.vector;\n } catch (error) {\n throw new ConfigurationError(\n \"createLocalPgliteBackend needs the pgvector extension but \" +\n \"`@electric-sql/pglite-pgvector` could not be loaded. Install it \" +\n \"(`pnpm add @electric-sql/pglite-pgvector`), pass your own `vector` \" +\n \"extension, or set `vector: false` to disable vector support.\",\n { backend: \"pglite\", dependency: \"@electric-sql/pglite-pgvector\" },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a TypeGraph backend backed by an in-process PGlite database.\n *\n * Constructs the PGlite engine (loading pgvector unless disabled), executes\n * the schema DDL, and wires the standard Postgres backend. The returned\n * backend owns the engine: call `backend.close()` to dispose it.\n *\n * For production Postgres, or a PGlite instance you construct yourself,\n * use `createPostgresBackend` directly with your own Drizzle database — the\n * execution fast path detects PGlite and routes it correctly.\n *\n * @param options - Configuration options\n * @returns Backend, Drizzle database, and raw PGlite client\n */\nexport async function createLocalPgliteBackend(\n options: LocalPgliteBackendOptions = {},\n): Promise<LocalPgliteBackendResult> {\n const tables = options.tables ?? defaultTables;\n\n // pgvector lives in the WASM instance, so the extension must be passed at\n // construction — `CREATE EXTENSION vector` alone can't pull it in. An\n // explicitly supplied extension wins; `false` disables; otherwise load the\n // default package.\n const vectorExtension =\n options.vector === false ?\n undefined\n : (options.vector ?? (await loadDefaultPgvectorExtension()));\n const vectorEnabled = vectorExtension !== undefined;\n\n // Construct via the single options-object form (passing `dataDir` as a\n // field), not the positional `create(dataDir, options)` overload: with a\n // leading `undefined` dataDir, that overload silently drops `extensions`\n // (\"extension vector is not available\"). The options form loads them for\n // both the in-memory and on-disk cases.\n const client = await PGlite.create({\n ...(options.dataDir === undefined ? {} : { dataDir: options.dataDir }),\n ...(vectorExtension === undefined ?\n {}\n : { extensions: { vector: vectorExtension } }),\n });\n\n try {\n // `exec` runs a multi-statement batch (DDL + the pgvector `CREATE\n // EXTENSION` when enabled) in one round trip.\n const migrationSql =\n vectorEnabled ?\n generatePostgresMigrationSQL(tables, options.fulltext)\n : generateVectorlessPostgresMigrationSQL(tables, options.fulltext);\n await client.exec(migrationSql);\n\n const db = drizzle(client);\n const backend = createPostgresBackend(db, {\n ...(options.schemaProvisioning === undefined ?\n {}\n : { schemaProvisioning: options.schemaProvisioning }),\n tables,\n ...(vectorEnabled ? {} : { vector: false }),\n ...(options.fulltext === undefined ? {} : { fulltext: options.fulltext }),\n });\n const managedBackend = wrapWithManagedClose(backend, async () => {\n await client.close();\n });\n\n return {\n backend: markBundledRootAutocommitEligible(managedBackend),\n db,\n client,\n };\n } catch (error) {\n return closeAfterFailure(client, error);\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk6JRVV2SS_cjs = require('./chunk-6JRVV2SS.cjs');
|
|
4
4
|
var chunk7XYPLAPL_cjs = require('./chunk-7XYPLAPL.cjs');
|
|
5
5
|
|
|
6
6
|
// src/backend/capabilities/atomic-sql-program.ts
|
|
@@ -525,7 +525,7 @@ function throwAtomicMutationProgramRegistrationMismatch(target) {
|
|
|
525
525
|
);
|
|
526
526
|
}
|
|
527
527
|
function registerAtomicMutationPrograms(target, registration) {
|
|
528
|
-
if (!
|
|
528
|
+
if (!chunk6JRVV2SS_cjs.supportsAtomicBatch(target) || !hasAtomicSqlProgramRegistration(target)) {
|
|
529
529
|
throwAtomicMutationProgramRegistrationMismatch(target);
|
|
530
530
|
}
|
|
531
531
|
if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {
|
|
@@ -582,5 +582,5 @@ exports.supportsAtomicNodeClaimFamily = supportsAtomicNodeClaimFamily;
|
|
|
582
582
|
exports.supportsAtomicNodeClaims = supportsAtomicNodeClaims;
|
|
583
583
|
exports.supportsAtomicNodeProjections = supportsAtomicNodeProjections;
|
|
584
584
|
exports.withAtomicMutationProgramDispatchObserver = withAtomicMutationProgramDispatchObserver;
|
|
585
|
-
//# sourceMappingURL=chunk-
|
|
586
|
-
//# sourceMappingURL=chunk-
|
|
585
|
+
//# sourceMappingURL=chunk-MRUOOAIQ.cjs.map
|
|
586
|
+
//# sourceMappingURL=chunk-MRUOOAIQ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":["CompilerInvariantError","ConfigurationError","supportsAtomicBatch"],"mappings":"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","file":"chunk-KDNRACRG.cjs","sourcesContent":["/**\n * Internal execution boundary for a closed, precompiled SQL write program.\n *\n * This is deliberately an out-of-band exact-resource capability. An author\n * registers either a root that owns the atomic boundary or an already-open\n * transaction session. Derived backends and other transaction objects do not\n * inherit the registration. A static batch is therefore never forwarded\n * through a wrapper whose behavior has not been audited for the program\n * contract.\n */\nimport { CompilerInvariantError, ConfigurationError } from \"../../errors\";\nimport type { GraphBackend, TransactionBackend } from \"../types\";\n\nexport type AtomicSqlRow = Readonly<Record<string, unknown>>;\n\n/** A transport-ready statement in the portable atomic-program protocol. */\nexport type CompiledAtomicSqlStatement = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\n/** A native all-or-nothing dispatch for a closed statement sequence. */\nexport type AtomicSqlBatchExecutor = <TRow>(\n statements: readonly CompiledAtomicSqlStatement[],\n) => Promise<readonly (readonly TRow[])[]>;\n\nexport type AtomicSqlProgramAdapter = Readonly<{\n executeAtomicBatch?: AtomicSqlBatchExecutor;\n}>;\n\n/** The transport forms accepted by an atomic program author. */\nexport type AtomicSqlProgramRegistration =\n AtomicSqlBatchExecutor | AtomicSqlProgramAdapter;\n\ntype AtomicSqlResultCardinality = \"none\" | \"one\" | \"many\";\n\n/** One closed statement and the typed decoder for its result slot. */\ntype AtomicSqlProgramSlot<TResult> = Readonly<{\n statement: CompiledAtomicSqlStatement;\n cardinality: AtomicSqlResultCardinality;\n decode: (rows: readonly AtomicSqlRow[]) => TResult;\n}>;\n\n/**\n * A statically closed program. Every slot uses the same result union so a\n * heterogeneous node/edge program can still preserve a typed result at the\n * program boundary without introducing `any` into the erased executor.\n */\nexport type AtomicSqlProgram<TRowResult, TResult> = Readonly<{\n slots: readonly AtomicSqlProgramSlot<TRowResult>[];\n assemble: (results: readonly TRowResult[]) => TResult;\n}>;\n\nexport type AtomicSqlProgramExecutor = Readonly<{\n execute: <TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ) => Promise<TResult>;\n}>;\n\ntype RegisteredAtomicSqlProgram = Readonly<{\n executeAtomicBatch: AtomicSqlBatchExecutor;\n executor: AtomicSqlProgramExecutor;\n}>;\n\nconst ATOMIC_SQL_PROGRAM_EXECUTORS = new WeakMap<\n object,\n RegisteredAtomicSqlProgram\n>();\n\nfunction assertResultCardinality(\n slot: Readonly<{ cardinality: AtomicSqlResultCardinality }>,\n index: number,\n rows: readonly AtomicSqlRow[],\n): void {\n const valid =\n slot.cardinality === \"none\" ? rows.length === 0\n : slot.cardinality === \"one\" ? rows.length === 1\n : true;\n if (valid) return;\n throw new CompilerInvariantError(\n `Atomic SQL program slot ${index} returned ${rows.length} rows, ` +\n `expected ${slot.cardinality}.`,\n {\n slot: index,\n cardinality: slot.cardinality,\n rowCount: rows.length,\n },\n );\n}\n\nfunction assertResultSlotCount(\n expected: number,\n actual: readonly (readonly AtomicSqlRow[])[],\n): void {\n if (expected === actual.length) return;\n throw new CompilerInvariantError(\n `Atomic SQL program returned ${actual.length} result slots, ` +\n `expected ${expected}.`,\n { expected, actual: actual.length },\n );\n}\n\nfunction isAtomicSqlResultSlots(\n value: unknown,\n): value is readonly (readonly AtomicSqlRow[])[] {\n return Array.isArray(value) && value.every((slot) => Array.isArray(slot));\n}\n\n/** Executes the one canonical closed-program protocol. */\nasync function executeAtomicSqlProgram<TRowResult, TResult>(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n program: AtomicSqlProgram<TRowResult, TResult>,\n): Promise<TResult> {\n if (program.slots.length === 0) return program.assemble([]);\n\n const statements = program.slots.map((slot) => slot.statement);\n const result: unknown = await executeAtomicBatch<AtomicSqlRow>(statements);\n if (!isAtomicSqlResultSlots(result)) {\n throw new CompilerInvariantError(\n \"Atomic SQL program executor returned malformed result slots.\",\n { resultType: typeof result },\n );\n }\n const rows = result;\n\n assertResultSlotCount(program.slots.length, rows);\n const decoded = program.slots.map((slot, index) => {\n const slotRows = rows[index];\n if (slotRows === undefined) {\n throw new CompilerInvariantError(\n `Atomic SQL program result slot ${index} is missing.`,\n { slot: index },\n );\n }\n assertResultCardinality(slot, index, slotRows);\n return slot.decode(slotRows);\n });\n\n return program.assemble(decoded);\n}\n\nfunction createExecutor(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n): AtomicSqlProgramExecutor {\n return {\n async execute<TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ): Promise<TResult> {\n return executeAtomicSqlProgram(executeAtomicBatch, program);\n },\n };\n}\n\n/** @internal Creates the executor shared by lowering and root registration. */\nexport function createAtomicSqlProgramExecutor(\n adapter: AtomicSqlProgramAdapter,\n): AtomicSqlProgramExecutor | undefined {\n const executeAtomicBatch = adapter.executeAtomicBatch;\n return typeof executeAtomicBatch === \"function\" ?\n createExecutor(executeAtomicBatch)\n : undefined;\n}\n\nfunction normalizeAtomicSqlProgramRegistration(\n registration: AtomicSqlProgramRegistration,\n): RegisteredAtomicSqlProgram | undefined {\n const adapter: AtomicSqlProgramAdapter =\n typeof registration === \"function\" ?\n { executeAtomicBatch: registration }\n : registration;\n const executeAtomicBatch = adapter.executeAtomicBatch;\n const executor = createAtomicSqlProgramExecutor(adapter);\n return executeAtomicBatch === undefined || executor === undefined ?\n undefined\n : { executeAtomicBatch, executor };\n}\n\nfunction throwAtomicSqlProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n registration: RegisteredAtomicSqlProgram | undefined,\n): never {\n const declaration = target.capabilities.execution.atomicBatch;\n throw new ConfigurationError(\n \"An atomic SQL program requires exact-session atomic-batch authority and a usable batch executor.\",\n {\n code: \"ATOMIC_SQL_PROGRAM_REGISTRATION_MISMATCH\",\n declared: declaration,\n registered: registration !== undefined,\n },\n {\n suggestion:\n 'Declare `atomicBatch: \"root\"` on an exact root executor or `\"session\"` on an already-open transaction session, then register that exact object.',\n },\n );\n}\n\nfunction declaredCommandSession(target: object): unknown {\n const commands = Reflect.get(target, \"commands\") as unknown;\n if (typeof commands !== \"object\" || commands === null) return;\n return Reflect.get(commands, \"session\") as unknown;\n}\n\n/**\n * Registers an atomic SQL program executor for one exact backend resource.\n *\n * The declaration and executable transport are checked together so a backend\n * cannot claim atomic execution while omitting the executor, nor expose\n * an executor without declaring the session on which it is valid. The\n * registration is keyed by object identity; derived backends and other\n * transaction sessions therefore do not resolve this program.\n */\nexport function registerAtomicSqlProgram<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicSqlProgramRegistration): T {\n if (ATOMIC_SQL_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"An atomic SQL program is already registered for this exact backend resource.\",\n { code: \"ATOMIC_SQL_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n const executor = normalizeAtomicSqlProgramRegistration(registration);\n const declaration = target.capabilities.execution.atomicBatch;\n const declaredSession = declaredCommandSession(target);\n const sessionMatches =\n (declaration === \"root\" && declaredSession === \"root\") ||\n (declaration === \"session\" && declaredSession === \"transaction\");\n if (declaration === \"none\" || !sessionMatches || executor === undefined) {\n throwAtomicSqlProgramRegistrationMismatch(target, executor);\n }\n ATOMIC_SQL_PROGRAM_EXECUTORS.set(target, executor);\n return target;\n}\n\n/**\n * Resolves the static program executor for an exact registered resource.\n * Other transaction sessions and derived/projected backends return `undefined`.\n */\nexport function resolveAtomicSqlProgramExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlProgramExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executor;\n}\n\n/** @internal Resolves the exact batch function registered on one resource. */\nexport function resolveRegisteredAtomicSqlBatchExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlBatchExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executeAtomicBatch;\n}\n\n/** Returns whether this exact object owns a registered atomic SQL transport. */\nexport function hasAtomicSqlProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.has(target);\n}\n","/**\n * Exact-resource execution profile for closed semantic mutation programs.\n *\n * The transport-level atomic SQL executor answers only \"can this exact resource\n * submit a closed statement sequence atomically?\" This profile is the next\n * layer up: it names the TypeGraph mutations the backend can lower onto that\n * transport. Keeping every mutation family in one exact-resource registration\n * prevents each new operation from inventing another provenance WeakMap.\n */\nimport { ConfigurationError } from \"../../errors\";\nimport type {\n ClaimEdgeCardinalityParams,\n EdgeConvergenceMatch,\n EdgeRow,\n GraphBackend,\n InsertEdgeParams,\n InsertNodeParams,\n NodeInsertClaim,\n NodeInsertProjection,\n NodeRow,\n SchemaWriteFenceParams,\n TransactionBackend,\n} from \"../types\";\nimport { supportsAtomicBatch } from \"../types\";\nimport {\n hasAtomicSqlProgramRegistration,\n registerAtomicSqlProgram,\n resolveRegisteredAtomicSqlBatchExecutor,\n} from \"./atomic-sql-program\";\n\n/** How a node batch member obtained the identifier stored by its program. */\nexport type AtomicNodeBatchIdSource = \"generated\" | \"caller\";\n/** Whether a node batch returns only its count or its ordered postimages. */\nexport type AtomicNodeBatchResultMode = \"count\" | \"rows\";\n\n/** Independently provable claim semantics accepted by a node mutation family. */\nexport type AtomicNodeClaimFamily = \"disjointness\" | \"uniqueness\";\n\n/** Independently provable derived-storage families in a node program. */\nexport type AtomicNodeProjectionFamily = \"embedding\" | \"fulltext\";\n\n/**\n * One complete derived-storage transition attached to a node postimage.\n *\n * Identity stays on the containing row entry so a projection cannot target a\n * different node. Embedding deletes are explicit because updates and\n * caller-id resurrection can remove a value that previously existed.\n */\nexport type AtomicNodeProjection =\n | Extract<NodeInsertProjection, { kind: \"fulltext\" }>\n | Readonly<{\n kind: \"embedding\";\n action: \"upsert\";\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>\n | Readonly<{\n kind: \"embedding\";\n action: \"delete\";\n fieldPath: string;\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>;\n\n/** Closed derived-storage envelope advertised by one node executor. */\nexport type AtomicNodeProjectionSupport = Readonly<{\n families: readonly AtomicNodeProjectionFamily[];\n}>;\n\n/** Closed claim envelope advertised by one node mutation executor. */\nexport type AtomicNodeClaimSupport = Readonly<{\n /** Independently proved claim families; an omitted family is unsupported. */\n families: readonly AtomicNodeClaimFamily[];\n /**\n * Maximum compiled claim/probe bind cost one member may contribute to its\n * write gate.\n * Compute a member's required value with {@link atomicNodeClaimInputCost};\n * backend implementations must not reproduce the SQL cost formula.\n * Total batch size is deliberately absent: the executor chunks statements\n * inside one atomic transport submission.\n */\n maxInputCostPerEntry: number;\n}>;\n\nfunction isAtomicNodeClaimFamily(\n value: unknown,\n): value is AtomicNodeClaimFamily {\n return value === \"disjointness\" || value === \"uniqueness\";\n}\n\nfunction assertAtomicNodeClaimFamilies(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (\n Array.isArray(value) &&\n new Set(value).size === value.length &&\n value.every((claimFamily) => isAtomicNodeClaimFamily(claimFamily))\n ) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicNodeClaimSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires claimSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"claimSupport\",\n value,\n },\n );\n }\n const support = value as Readonly<Record<PropertyKey, unknown>>;\n assertAtomicNodeClaimFamilies(\n family,\n \"claimSupport.families\",\n support[\"families\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"claimSupport.maxInputCostPerEntry\",\n support[\"maxInputCostPerEntry\"],\n );\n}\n\nfunction isAtomicNodeProjectionFamily(\n value: unknown,\n): value is AtomicNodeProjectionFamily {\n return value === \"embedding\" || value === \"fulltext\";\n}\n\nfunction assertAtomicNodeProjectionSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\" | \"updateNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires projectionSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport\",\n value,\n },\n );\n }\n const families = (value as Readonly<Record<PropertyKey, unknown>>)[\n \"families\"\n ];\n if (\n !Array.isArray(families) ||\n new Set(families).size !== families.length ||\n !families.every((projectionFamily) =>\n isAtomicNodeProjectionFamily(projectionFamily),\n )\n ) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct projection families.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport.families\",\n value: families,\n },\n );\n }\n}\n\n/** The one owner of claim-verdict to advertised-family correlation. */\nfunction atomicNodeClaimFamily(claim: NodeInsertClaim): AtomicNodeClaimFamily {\n return claim.verdict.kind;\n}\n\n/** Bind cost of one canonical claim row in an atomic node write gate. */\nconst ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST = 6;\n\n/** Bind cost of one legacy uniqueness compatibility probe. */\nconst ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST = 9;\n\n/** Bind cost of one legacy disjointness compatibility probe. */\nconst ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST = 6;\n\n/** Exact compiled claim/probe bind cost one member contributes to its write gate. */\nexport function atomicNodeClaimInputCost(\n claims: readonly NodeInsertClaim[],\n): number {\n let cost = 0;\n for (const claim of claims) {\n cost += ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST;\n cost +=\n claim.verdict.kind === \"uniqueness\" ?\n ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST *\n claim.verdict.probeAxes.filter((axis) => axis !== claim.axis).length\n : ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST *\n claim.verdict.conflictingKinds.length;\n }\n return cost;\n}\n\n/** Whether one executor explicitly accepts one member's complete claim set. */\nexport function supportsAtomicNodeClaims(\n support: AtomicNodeClaimSupport | undefined,\n claims: readonly NodeInsertClaim[],\n): boolean {\n if (claims.length === 0) return true;\n if (support === undefined) return false;\n const families = new Set(support.families);\n return (\n claims.every((claim) => families.has(atomicNodeClaimFamily(claim))) &&\n atomicNodeClaimInputCost(claims) <= support.maxInputCostPerEntry\n );\n}\n\n/** Whether an executor can admit at least one member of a claim family. */\nexport function supportsAtomicNodeClaimFamily(\n support: AtomicNodeClaimSupport | undefined,\n family: AtomicNodeClaimFamily,\n): boolean {\n return (\n (support?.maxInputCostPerEntry ?? 0) > 0 &&\n support?.families.includes(family) === true\n );\n}\n\n/** Whether one executor explicitly accepts every normalized projection. */\nexport function supportsAtomicNodeProjections(\n support: AtomicNodeProjectionSupport | undefined,\n families: readonly AtomicNodeProjectionFamily[],\n): boolean {\n if (families.length === 0) return true;\n if (support === undefined) return false;\n const advertised = new Set(support.families);\n return families.every((family) => advertised.has(family));\n}\n\n/** One normalized node-create member supplied to a semantic executor. */\nexport type AtomicNodeBatchEntry = Readonly<{\n idSource: AtomicNodeBatchIdSource;\n params: InsertNodeParams;\n /** Complete canonically ordered claims this row owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Complete schema-fenced input to an atomic node-create family. */\nexport type AtomicNodeBatchInput = Readonly<{\n entries: readonly AtomicNodeBatchEntry[];\n resultMode: AtomicNodeBatchResultMode;\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes the complete eligible node-create family for one exact root. */\nexport interface AtomicNodeBatchExecutor {\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"count\" }>,\n ): Promise<number>;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"rows\" }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One complete, preimage-free replacement supplied to a semantic executor. */\nexport type AtomicNodeReplacementEntry = Readonly<{\n params: InsertNodeParams;\n /** Complete canonically ordered claims the replacement postimage owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the replacement postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Any node entry whose complete postimage drives projections/assertions. */\nexport type AtomicNodePostimageEntry =\n AtomicNodeBatchEntry | AtomicNodeReplacementEntry;\n\n/** Executes complete blind node replacements for one exact resource. */\nexport interface AtomicNodeReplacementBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: Readonly<{ plain: number; claimed: number }>;\n /** Exact no-SQL admission proof for the prepared replacement work. */\n readonly accepts?: (\n entries: readonly AtomicNodeReplacementEntry[],\n ) => boolean;\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Claim families whose earlier owner rows this program releases. */\n readonly releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeReplacementEntry[];\n /** Whether earlier owner claims must be released before acquisition. */\n releaseClaims: boolean;\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** Count-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchCountInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"count\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Postimage-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchRowsInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"rows\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes complete eligible direct edge creates for one exact root. */\nexport interface AtomicEdgeBatchExecutor {\n (input: AtomicEdgeBatchCountInput): Promise<number>;\n (input: AtomicEdgeBatchRowsInput): Promise<readonly EdgeRow[]>;\n}\n\n/** One normalized durable edge-convergence member. */\nexport type AtomicEdgeConvergenceEntry = Readonly<{\n params: InsertEdgeParams;\n match: EdgeConvergenceMatch;\n}>;\n\n/** Authoritative row and outcome returned by durable convergence. */\nexport type AtomicEdgeConvergenceResult = Readonly<{\n row: EdgeRow;\n outcome: \"created\" | \"found\";\n}>;\n\n/** Complete schema-fenced durable edge-convergence input. */\nexport type AtomicEdgeConvergenceInput = Readonly<{\n kind: \"durable-convergence\";\n entries: readonly AtomicEdgeConvergenceEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Complete schema-fenced direct edge-delete input. */\nexport type AtomicEdgeDeleteBatchInput = Readonly<{\n graphId: string;\n expectedKind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Delete count plus explicit evidence that the schema fence matched. */\nexport type AtomicDeleteBatchResult = Readonly<{\n affectedCount: number;\n schemaFenceMatched: boolean;\n}>;\n\n/** Executes complete eligible direct edge deletes for one exact root. */\nexport type AtomicEdgeDeleteBatchExecutor = (\n input: AtomicEdgeDeleteBatchInput,\n) => Promise<AtomicDeleteBatchResult>;\n\n/** Complete schema-fenced direct node-delete input. */\nexport type AtomicNodeDeleteBatchInput = Readonly<{\n graphId: string;\n kind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/**\n * Executes complete eligible direct node deletes for one exact root.\n *\n * Keep the callable as a function type intersected with its metadata. The API\n * compatibility inventory follows function aliases into their input types;\n * changing this to a callable interface would hide that contravariant edge.\n */\nexport type AtomicNodeDeleteBatchExecutor = Readonly<{\n /** Claim families whose owned sidecars this program releases. */\n releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n}> &\n ((input: AtomicNodeDeleteBatchInput) => Promise<AtomicDeleteBatchResult>);\n\n/** One authoritative node preimage and replacement used by a resolved set. */\nexport type AtomicNodeResolvedUpdateEntry = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Readonly<Record<string, unknown>>;\n expectedVersion: number;\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Executes a complete eligible resolved node update set. */\nexport interface AtomicNodeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One authoritative edge preimage and replacement used by a resolved set. */\nexport type AtomicEdgeResolvedUpdateEntry = Readonly<{\n existing: EdgeRow;\n props: Readonly<Record<string, unknown>>;\n}>;\n\n/** Executes a complete eligible resolved edge update set. */\nexport interface AtomicEdgeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n (\n input: Readonly<{\n entries: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly EdgeRow[]>;\n}\n\n/** Ordered node postimages returned by a mixed resolved mutation set. */\nexport type AtomicNodeResolvedMutationSetResult = Readonly<{\n created: readonly NodeRow[];\n updated: readonly NodeRow[];\n}>;\n\n/** Executes a complete eligible mixed node create/update set. */\nexport interface AtomicNodeResolvedMutationSetExecutor {\n /** Maximum total members accepted across the program's terminal assertions. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n creates: readonly AtomicNodeBatchEntry[];\n updates: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<AtomicNodeResolvedMutationSetResult>;\n}\n\n/** Ordered edge postimages returned by a mixed resolved mutation set. */\nexport type AtomicEdgeResolvedMutationSetResult = Readonly<{\n created: readonly EdgeRow[];\n updated: readonly EdgeRow[];\n}>;\n\n/** Complete schema-fenced input to a mixed resolved edge mutation set. */\nexport type AtomicEdgeResolvedMutationSetInput = Readonly<{\n kind: \"resolved-set\";\n creates: readonly InsertEdgeParams[];\n updates: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes resolved edge sets and durable convergence for one exact root. */\nexport interface AtomicEdgeMutationProgramExecutor {\n readonly maxEntries: Readonly<{\n resolvedSet: number;\n durableConvergence: number;\n }>;\n (\n input: AtomicEdgeResolvedMutationSetInput,\n ): Promise<AtomicEdgeResolvedMutationSetResult>;\n (\n input: AtomicEdgeConvergenceInput,\n ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n}\n\n/** Internal proof that the closed SQL program rejected a missing endpoint. */\nexport class AtomicEdgeBatchEndpointRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch endpoint validation failed\", { cause });\n this.name = \"AtomicEdgeBatchEndpointRefusalError\";\n }\n}\n\n/** Internal proof that the closed SQL program refused a cardinality claim. */\nexport class AtomicEdgeBatchCardinalityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch cardinality validation failed\", { cause });\n this.name = \"AtomicEdgeBatchCardinalityRefusalError\";\n }\n}\n\n/** Internal proof that native convergence encountered a tombstoned winner. */\nexport class AtomicEdgeConvergenceTombstoneRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge convergence requires portable resurrection\", { cause });\n this.name = \"AtomicEdgeConvergenceTombstoneRefusalError\";\n }\n}\n\n/** Internal proof that an edge-delete input belongs to another collection. */\nexport class AtomicEdgeDeleteIdentityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge delete batch identity validation failed\", { cause });\n this.name = \"AtomicEdgeDeleteIdentityRefusalError\";\n }\n}\n\n/** Internal proof that a restricted node still has a live connected edge. */\nexport class AtomicNodeDeleteRestrictedRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic node delete batch restriction validation failed\", { cause });\n this.name = \"AtomicNodeDeleteRestrictedRefusalError\";\n }\n}\n\n/**\n * The semantic mutation families one exact bundled root can lower today.\n * New families extend this profile instead of adding another root registry.\n */\nexport type AtomicMutationProgramExecutor = Readonly<{\n createNodes?: AtomicNodeBatchExecutor;\n replaceNodes?: AtomicNodeReplacementBatchExecutor;\n createEdges?: AtomicEdgeBatchExecutor;\n deleteNodes?: AtomicNodeDeleteBatchExecutor;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor;\n mutateEdges?: AtomicEdgeMutationProgramExecutor;\n}>;\n\n/** Every independently enabled semantic variant in a mutation profile. */\nexport const ATOMIC_MUTATION_PROGRAM_VARIANTS = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges.resolvedSet\",\n \"mutateEdges.durableConvergence\",\n] as const;\n\n/** One independently enabled semantic variant in a mutation profile. */\nexport type AtomicMutationProgramVariant =\n (typeof ATOMIC_MUTATION_PROGRAM_VARIANTS)[number];\n\n/** One owner for the overloaded edge-mutation input/variant correlation. */\nexport const ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND = {\n \"durable-convergence\": \"mutateEdges.durableConvergence\",\n \"resolved-set\": \"mutateEdges.resolvedSet\",\n} as const satisfies Readonly<\n Record<\n | AtomicEdgeConvergenceInput[\"kind\"]\n | AtomicEdgeResolvedMutationSetInput[\"kind\"],\n Extract<AtomicMutationProgramVariant, `mutateEdges.${string}`>\n >\n>;\n\n/**\n * Owns which semantic variants a normalized profile can reach independently.\n *\n * A zero limit is an honest opt-out. Singleton updates reach the update-only\n * families directly on every exact root. Mixed resolved sets move their\n * collection-level read/partition/write unit into an interactive transaction;\n * an interactive root therefore cannot reach them, while an exact registered\n * `atomicBatch: \"session\"` target can. Conformance consumes this owner instead\n * of inferring session reachability from transaction availability.\n */\nexport function reachableAtomicMutationProgramVariants(\n profile: AtomicMutationProgramExecutor,\n execution: Pick<\n GraphBackend[\"capabilities\"][\"execution\"],\n \"atomicBatch\" | \"interactiveTransactions\"\n >,\n): readonly AtomicMutationProgramVariant[] {\n const variants: AtomicMutationProgramVariant[] = [];\n const resolvedMutationSetsReachable =\n !execution.interactiveTransactions || execution.atomicBatch === \"session\";\n if (profile.createNodes !== undefined) variants.push(\"createNodes\");\n if (\n (profile.replaceNodes?.maxEntries.plain ?? 0) > 0 ||\n (profile.replaceNodes?.maxEntries.claimed ?? 0) > 0\n ) {\n variants.push(\"replaceNodes\");\n }\n if (profile.createEdges !== undefined) variants.push(\"createEdges\");\n if (profile.deleteNodes !== undefined) variants.push(\"deleteNodes\");\n if (profile.deleteEdges !== undefined) variants.push(\"deleteEdges\");\n if ((profile.updateNodes?.maxEntries ?? 0) > 0) {\n variants.push(\"updateNodes\");\n }\n if ((profile.updateEdges?.maxEntries ?? 0) > 0) {\n variants.push(\"updateEdges\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateNodes?.maxEntries ?? 0) > 0\n ) {\n variants.push(\"mutateNodes\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateEdges?.maxEntries.resolvedSet ?? 0) > 0\n ) {\n variants.push(\"mutateEdges.resolvedSet\");\n }\n if ((profile.mutateEdges?.maxEntries.durableConvergence ?? 0) > 0) {\n variants.push(\"mutateEdges.durableConvergence\");\n }\n return variants;\n}\n\n/**\n * Semantic mutation families implemented by one exact backend root.\n *\n * Registering this profile is an explicit claim about TypeGraph write\n * semantics, not merely transport mechanics. Each optional member authorizes\n * only that family; omitted families retain the complete portable path.\n */\nexport type AtomicMutationProgramRegistration = Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n}>;\n\nconst ATOMIC_MUTATION_PROGRAM_EXECUTORS = new WeakMap<\n object,\n AtomicMutationProgramExecutor\n>();\n\ntype AtomicMutationProgramDispatchObserver = (\n variant: AtomicMutationProgramVariant,\n) => void;\n\nconst ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS = new WeakMap<\n object,\n AtomicMutationProgramDispatchObserver\n>();\nconst INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS = new WeakMap<\n object,\n object\n>();\n\nfunction reportAtomicMutationProgramDispatch(\n target: object,\n variant: AtomicMutationProgramVariant,\n): void {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.get(target)?.(variant);\n}\n\nfunction instrumentAtomicMutationProgramExecutors(\n target: object,\n profile: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n type Descriptor = Readonly<{\n variant: (input: unknown) => AtomicMutationProgramVariant;\n }>;\n const descriptors = {\n createEdges: { variant: () => \"createEdges\" },\n createNodes: { variant: () => \"createNodes\" },\n replaceNodes: { variant: () => \"replaceNodes\" },\n deleteEdges: { variant: () => \"deleteEdges\" },\n deleteNodes: { variant: () => \"deleteNodes\" },\n mutateEdges: {\n variant: (input: unknown) =>\n ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND[\n (\n input as\n AtomicEdgeConvergenceInput | AtomicEdgeResolvedMutationSetInput\n ).kind\n ],\n },\n mutateNodes: { variant: () => \"mutateNodes\" },\n updateEdges: { variant: () => \"updateEdges\" },\n updateNodes: { variant: () => \"updateNodes\" },\n } as const satisfies Record<\n keyof AtomicMutationProgramRegistration,\n Descriptor\n >;\n\n function instrument<TExecutor extends object>(\n source: TExecutor,\n descriptor: Descriptor,\n ): TExecutor {\n if (INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.get(source) === target) {\n return source;\n }\n const callable = source as unknown as (\n ...arguments_: readonly unknown[]\n ) => unknown;\n const instrumented = new Proxy(callable, {\n apply(sourceExecutor, thisArgument, argumentsList) {\n reportAtomicMutationProgramDispatch(\n target,\n descriptor.variant(argumentsList[0]),\n );\n return Reflect.apply(sourceExecutor, thisArgument, argumentsList);\n },\n });\n INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.set(instrumented, target);\n return instrumented as unknown as TExecutor;\n }\n\n const entries = ATOMIC_MUTATION_PROGRAM_FAMILIES.flatMap((family) => {\n const executor = profile[family];\n return executor === undefined ?\n []\n : [[family, instrument(executor, descriptors[family])] as const];\n });\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\n/** @internal Runs work while observing dispatches from this exact resource. */\nexport async function withAtomicMutationProgramDispatchObserver<TResult>(\n target: object,\n observer: AtomicMutationProgramDispatchObserver,\n run: () => TResult | PromiseLike<TResult>,\n): Promise<TResult> {\n if (ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation program dispatch observation is already active for this exact resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_OBSERVER_ALREADY_ACTIVE\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.set(target, observer);\n try {\n return await run();\n } finally {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.delete(target);\n }\n}\n\nconst ATOMIC_MUTATION_PROGRAM_FAMILIES = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges\",\n] as const satisfies readonly (keyof AtomicMutationProgramRegistration)[];\n\nfunction assertNonnegativeIntegerLimit(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires a nonnegative integer ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicMutationProgramLimits(\n family: keyof AtomicMutationProgramRegistration,\n executor: AtomicMutationProgramRegistration[typeof family],\n): void {\n if (executor === undefined) return;\n if (family === \"createNodes\" || family === \"replaceNodes\") {\n const nodeExecutor = executor as\n AtomicNodeBatchExecutor | AtomicNodeReplacementBatchExecutor;\n assertAtomicNodeClaimSupport(family, nodeExecutor.claimSupport);\n assertAtomicNodeProjectionSupport(family, nodeExecutor.projectionSupport);\n if (family === \"replaceNodes\") {\n const replacementExecutor =\n nodeExecutor as AtomicNodeReplacementBatchExecutor;\n const releasedClaimFamilies = replacementExecutor.releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n const maxEntries = (\n replacementExecutor as unknown as Readonly<Record<string, unknown>>\n )[\"maxEntries\"];\n if (typeof maxEntries !== \"object\" || maxEntries === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires maxEntries metadata.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: maxEntries,\n },\n );\n }\n const limits = maxEntries as Readonly<Record<string, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.plain\",\n limits[\"plain\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.claimed\",\n limits[\"claimed\"],\n );\n const accepts = (executor as AtomicNodeReplacementBatchExecutor).accepts;\n if (accepts !== undefined && typeof accepts !== \"function\") {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires a callable accepts predicate.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"accepts\",\n value: accepts,\n },\n );\n }\n }\n return;\n }\n if (family === \"deleteNodes\") {\n const releasedClaimFamilies: unknown = (\n executor as AtomicNodeDeleteBatchExecutor\n ).releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n return;\n }\n if (\n family === \"updateNodes\" ||\n family === \"updateEdges\" ||\n family === \"mutateNodes\"\n ) {\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries\",\n (executor as Readonly<{ maxEntries: unknown }>).maxEntries,\n );\n if (family === \"updateNodes\" || family === \"mutateNodes\") {\n assertAtomicNodeProjectionSupport(\n family,\n (\n executor as\n | AtomicNodeResolvedMutationSetExecutor\n | AtomicNodeResolvedUpdateBatchExecutor\n ).projectionSupport,\n );\n }\n return;\n }\n if (family === \"mutateEdges\") {\n const limits: unknown = (executor as AtomicEdgeMutationProgramExecutor)\n .maxEntries;\n if (typeof limits !== \"object\" || limits === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family mutateEdges requires maxEntries limits.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: limits,\n },\n );\n }\n const edgeLimits = limits as Readonly<Record<PropertyKey, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.resolvedSet\",\n edgeLimits[\"resolvedSet\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.durableConvergence\",\n edgeLimits[\"durableConvergence\"],\n );\n }\n}\n\nfunction normalizeAtomicMutationProgramRegistration(\n registration: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n const uncheckedRegistration: unknown = registration;\n if (\n typeof uncheckedRegistration !== \"object\" ||\n uncheckedRegistration === null\n ) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must be an object.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n const entries: [\n keyof AtomicMutationProgramRegistration,\n NonNullable<\n AtomicMutationProgramRegistration[keyof AtomicMutationProgramRegistration]\n >,\n ][] = [];\n for (const family of ATOMIC_MUTATION_PROGRAM_FAMILIES) {\n const executor = registration[family];\n if (executor === undefined) continue;\n if (typeof executor !== \"function\") {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} must be callable.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n },\n );\n }\n assertAtomicMutationProgramLimits(family, executor);\n entries.push([family, executor]);\n }\n if (entries.length === 0) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must implement at least one semantic family.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\nfunction throwAtomicMutationProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n): never {\n throw new ConfigurationError(\n \"Atomic mutation programs require an exact backend session with a registered atomic SQL transport.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n atomicBatch: target.capabilities.execution.atomicBatch,\n transportRegistered: hasAtomicSqlProgramRegistration(target),\n },\n {\n suggestion:\n \"Register and validate the exact-session atomic SQL transport before registering only the TypeGraph mutation families this backend implements.\",\n },\n );\n}\n\n/**\n * Registers TypeGraph semantic mutation programs for one exact backend resource.\n *\n * Transport registration proves atomic statement dispatch only. This second,\n * explicit profile declares which graph mutation families preserve their\n * complete schema-fence, validation, side-effect, refusal, and result-ordering\n * contracts. Object-identity registration prevents derived, projected, and\n * other transaction sessions from inheriting execution evidence.\n */\nexport function registerAtomicMutationPrograms<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicMutationProgramRegistration): T {\n if (\n !supportsAtomicBatch(target) ||\n !hasAtomicSqlProgramRegistration(target)\n ) {\n throwAtomicMutationProgramRegistrationMismatch(target);\n }\n if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation programs are already registered for this exact backend resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(\n target,\n normalizeAtomicMutationProgramRegistration(registration),\n ),\n );\n return target;\n}\n\n/** Returns whether this exact resource owns a semantic program profile. */\nexport function hasAtomicMutationProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target);\n}\n\n/** Resolves semantic mutation programs only for their exact registered resource. */\nexport function resolveAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n}\n\n/**\n * Re-registers exact-session evidence on a transparent transaction wrapper.\n *\n * Session authority is never inherited implicitly: the wrapper seam calls\n * this only after deriving a backend that forwards to the same pinned command\n * session. Root registrations remain non-transferable.\n *\n * @internal\n */\nexport function carryAtomicMutationSessionRegistration<\n T extends TransactionBackend,\n>(base: TransactionBackend, derived: T): T {\n if (\n base.capabilities.execution.atomicBatch !== \"session\" ||\n derived.capabilities.execution.atomicBatch !== \"session\"\n ) {\n return derived;\n }\n const executeAtomicBatch = resolveRegisteredAtomicSqlBatchExecutor(base);\n const profile = resolveAtomicMutationPrograms(base);\n if (executeAtomicBatch === undefined || profile === undefined) return derived;\n registerAtomicSqlProgram(derived, executeAtomicBatch);\n registerAtomicMutationPrograms(derived, profile);\n return derived;\n}\n\n/**\n * @internal Test-only compatibility seam.\n *\n * Production factories must use registerAtomicMutationPrograms() so transport,\n * declaration, shape, and duplicate-registration validation cannot be skipped.\n */\nexport function markBundledRootAtomicMutationPrograms<T extends object>(\n target: T,\n executor: Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n }>,\n): T {\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(target, executor),\n );\n return target;\n}\n\n/** @internal Compatibility seam for bundled-factory and backend tests. */\nexport function resolveBundledRootAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return resolveAtomicMutationPrograms(target);\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicNodeBatch<T extends object>(\n target: T,\n executor: AtomicNodeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createNodes: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicEdgeBatch<T extends object>(\n target: T,\n executor: AtomicEdgeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createEdges: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicNodeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicNodeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createNodes;\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicEdgeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicEdgeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createEdges;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":["CompilerInvariantError","ConfigurationError","supportsAtomicBatch"],"mappings":"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","file":"chunk-MRUOOAIQ.cjs","sourcesContent":["/**\n * Internal execution boundary for a closed, precompiled SQL write program.\n *\n * This is deliberately an out-of-band exact-resource capability. An author\n * registers either a root that owns the atomic boundary or an already-open\n * transaction session. Derived backends and other transaction objects do not\n * inherit the registration. A static batch is therefore never forwarded\n * through a wrapper whose behavior has not been audited for the program\n * contract.\n */\nimport { CompilerInvariantError, ConfigurationError } from \"../../errors\";\nimport type { GraphBackend, TransactionBackend } from \"../types\";\n\nexport type AtomicSqlRow = Readonly<Record<string, unknown>>;\n\n/** A transport-ready statement in the portable atomic-program protocol. */\nexport type CompiledAtomicSqlStatement = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\n/** A native all-or-nothing dispatch for a closed statement sequence. */\nexport type AtomicSqlBatchExecutor = <TRow>(\n statements: readonly CompiledAtomicSqlStatement[],\n) => Promise<readonly (readonly TRow[])[]>;\n\nexport type AtomicSqlProgramAdapter = Readonly<{\n executeAtomicBatch?: AtomicSqlBatchExecutor;\n}>;\n\n/** The transport forms accepted by an atomic program author. */\nexport type AtomicSqlProgramRegistration =\n AtomicSqlBatchExecutor | AtomicSqlProgramAdapter;\n\ntype AtomicSqlResultCardinality = \"none\" | \"one\" | \"many\";\n\n/** One closed statement and the typed decoder for its result slot. */\ntype AtomicSqlProgramSlot<TResult> = Readonly<{\n statement: CompiledAtomicSqlStatement;\n cardinality: AtomicSqlResultCardinality;\n decode: (rows: readonly AtomicSqlRow[]) => TResult;\n}>;\n\n/**\n * A statically closed program. Every slot uses the same result union so a\n * heterogeneous node/edge program can still preserve a typed result at the\n * program boundary without introducing `any` into the erased executor.\n */\nexport type AtomicSqlProgram<TRowResult, TResult> = Readonly<{\n slots: readonly AtomicSqlProgramSlot<TRowResult>[];\n assemble: (results: readonly TRowResult[]) => TResult;\n}>;\n\nexport type AtomicSqlProgramExecutor = Readonly<{\n execute: <TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ) => Promise<TResult>;\n}>;\n\ntype RegisteredAtomicSqlProgram = Readonly<{\n executeAtomicBatch: AtomicSqlBatchExecutor;\n executor: AtomicSqlProgramExecutor;\n}>;\n\nconst ATOMIC_SQL_PROGRAM_EXECUTORS = new WeakMap<\n object,\n RegisteredAtomicSqlProgram\n>();\n\nfunction assertResultCardinality(\n slot: Readonly<{ cardinality: AtomicSqlResultCardinality }>,\n index: number,\n rows: readonly AtomicSqlRow[],\n): void {\n const valid =\n slot.cardinality === \"none\" ? rows.length === 0\n : slot.cardinality === \"one\" ? rows.length === 1\n : true;\n if (valid) return;\n throw new CompilerInvariantError(\n `Atomic SQL program slot ${index} returned ${rows.length} rows, ` +\n `expected ${slot.cardinality}.`,\n {\n slot: index,\n cardinality: slot.cardinality,\n rowCount: rows.length,\n },\n );\n}\n\nfunction assertResultSlotCount(\n expected: number,\n actual: readonly (readonly AtomicSqlRow[])[],\n): void {\n if (expected === actual.length) return;\n throw new CompilerInvariantError(\n `Atomic SQL program returned ${actual.length} result slots, ` +\n `expected ${expected}.`,\n { expected, actual: actual.length },\n );\n}\n\nfunction isAtomicSqlResultSlots(\n value: unknown,\n): value is readonly (readonly AtomicSqlRow[])[] {\n return Array.isArray(value) && value.every((slot) => Array.isArray(slot));\n}\n\n/** Executes the one canonical closed-program protocol. */\nasync function executeAtomicSqlProgram<TRowResult, TResult>(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n program: AtomicSqlProgram<TRowResult, TResult>,\n): Promise<TResult> {\n if (program.slots.length === 0) return program.assemble([]);\n\n const statements = program.slots.map((slot) => slot.statement);\n const result: unknown = await executeAtomicBatch<AtomicSqlRow>(statements);\n if (!isAtomicSqlResultSlots(result)) {\n throw new CompilerInvariantError(\n \"Atomic SQL program executor returned malformed result slots.\",\n { resultType: typeof result },\n );\n }\n const rows = result;\n\n assertResultSlotCount(program.slots.length, rows);\n const decoded = program.slots.map((slot, index) => {\n const slotRows = rows[index];\n if (slotRows === undefined) {\n throw new CompilerInvariantError(\n `Atomic SQL program result slot ${index} is missing.`,\n { slot: index },\n );\n }\n assertResultCardinality(slot, index, slotRows);\n return slot.decode(slotRows);\n });\n\n return program.assemble(decoded);\n}\n\nfunction createExecutor(\n executeAtomicBatch: AtomicSqlBatchExecutor,\n): AtomicSqlProgramExecutor {\n return {\n async execute<TRowResult, TResult>(\n program: AtomicSqlProgram<TRowResult, TResult>,\n ): Promise<TResult> {\n return executeAtomicSqlProgram(executeAtomicBatch, program);\n },\n };\n}\n\n/** @internal Creates the executor shared by lowering and root registration. */\nexport function createAtomicSqlProgramExecutor(\n adapter: AtomicSqlProgramAdapter,\n): AtomicSqlProgramExecutor | undefined {\n const executeAtomicBatch = adapter.executeAtomicBatch;\n return typeof executeAtomicBatch === \"function\" ?\n createExecutor(executeAtomicBatch)\n : undefined;\n}\n\nfunction normalizeAtomicSqlProgramRegistration(\n registration: AtomicSqlProgramRegistration,\n): RegisteredAtomicSqlProgram | undefined {\n const adapter: AtomicSqlProgramAdapter =\n typeof registration === \"function\" ?\n { executeAtomicBatch: registration }\n : registration;\n const executeAtomicBatch = adapter.executeAtomicBatch;\n const executor = createAtomicSqlProgramExecutor(adapter);\n return executeAtomicBatch === undefined || executor === undefined ?\n undefined\n : { executeAtomicBatch, executor };\n}\n\nfunction throwAtomicSqlProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n registration: RegisteredAtomicSqlProgram | undefined,\n): never {\n const declaration = target.capabilities.execution.atomicBatch;\n throw new ConfigurationError(\n \"An atomic SQL program requires exact-session atomic-batch authority and a usable batch executor.\",\n {\n code: \"ATOMIC_SQL_PROGRAM_REGISTRATION_MISMATCH\",\n declared: declaration,\n registered: registration !== undefined,\n },\n {\n suggestion:\n 'Declare `atomicBatch: \"root\"` on an exact root executor or `\"session\"` on an already-open transaction session, then register that exact object.',\n },\n );\n}\n\nfunction declaredCommandSession(target: object): unknown {\n const commands = Reflect.get(target, \"commands\") as unknown;\n if (typeof commands !== \"object\" || commands === null) return;\n return Reflect.get(commands, \"session\") as unknown;\n}\n\n/**\n * Registers an atomic SQL program executor for one exact backend resource.\n *\n * The declaration and executable transport are checked together so a backend\n * cannot claim atomic execution while omitting the executor, nor expose\n * an executor without declaring the session on which it is valid. The\n * registration is keyed by object identity; derived backends and other\n * transaction sessions therefore do not resolve this program.\n */\nexport function registerAtomicSqlProgram<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicSqlProgramRegistration): T {\n if (ATOMIC_SQL_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"An atomic SQL program is already registered for this exact backend resource.\",\n { code: \"ATOMIC_SQL_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n const executor = normalizeAtomicSqlProgramRegistration(registration);\n const declaration = target.capabilities.execution.atomicBatch;\n const declaredSession = declaredCommandSession(target);\n const sessionMatches =\n (declaration === \"root\" && declaredSession === \"root\") ||\n (declaration === \"session\" && declaredSession === \"transaction\");\n if (declaration === \"none\" || !sessionMatches || executor === undefined) {\n throwAtomicSqlProgramRegistrationMismatch(target, executor);\n }\n ATOMIC_SQL_PROGRAM_EXECUTORS.set(target, executor);\n return target;\n}\n\n/**\n * Resolves the static program executor for an exact registered resource.\n * Other transaction sessions and derived/projected backends return `undefined`.\n */\nexport function resolveAtomicSqlProgramExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlProgramExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executor;\n}\n\n/** @internal Resolves the exact batch function registered on one resource. */\nexport function resolveRegisteredAtomicSqlBatchExecutor(\n target: GraphBackend | TransactionBackend,\n): AtomicSqlBatchExecutor | undefined {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.get(target)?.executeAtomicBatch;\n}\n\n/** Returns whether this exact object owns a registered atomic SQL transport. */\nexport function hasAtomicSqlProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_SQL_PROGRAM_EXECUTORS.has(target);\n}\n","/**\n * Exact-resource execution profile for closed semantic mutation programs.\n *\n * The transport-level atomic SQL executor answers only \"can this exact resource\n * submit a closed statement sequence atomically?\" This profile is the next\n * layer up: it names the TypeGraph mutations the backend can lower onto that\n * transport. Keeping every mutation family in one exact-resource registration\n * prevents each new operation from inventing another provenance WeakMap.\n */\nimport { ConfigurationError } from \"../../errors\";\nimport type {\n ClaimEdgeCardinalityParams,\n EdgeConvergenceMatch,\n EdgeRow,\n GraphBackend,\n InsertEdgeParams,\n InsertNodeParams,\n NodeInsertClaim,\n NodeInsertProjection,\n NodeRow,\n SchemaWriteFenceParams,\n TransactionBackend,\n} from \"../types\";\nimport { supportsAtomicBatch } from \"../types\";\nimport {\n hasAtomicSqlProgramRegistration,\n registerAtomicSqlProgram,\n resolveRegisteredAtomicSqlBatchExecutor,\n} from \"./atomic-sql-program\";\n\n/** How a node batch member obtained the identifier stored by its program. */\nexport type AtomicNodeBatchIdSource = \"generated\" | \"caller\";\n/** Whether a node batch returns only its count or its ordered postimages. */\nexport type AtomicNodeBatchResultMode = \"count\" | \"rows\";\n\n/** Independently provable claim semantics accepted by a node mutation family. */\nexport type AtomicNodeClaimFamily = \"disjointness\" | \"uniqueness\";\n\n/** Independently provable derived-storage families in a node program. */\nexport type AtomicNodeProjectionFamily = \"embedding\" | \"fulltext\";\n\n/**\n * One complete derived-storage transition attached to a node postimage.\n *\n * Identity stays on the containing row entry so a projection cannot target a\n * different node. Embedding deletes are explicit because updates and\n * caller-id resurrection can remove a value that previously existed.\n */\nexport type AtomicNodeProjection =\n | Extract<NodeInsertProjection, { kind: \"fulltext\" }>\n | Readonly<{\n kind: \"embedding\";\n action: \"upsert\";\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>\n | Readonly<{\n kind: \"embedding\";\n action: \"delete\";\n fieldPath: string;\n dimensions: number;\n metric: Extract<NodeInsertProjection, { kind: \"embedding\" }>[\"metric\"];\n indexType: Extract<\n NodeInsertProjection,\n { kind: \"embedding\" }\n >[\"indexType\"];\n }>;\n\n/** Closed derived-storage envelope advertised by one node executor. */\nexport type AtomicNodeProjectionSupport = Readonly<{\n families: readonly AtomicNodeProjectionFamily[];\n}>;\n\n/** Closed claim envelope advertised by one node mutation executor. */\nexport type AtomicNodeClaimSupport = Readonly<{\n /** Independently proved claim families; an omitted family is unsupported. */\n families: readonly AtomicNodeClaimFamily[];\n /**\n * Maximum compiled claim/probe bind cost one member may contribute to its\n * write gate.\n * Compute a member's required value with {@link atomicNodeClaimInputCost};\n * backend implementations must not reproduce the SQL cost formula.\n * Total batch size is deliberately absent: the executor chunks statements\n * inside one atomic transport submission.\n */\n maxInputCostPerEntry: number;\n}>;\n\nfunction isAtomicNodeClaimFamily(\n value: unknown,\n): value is AtomicNodeClaimFamily {\n return value === \"disjointness\" || value === \"uniqueness\";\n}\n\nfunction assertAtomicNodeClaimFamilies(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (\n Array.isArray(value) &&\n new Set(value).size === value.length &&\n value.every((claimFamily) => isAtomicNodeClaimFamily(claimFamily))\n ) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicNodeClaimSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires claimSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"claimSupport\",\n value,\n },\n );\n }\n const support = value as Readonly<Record<PropertyKey, unknown>>;\n assertAtomicNodeClaimFamilies(\n family,\n \"claimSupport.families\",\n support[\"families\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"claimSupport.maxInputCostPerEntry\",\n support[\"maxInputCostPerEntry\"],\n );\n}\n\nfunction isAtomicNodeProjectionFamily(\n value: unknown,\n): value is AtomicNodeProjectionFamily {\n return value === \"embedding\" || value === \"fulltext\";\n}\n\nfunction assertAtomicNodeProjectionSupport(\n family: \"createNodes\" | \"mutateNodes\" | \"replaceNodes\" | \"updateNodes\",\n value: unknown,\n): void {\n if (value === undefined) return;\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires projectionSupport metadata.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport\",\n value,\n },\n );\n }\n const families = (value as Readonly<Record<PropertyKey, unknown>>)[\n \"families\"\n ];\n if (\n !Array.isArray(families) ||\n new Set(families).size !== families.length ||\n !families.every((projectionFamily) =>\n isAtomicNodeProjectionFamily(projectionFamily),\n )\n ) {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires distinct projection families.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"projectionSupport.families\",\n value: families,\n },\n );\n }\n}\n\n/** The one owner of claim-verdict to advertised-family correlation. */\nfunction atomicNodeClaimFamily(claim: NodeInsertClaim): AtomicNodeClaimFamily {\n return claim.verdict.kind;\n}\n\n/** Bind cost of one canonical claim row in an atomic node write gate. */\nconst ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST = 6;\n\n/** Bind cost of one legacy uniqueness compatibility probe. */\nconst ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST = 9;\n\n/** Bind cost of one legacy disjointness compatibility probe. */\nconst ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST = 6;\n\n/** Exact compiled claim/probe bind cost one member contributes to its write gate. */\nexport function atomicNodeClaimInputCost(\n claims: readonly NodeInsertClaim[],\n): number {\n let cost = 0;\n for (const claim of claims) {\n cost += ATOMIC_NODE_CANONICAL_CLAIM_INPUT_COST;\n cost +=\n claim.verdict.kind === \"uniqueness\" ?\n ATOMIC_NODE_UNIQUENESS_PROBE_INPUT_COST *\n claim.verdict.probeAxes.filter((axis) => axis !== claim.axis).length\n : ATOMIC_NODE_DISJOINTNESS_PROBE_INPUT_COST *\n claim.verdict.conflictingKinds.length;\n }\n return cost;\n}\n\n/** Whether one executor explicitly accepts one member's complete claim set. */\nexport function supportsAtomicNodeClaims(\n support: AtomicNodeClaimSupport | undefined,\n claims: readonly NodeInsertClaim[],\n): boolean {\n if (claims.length === 0) return true;\n if (support === undefined) return false;\n const families = new Set(support.families);\n return (\n claims.every((claim) => families.has(atomicNodeClaimFamily(claim))) &&\n atomicNodeClaimInputCost(claims) <= support.maxInputCostPerEntry\n );\n}\n\n/** Whether an executor can admit at least one member of a claim family. */\nexport function supportsAtomicNodeClaimFamily(\n support: AtomicNodeClaimSupport | undefined,\n family: AtomicNodeClaimFamily,\n): boolean {\n return (\n (support?.maxInputCostPerEntry ?? 0) > 0 &&\n support?.families.includes(family) === true\n );\n}\n\n/** Whether one executor explicitly accepts every normalized projection. */\nexport function supportsAtomicNodeProjections(\n support: AtomicNodeProjectionSupport | undefined,\n families: readonly AtomicNodeProjectionFamily[],\n): boolean {\n if (families.length === 0) return true;\n if (support === undefined) return false;\n const advertised = new Set(support.families);\n return families.every((family) => advertised.has(family));\n}\n\n/** One normalized node-create member supplied to a semantic executor. */\nexport type AtomicNodeBatchEntry = Readonly<{\n idSource: AtomicNodeBatchIdSource;\n params: InsertNodeParams;\n /** Complete canonically ordered claims this row owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Complete schema-fenced input to an atomic node-create family. */\nexport type AtomicNodeBatchInput = Readonly<{\n entries: readonly AtomicNodeBatchEntry[];\n resultMode: AtomicNodeBatchResultMode;\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes the complete eligible node-create family for one exact root. */\nexport interface AtomicNodeBatchExecutor {\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"count\" }>,\n ): Promise<number>;\n (\n input: AtomicNodeBatchInput & Readonly<{ resultMode: \"rows\" }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One complete, preimage-free replacement supplied to a semantic executor. */\nexport type AtomicNodeReplacementEntry = Readonly<{\n params: InsertNodeParams;\n /** Complete canonically ordered claims the replacement postimage owes. */\n claims?: readonly NodeInsertClaim[];\n /** Complete derived-storage transitions owed by the replacement postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Any node entry whose complete postimage drives projections/assertions. */\nexport type AtomicNodePostimageEntry =\n AtomicNodeBatchEntry | AtomicNodeReplacementEntry;\n\n/** Executes complete blind node replacements for one exact resource. */\nexport interface AtomicNodeReplacementBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: Readonly<{ plain: number; claimed: number }>;\n /** Exact no-SQL admission proof for the prepared replacement work. */\n readonly accepts?: (\n entries: readonly AtomicNodeReplacementEntry[],\n ) => boolean;\n /** Claim semantics this executor can prove, omitted for plain rows only. */\n readonly claimSupport?: AtomicNodeClaimSupport;\n /** Claim families whose earlier owner rows this program releases. */\n readonly releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeReplacementEntry[];\n /** Whether earlier owner claims must be released before acquisition. */\n releaseClaims: boolean;\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** Count-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchCountInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"count\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Postimage-returning input to an atomic direct edge-create family. */\nexport type AtomicEdgeBatchRowsInput = Readonly<{\n claims: readonly ClaimEdgeCardinalityParams[];\n params: readonly InsertEdgeParams[];\n resultMode: \"rows\";\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes complete eligible direct edge creates for one exact root. */\nexport interface AtomicEdgeBatchExecutor {\n (input: AtomicEdgeBatchCountInput): Promise<number>;\n (input: AtomicEdgeBatchRowsInput): Promise<readonly EdgeRow[]>;\n}\n\n/** One normalized durable edge-convergence member. */\nexport type AtomicEdgeConvergenceEntry = Readonly<{\n params: InsertEdgeParams;\n match: EdgeConvergenceMatch;\n}>;\n\n/** Authoritative row and outcome returned by durable convergence. */\nexport type AtomicEdgeConvergenceResult = Readonly<{\n row: EdgeRow;\n outcome: \"created\" | \"found\";\n}>;\n\n/** Complete schema-fenced durable edge-convergence input. */\nexport type AtomicEdgeConvergenceInput = Readonly<{\n kind: \"durable-convergence\";\n entries: readonly AtomicEdgeConvergenceEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Complete schema-fenced direct edge-delete input. */\nexport type AtomicEdgeDeleteBatchInput = Readonly<{\n graphId: string;\n expectedKind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Delete count plus explicit evidence that the schema fence matched. */\nexport type AtomicDeleteBatchResult = Readonly<{\n affectedCount: number;\n schemaFenceMatched: boolean;\n}>;\n\n/** Executes complete eligible direct edge deletes for one exact root. */\nexport type AtomicEdgeDeleteBatchExecutor = (\n input: AtomicEdgeDeleteBatchInput,\n) => Promise<AtomicDeleteBatchResult>;\n\n/** Complete schema-fenced direct node-delete input. */\nexport type AtomicNodeDeleteBatchInput = Readonly<{\n graphId: string;\n kind: string;\n ids: readonly string[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/**\n * Executes complete eligible direct node deletes for one exact root.\n *\n * Keep the callable as a function type intersected with its metadata. The API\n * compatibility inventory follows function aliases into their input types;\n * changing this to a callable interface would hide that contravariant edge.\n */\nexport type AtomicNodeDeleteBatchExecutor = Readonly<{\n /** Claim families whose owned sidecars this program releases. */\n releasedClaimFamilies?: readonly AtomicNodeClaimFamily[];\n}> &\n ((input: AtomicNodeDeleteBatchInput) => Promise<AtomicDeleteBatchResult>);\n\n/** One authoritative node preimage and replacement used by a resolved set. */\nexport type AtomicNodeResolvedUpdateEntry = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Readonly<Record<string, unknown>>;\n expectedVersion: number;\n /** Complete derived-storage transitions owed by the written postimage. */\n projections?: readonly AtomicNodeProjection[];\n}>;\n\n/** Executes a complete eligible resolved node update set. */\nexport interface AtomicNodeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n entries: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly NodeRow[]>;\n}\n\n/** One authoritative edge preimage and replacement used by a resolved set. */\nexport type AtomicEdgeResolvedUpdateEntry = Readonly<{\n existing: EdgeRow;\n props: Readonly<Record<string, unknown>>;\n}>;\n\n/** Executes a complete eligible resolved edge update set. */\nexport interface AtomicEdgeResolvedUpdateBatchExecutor {\n /** Maximum members accepted by one atomic submission, including internal chunks. */\n readonly maxEntries: number;\n (\n input: Readonly<{\n entries: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<readonly EdgeRow[]>;\n}\n\n/** Ordered node postimages returned by a mixed resolved mutation set. */\nexport type AtomicNodeResolvedMutationSetResult = Readonly<{\n created: readonly NodeRow[];\n updated: readonly NodeRow[];\n}>;\n\n/** Executes a complete eligible mixed node create/update set. */\nexport interface AtomicNodeResolvedMutationSetExecutor {\n /** Maximum total members accepted across the program's terminal assertions. */\n readonly maxEntries: number;\n /** Derived-storage families this executor carries inside its program. */\n readonly projectionSupport?: AtomicNodeProjectionSupport;\n (\n input: Readonly<{\n creates: readonly AtomicNodeBatchEntry[];\n updates: readonly AtomicNodeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n }>,\n ): Promise<AtomicNodeResolvedMutationSetResult>;\n}\n\n/** Ordered edge postimages returned by a mixed resolved mutation set. */\nexport type AtomicEdgeResolvedMutationSetResult = Readonly<{\n created: readonly EdgeRow[];\n updated: readonly EdgeRow[];\n}>;\n\n/** Complete schema-fenced input to a mixed resolved edge mutation set. */\nexport type AtomicEdgeResolvedMutationSetInput = Readonly<{\n kind: \"resolved-set\";\n creates: readonly InsertEdgeParams[];\n updates: readonly AtomicEdgeResolvedUpdateEntry[];\n schemaFence: SchemaWriteFenceParams;\n}>;\n\n/** Executes resolved edge sets and durable convergence for one exact root. */\nexport interface AtomicEdgeMutationProgramExecutor {\n readonly maxEntries: Readonly<{\n resolvedSet: number;\n durableConvergence: number;\n }>;\n (\n input: AtomicEdgeResolvedMutationSetInput,\n ): Promise<AtomicEdgeResolvedMutationSetResult>;\n (\n input: AtomicEdgeConvergenceInput,\n ): Promise<readonly AtomicEdgeConvergenceResult[]>;\n}\n\n/** Internal proof that the closed SQL program rejected a missing endpoint. */\nexport class AtomicEdgeBatchEndpointRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch endpoint validation failed\", { cause });\n this.name = \"AtomicEdgeBatchEndpointRefusalError\";\n }\n}\n\n/** Internal proof that the closed SQL program refused a cardinality claim. */\nexport class AtomicEdgeBatchCardinalityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge batch cardinality validation failed\", { cause });\n this.name = \"AtomicEdgeBatchCardinalityRefusalError\";\n }\n}\n\n/** Internal proof that native convergence encountered a tombstoned winner. */\nexport class AtomicEdgeConvergenceTombstoneRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge convergence requires portable resurrection\", { cause });\n this.name = \"AtomicEdgeConvergenceTombstoneRefusalError\";\n }\n}\n\n/** Internal proof that an edge-delete input belongs to another collection. */\nexport class AtomicEdgeDeleteIdentityRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic edge delete batch identity validation failed\", { cause });\n this.name = \"AtomicEdgeDeleteIdentityRefusalError\";\n }\n}\n\n/** Internal proof that a restricted node still has a live connected edge. */\nexport class AtomicNodeDeleteRestrictedRefusalError extends Error {\n constructor(cause: unknown) {\n super(\"Atomic node delete batch restriction validation failed\", { cause });\n this.name = \"AtomicNodeDeleteRestrictedRefusalError\";\n }\n}\n\n/**\n * The semantic mutation families one exact bundled root can lower today.\n * New families extend this profile instead of adding another root registry.\n */\nexport type AtomicMutationProgramExecutor = Readonly<{\n createNodes?: AtomicNodeBatchExecutor;\n replaceNodes?: AtomicNodeReplacementBatchExecutor;\n createEdges?: AtomicEdgeBatchExecutor;\n deleteNodes?: AtomicNodeDeleteBatchExecutor;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor;\n mutateEdges?: AtomicEdgeMutationProgramExecutor;\n}>;\n\n/** Every independently enabled semantic variant in a mutation profile. */\nexport const ATOMIC_MUTATION_PROGRAM_VARIANTS = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges.resolvedSet\",\n \"mutateEdges.durableConvergence\",\n] as const;\n\n/** One independently enabled semantic variant in a mutation profile. */\nexport type AtomicMutationProgramVariant =\n (typeof ATOMIC_MUTATION_PROGRAM_VARIANTS)[number];\n\n/** One owner for the overloaded edge-mutation input/variant correlation. */\nexport const ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND = {\n \"durable-convergence\": \"mutateEdges.durableConvergence\",\n \"resolved-set\": \"mutateEdges.resolvedSet\",\n} as const satisfies Readonly<\n Record<\n | AtomicEdgeConvergenceInput[\"kind\"]\n | AtomicEdgeResolvedMutationSetInput[\"kind\"],\n Extract<AtomicMutationProgramVariant, `mutateEdges.${string}`>\n >\n>;\n\n/**\n * Owns which semantic variants a normalized profile can reach independently.\n *\n * A zero limit is an honest opt-out. Singleton updates reach the update-only\n * families directly on every exact root. Mixed resolved sets move their\n * collection-level read/partition/write unit into an interactive transaction;\n * an interactive root therefore cannot reach them, while an exact registered\n * `atomicBatch: \"session\"` target can. Conformance consumes this owner instead\n * of inferring session reachability from transaction availability.\n */\nexport function reachableAtomicMutationProgramVariants(\n profile: AtomicMutationProgramExecutor,\n execution: Pick<\n GraphBackend[\"capabilities\"][\"execution\"],\n \"atomicBatch\" | \"interactiveTransactions\"\n >,\n): readonly AtomicMutationProgramVariant[] {\n const variants: AtomicMutationProgramVariant[] = [];\n const resolvedMutationSetsReachable =\n !execution.interactiveTransactions || execution.atomicBatch === \"session\";\n if (profile.createNodes !== undefined) variants.push(\"createNodes\");\n if (\n (profile.replaceNodes?.maxEntries.plain ?? 0) > 0 ||\n (profile.replaceNodes?.maxEntries.claimed ?? 0) > 0\n ) {\n variants.push(\"replaceNodes\");\n }\n if (profile.createEdges !== undefined) variants.push(\"createEdges\");\n if (profile.deleteNodes !== undefined) variants.push(\"deleteNodes\");\n if (profile.deleteEdges !== undefined) variants.push(\"deleteEdges\");\n if ((profile.updateNodes?.maxEntries ?? 0) > 0) {\n variants.push(\"updateNodes\");\n }\n if ((profile.updateEdges?.maxEntries ?? 0) > 0) {\n variants.push(\"updateEdges\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateNodes?.maxEntries ?? 0) > 0\n ) {\n variants.push(\"mutateNodes\");\n }\n if (\n resolvedMutationSetsReachable &&\n (profile.mutateEdges?.maxEntries.resolvedSet ?? 0) > 0\n ) {\n variants.push(\"mutateEdges.resolvedSet\");\n }\n if ((profile.mutateEdges?.maxEntries.durableConvergence ?? 0) > 0) {\n variants.push(\"mutateEdges.durableConvergence\");\n }\n return variants;\n}\n\n/**\n * Semantic mutation families implemented by one exact backend root.\n *\n * Registering this profile is an explicit claim about TypeGraph write\n * semantics, not merely transport mechanics. Each optional member authorizes\n * only that family; omitted families retain the complete portable path.\n */\nexport type AtomicMutationProgramRegistration = Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n}>;\n\nconst ATOMIC_MUTATION_PROGRAM_EXECUTORS = new WeakMap<\n object,\n AtomicMutationProgramExecutor\n>();\n\ntype AtomicMutationProgramDispatchObserver = (\n variant: AtomicMutationProgramVariant,\n) => void;\n\nconst ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS = new WeakMap<\n object,\n AtomicMutationProgramDispatchObserver\n>();\nconst INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS = new WeakMap<\n object,\n object\n>();\n\nfunction reportAtomicMutationProgramDispatch(\n target: object,\n variant: AtomicMutationProgramVariant,\n): void {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.get(target)?.(variant);\n}\n\nfunction instrumentAtomicMutationProgramExecutors(\n target: object,\n profile: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n type Descriptor = Readonly<{\n variant: (input: unknown) => AtomicMutationProgramVariant;\n }>;\n const descriptors = {\n createEdges: { variant: () => \"createEdges\" },\n createNodes: { variant: () => \"createNodes\" },\n replaceNodes: { variant: () => \"replaceNodes\" },\n deleteEdges: { variant: () => \"deleteEdges\" },\n deleteNodes: { variant: () => \"deleteNodes\" },\n mutateEdges: {\n variant: (input: unknown) =>\n ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND[\n (\n input as\n AtomicEdgeConvergenceInput | AtomicEdgeResolvedMutationSetInput\n ).kind\n ],\n },\n mutateNodes: { variant: () => \"mutateNodes\" },\n updateEdges: { variant: () => \"updateEdges\" },\n updateNodes: { variant: () => \"updateNodes\" },\n } as const satisfies Record<\n keyof AtomicMutationProgramRegistration,\n Descriptor\n >;\n\n function instrument<TExecutor extends object>(\n source: TExecutor,\n descriptor: Descriptor,\n ): TExecutor {\n if (INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.get(source) === target) {\n return source;\n }\n const callable = source as unknown as (\n ...arguments_: readonly unknown[]\n ) => unknown;\n const instrumented = new Proxy(callable, {\n apply(sourceExecutor, thisArgument, argumentsList) {\n reportAtomicMutationProgramDispatch(\n target,\n descriptor.variant(argumentsList[0]),\n );\n return Reflect.apply(sourceExecutor, thisArgument, argumentsList);\n },\n });\n INSTRUMENTED_ATOMIC_MUTATION_EXECUTOR_TARGETS.set(instrumented, target);\n return instrumented as unknown as TExecutor;\n }\n\n const entries = ATOMIC_MUTATION_PROGRAM_FAMILIES.flatMap((family) => {\n const executor = profile[family];\n return executor === undefined ?\n []\n : [[family, instrument(executor, descriptors[family])] as const];\n });\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\n/** @internal Runs work while observing dispatches from this exact resource. */\nexport async function withAtomicMutationProgramDispatchObserver<TResult>(\n target: object,\n observer: AtomicMutationProgramDispatchObserver,\n run: () => TResult | PromiseLike<TResult>,\n): Promise<TResult> {\n if (ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation program dispatch observation is already active for this exact resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_OBSERVER_ALREADY_ACTIVE\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.set(target, observer);\n try {\n return await run();\n } finally {\n ATOMIC_MUTATION_PROGRAM_DISPATCH_OBSERVERS.delete(target);\n }\n}\n\nconst ATOMIC_MUTATION_PROGRAM_FAMILIES = [\n \"createNodes\",\n \"replaceNodes\",\n \"createEdges\",\n \"deleteNodes\",\n \"deleteEdges\",\n \"updateNodes\",\n \"updateEdges\",\n \"mutateNodes\",\n \"mutateEdges\",\n] as const satisfies readonly (keyof AtomicMutationProgramRegistration)[];\n\nfunction assertNonnegativeIntegerLimit(\n family: keyof AtomicMutationProgramRegistration,\n name: string,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0) {\n return;\n }\n throw new ConfigurationError(\n `Atomic mutation program family ${family} requires a nonnegative integer ${name}.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: name,\n value,\n },\n );\n}\n\nfunction assertAtomicMutationProgramLimits(\n family: keyof AtomicMutationProgramRegistration,\n executor: AtomicMutationProgramRegistration[typeof family],\n): void {\n if (executor === undefined) return;\n if (family === \"createNodes\" || family === \"replaceNodes\") {\n const nodeExecutor = executor as\n AtomicNodeBatchExecutor | AtomicNodeReplacementBatchExecutor;\n assertAtomicNodeClaimSupport(family, nodeExecutor.claimSupport);\n assertAtomicNodeProjectionSupport(family, nodeExecutor.projectionSupport);\n if (family === \"replaceNodes\") {\n const replacementExecutor =\n nodeExecutor as AtomicNodeReplacementBatchExecutor;\n const releasedClaimFamilies = replacementExecutor.releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n const maxEntries = (\n replacementExecutor as unknown as Readonly<Record<string, unknown>>\n )[\"maxEntries\"];\n if (typeof maxEntries !== \"object\" || maxEntries === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires maxEntries metadata.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: maxEntries,\n },\n );\n }\n const limits = maxEntries as Readonly<Record<string, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.plain\",\n limits[\"plain\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.claimed\",\n limits[\"claimed\"],\n );\n const accepts = (executor as AtomicNodeReplacementBatchExecutor).accepts;\n if (accepts !== undefined && typeof accepts !== \"function\") {\n throw new ConfigurationError(\n \"Atomic mutation program family replaceNodes requires a callable accepts predicate.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"accepts\",\n value: accepts,\n },\n );\n }\n }\n return;\n }\n if (family === \"deleteNodes\") {\n const releasedClaimFamilies: unknown = (\n executor as AtomicNodeDeleteBatchExecutor\n ).releasedClaimFamilies;\n if (releasedClaimFamilies !== undefined) {\n assertAtomicNodeClaimFamilies(\n family,\n \"releasedClaimFamilies\",\n releasedClaimFamilies,\n );\n }\n return;\n }\n if (\n family === \"updateNodes\" ||\n family === \"updateEdges\" ||\n family === \"mutateNodes\"\n ) {\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries\",\n (executor as Readonly<{ maxEntries: unknown }>).maxEntries,\n );\n if (family === \"updateNodes\" || family === \"mutateNodes\") {\n assertAtomicNodeProjectionSupport(\n family,\n (\n executor as\n | AtomicNodeResolvedMutationSetExecutor\n | AtomicNodeResolvedUpdateBatchExecutor\n ).projectionSupport,\n );\n }\n return;\n }\n if (family === \"mutateEdges\") {\n const limits: unknown = (executor as AtomicEdgeMutationProgramExecutor)\n .maxEntries;\n if (typeof limits !== \"object\" || limits === null) {\n throw new ConfigurationError(\n \"Atomic mutation program family mutateEdges requires maxEntries limits.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n limit: \"maxEntries\",\n value: limits,\n },\n );\n }\n const edgeLimits = limits as Readonly<Record<PropertyKey, unknown>>;\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.resolvedSet\",\n edgeLimits[\"resolvedSet\"],\n );\n assertNonnegativeIntegerLimit(\n family,\n \"maxEntries.durableConvergence\",\n edgeLimits[\"durableConvergence\"],\n );\n }\n}\n\nfunction normalizeAtomicMutationProgramRegistration(\n registration: AtomicMutationProgramRegistration,\n): AtomicMutationProgramExecutor {\n const uncheckedRegistration: unknown = registration;\n if (\n typeof uncheckedRegistration !== \"object\" ||\n uncheckedRegistration === null\n ) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must be an object.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n const entries: [\n keyof AtomicMutationProgramRegistration,\n NonNullable<\n AtomicMutationProgramRegistration[keyof AtomicMutationProgramRegistration]\n >,\n ][] = [];\n for (const family of ATOMIC_MUTATION_PROGRAM_FAMILIES) {\n const executor = registration[family];\n if (executor === undefined) continue;\n if (typeof executor !== \"function\") {\n throw new ConfigurationError(\n `Atomic mutation program family ${family} must be callable.`,\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n family,\n },\n );\n }\n assertAtomicMutationProgramLimits(family, executor);\n entries.push([family, executor]);\n }\n if (entries.length === 0) {\n throw new ConfigurationError(\n \"An atomic mutation program registration must implement at least one semantic family.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\" },\n );\n }\n return Object.freeze(\n Object.fromEntries(entries) as AtomicMutationProgramExecutor,\n );\n}\n\nfunction throwAtomicMutationProgramRegistrationMismatch(\n target: GraphBackend | TransactionBackend,\n): never {\n throw new ConfigurationError(\n \"Atomic mutation programs require an exact backend session with a registered atomic SQL transport.\",\n {\n code: \"ATOMIC_MUTATION_PROGRAM_REGISTRATION_MISMATCH\",\n atomicBatch: target.capabilities.execution.atomicBatch,\n transportRegistered: hasAtomicSqlProgramRegistration(target),\n },\n {\n suggestion:\n \"Register and validate the exact-session atomic SQL transport before registering only the TypeGraph mutation families this backend implements.\",\n },\n );\n}\n\n/**\n * Registers TypeGraph semantic mutation programs for one exact backend resource.\n *\n * Transport registration proves atomic statement dispatch only. This second,\n * explicit profile declares which graph mutation families preserve their\n * complete schema-fence, validation, side-effect, refusal, and result-ordering\n * contracts. Object-identity registration prevents derived, projected, and\n * other transaction sessions from inheriting execution evidence.\n */\nexport function registerAtomicMutationPrograms<\n T extends GraphBackend | TransactionBackend,\n>(target: T, registration: AtomicMutationProgramRegistration): T {\n if (\n !supportsAtomicBatch(target) ||\n !hasAtomicSqlProgramRegistration(target)\n ) {\n throwAtomicMutationProgramRegistrationMismatch(target);\n }\n if (ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target)) {\n throw new ConfigurationError(\n \"Atomic mutation programs are already registered for this exact backend resource.\",\n { code: \"ATOMIC_MUTATION_PROGRAM_ALREADY_REGISTERED\" },\n );\n }\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(\n target,\n normalizeAtomicMutationProgramRegistration(registration),\n ),\n );\n return target;\n}\n\n/** Returns whether this exact resource owns a semantic program profile. */\nexport function hasAtomicMutationProgramRegistration(\n target: GraphBackend | TransactionBackend,\n): boolean {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.has(target);\n}\n\n/** Resolves semantic mutation programs only for their exact registered resource. */\nexport function resolveAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n}\n\n/**\n * Re-registers exact-session evidence on a transparent transaction wrapper.\n *\n * Session authority is never inherited implicitly: the wrapper seam calls\n * this only after deriving a backend that forwards to the same pinned command\n * session. Root registrations remain non-transferable.\n *\n * @internal\n */\nexport function carryAtomicMutationSessionRegistration<\n T extends TransactionBackend,\n>(base: TransactionBackend, derived: T): T {\n if (\n base.capabilities.execution.atomicBatch !== \"session\" ||\n derived.capabilities.execution.atomicBatch !== \"session\"\n ) {\n return derived;\n }\n const executeAtomicBatch = resolveRegisteredAtomicSqlBatchExecutor(base);\n const profile = resolveAtomicMutationPrograms(base);\n if (executeAtomicBatch === undefined || profile === undefined) return derived;\n registerAtomicSqlProgram(derived, executeAtomicBatch);\n registerAtomicMutationPrograms(derived, profile);\n return derived;\n}\n\n/**\n * @internal Test-only compatibility seam.\n *\n * Production factories must use registerAtomicMutationPrograms() so transport,\n * declaration, shape, and duplicate-registration validation cannot be skipped.\n */\nexport function markBundledRootAtomicMutationPrograms<T extends object>(\n target: T,\n executor: Readonly<{\n createNodes?: AtomicNodeBatchExecutor | undefined;\n replaceNodes?: AtomicNodeReplacementBatchExecutor | undefined;\n createEdges?: AtomicEdgeBatchExecutor | undefined;\n deleteNodes?: AtomicNodeDeleteBatchExecutor | undefined;\n deleteEdges?: AtomicEdgeDeleteBatchExecutor | undefined;\n updateNodes?: AtomicNodeResolvedUpdateBatchExecutor | undefined;\n updateEdges?: AtomicEdgeResolvedUpdateBatchExecutor | undefined;\n mutateNodes?: AtomicNodeResolvedMutationSetExecutor | undefined;\n mutateEdges?: AtomicEdgeMutationProgramExecutor | undefined;\n }>,\n): T {\n ATOMIC_MUTATION_PROGRAM_EXECUTORS.set(\n target,\n instrumentAtomicMutationProgramExecutors(target, executor),\n );\n return target;\n}\n\n/** @internal Compatibility seam for bundled-factory and backend tests. */\nexport function resolveBundledRootAtomicMutationPrograms(\n target: GraphBackend | TransactionBackend,\n): AtomicMutationProgramExecutor | undefined {\n return resolveAtomicMutationPrograms(target);\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicNodeBatch<T extends object>(\n target: T,\n executor: AtomicNodeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createNodes: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function markBundledRootAtomicEdgeBatch<T extends object>(\n target: T,\n executor: AtomicEdgeBatchExecutor,\n): T {\n const existing = ATOMIC_MUTATION_PROGRAM_EXECUTORS.get(target);\n return markBundledRootAtomicMutationPrograms(target, {\n ...existing,\n createEdges: executor,\n });\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicNodeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicNodeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createNodes;\n}\n\n/** @internal Narrow test seam over the single mutation-program registry. */\nexport function resolveBundledRootAtomicEdgeBatch(\n target: GraphBackend | TransactionBackend,\n): AtomicEdgeBatchExecutor | undefined {\n return resolveAtomicMutationPrograms(target)?.createEdges;\n}\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { buildPostgresSystemIndexBuilders, buildPostgresNodeIndexBuilders, buildPostgresEdgeIndexBuilders, buildSqliteSystemIndexBuilders, buildSqliteNodeIndexBuilders, buildSqliteEdgeIndexBuilders, toDrizzleSql, compileQueryWithDialect } from './chunk-DX6DIU2S.js';
|
|
2
2
|
import { pgvectorStrategy, assertPgvectorEfSearch } from './chunk-D2DMFIH2.js';
|
|
3
|
-
import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, SQLITE_ROW_MAPPER_CONFIG, formatPostgresTimestamp, nowIso, buildHardDeleteUniquesByConcreteKind, coerceNumericScore } from './chunk-
|
|
4
|
-
import { markBundledRootAutocommitEligible, resolvedNodeUpdateBatchFitsBindBudget, rephaseNonTransactionalNodeClaimPlan } from './chunk-
|
|
5
|
-
import { edgeCardinalityClaimTarget, EDGE_CARDINALITY_SPECS, edgeClaimRelationMissing } from './chunk-
|
|
6
|
-
import { createAtomicSqlProgramExecutor, registerAtomicSqlProgram, registerAtomicMutationPrograms, carryAtomicMutationSessionRegistration, AtomicEdgeConvergenceTombstoneRefusalError, supportsAtomicNodeClaims, AtomicEdgeBatchEndpointRefusalError, AtomicEdgeBatchCardinalityRefusalError, AtomicNodeDeleteRestrictedRefusalError, AtomicEdgeDeleteIdentityRefusalError, atomicNodeClaimInputCost } from './chunk-
|
|
3
|
+
import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, SQLITE_ROW_MAPPER_CONFIG, formatPostgresTimestamp, nowIso, buildHardDeleteUniquesByConcreteKind, coerceNumericScore } from './chunk-OF63ZHSD.js';
|
|
4
|
+
import { markBundledRootAutocommitEligible, resolvedNodeUpdateBatchFitsBindBudget, rephaseNonTransactionalNodeClaimPlan } from './chunk-6ECNYQDW.js';
|
|
5
|
+
import { edgeCardinalityClaimTarget, EDGE_CARDINALITY_SPECS, edgeClaimRelationMissing } from './chunk-CDKNGCE7.js';
|
|
6
|
+
import { createAtomicSqlProgramExecutor, registerAtomicSqlProgram, registerAtomicMutationPrograms, carryAtomicMutationSessionRegistration, AtomicEdgeConvergenceTombstoneRefusalError, supportsAtomicNodeClaims, AtomicEdgeBatchEndpointRefusalError, AtomicEdgeBatchCardinalityRefusalError, AtomicNodeDeleteRestrictedRefusalError, AtomicEdgeDeleteIdentityRefusalError, atomicNodeClaimInputCost } from './chunk-UFKYMQJ5.js';
|
|
7
7
|
import { countSchemaKindRows } from './chunk-RFMSZ7CF.js';
|
|
8
|
-
import { createAsyncContextLoader, postgresFenceSql, isOptimisticRetryTier, runRetriedUnit, OPTIMISTIC_RETRY_ATTEMPTS, sqlValueList, advisoryLockSingleExpression, engineSerializedWriterSlotStatement, resolveBatchWriteVerdict, batchRefusalSuffix, batchRefusalDetails, chunk, RECORDED_GRAPH_WRITE_ADVISORY_LOCK_NAMESPACE, sortedReplacer } from './chunk-
|
|
9
|
-
import { writeFenceDeclarationLine, isFirstPartyProfile, markFirstPartyFactory, resolveWriteFencePlan, auditBackendResource, registerSerializationFailureClassifier, resolveDeclaredBackendResource, POSTGRES_CAPABILITIES, POSTGRES_MAX_BIND_PARAMETERS, normalizeGraphAnalyticsCapabilities, registerFirstPartyProfile, isMissingTableError, isSqliteDuplicateEdgeMatchIdentityColumnError, deriveUnitOfWork, deriveBackend, markSchemaFencedInsertEligibleUnderFence, supportsRootAtomicBatch, SQLITE_CAPABILITIES, isPostgresConcurrentDdlRaceError, INTERNAL_TEMPORARY_WRITES, SQLITE_MAX_BIND_PARAMETERS, MODERN_SQLITE_MAX_BIND_PARAMETERS, isSqliteNotAuthorizedError, isSqliteWriterSlotBusy, rowPropsToJsonText, DATABASE_EXTENSION_NAMES, requireWriteFence, requireFenceLockTables, DURABLE_OBJECT_MAX_BIND_PARAMETERS, D1_MAX_BIND_PARAMETERS, scopeAtomicBatchToSession, deriveTransactionSessionBackend, isNotNullColumnViolation, parseDimensionMismatch, downgradeAtomicBatch, errorChain, isDuplicatePrimaryKeyError, assertGraphCommandExecutionContext, assertGraphCommandCoordination, assertGraphCommandConvergenceIsolation, normalizeGraphCommandIsolation, isDuplicateUniqueIndexError, isEdgeMatchIdentityStorageUnavailableError, isInsufficientResourcesError } from './chunk-
|
|
8
|
+
import { createAsyncContextLoader, postgresFenceSql, isOptimisticRetryTier, runRetriedUnit, OPTIMISTIC_RETRY_ATTEMPTS, sqlValueList, advisoryLockSingleExpression, engineSerializedWriterSlotStatement, resolveBatchWriteVerdict, batchRefusalSuffix, batchRefusalDetails, chunk, RECORDED_GRAPH_WRITE_ADVISORY_LOCK_NAMESPACE, sortedReplacer } from './chunk-4TQOIBWH.js';
|
|
9
|
+
import { writeFenceDeclarationLine, isFirstPartyProfile, markFirstPartyFactory, resolveWriteFencePlan, auditBackendResource, registerSerializationFailureClassifier, resolveDeclaredBackendResource, POSTGRES_CAPABILITIES, POSTGRES_MAX_BIND_PARAMETERS, normalizeGraphAnalyticsCapabilities, registerFirstPartyProfile, isMissingTableError, isSqliteDuplicateEdgeMatchIdentityColumnError, deriveUnitOfWork, deriveBackend, markSchemaFencedInsertEligibleUnderFence, supportsRootAtomicBatch, SQLITE_CAPABILITIES, isPostgresConcurrentDdlRaceError, INTERNAL_TEMPORARY_WRITES, SQLITE_MAX_BIND_PARAMETERS, MODERN_SQLITE_MAX_BIND_PARAMETERS, isSqliteNotAuthorizedError, isSqliteWriterSlotBusy, rowPropsToJsonText, DATABASE_EXTENSION_NAMES, requireWriteFence, requireFenceLockTables, DURABLE_OBJECT_MAX_BIND_PARAMETERS, D1_MAX_BIND_PARAMETERS, scopeAtomicBatchToSession, deriveTransactionSessionBackend, isNotNullColumnViolation, parseDimensionMismatch, downgradeAtomicBatch, errorChain, isDuplicatePrimaryKeyError, assertGraphCommandExecutionContext, assertGraphCommandCoordination, assertGraphCommandConvergenceIsolation, normalizeGraphCommandIsolation, isDuplicateUniqueIndexError, isEdgeMatchIdentityStorageUnavailableError, isInsufficientResourcesError } from './chunk-TU22BFMP.js';
|
|
10
10
|
import { claimOwnerMatchesSql, encodeTupleKey, isSameClaimOwner, compareClaimTargets } from './chunk-OXJNL2PW.js';
|
|
11
11
|
import { resolveStampedValidityLowerBound, resolveStatedValidityLowerBound } from './chunk-CY657YYY.js';
|
|
12
12
|
import { assertNoSystemIndexNameCollision, systemIndexName, sinceIndexAdoptionDdl } from './chunk-P3K5GO3S.js';
|
|
@@ -76,6 +76,7 @@ var ENTITY_WRITE_MEMBERS = [
|
|
|
76
76
|
"insertNodesBatch",
|
|
77
77
|
"insertNodesBatchReturning",
|
|
78
78
|
"updateNode",
|
|
79
|
+
"upsertHeterogeneousNodes",
|
|
79
80
|
"updateResolvedNodesBatch",
|
|
80
81
|
"compareAndSetNode",
|
|
81
82
|
"updateNodeSet",
|
|
@@ -15695,6 +15696,64 @@ function createPostgresOperationBackend(options) {
|
|
|
15695
15696
|
});
|
|
15696
15697
|
return {
|
|
15697
15698
|
...operations,
|
|
15699
|
+
...transactionScoped ? {
|
|
15700
|
+
async upsertHeterogeneousNodes(params) {
|
|
15701
|
+
if (params.entries.length === 0) return [];
|
|
15702
|
+
const timestamp2 = nowIso();
|
|
15703
|
+
const storedLowerBound = resolveStampedValidityLowerBound(
|
|
15704
|
+
void 0,
|
|
15705
|
+
void 0,
|
|
15706
|
+
timestamp2
|
|
15707
|
+
);
|
|
15708
|
+
const inputRows = sql.join(
|
|
15709
|
+
params.entries.map(
|
|
15710
|
+
(entry, index3) => sql`(${params.schemaFence.graphId}, ${entry.kind}, ${entry.id}, ${JSON.stringify(entry.props)}, ${JSON.stringify(entry.updateProps)}, ${index3})`
|
|
15711
|
+
),
|
|
15712
|
+
sql`, `
|
|
15713
|
+
);
|
|
15714
|
+
const nodes3 = sql.identifier(tableNames.nodes);
|
|
15715
|
+
const schemaVersions3 = sql.identifier(
|
|
15716
|
+
requireDefined(tableNames.schemaVersions)
|
|
15717
|
+
);
|
|
15718
|
+
const query = sql`
|
|
15719
|
+
WITH "schema_fence" AS (
|
|
15720
|
+
SELECT 1 FROM ${schemaVersions3}
|
|
15721
|
+
WHERE graph_id = ${params.schemaFence.graphId}
|
|
15722
|
+
AND version = ${params.schemaFence.expectedVersion}
|
|
15723
|
+
AND is_active = TRUE
|
|
15724
|
+
FOR SHARE
|
|
15725
|
+
), "input_rows" (graph_id, kind, id, create_props, update_props, ord) AS (
|
|
15726
|
+
VALUES ${inputRows}
|
|
15727
|
+
), "upserted" AS (
|
|
15728
|
+
INSERT INTO ${nodes3} AS "target"
|
|
15729
|
+
(graph_id, kind, id, props, version, valid_from, valid_to, created_at, updated_at)
|
|
15730
|
+
SELECT graph_id, kind, id, create_props::jsonb, 1, ${storedLowerBound}, NULL, ${timestamp2}, ${timestamp2}
|
|
15731
|
+
FROM "input_rows" CROSS JOIN "schema_fence"
|
|
15732
|
+
ON CONFLICT (graph_id, kind, id) DO UPDATE SET
|
|
15733
|
+
props = CASE
|
|
15734
|
+
WHEN "target".deleted_at IS NULL THEN "target".props || (
|
|
15735
|
+
SELECT update_props::jsonb FROM "input_rows"
|
|
15736
|
+
WHERE graph_id = "target".graph_id
|
|
15737
|
+
AND kind = "target".kind
|
|
15738
|
+
AND id = "target".id
|
|
15739
|
+
)
|
|
15740
|
+
ELSE EXCLUDED.props
|
|
15741
|
+
END,
|
|
15742
|
+
version = "target".version + 1,
|
|
15743
|
+
valid_from = CASE WHEN "target".deleted_at IS NULL THEN "target".valid_from ELSE EXCLUDED.valid_from END,
|
|
15744
|
+
valid_to = CASE WHEN "target".deleted_at IS NULL THEN "target".valid_to ELSE EXCLUDED.valid_to END,
|
|
15745
|
+
deleted_at = NULL,
|
|
15746
|
+
updated_at = EXCLUDED.updated_at
|
|
15747
|
+
RETURNING *
|
|
15748
|
+
)
|
|
15749
|
+
SELECT "upserted".* FROM "upserted"
|
|
15750
|
+
JOIN "input_rows" USING (graph_id, kind, id)
|
|
15751
|
+
ORDER BY "input_rows".ord
|
|
15752
|
+
`;
|
|
15753
|
+
const rows = await execAll(query);
|
|
15754
|
+
return rows.map((row) => toNodeRow(row));
|
|
15755
|
+
}
|
|
15756
|
+
} : {},
|
|
15698
15757
|
...vectorEmbeddingMethods,
|
|
15699
15758
|
catalog: catalog ?? createPostgresCatalogProbes(
|
|
15700
15759
|
db,
|
|
@@ -17393,5 +17452,5 @@ function createTransactionBackend2(options) {
|
|
|
17393
17452
|
}
|
|
17394
17453
|
|
|
17395
17454
|
export { CURRENT_BASE_SCHEMA_VERSION, DERIVABLE_ENGINE_PROFILE_KEYS, ORDERED_AGGREGATE_PROBE_SQL, assertNoLegacyTransactionCapability, buildPostgresEngineProfile, buildSqliteEngineProfile, createPostgresBackend, createPostgresTables, createSqlBackend, createSqliteBackend, createSqliteTables, deriveEngineProfile, edgeClaims, edgeClaims2, edges, edges2, fulltext, generatePostgresDDL, generatePostgresMigrationSQL, generateSqliteDDL, generateSqliteMigrationSQL, generateVectorlessPostgresMigrationSQL, isLocalLibsqlClient, nodes, nodes2, planSqliteEdgeMatchIdentityAdoption, quoteDdlIdentifier, recordedClock, recordedClock2, recordedEdges, recordedEdges2, recordedNodes, recordedNodes2, schemaVersions, schemaVersions2, tables, tables2, uniques, uniques2 };
|
|
17396
|
-
//# sourceMappingURL=chunk-
|
|
17397
|
-
//# sourceMappingURL=chunk-
|
|
17455
|
+
//# sourceMappingURL=chunk-MUEPEWMQ.js.map
|
|
17456
|
+
//# sourceMappingURL=chunk-MUEPEWMQ.js.map
|