@nicia-ai/typegraph 0.55.0 → 0.56.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 +14 -0
- package/dist/backend/index.cjs +86 -86
- package/dist/backend/index.js +7 -7
- package/dist/backend/postgres/index.cjs +22 -22
- 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 +2 -2
- package/dist/backend/postgres/pglite-store.d.ts +2 -2
- package/dist/backend/postgres/pglite-store.js +1 -1
- package/dist/backend/postgres/pglite.cjs +10 -10
- package/dist/backend/postgres/pglite.js +9 -9
- package/dist/backend/sqlite/index.cjs +21 -21
- package/dist/backend/sqlite/index.js +8 -8
- package/dist/backend/sqlite/libsql.cjs +12 -12
- 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 +2 -2
- package/dist/backend/sqlite/local-store.d.ts +2 -2
- package/dist/backend/sqlite/local-store.js +1 -1
- package/dist/backend/sqlite/local.cjs +10 -10
- package/dist/backend/sqlite/local.js +9 -9
- package/dist/{chunk-S5WG5AFG.cjs → chunk-2XUAUSMI.cjs} +12 -12
- package/dist/{chunk-S5WG5AFG.cjs.map → chunk-2XUAUSMI.cjs.map} +1 -1
- package/dist/{chunk-MTE255N3.cjs → chunk-36XLQHZA.cjs} +4 -4
- package/dist/{chunk-MTE255N3.cjs.map → chunk-36XLQHZA.cjs.map} +1 -1
- package/dist/{chunk-FWSGKOBN.js → chunk-6LTRZOUU.js} +6 -6
- package/dist/{chunk-FWSGKOBN.js.map → chunk-6LTRZOUU.js.map} +1 -1
- package/dist/{chunk-YVKPUSHS.js → chunk-75KH6Y2W.js} +16 -7
- package/dist/chunk-75KH6Y2W.js.map +1 -0
- package/dist/{chunk-MJXEO7YA.js → chunk-762VPGHN.js} +5 -5
- package/dist/{chunk-MJXEO7YA.js.map → chunk-762VPGHN.js.map} +1 -1
- package/dist/{chunk-GGDTMBNA.cjs → chunk-7CCVR2QF.cjs} +54 -54
- package/dist/{chunk-GGDTMBNA.cjs.map → chunk-7CCVR2QF.cjs.map} +1 -1
- package/dist/{chunk-7EOJO6QB.js → chunk-7MHENVRG.js} +3 -3
- package/dist/{chunk-7EOJO6QB.js.map → chunk-7MHENVRG.js.map} +1 -1
- package/dist/{chunk-7B3DSFX3.cjs → chunk-AUTRK6WM.cjs} +4 -4
- package/dist/{chunk-7B3DSFX3.cjs.map → chunk-AUTRK6WM.cjs.map} +1 -1
- package/dist/{chunk-SIQ4BFL5.js → chunk-AZP5CCHL.js} +4 -4
- package/dist/{chunk-SIQ4BFL5.js.map → chunk-AZP5CCHL.js.map} +1 -1
- package/dist/{chunk-WTW7RWAG.cjs → chunk-BYUIOM4L.cjs} +6 -6
- package/dist/{chunk-WTW7RWAG.cjs.map → chunk-BYUIOM4L.cjs.map} +1 -1
- package/dist/{chunk-74FNI3PT.js → chunk-C3TJU4KQ.js} +6 -6
- package/dist/chunk-C3TJU4KQ.js.map +1 -0
- package/dist/{chunk-7V2R4MH6.js → chunk-CEQOTZGB.js} +5 -5
- package/dist/{chunk-7V2R4MH6.js.map → chunk-CEQOTZGB.js.map} +1 -1
- package/dist/{chunk-TKFQLKH2.cjs → chunk-CYKHSH5O.cjs} +36 -36
- package/dist/{chunk-TKFQLKH2.cjs.map → chunk-CYKHSH5O.cjs.map} +1 -1
- package/dist/{chunk-D5TCKAQT.cjs → chunk-DGIA64DM.cjs} +4 -4
- package/dist/{chunk-D5TCKAQT.cjs.map → chunk-DGIA64DM.cjs.map} +1 -1
- package/dist/{chunk-FFR3YUY2.js → chunk-E4QYEWVH.js} +5 -5
- package/dist/{chunk-FFR3YUY2.js.map → chunk-E4QYEWVH.js.map} +1 -1
- package/dist/{chunk-467YITD4.cjs → chunk-ETU5IILQ.cjs} +13 -13
- package/dist/{chunk-467YITD4.cjs.map → chunk-ETU5IILQ.cjs.map} +1 -1
- package/dist/{chunk-HW3IX2RF.js → chunk-EWRLWI7W.js} +4 -4
- package/dist/{chunk-HW3IX2RF.js.map → chunk-EWRLWI7W.js.map} +1 -1
- package/dist/{chunk-KZ6OHFDV.js → chunk-F2S5JWCT.js} +3 -3
- package/dist/{chunk-KZ6OHFDV.js.map → chunk-F2S5JWCT.js.map} +1 -1
- package/dist/{chunk-45WPPI64.js → chunk-FMCPKMQI.js} +3 -3
- package/dist/{chunk-45WPPI64.js.map → chunk-FMCPKMQI.js.map} +1 -1
- package/dist/{chunk-QM6IQW7B.js → chunk-ILHVYKXJ.js} +7 -7
- package/dist/{chunk-QM6IQW7B.js.map → chunk-ILHVYKXJ.js.map} +1 -1
- package/dist/{chunk-ECYEWFEH.cjs → chunk-J34FSPSC.cjs} +16 -6
- package/dist/chunk-J34FSPSC.cjs.map +1 -0
- package/dist/{chunk-GFYCLCGU.cjs → chunk-KM3CLHDB.cjs} +9 -9
- package/dist/{chunk-GFYCLCGU.cjs.map → chunk-KM3CLHDB.cjs.map} +1 -1
- package/dist/{chunk-SLNH62T3.js → chunk-KQYUKOGX.js} +3 -3
- package/dist/{chunk-SLNH62T3.js.map → chunk-KQYUKOGX.js.map} +1 -1
- package/dist/{chunk-7I2PYI4U.cjs → chunk-KR3N6Y7O.cjs} +67 -67
- package/dist/{chunk-7I2PYI4U.cjs.map → chunk-KR3N6Y7O.cjs.map} +1 -1
- package/dist/{chunk-HZCOCNIX.cjs → chunk-L2REUAJB.cjs} +24 -24
- package/dist/{chunk-HZCOCNIX.cjs.map → chunk-L2REUAJB.cjs.map} +1 -1
- package/dist/{chunk-VU65FXEG.js → chunk-LFXBFPI2.js} +66 -29
- package/dist/chunk-LFXBFPI2.js.map +1 -0
- package/dist/{chunk-NXRSR6QG.js → chunk-MHM6OGZR.js} +9 -9
- package/dist/{chunk-NXRSR6QG.js.map → chunk-MHM6OGZR.js.map} +1 -1
- package/dist/{chunk-FCUSVSYX.js → chunk-MRGWM5LE.js} +10 -10
- package/dist/{chunk-FCUSVSYX.js.map → chunk-MRGWM5LE.js.map} +1 -1
- package/dist/{chunk-WXGMDROJ.js → chunk-QDNEXTON.js} +7 -7
- package/dist/{chunk-WXGMDROJ.js.map → chunk-QDNEXTON.js.map} +1 -1
- package/dist/{chunk-VYU5H4FO.js → chunk-RXA2D3UR.js} +3 -3
- package/dist/{chunk-VYU5H4FO.js.map → chunk-RXA2D3UR.js.map} +1 -1
- package/dist/{chunk-XODNY4QI.js → chunk-TIBSLFHR.js} +6 -6
- package/dist/{chunk-XODNY4QI.js.map → chunk-TIBSLFHR.js.map} +1 -1
- package/dist/{chunk-KZG7HQSN.cjs → chunk-UVMSWO6X.cjs} +173 -173
- package/dist/{chunk-KZG7HQSN.cjs.map → chunk-UVMSWO6X.cjs.map} +1 -1
- package/dist/{chunk-ORPT5EQW.cjs → chunk-UZ6CJUC5.cjs} +27 -27
- package/dist/chunk-UZ6CJUC5.cjs.map +1 -0
- package/dist/{chunk-GNF3PHEQ.cjs → chunk-VF2IMMZT.cjs} +17 -17
- package/dist/{chunk-GNF3PHEQ.cjs.map → chunk-VF2IMMZT.cjs.map} +1 -1
- package/dist/{chunk-PGZV3E3I.cjs → chunk-VXEHEPC4.cjs} +4 -4
- package/dist/{chunk-PGZV3E3I.cjs.map → chunk-VXEHEPC4.cjs.map} +1 -1
- package/dist/{chunk-OJ47LMOB.cjs → chunk-WIUHN6SZ.cjs} +669 -628
- package/dist/chunk-WIUHN6SZ.cjs.map +1 -0
- package/dist/{chunk-HNW5IDB3.js → chunk-WIZB5U6N.js} +7 -7
- package/dist/{chunk-HNW5IDB3.js.map → chunk-WIZB5U6N.js.map} +1 -1
- package/dist/{chunk-IDQZI6GL.js → chunk-XH75W3O5.js} +3 -3
- package/dist/{chunk-IDQZI6GL.js.map → chunk-XH75W3O5.js.map} +1 -1
- package/dist/{chunk-T7LSSV7J.cjs → chunk-XXEFDJHY.cjs} +45 -45
- package/dist/{chunk-T7LSSV7J.cjs.map → chunk-XXEFDJHY.cjs.map} +1 -1
- package/dist/{chunk-GORCU2GR.cjs → chunk-Z4NU4MYB.cjs} +123 -123
- package/dist/{chunk-GORCU2GR.cjs.map → chunk-Z4NU4MYB.cjs.map} +1 -1
- package/dist/{chunk-KFC3OUV4.cjs → chunk-ZHK3HEZ2.cjs} +130 -130
- package/dist/{chunk-KFC3OUV4.cjs.map → chunk-ZHK3HEZ2.cjs.map} +1 -1
- package/dist/{chunk-FYMYLZGX.cjs → chunk-ZXXGMQC3.cjs} +10 -10
- package/dist/{chunk-FYMYLZGX.cjs.map → chunk-ZXXGMQC3.cjs.map} +1 -1
- package/dist/graph-merge/index.cjs +577 -99
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +108 -4
- package/dist/graph-merge/index.d.ts +108 -4
- package/dist/graph-merge/index.js +495 -21
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{graph-templates-qraW63Ry.d.ts → graph-templates-BSA9VU_O.d.ts} +1 -1
- package/dist/{graph-templates--hp2U4kn.d.cts → graph-templates-Cg7DpEOF.d.cts} +1 -1
- package/dist/index.cjs +95 -95
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +16 -16
- package/dist/interchange/index.cjs +33 -33
- package/dist/interchange/index.d.cts +1 -1
- package/dist/interchange/index.d.ts +1 -1
- package/dist/interchange/index.js +10 -10
- package/dist/{local-store-impl-HXBO3VF4.js → local-store-impl-77DCLAAY.js} +18 -18
- package/dist/{local-store-impl-HXBO3VF4.js.map → local-store-impl-77DCLAAY.js.map} +1 -1
- package/dist/{local-store-impl-CUQKHHOZ.cjs → local-store-impl-NJCWM3KR.cjs} +22 -22
- package/dist/{local-store-impl-CUQKHHOZ.cjs.map → local-store-impl-NJCWM3KR.cjs.map} +1 -1
- package/dist/{pglite-store-impl-BD3AVOUH.js → pglite-store-impl-3VFSYLAJ.js} +18 -18
- package/dist/{pglite-store-impl-BD3AVOUH.js.map → pglite-store-impl-3VFSYLAJ.js.map} +1 -1
- package/dist/{pglite-store-impl-C3MQ72LT.cjs → pglite-store-impl-LHLJ3GBQ.cjs} +22 -22
- package/dist/{pglite-store-impl-C3MQ72LT.cjs.map → pglite-store-impl-LHLJ3GBQ.cjs.map} +1 -1
- package/dist/profiler/index.d.cts +1 -1
- package/dist/profiler/index.d.ts +1 -1
- package/dist/provenance/index.cjs +21 -21
- package/dist/provenance/index.d.cts +1 -1
- package/dist/provenance/index.d.ts +1 -1
- package/dist/provenance/index.js +5 -5
- package/dist/schema/index.cjs +36 -36
- package/dist/schema/index.d.cts +3 -3
- package/dist/schema/index.d.ts +3 -3
- package/dist/schema/index.js +6 -6
- package/dist/{store-stw2AEB4.d.ts → store-CQ3uzXla.d.ts} +58 -27
- package/dist/{store-DTEkUQ0k.d.cts → store-DbHAgVMH.d.cts} +58 -27
- package/package.json +1 -1
- package/dist/chunk-74FNI3PT.js.map +0 -1
- package/dist/chunk-ECYEWFEH.cjs.map +0 -1
- package/dist/chunk-OJ47LMOB.cjs.map +0 -1
- package/dist/chunk-ORPT5EQW.cjs.map +0 -1
- package/dist/chunk-VU65FXEG.js.map +0 -1
- package/dist/chunk-YVKPUSHS.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk36XLQHZA_cjs = require('./chunk-36XLQHZA.cjs');
|
|
4
|
+
var chunkJ34FSPSC_cjs = require('./chunk-J34FSPSC.cjs');
|
|
5
5
|
var chunkNI2XPJQ2_cjs = require('./chunk-NI2XPJQ2.cjs');
|
|
6
6
|
var chunkAYQBEVQY_cjs = require('./chunk-AYQBEVQY.cjs');
|
|
7
7
|
var chunkASKXTVK5_cjs = require('./chunk-ASKXTVK5.cjs');
|
|
@@ -166,7 +166,7 @@ function createSchemaVersionRowMapper(config) {
|
|
|
166
166
|
graph_id: asString(row["graph_id"], "graph_id"),
|
|
167
167
|
version: asNumber(row["version"], "version"),
|
|
168
168
|
schema_hash: asString(row["schema_hash"], "schema_hash"),
|
|
169
|
-
schema_doc:
|
|
169
|
+
schema_doc: chunkJ34FSPSC_cjs.rowPropsToJsonText(config.normalizeJson(row["schema_doc"])),
|
|
170
170
|
created_at: normalizeRequiredRowTimestamp(
|
|
171
171
|
row["created_at"],
|
|
172
172
|
"created_at"
|
|
@@ -181,7 +181,7 @@ function buildHardDeleteUniquesByConcreteKind(uniquesTableName, params) {
|
|
|
181
181
|
return chunkAYQBEVQY_cjs.sql`DELETE FROM ${chunkAYQBEVQY_cjs.sql.identifier(uniquesTableName)} WHERE ${chunkAYQBEVQY_cjs.sql.identifier("graph_id")} = ${params.graphId} AND ${chunkAYQBEVQY_cjs.sql.identifier("concrete_kind")} = ${params.concreteKind}`;
|
|
182
182
|
}
|
|
183
183
|
function buildHardDeleteEdgeClaimsByEdgeKind(edgeClaimsTableName, params) {
|
|
184
|
-
const axes =
|
|
184
|
+
const axes = chunk36XLQHZA_cjs.edgeCardinalityAxesForKind(params.edgeKind).map(
|
|
185
185
|
(axis) => chunkAYQBEVQY_cjs.sql`${axis}`
|
|
186
186
|
);
|
|
187
187
|
return chunkAYQBEVQY_cjs.sql`DELETE FROM ${chunkAYQBEVQY_cjs.sql.identifier(edgeClaimsTableName)} WHERE ${chunkAYQBEVQY_cjs.sql.identifier("graph_id")} = ${params.graphId} AND ${chunkAYQBEVQY_cjs.sql.identifier("axis")} IN (${chunkAYQBEVQY_cjs.sql.join(axes, chunkAYQBEVQY_cjs.sql`, `)})`;
|
|
@@ -204,5 +204,5 @@ exports.formatPostgresTimestamp = formatPostgresTimestamp;
|
|
|
204
204
|
exports.normalizeRequiredRowTimestamp = normalizeRequiredRowTimestamp;
|
|
205
205
|
exports.normalizeRowTimestamp = normalizeRowTimestamp;
|
|
206
206
|
exports.nowIso = nowIso;
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
208
|
-
//# sourceMappingURL=chunk-
|
|
207
|
+
//# sourceMappingURL=chunk-BYUIOM4L.cjs.map
|
|
208
|
+
//# sourceMappingURL=chunk-BYUIOM4L.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/row-mappers.ts","../src/store/claims/removal-sql.ts"],"names":["DatabaseOperationError","canonicalizeDatabaseTimestamp","rowPropsToJsonText","sql","edgeCardinalityAxesForKind"],"mappings":"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","file":"chunk-WTW7RWAG.cjs","sourcesContent":["/**\n * Shared database row-mapping utilities.\n */\n\nimport { DatabaseOperationError } from \"../errors\";\nimport { canonicalizeDatabaseTimestamp } from \"../utils/date\";\nimport {\n type EdgeRow,\n type NodeRow,\n rowPropsToJsonText,\n type SchemaVersionRow,\n type UniqueRow,\n} from \"./types\";\n\nfunction asString(value: unknown, field: string): string {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nfunction asOptionalString(value: unknown, field: string): string | undefined {\n if (value === null || value === undefined) return undefined;\n return asString(value, field);\n}\n\nfunction asNumber(value: unknown, field: string): number {\n if (typeof value !== \"number\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be number, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Formats PostgreSQL timestamps used by internal status-table adapters.\n * Row metadata uses the stricter {@link normalizeRowTimestamp} contract.\n */\nexport function formatPostgresTimestamp(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"string\") {\n if (value.includes(\"T\")) return value;\n const date = new Date(value);\n if (!Number.isNaN(date.getTime())) return date.toISOString();\n return value;\n }\n return undefined;\n}\n\n/**\n * Canonicalizes database-driver timestamp values at the row-mapping boundary.\n * Every store and compiled-query metadata projection uses this owner so driver\n * rendering differences cannot become public values.\n */\nexport function normalizeRowTimestamp(\n value: unknown,\n field: string,\n): string | undefined {\n if (value === null || value === undefined) return undefined;\n const canonical = canonicalizeDatabaseTimestamp(value);\n if (canonical === undefined) {\n throw new DatabaseOperationError(\n `Expected ${field} to be a database timestamp, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return canonical;\n}\n\nexport function normalizeRequiredRowTimestamp(\n value: unknown,\n field: string,\n): string {\n const timestamp = normalizeRowTimestamp(value, field);\n if (timestamp === undefined) {\n throw new DatabaseOperationError(`Expected non-null ${field} timestamp`, {\n operation: \"select\",\n entity: \"row\",\n });\n }\n return timestamp;\n}\n\n/**\n * Coerce a fulltext relevance score to `number` at the backend\n * boundary. Postgres returns `numeric` as a string to preserve\n * precision; a custom `FulltextStrategy` on either dialect could\n * likewise yield a string. Shared so both backends enforce the same\n * `FulltextSearchResult.score: number` contract and reject garbage\n * loudly instead of propagating `NaN`.\n */\nexport function coerceNumericScore(value: number | string): number {\n if (typeof value === \"number\") return value;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) {\n throw new TypeError(\n `Backend returned non-numeric fulltext score: ${JSON.stringify(value)}`,\n );\n }\n return parsed;\n}\n\n/**\n * Normalizes a JSON column that may be returned as a parsed object (JSONB)\n * or string. PostgreSQL drivers hand jsonb back already parsed — keep the\n * object instead of re-stringifying it, so the read path pays zero JSON\n * work per row (consumers normalize via rowPropsToObject /\n * rowPropsToJsonText at the point of use). SQLite text passes through.\n */\nfunction normalizeJsonColumn(value: unknown): string | Record<string, unknown> {\n if (typeof value === \"string\") return value;\n if (value !== null && typeof value === \"object\") {\n return value as Record<string, unknown>;\n }\n return JSON.stringify(value ?? {});\n}\n\n/**\n * Dialect-specific configuration for row mappers.\n *\n * Row mapper factories accept this config to produce dialect-appropriate\n * mappers. Timestamp normalization is dialect-independent and owned by\n * {@link normalizeRowTimestamp}; only JSON columns need dialect configuration.\n */\ntype DialectRowMapperConfig = Readonly<{\n normalizeJson: (value: unknown) => string | Record<string, unknown>;\n}>;\n\n/**\n * SQLite row mapper config. JSON is stored as TEXT.\n */\nexport const SQLITE_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: (value) => {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected JSON column to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n};\n\n/**\n * PostgreSQL row mapper config. JSONB is returned as parsed objects.\n */\nexport const POSTGRES_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: normalizeJsonColumn,\n};\n\n// Trust boundary: Drizzle raw SQL returns Record<string, unknown> rows.\n// The field access patterns below are intentional unsafe casts at the\n// database driver boundary where we know the column shapes.\n\nexport function createNodeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => NodeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n id: asString(row[\"id\"], \"id\"),\n props: config.normalizeJson(row[\"props\"]),\n version: asNumber(row[\"version\"], \"version\"),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(row[\"created_at\"], \"created_at\"),\n updated_at: normalizeRequiredRowTimestamp(row[\"updated_at\"], \"updated_at\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n });\n}\n\nexport function createEdgeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => EdgeRow {\n return (row) => {\n const matchIdentityName = asOptionalString(\n row[\"match_identity_name\"],\n \"match_identity_name\",\n );\n const matchIdentityKey = asOptionalString(\n row[\"match_identity_key\"],\n \"match_identity_key\",\n );\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n id: asString(row[\"id\"], \"id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n from_kind: asString(row[\"from_kind\"], \"from_kind\"),\n from_id: asString(row[\"from_id\"], \"from_id\"),\n to_kind: asString(row[\"to_kind\"], \"to_kind\"),\n to_id: asString(row[\"to_id\"], \"to_id\"),\n props: config.normalizeJson(row[\"props\"]),\n ...(matchIdentityName === undefined ?\n {}\n : { match_identity_name: matchIdentityName }),\n ...(matchIdentityKey === undefined ?\n {}\n : { match_identity_key: matchIdentityKey }),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n updated_at: normalizeRequiredRowTimestamp(\n row[\"updated_at\"],\n \"updated_at\",\n ),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n };\n}\n\nfunction mapUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n node_kind: asString(row[\"node_kind\"], \"node_kind\"),\n constraint_name: asString(row[\"constraint_name\"], \"constraint_name\"),\n key: asString(row[\"key\"], \"key\"),\n node_id: asString(row[\"node_id\"], \"node_id\"),\n concrete_kind: asString(row[\"concrete_kind\"], \"concrete_kind\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n}\n\nexport function createUniqueRowMapper(\n _config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => UniqueRow {\n return mapUniqueRow;\n}\n\nexport function createSchemaVersionRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => SchemaVersionRow {\n return (row) => {\n const isActiveValue = row[\"is_active\"];\n const isActive =\n isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n version: asNumber(row[\"version\"], \"version\"),\n schema_hash: asString(row[\"schema_hash\"], \"schema_hash\"),\n schema_doc: rowPropsToJsonText(config.normalizeJson(row[\"schema_doc\"])),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n is_active: isActive,\n };\n };\n}\n","/**\n * Statement builders for the claim relations' bulk-removal paths.\n *\n * These are statements over the claim relations — the uniqueness claims a\n * kind's nodes own, and the edge-cardinality claims an edge kind's edges\n * hold — so their owner is `src/store/claims/`, exactly like every other\n * claim decision. `edgeCardinalityAxesForKind` already lives here (see\n * `./edge-claims`), so this module reads it directly instead of reaching\n * back out to an adapter that reaches back in.\n *\n * `src/backend/drizzle/operations/uniques.ts` and\n * `src/backend/drizzle/operations/edge-claims.ts` re-export these three\n * builders from their previous addresses, so `CommonOperationStrategy` and\n * `operation-backend-core.ts` see no change: one owner, two addresses, no\n * duplicate.\n */\nimport type { HardDeleteUniquesByConcreteKindParams } from \"../../backend/types\";\nimport { sql as fragmentSql, type SqlFragment } from \"../../query/sql-fragment\";\nimport { edgeCardinalityAxesForKind } from \"./edge-claims\";\n\n/**\n * THE definition of \"the uniqueness claims nodes of this kind own\": every row\n * whose `concrete_kind` is the kind, at whatever axis the row sits on.\n *\n * Kind reaping is a different predicate from a lifecycle release — \"every claim\n * this kind's nodes own\" rather than \"this node's claim for one constraint and\n * key\" — and it is a hard delete rather than a tombstone, so it is its own\n * builder. It is nonetheless the ONLY spelling of that predicate: both the\n * `hardDeleteUniquesByConcreteKind` backend member and `materializeRemovals`'\n * removed-kind cleanup compile this fragment. Keying on `node_kind` instead\n * would leak a claim whose axis is a sibling kind, delete a surviving sibling's\n * claim when the removed kind IS the axis, and never match a claim whose axis\n * is not a kind at all.\n *\n * Takes the relation NAME rather than the Drizzle table so the store-side\n * caller, which knows only its configured table names, can build the same\n * statement; the fragment renders on either dialect.\n */\nexport function buildHardDeleteUniquesByConcreteKind(\n uniquesTableName: string,\n params: HardDeleteUniquesByConcreteKindParams,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(uniquesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"concrete_kind\")} = ${params.concreteKind}`;\n}\n\n/**\n * THE definition of \"the cardinality claims an edge kind owns\": every row at\n * one of the kind's declared-cardinality axes.\n *\n * Keyed on the axis rather than on the holder's id because a removed kind's\n * edges are deleted in the same pass, which would leave a claim naming a row\n * that no longer exists — takeable, but never reaped. Takes the relation NAME\n * rather than the Drizzle table so `materializeRemovals`, which knows only its\n * configured table names, compiles the same statement.\n */\nexport function buildHardDeleteEdgeClaimsByEdgeKind(\n edgeClaimsTableName: string,\n params: Readonly<{ graphId: string; edgeKind: string }>,\n): SqlFragment {\n const axes = edgeCardinalityAxesForKind(params.edgeKind).map(\n (axis) => fragmentSql`${axis}`,\n );\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"axis\")} IN (${fragmentSql.join(axes, fragmentSql`, `)})`;\n}\n\n/**\n * Housekeeping for node-kind removal: deletes every claim held by an edge whose\n * source or target has the removed kind.\n *\n * The holder ids are selected before those edges are deleted. Filtering claim\n * axes cannot express this ownership: an edge kind may connect several node\n * kinds, while its claim axis names only its cardinality and edge kind.\n */\nexport function buildHardDeleteEdgeClaimsByNodeKind(\n edgeClaimsTableName: string,\n edgesTableName: string,\n params: Readonly<{ graphId: string; nodeKind: string }>,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"edge_id\")} IN (SELECT ${fragmentSql.identifier(\"id\")} FROM ${fragmentSql.identifier(edgesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND (${fragmentSql.identifier(\"from_kind\")} = ${params.nodeKind} OR ${fragmentSql.identifier(\"to_kind\")} = ${params.nodeKind}))`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/backend/row-mappers.ts","../src/store/claims/removal-sql.ts"],"names":["DatabaseOperationError","canonicalizeDatabaseTimestamp","rowPropsToJsonText","sql","edgeCardinalityAxesForKind"],"mappings":";;;;;;;;;AAcA,SAAS,QAAA,CAAS,OAAgB,KAAA,EAAuB;AACvD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAIA,wCAAA;AAAA,MACR,CAAA,SAAA,EAAY,KAAK,CAAA,mBAAA,EAAsB,OAAO,KAAK,CAAA,CAAA;AAAA,MACnD,EAAE,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA;AAAM,KACvC;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,OAAgB,KAAA,EAAmC;AAC3E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,EAAA,OAAO,QAAA,CAAS,OAAO,KAAK,CAAA;AAC9B;AAEA,SAAS,QAAA,CAAS,OAAgB,KAAA,EAAuB;AACvD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAIA,wCAAA;AAAA,MACR,CAAA,SAAA,EAAY,KAAK,CAAA,mBAAA,EAAsB,OAAO,KAAK,CAAA,CAAA;AAAA,MACnD,EAAE,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA;AAAM,KACvC;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,MAAA,GAAiB;AAC/B,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAMO,SAAS,wBAAwB,KAAA,EAAoC;AAC1E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,EAAA,IAAI,KAAA,YAAiB,IAAA,EAAM,OAAO,KAAA,CAAM,WAAA,EAAY;AACpD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,KAAA;AAChC,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAC,OAAO,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,EAAG,OAAO,IAAA,CAAK,WAAA,EAAY;AAC3D,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,qBAAA,CACd,OACA,KAAA,EACoB;AACpB,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,EAAA,MAAM,SAAA,GAAYC,gDAA8B,KAAK,CAAA;AACrD,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,MAAM,IAAID,wCAAA;AAAA,MACR,CAAA,SAAA,EAAY,KAAK,CAAA,iCAAA,EAAoC,OAAO,KAAK,CAAA,CAAA;AAAA,MACjE,EAAE,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA;AAAM,KACvC;AAAA,EACF;AACA,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,6BAAA,CACd,OACA,KAAA,EACQ;AACR,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,KAAA,EAAO,KAAK,CAAA;AACpD,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,MAAM,IAAIA,wCAAA,CAAuB,CAAA,kBAAA,EAAqB,KAAK,CAAA,UAAA,CAAA,EAAc;AAAA,MACvE,SAAA,EAAW,QAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AACA,EAAA,OAAO,SAAA;AACT;AAUO,SAAS,mBAAmB,KAAA,EAAgC;AACjE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACtC,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,SAAA;AAAA,MACR,CAAA,6CAAA,EAAgD,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,KACvE;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AASA,SAAS,oBAAoB,KAAA,EAAkD;AAC7E,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,IAAS,EAAE,CAAA;AACnC;AAgBO,IAAM,wBAAA,GAAmD;AAAA,EAC9D,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAIA,wCAAA;AAAA,QACR,CAAA,uCAAA,EAA0C,OAAO,KAAK,CAAA,CAAA;AAAA,QACtD,EAAE,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA;AAAM,OACvC;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKO,IAAM,0BAAA,GAAqD;AAAA,EAChE,aAAA,EAAe;AACjB;AAMO,SAAS,oBACd,MAAA,EAC2C;AAC3C,EAAA,OAAO,CAAC,GAAA,MAAS;AAAA,IACf,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,UAAU,GAAG,UAAU,CAAA;AAAA,IAC9C,IAAA,EAAM,QAAA,CAAS,GAAA,CAAI,MAAM,GAAG,MAAM,CAAA;AAAA,IAClC,EAAA,EAAI,QAAA,CAAS,GAAA,CAAI,IAAI,GAAG,IAAI,CAAA;AAAA,IAC5B,KAAA,EAAO,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,IACxC,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,SAAS,GAAG,SAAS,CAAA;AAAA,IAC3C,UAAA,EAAY,qBAAA,CAAsB,GAAA,CAAI,YAAY,GAAG,YAAY,CAAA;AAAA,IACjE,QAAA,EAAU,qBAAA,CAAsB,GAAA,CAAI,UAAU,GAAG,UAAU,CAAA;AAAA,IAC3D,UAAA,EAAY,6BAAA,CAA8B,GAAA,CAAI,YAAY,GAAG,YAAY,CAAA;AAAA,IACzE,UAAA,EAAY,6BAAA,CAA8B,GAAA,CAAI,YAAY,GAAG,YAAY,CAAA;AAAA,IACzE,UAAA,EAAY,qBAAA,CAAsB,GAAA,CAAI,YAAY,GAAG,YAAY;AAAA,GACnE,CAAA;AACF;AAEO,SAAS,oBACd,MAAA,EAC2C;AAC3C,EAAA,OAAO,CAAC,GAAA,KAAQ;AACd,IAAA,MAAM,iBAAA,GAAoB,gBAAA;AAAA,MACxB,IAAI,qBAAqB,CAAA;AAAA,MACzB;AAAA,KACF;AACA,IAAA,MAAM,gBAAA,GAAmB,gBAAA;AAAA,MACvB,IAAI,oBAAoB,CAAA;AAAA,MACxB;AAAA,KACF;AACA,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,UAAU,GAAG,UAAU,CAAA;AAAA,MAC9C,EAAA,EAAI,QAAA,CAAS,GAAA,CAAI,IAAI,GAAG,IAAI,CAAA;AAAA,MAC5B,IAAA,EAAM,QAAA,CAAS,GAAA,CAAI,MAAM,GAAG,MAAM,CAAA;AAAA,MAClC,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,WAAW,GAAG,WAAW,CAAA;AAAA,MACjD,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,SAAS,GAAG,SAAS,CAAA;AAAA,MAC3C,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,SAAS,GAAG,SAAS,CAAA;AAAA,MAC3C,KAAA,EAAO,QAAA,CAAS,GAAA,CAAI,OAAO,GAAG,OAAO,CAAA;AAAA,MACrC,KAAA,EAAO,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,MACxC,GAAI,iBAAA,KAAsB,MAAA,GACxB,EAAC,GACD,EAAE,qBAAqB,iBAAA,EAAkB;AAAA,MAC3C,GAAI,gBAAA,KAAqB,MAAA,GACvB,EAAC,GACD,EAAE,oBAAoB,gBAAA,EAAiB;AAAA,MACzC,UAAA,EAAY,qBAAA,CAAsB,GAAA,CAAI,YAAY,GAAG,YAAY,CAAA;AAAA,MACjE,QAAA,EAAU,qBAAA,CAAsB,GAAA,CAAI,UAAU,GAAG,UAAU,CAAA;AAAA,MAC3D,UAAA,EAAY,6BAAA;AAAA,QACV,IAAI,YAAY,CAAA;AAAA,QAChB;AAAA,OACF;AAAA,MACA,UAAA,EAAY,6BAAA;AAAA,QACV,IAAI,YAAY,CAAA;AAAA,QAChB;AAAA,OACF;AAAA,MACA,UAAA,EAAY,qBAAA,CAAsB,GAAA,CAAI,YAAY,GAAG,YAAY;AAAA,KACnE;AAAA,EACF,CAAA;AACF;AAEA,SAAS,aAAa,GAAA,EAAyC;AAC7D,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,UAAU,GAAG,UAAU,CAAA;AAAA,IAC9C,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,WAAW,GAAG,WAAW,CAAA;AAAA,IACjD,eAAA,EAAiB,QAAA,CAAS,GAAA,CAAI,iBAAiB,GAAG,iBAAiB,CAAA;AAAA,IACnE,GAAA,EAAK,QAAA,CAAS,GAAA,CAAI,KAAK,GAAG,KAAK,CAAA;AAAA,IAC/B,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,SAAS,GAAG,SAAS,CAAA;AAAA,IAC3C,aAAA,EAAe,QAAA,CAAS,GAAA,CAAI,eAAe,GAAG,eAAe,CAAA;AAAA,IAC7D,UAAA,EAAY,qBAAA,CAAsB,GAAA,CAAI,YAAY,GAAG,YAAY;AAAA,GACnE;AACF;AAEO,SAAS,sBACd,OAAA,EAC6C;AAC7C,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,6BACd,MAAA,EACoD;AACpD,EAAA,OAAO,CAAC,GAAA,KAAQ;AACd,IAAA,MAAM,aAAA,GAAgB,IAAI,WAAW,CAAA;AACrC,IAAA,MAAM,QAAA,GACJ,aAAA,KAAkB,IAAA,IAAQ,aAAA,KAAkB,KAAK,aAAA,KAAkB,GAAA;AAErE,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,UAAU,GAAG,UAAU,CAAA;AAAA,MAC9C,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,SAAS,GAAG,SAAS,CAAA;AAAA,MAC3C,WAAA,EAAa,QAAA,CAAS,GAAA,CAAI,aAAa,GAAG,aAAa,CAAA;AAAA,MACvD,YAAYE,oCAAA,CAAmB,MAAA,CAAO,cAAc,GAAA,CAAI,YAAY,CAAC,CAAC,CAAA;AAAA,MACtE,UAAA,EAAY,6BAAA;AAAA,QACV,IAAI,YAAY,CAAA;AAAA,QAChB;AAAA,OACF;AAAA,MACA,SAAA,EAAW;AAAA,KACb;AAAA,EACF,CAAA;AACF;;;AC/NO,SAAS,oCAAA,CACd,kBACA,MAAA,EACa;AACb,EAAA,OAAOC,qBAAA,CAAA,YAAA,EAA0BA,sBAAY,UAAA,CAAW,gBAAgB,CAAC,CAAA,OAAA,EAAUA,qBAAA,CAAY,WAAW,UAAU,CAAC,MAAM,MAAA,CAAO,OAAO,QAAQA,qBAAA,CAAY,UAAA,CAAW,eAAe,CAAC,CAAA,GAAA,EAAM,OAAO,YAAY,CAAA,CAAA;AACnN;AAYO,SAAS,mCAAA,CACd,qBACA,MAAA,EACa;AACb,EAAA,MAAM,IAAA,GAAOC,4CAAA,CAA2B,MAAA,CAAO,QAAQ,CAAA,CAAE,GAAA;AAAA,IACvD,CAAC,IAAA,KAASD,qBAAA,CAAA,EAAc,IAAI,CAAA;AAAA,GAC9B;AACA,EAAA,OAAOA,qBAAA,CAAA,YAAA,EAA0BA,sBAAY,UAAA,CAAW,mBAAmB,CAAC,CAAA,OAAA,EAAUA,qBAAA,CAAY,UAAA,CAAW,UAAU,CAAC,CAAA,GAAA,EAAM,OAAO,OAAO,CAAA,KAAA,EAAQA,qBAAA,CAAY,UAAA,CAAW,MAAM,CAAC,QAAQA,qBAAA,CAAY,IAAA,CAAK,IAAA,EAAMA,qBAAA,CAAA,EAAA,CAAe,CAAC,CAAA,CAAA,CAAA;AACnO;AAUO,SAAS,mCAAA,CACd,mBAAA,EACA,cAAA,EACA,MAAA,EACa;AACb,EAAA,OAAOA,qBAAA,CAAA,YAAA,EAA0BA,sBAAY,UAAA,CAAW,mBAAmB,CAAC,CAAA,OAAA,EAAUA,qBAAA,CAAY,UAAA,CAAW,UAAU,CAAC,CAAA,GAAA,EAAM,OAAO,OAAO,CAAA,KAAA,EAAQA,qBAAA,CAAY,UAAA,CAAW,SAAS,CAAC,eAAeA,qBAAA,CAAY,UAAA,CAAW,IAAI,CAAC,CAAA,MAAA,EAASA,qBAAA,CAAY,WAAW,cAAc,CAAC,CAAA,OAAA,EAAUA,qBAAA,CAAY,UAAA,CAAW,UAAU,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAO,CAAA,MAAA,EAASA,qBAAA,CAAY,UAAA,CAAW,WAAW,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,QAAQ,CAAA,IAAA,EAAOA,qBAAA,CAAY,WAAW,SAAS,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,QAAQ,CAAA,EAAA,CAAA;AAC/c","file":"chunk-BYUIOM4L.cjs","sourcesContent":["/**\n * Shared database row-mapping utilities.\n */\n\nimport { DatabaseOperationError } from \"../errors\";\nimport { canonicalizeDatabaseTimestamp } from \"../utils/date\";\nimport {\n type EdgeRow,\n type NodeRow,\n rowPropsToJsonText,\n type SchemaVersionRow,\n type UniqueRow,\n} from \"./types\";\n\nfunction asString(value: unknown, field: string): string {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nfunction asOptionalString(value: unknown, field: string): string | undefined {\n if (value === null || value === undefined) return undefined;\n return asString(value, field);\n}\n\nfunction asNumber(value: unknown, field: string): number {\n if (typeof value !== \"number\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be number, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Formats PostgreSQL timestamps used by internal status-table adapters.\n * Row metadata uses the stricter {@link normalizeRowTimestamp} contract.\n */\nexport function formatPostgresTimestamp(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"string\") {\n if (value.includes(\"T\")) return value;\n const date = new Date(value);\n if (!Number.isNaN(date.getTime())) return date.toISOString();\n return value;\n }\n return undefined;\n}\n\n/**\n * Canonicalizes database-driver timestamp values at the row-mapping boundary.\n * Every store and compiled-query metadata projection uses this owner so driver\n * rendering differences cannot become public values.\n */\nexport function normalizeRowTimestamp(\n value: unknown,\n field: string,\n): string | undefined {\n if (value === null || value === undefined) return undefined;\n const canonical = canonicalizeDatabaseTimestamp(value);\n if (canonical === undefined) {\n throw new DatabaseOperationError(\n `Expected ${field} to be a database timestamp, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return canonical;\n}\n\nexport function normalizeRequiredRowTimestamp(\n value: unknown,\n field: string,\n): string {\n const timestamp = normalizeRowTimestamp(value, field);\n if (timestamp === undefined) {\n throw new DatabaseOperationError(`Expected non-null ${field} timestamp`, {\n operation: \"select\",\n entity: \"row\",\n });\n }\n return timestamp;\n}\n\n/**\n * Coerce a fulltext relevance score to `number` at the backend\n * boundary. Postgres returns `numeric` as a string to preserve\n * precision; a custom `FulltextStrategy` on either dialect could\n * likewise yield a string. Shared so both backends enforce the same\n * `FulltextSearchResult.score: number` contract and reject garbage\n * loudly instead of propagating `NaN`.\n */\nexport function coerceNumericScore(value: number | string): number {\n if (typeof value === \"number\") return value;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) {\n throw new TypeError(\n `Backend returned non-numeric fulltext score: ${JSON.stringify(value)}`,\n );\n }\n return parsed;\n}\n\n/**\n * Normalizes a JSON column that may be returned as a parsed object (JSONB)\n * or string. PostgreSQL drivers hand jsonb back already parsed — keep the\n * object instead of re-stringifying it, so the read path pays zero JSON\n * work per row (consumers normalize via rowPropsToObject /\n * rowPropsToJsonText at the point of use). SQLite text passes through.\n */\nfunction normalizeJsonColumn(value: unknown): string | Record<string, unknown> {\n if (typeof value === \"string\") return value;\n if (value !== null && typeof value === \"object\") {\n return value as Record<string, unknown>;\n }\n return JSON.stringify(value ?? {});\n}\n\n/**\n * Dialect-specific configuration for row mappers.\n *\n * Row mapper factories accept this config to produce dialect-appropriate\n * mappers. Timestamp normalization is dialect-independent and owned by\n * {@link normalizeRowTimestamp}; only JSON columns need dialect configuration.\n */\ntype DialectRowMapperConfig = Readonly<{\n normalizeJson: (value: unknown) => string | Record<string, unknown>;\n}>;\n\n/**\n * SQLite row mapper config. JSON is stored as TEXT.\n */\nexport const SQLITE_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: (value) => {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected JSON column to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n};\n\n/**\n * PostgreSQL row mapper config. JSONB is returned as parsed objects.\n */\nexport const POSTGRES_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n normalizeJson: normalizeJsonColumn,\n};\n\n// Trust boundary: Drizzle raw SQL returns Record<string, unknown> rows.\n// The field access patterns below are intentional unsafe casts at the\n// database driver boundary where we know the column shapes.\n\nexport function createNodeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => NodeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n id: asString(row[\"id\"], \"id\"),\n props: config.normalizeJson(row[\"props\"]),\n version: asNumber(row[\"version\"], \"version\"),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(row[\"created_at\"], \"created_at\"),\n updated_at: normalizeRequiredRowTimestamp(row[\"updated_at\"], \"updated_at\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n });\n}\n\nexport function createEdgeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => EdgeRow {\n return (row) => {\n const matchIdentityName = asOptionalString(\n row[\"match_identity_name\"],\n \"match_identity_name\",\n );\n const matchIdentityKey = asOptionalString(\n row[\"match_identity_key\"],\n \"match_identity_key\",\n );\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n id: asString(row[\"id\"], \"id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n from_kind: asString(row[\"from_kind\"], \"from_kind\"),\n from_id: asString(row[\"from_id\"], \"from_id\"),\n to_kind: asString(row[\"to_kind\"], \"to_kind\"),\n to_id: asString(row[\"to_id\"], \"to_id\"),\n props: config.normalizeJson(row[\"props\"]),\n ...(matchIdentityName === undefined ?\n {}\n : { match_identity_name: matchIdentityName }),\n ...(matchIdentityKey === undefined ?\n {}\n : { match_identity_key: matchIdentityKey }),\n valid_from: normalizeRowTimestamp(row[\"valid_from\"], \"valid_from\"),\n valid_to: normalizeRowTimestamp(row[\"valid_to\"], \"valid_to\"),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n updated_at: normalizeRequiredRowTimestamp(\n row[\"updated_at\"],\n \"updated_at\",\n ),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n };\n}\n\nfunction mapUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n node_kind: asString(row[\"node_kind\"], \"node_kind\"),\n constraint_name: asString(row[\"constraint_name\"], \"constraint_name\"),\n key: asString(row[\"key\"], \"key\"),\n node_id: asString(row[\"node_id\"], \"node_id\"),\n concrete_kind: asString(row[\"concrete_kind\"], \"concrete_kind\"),\n deleted_at: normalizeRowTimestamp(row[\"deleted_at\"], \"deleted_at\"),\n };\n}\n\nexport function createUniqueRowMapper(\n _config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => UniqueRow {\n return mapUniqueRow;\n}\n\nexport function createSchemaVersionRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => SchemaVersionRow {\n return (row) => {\n const isActiveValue = row[\"is_active\"];\n const isActive =\n isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n version: asNumber(row[\"version\"], \"version\"),\n schema_hash: asString(row[\"schema_hash\"], \"schema_hash\"),\n schema_doc: rowPropsToJsonText(config.normalizeJson(row[\"schema_doc\"])),\n created_at: normalizeRequiredRowTimestamp(\n row[\"created_at\"],\n \"created_at\",\n ),\n is_active: isActive,\n };\n };\n}\n","/**\n * Statement builders for the claim relations' bulk-removal paths.\n *\n * These are statements over the claim relations — the uniqueness claims a\n * kind's nodes own, and the edge-cardinality claims an edge kind's edges\n * hold — so their owner is `src/store/claims/`, exactly like every other\n * claim decision. `edgeCardinalityAxesForKind` already lives here (see\n * `./edge-claims`), so this module reads it directly instead of reaching\n * back out to an adapter that reaches back in.\n *\n * `src/backend/drizzle/operations/uniques.ts` and\n * `src/backend/drizzle/operations/edge-claims.ts` re-export these three\n * builders from their previous addresses, so `CommonOperationStrategy` and\n * `operation-backend-core.ts` see no change: one owner, two addresses, no\n * duplicate.\n */\nimport type { HardDeleteUniquesByConcreteKindParams } from \"../../backend/types\";\nimport { sql as fragmentSql, type SqlFragment } from \"../../query/sql-fragment\";\nimport { edgeCardinalityAxesForKind } from \"./edge-claims\";\n\n/**\n * THE definition of \"the uniqueness claims nodes of this kind own\": every row\n * whose `concrete_kind` is the kind, at whatever axis the row sits on.\n *\n * Kind reaping is a different predicate from a lifecycle release — \"every claim\n * this kind's nodes own\" rather than \"this node's claim for one constraint and\n * key\" — and it is a hard delete rather than a tombstone, so it is its own\n * builder. It is nonetheless the ONLY spelling of that predicate: both the\n * `hardDeleteUniquesByConcreteKind` backend member and `materializeRemovals`'\n * removed-kind cleanup compile this fragment. Keying on `node_kind` instead\n * would leak a claim whose axis is a sibling kind, delete a surviving sibling's\n * claim when the removed kind IS the axis, and never match a claim whose axis\n * is not a kind at all.\n *\n * Takes the relation NAME rather than the Drizzle table so the store-side\n * caller, which knows only its configured table names, can build the same\n * statement; the fragment renders on either dialect.\n */\nexport function buildHardDeleteUniquesByConcreteKind(\n uniquesTableName: string,\n params: HardDeleteUniquesByConcreteKindParams,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(uniquesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"concrete_kind\")} = ${params.concreteKind}`;\n}\n\n/**\n * THE definition of \"the cardinality claims an edge kind owns\": every row at\n * one of the kind's declared-cardinality axes.\n *\n * Keyed on the axis rather than on the holder's id because a removed kind's\n * edges are deleted in the same pass, which would leave a claim naming a row\n * that no longer exists — takeable, but never reaped. Takes the relation NAME\n * rather than the Drizzle table so `materializeRemovals`, which knows only its\n * configured table names, compiles the same statement.\n */\nexport function buildHardDeleteEdgeClaimsByEdgeKind(\n edgeClaimsTableName: string,\n params: Readonly<{ graphId: string; edgeKind: string }>,\n): SqlFragment {\n const axes = edgeCardinalityAxesForKind(params.edgeKind).map(\n (axis) => fragmentSql`${axis}`,\n );\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"axis\")} IN (${fragmentSql.join(axes, fragmentSql`, `)})`;\n}\n\n/**\n * Housekeeping for node-kind removal: deletes every claim held by an edge whose\n * source or target has the removed kind.\n *\n * The holder ids are selected before those edges are deleted. Filtering claim\n * axes cannot express this ownership: an edge kind may connect several node\n * kinds, while its claim axis names only its cardinality and edge kind.\n */\nexport function buildHardDeleteEdgeClaimsByNodeKind(\n edgeClaimsTableName: string,\n edgesTableName: string,\n params: Readonly<{ graphId: string; nodeKind: string }>,\n): SqlFragment {\n return fragmentSql`DELETE FROM ${fragmentSql.identifier(edgeClaimsTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND ${fragmentSql.identifier(\"edge_id\")} IN (SELECT ${fragmentSql.identifier(\"id\")} FROM ${fragmentSql.identifier(edgesTableName)} WHERE ${fragmentSql.identifier(\"graph_id\")} = ${params.graphId} AND (${fragmentSql.identifier(\"from_kind\")} = ${params.nodeKind} OR ${fragmentSql.identifier(\"to_kind\")} = ${params.nodeKind}))`;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { purgeEdgeClaims } from './chunk-
|
|
2
|
-
import { validateNodeProps, constraintFenceRefusal } from './chunk-
|
|
1
|
+
import { purgeEdgeClaims } from './chunk-7MHENVRG.js';
|
|
2
|
+
import { validateNodeProps, constraintFenceRefusal } from './chunk-AZP5CCHL.js';
|
|
3
3
|
import { canonicalEqual } from './chunk-U4SGJQKQ.js';
|
|
4
|
-
import { missingRequiredExtras, requireExtras } from './chunk-
|
|
5
|
-
import { UNIQUE_SIDECAR_BATCH, rowPropsToObject, bindExtraIfReachable } from './chunk-
|
|
4
|
+
import { missingRequiredExtras, requireExtras } from './chunk-XH75W3O5.js';
|
|
5
|
+
import { UNIQUE_SIDECAR_BATCH, rowPropsToObject, bindExtraIfReachable } from './chunk-75KH6Y2W.js';
|
|
6
6
|
import { uniquenessClaimTarget, uniquenessProbeKinds, encodeTupleKey, isSameClaimOwner, compareClaimTargets, DISJOINT_CONSTRAINT_NAME, disjointnessClaimAxis, checkWherePredicate, computeUniqueKey, claimOwnerKey } from './chunk-HFZWYHYC.js';
|
|
7
7
|
import { assertsStoredLowerBound } from './chunk-AJBVLTIP.js';
|
|
8
8
|
import { typeGraphGlobalSymbol } from './chunk-LFM53HMA.js';
|
|
@@ -1435,5 +1435,5 @@ async function applyNodeSetUpdate(ctx, args, backend) {
|
|
|
1435
1435
|
}
|
|
1436
1436
|
|
|
1437
1437
|
export { AUTO_REFRESH_STATISTICS_ROW_THRESHOLD, STORE_RUNTIME, TRANSACTION_RUNTIME, applyNodeHardDelete, applyNodeInsertSyncFans, applyNodeInsertSyncFansBatch, applyNodeResurrect, applyNodeSetUpdate, applyNodeSoftDelete, applyNodeUpdate, applyResolvedNodeClaims, checkUniquenessConstraints, compareAndSetAbsent, computeFulltextContent, createNodeWriteContext, createUniquenessContext, getEmbeddingFields, groupNodeUniquenessProbes, isUniquenessClaimEntry, nodeClaimEntries, nodeClaimSites, planNodeCreateClaims, probeUniqueKey, refuseNodeCreateClaimError, resolveNodeEmbeddingProjectionTransitions, resolveNodeEmbeddingProjections, resolveNodeFulltextProjection, storeBackend, storeRuntime, transactionBackend, transactionNodeOperationHookRunner, withNodeCreateClaims, withNodeCreateClaimsBatch };
|
|
1438
|
-
//# sourceMappingURL=chunk-
|
|
1439
|
-
//# sourceMappingURL=chunk-
|
|
1438
|
+
//# sourceMappingURL=chunk-C3TJU4KQ.js.map
|
|
1439
|
+
//# sourceMappingURL=chunk-C3TJU4KQ.js.map
|