@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,4 +1,4 @@
|
|
|
1
|
-
import { supportsAtomicBatch } from './chunk-
|
|
1
|
+
import { supportsAtomicBatch } from './chunk-TU22BFMP.js';
|
|
2
2
|
import { ConfigurationError, CompilerInvariantError } from './chunk-GMKPIYHY.js';
|
|
3
3
|
|
|
4
4
|
// src/backend/capabilities/atomic-sql-program.ts
|
|
@@ -560,5 +560,5 @@ function carryAtomicMutationSessionRegistration(base, derived) {
|
|
|
560
560
|
}
|
|
561
561
|
|
|
562
562
|
export { ATOMIC_EDGE_MUTATION_VARIANT_BY_KIND, ATOMIC_MUTATION_PROGRAM_VARIANTS, AtomicEdgeBatchCardinalityRefusalError, AtomicEdgeBatchEndpointRefusalError, AtomicEdgeConvergenceTombstoneRefusalError, AtomicEdgeDeleteIdentityRefusalError, AtomicNodeDeleteRestrictedRefusalError, atomicNodeClaimInputCost, carryAtomicMutationSessionRegistration, createAtomicSqlProgramExecutor, hasAtomicMutationProgramRegistration, hasAtomicSqlProgramRegistration, reachableAtomicMutationProgramVariants, registerAtomicMutationPrograms, registerAtomicSqlProgram, resolveAtomicMutationPrograms, resolveRegisteredAtomicSqlBatchExecutor, supportsAtomicNodeClaimFamily, supportsAtomicNodeClaims, supportsAtomicNodeProjections, withAtomicMutationProgramDispatchObserver };
|
|
563
|
-
//# sourceMappingURL=chunk-
|
|
564
|
-
//# sourceMappingURL=chunk-
|
|
563
|
+
//# sourceMappingURL=chunk-UFKYMQJ5.js.map
|
|
564
|
+
//# sourceMappingURL=chunk-UFKYMQJ5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/capabilities/atomic-sql-program.ts","../src/backend/capabilities/atomic-mutation-program.ts"],"names":[],"mappings":"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","file":"chunk-WTMSUIRO.js","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":[],"mappings":"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","file":"chunk-UFKYMQJ5.js","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,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkG7OKJDMG_cjs = require('./chunk-G7OKJDMG.cjs');
|
|
4
4
|
var chunkR255UE5U_cjs = require('./chunk-R255UE5U.cjs');
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
5
|
+
var chunk6B3LQUYG_cjs = require('./chunk-6B3LQUYG.cjs');
|
|
6
|
+
var chunk5JOCIMQ3_cjs = require('./chunk-5JOCIMQ3.cjs');
|
|
7
|
+
var chunk7LQTDGV5_cjs = require('./chunk-7LQTDGV5.cjs');
|
|
8
|
+
var chunk6JRVV2SS_cjs = require('./chunk-6JRVV2SS.cjs');
|
|
9
9
|
var chunk5ICDVLI3_cjs = require('./chunk-5ICDVLI3.cjs');
|
|
10
10
|
var chunkL4L4AV6F_cjs = require('./chunk-L4L4AV6F.cjs');
|
|
11
11
|
var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
|
|
@@ -111,7 +111,7 @@ async function issuingClaims(entries, issue) {
|
|
|
111
111
|
function claimFenceRefusal(ctx, backend, entries) {
|
|
112
112
|
const gating = entries.find((entry) => entry.placement === "pre-insert");
|
|
113
113
|
if (gating === void 0) return void 0;
|
|
114
|
-
return
|
|
114
|
+
return chunk6B3LQUYG_cjs.constraintFenceRefusal(ctx, backend, gating.refusalReason);
|
|
115
115
|
}
|
|
116
116
|
function isUniquenessClaimEntry(entry) {
|
|
117
117
|
return entry.refusal.kind === "uniqueness";
|
|
@@ -294,10 +294,10 @@ async function issueClaimsIndividually(ctx, claims, onIssued) {
|
|
|
294
294
|
}
|
|
295
295
|
async function issueClaimsBatched(ctx, claims, onIssued) {
|
|
296
296
|
if (claims.length === 0) return;
|
|
297
|
-
const bound =
|
|
297
|
+
const bound = chunk6JRVV2SS_cjs.bindExtraIfReachable(
|
|
298
298
|
ctx.backend,
|
|
299
299
|
ctx.uniqueSidecarBatch.extras.insertUniqueBatch,
|
|
300
|
-
|
|
300
|
+
chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
|
|
301
301
|
);
|
|
302
302
|
if (bound === void 0) {
|
|
303
303
|
await issueClaimsIndividually(ctx, claims, onIssued);
|
|
@@ -390,10 +390,10 @@ async function deleteUniquenessEntries(ctx, kind, id, props, constraints) {
|
|
|
390
390
|
}
|
|
391
391
|
async function hardDeleteClaimsByNodeIds(ctx, concreteKind, nodeIds) {
|
|
392
392
|
await chunkBXHAPCQG_cjs.requireDefined(
|
|
393
|
-
|
|
393
|
+
chunk6JRVV2SS_cjs.bindExtraIfReachable(
|
|
394
394
|
ctx.backend,
|
|
395
395
|
ctx.uniqueSidecarBatch.extras.hardDeleteUniquesByNodeIds,
|
|
396
|
-
|
|
396
|
+
chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
|
|
397
397
|
)?.hardDeleteUniquesByNodeIds
|
|
398
398
|
)({
|
|
399
399
|
graphId: ctx.graphId,
|
|
@@ -532,8 +532,8 @@ function resolvedNodeUniquenessOperationsRefusal() {
|
|
|
532
532
|
);
|
|
533
533
|
}
|
|
534
534
|
function resolvedNodeUniqueSidecarBatchIsReachable(ctx) {
|
|
535
|
-
if (
|
|
536
|
-
|
|
535
|
+
if (chunk7LQTDGV5_cjs.missingRequiredExtras(
|
|
536
|
+
chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH,
|
|
537
537
|
ctx.uniqueSidecarBatch,
|
|
538
538
|
"resolved node write"
|
|
539
539
|
).length > 0) {
|
|
@@ -544,7 +544,7 @@ function resolvedNodeUniqueSidecarBatchIsReachable(ctx) {
|
|
|
544
544
|
ctx.uniqueSidecarBatch.extras.hardDeleteUniquesByNodeIds,
|
|
545
545
|
ctx.uniqueSidecarBatch.extras.insertUniqueBatch
|
|
546
546
|
].every(
|
|
547
|
-
(extra) =>
|
|
547
|
+
(extra) => chunk6JRVV2SS_cjs.bindExtraIfReachable(ctx.backend, extra, chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id) !== void 0
|
|
548
548
|
);
|
|
549
549
|
}
|
|
550
550
|
function resolvedNodeUpdatePreservesClaimKeys(registry, kind, id, previousProps, nextProps, constraints) {
|
|
@@ -627,10 +627,10 @@ function groupClaimsForProbe(claims) {
|
|
|
627
627
|
return [...groups.values()];
|
|
628
628
|
}
|
|
629
629
|
function requireBatchProbe(ctx) {
|
|
630
|
-
const bound =
|
|
630
|
+
const bound = chunk6JRVV2SS_cjs.bindExtraIfReachable(
|
|
631
631
|
ctx.backend,
|
|
632
632
|
ctx.uniqueSidecarBatch.extras.checkUniqueBatch,
|
|
633
|
-
|
|
633
|
+
chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
|
|
634
634
|
);
|
|
635
635
|
if (bound === void 0) {
|
|
636
636
|
throw new chunk7XYPLAPL_cjs.ConfigurationError(
|
|
@@ -684,10 +684,10 @@ async function prepareResolvedNodeClaims(ctx, upserts, releases) {
|
|
|
684
684
|
if (!resolvedNodeUniqueSidecarBatchIsReachable(ctx)) {
|
|
685
685
|
throw resolvedNodeUniquenessOperationsRefusal();
|
|
686
686
|
}
|
|
687
|
-
const boundHardDelete =
|
|
687
|
+
const boundHardDelete = chunk6JRVV2SS_cjs.bindExtraIfReachable(
|
|
688
688
|
ctx.backend,
|
|
689
689
|
ctx.uniqueSidecarBatch.extras.hardDeleteUniquesByNodeIds,
|
|
690
|
-
|
|
690
|
+
chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
|
|
691
691
|
);
|
|
692
692
|
const { hardDeleteUniquesByNodeIds } = chunkBXHAPCQG_cjs.requireDefined(boundHardDelete);
|
|
693
693
|
await validateResolvedNodeClaims(ctx, upserts, releases);
|
|
@@ -1109,7 +1109,7 @@ async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
|
|
|
1109
1109
|
});
|
|
1110
1110
|
}
|
|
1111
1111
|
if (args.mode === "hard") {
|
|
1112
|
-
await
|
|
1112
|
+
await chunkG7OKJDMG_cjs.purgeEdgeClaims(
|
|
1113
1113
|
backend,
|
|
1114
1114
|
ctx.claimsVerdict(),
|
|
1115
1115
|
ctx.graphId,
|
|
@@ -1147,7 +1147,7 @@ async function applyNodeInsertSyncFansBatch(ctx, items, backend) {
|
|
|
1147
1147
|
);
|
|
1148
1148
|
}
|
|
1149
1149
|
function parseRowProps(row) {
|
|
1150
|
-
return
|
|
1150
|
+
return chunk6JRVV2SS_cjs.rowPropsToObject(row.props);
|
|
1151
1151
|
}
|
|
1152
1152
|
async function planNodeUpdateUniqueness(ctx, args, backend) {
|
|
1153
1153
|
const { kind, id } = args.existing;
|
|
@@ -1244,8 +1244,8 @@ async function applyResolvedNodeUpdateBatch(ctx, args, backend) {
|
|
|
1244
1244
|
{ operation: "updateResolvedNodesBatch", rowId: row.id }
|
|
1245
1245
|
);
|
|
1246
1246
|
}
|
|
1247
|
-
const props =
|
|
1248
|
-
if (!
|
|
1247
|
+
const props = chunk6JRVV2SS_cjs.rowPropsToObject(row.props);
|
|
1248
|
+
if (!chunk5JOCIMQ3_cjs.canonicalEqual(entry.props, props)) {
|
|
1249
1249
|
throw new chunk7XYPLAPL_cjs.ConfigurationError(
|
|
1250
1250
|
"Resolved node update batch returned props that differ from its input",
|
|
1251
1251
|
{ operation: "updateResolvedNodesBatch", rowId: row.id }
|
|
@@ -1390,8 +1390,8 @@ async function applyNodeSetUpdate(ctx, args, backend) {
|
|
|
1390
1390
|
}
|
|
1391
1391
|
executeNodeSetUpdate = () => updateNodeSet({ ...commonParams, operation: "updateWhere" });
|
|
1392
1392
|
}
|
|
1393
|
-
if (uniqueConstraints.length > 0 &&
|
|
1394
|
-
|
|
1393
|
+
if (uniqueConstraints.length > 0 && chunk7LQTDGV5_cjs.missingRequiredExtras(
|
|
1394
|
+
chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH,
|
|
1395
1395
|
ctx.uniqueSidecarBatch,
|
|
1396
1396
|
"set-based node update"
|
|
1397
1397
|
).length > 0) {
|
|
@@ -1426,13 +1426,13 @@ async function applyNodeSetUpdate(ctx, args, backend) {
|
|
|
1426
1426
|
const result = await executeNodeSetUpdate();
|
|
1427
1427
|
if (result.affectedCount === 0) return { affectedCount: 0 };
|
|
1428
1428
|
const sidecarItems = result.rows.map((row) => {
|
|
1429
|
-
const props =
|
|
1430
|
-
const validatedProps =
|
|
1429
|
+
const props = chunk6JRVV2SS_cjs.rowPropsToObject(row.props);
|
|
1430
|
+
const validatedProps = chunk6B3LQUYG_cjs.validateNodeProps(schema, props, {
|
|
1431
1431
|
kind,
|
|
1432
1432
|
operation: "update",
|
|
1433
1433
|
id: row.id
|
|
1434
1434
|
});
|
|
1435
|
-
if (!
|
|
1435
|
+
if (!chunk5JOCIMQ3_cjs.canonicalEqual(validatedProps, props)) {
|
|
1436
1436
|
throw new chunk7XYPLAPL_cjs.ValidationError(
|
|
1437
1437
|
`Set update would persist a non-canonical ${kind} row`,
|
|
1438
1438
|
{
|
|
@@ -1464,10 +1464,10 @@ async function applyNodeSetUpdate(ctx, args, backend) {
|
|
|
1464
1464
|
constraints: item.uniqueConstraints
|
|
1465
1465
|
}));
|
|
1466
1466
|
if (uniqueConstraints.length > 0) {
|
|
1467
|
-
if (
|
|
1467
|
+
if (chunk6JRVV2SS_cjs.bindExtraIfReachable(
|
|
1468
1468
|
backend,
|
|
1469
1469
|
ctx.uniqueSidecarBatch.extras.insertUniqueBatch,
|
|
1470
|
-
|
|
1470
|
+
chunk6JRVV2SS_cjs.UNIQUE_SIDECAR_BATCH.id
|
|
1471
1471
|
) === void 0) {
|
|
1472
1472
|
throw new chunk7XYPLAPL_cjs.ConfigurationError(
|
|
1473
1473
|
"The transaction backend lacks batched uniqueness operations",
|
|
@@ -1530,5 +1530,5 @@ exports.resolvedNodeUniqueSidecarBatchIsReachable = resolvedNodeUniqueSidecarBat
|
|
|
1530
1530
|
exports.resolvedNodeUpdatePreservesClaimKeys = resolvedNodeUpdatePreservesClaimKeys;
|
|
1531
1531
|
exports.withNodeCreateClaims = withNodeCreateClaims;
|
|
1532
1532
|
exports.withNodeCreateClaimsBatch = withNodeCreateClaimsBatch;
|
|
1533
|
-
//# sourceMappingURL=chunk-
|
|
1534
|
-
//# sourceMappingURL=chunk-
|
|
1533
|
+
//# sourceMappingURL=chunk-VNJMM2QQ.cjs.map
|
|
1534
|
+
//# sourceMappingURL=chunk-VNJMM2QQ.cjs.map
|