@nicia-ai/typegraph 0.1.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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/ast-BVyihVbP.d.cts +564 -0
  4. package/dist/ast-BVyihVbP.d.ts +564 -0
  5. package/dist/backend/drizzle/index.cjs +41 -0
  6. package/dist/backend/drizzle/index.cjs.map +1 -0
  7. package/dist/backend/drizzle/index.d.cts +12 -0
  8. package/dist/backend/drizzle/index.d.ts +12 -0
  9. package/dist/backend/drizzle/index.js +12 -0
  10. package/dist/backend/drizzle/index.js.map +1 -0
  11. package/dist/backend/drizzle/postgres.cjs +27 -0
  12. package/dist/backend/drizzle/postgres.cjs.map +1 -0
  13. package/dist/backend/drizzle/postgres.d.cts +37 -0
  14. package/dist/backend/drizzle/postgres.d.ts +37 -0
  15. package/dist/backend/drizzle/postgres.js +10 -0
  16. package/dist/backend/drizzle/postgres.js.map +1 -0
  17. package/dist/backend/drizzle/schema/postgres.cjs +40 -0
  18. package/dist/backend/drizzle/schema/postgres.cjs.map +1 -0
  19. package/dist/backend/drizzle/schema/postgres.d.cts +2419 -0
  20. package/dist/backend/drizzle/schema/postgres.d.ts +2419 -0
  21. package/dist/backend/drizzle/schema/postgres.js +7 -0
  22. package/dist/backend/drizzle/schema/postgres.js.map +1 -0
  23. package/dist/backend/drizzle/schema/sqlite.cjs +40 -0
  24. package/dist/backend/drizzle/schema/sqlite.cjs.map +1 -0
  25. package/dist/backend/drizzle/schema/sqlite.d.cts +2647 -0
  26. package/dist/backend/drizzle/schema/sqlite.d.ts +2647 -0
  27. package/dist/backend/drizzle/schema/sqlite.js +7 -0
  28. package/dist/backend/drizzle/schema/sqlite.js.map +1 -0
  29. package/dist/backend/drizzle/sqlite.cjs +27 -0
  30. package/dist/backend/drizzle/sqlite.cjs.map +1 -0
  31. package/dist/backend/drizzle/sqlite.d.cts +36 -0
  32. package/dist/backend/drizzle/sqlite.d.ts +36 -0
  33. package/dist/backend/drizzle/sqlite.js +10 -0
  34. package/dist/backend/drizzle/sqlite.js.map +1 -0
  35. package/dist/backend/postgres/index.cjs +53 -0
  36. package/dist/backend/postgres/index.cjs.map +1 -0
  37. package/dist/backend/postgres/index.d.cts +12 -0
  38. package/dist/backend/postgres/index.d.ts +12 -0
  39. package/dist/backend/postgres/index.js +12 -0
  40. package/dist/backend/postgres/index.js.map +1 -0
  41. package/dist/backend/sqlite/index.cjs +117 -0
  42. package/dist/backend/sqlite/index.cjs.map +1 -0
  43. package/dist/backend/sqlite/index.d.cts +71 -0
  44. package/dist/backend/sqlite/index.d.ts +71 -0
  45. package/dist/backend/sqlite/index.js +78 -0
  46. package/dist/backend/sqlite/index.js.map +1 -0
  47. package/dist/chunk-2QHQ2C4P.js +146 -0
  48. package/dist/chunk-2QHQ2C4P.js.map +1 -0
  49. package/dist/chunk-3A5TKOEJ.js +306 -0
  50. package/dist/chunk-3A5TKOEJ.js.map +1 -0
  51. package/dist/chunk-4PIEL2VO.js +162 -0
  52. package/dist/chunk-4PIEL2VO.js.map +1 -0
  53. package/dist/chunk-536PH5FT.js +342 -0
  54. package/dist/chunk-536PH5FT.js.map +1 -0
  55. package/dist/chunk-DBFCKELK.cjs +156 -0
  56. package/dist/chunk-DBFCKELK.cjs.map +1 -0
  57. package/dist/chunk-DDM2FZRJ.cjs +1143 -0
  58. package/dist/chunk-DDM2FZRJ.cjs.map +1 -0
  59. package/dist/chunk-DGUM43GV.js +10 -0
  60. package/dist/chunk-DGUM43GV.js.map +1 -0
  61. package/dist/chunk-F32HCHYA.cjs +680 -0
  62. package/dist/chunk-F32HCHYA.cjs.map +1 -0
  63. package/dist/chunk-IIAT36MI.js +353 -0
  64. package/dist/chunk-IIAT36MI.js.map +1 -0
  65. package/dist/chunk-JDAET5LO.js +236 -0
  66. package/dist/chunk-JDAET5LO.js.map +1 -0
  67. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  68. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  69. package/dist/chunk-JKTO7TW3.js +299 -0
  70. package/dist/chunk-JKTO7TW3.js.map +1 -0
  71. package/dist/chunk-K7SQ3SWP.js +497 -0
  72. package/dist/chunk-K7SQ3SWP.js.map +1 -0
  73. package/dist/chunk-L642L24T.js +142 -0
  74. package/dist/chunk-L642L24T.js.map +1 -0
  75. package/dist/chunk-MFVCSNIY.cjs +308 -0
  76. package/dist/chunk-MFVCSNIY.cjs.map +1 -0
  77. package/dist/chunk-MNO33ASC.cjs +240 -0
  78. package/dist/chunk-MNO33ASC.cjs.map +1 -0
  79. package/dist/chunk-N4AOJ3VF.cjs +154 -0
  80. package/dist/chunk-N4AOJ3VF.cjs.map +1 -0
  81. package/dist/chunk-P5CNM325.cjs +508 -0
  82. package/dist/chunk-P5CNM325.cjs.map +1 -0
  83. package/dist/chunk-RYT4H46I.js +646 -0
  84. package/dist/chunk-RYT4H46I.js.map +1 -0
  85. package/dist/chunk-SV5H3XM5.cjs +321 -0
  86. package/dist/chunk-SV5H3XM5.cjs.map +1 -0
  87. package/dist/chunk-TXHKFLWX.cjs +344 -0
  88. package/dist/chunk-TXHKFLWX.cjs.map +1 -0
  89. package/dist/chunk-UJAGXJDG.cjs +170 -0
  90. package/dist/chunk-UJAGXJDG.cjs.map +1 -0
  91. package/dist/chunk-VXRVGFCI.js +1128 -0
  92. package/dist/chunk-VXRVGFCI.js.map +1 -0
  93. package/dist/chunk-YM5AL65Y.cjs +357 -0
  94. package/dist/chunk-YM5AL65Y.cjs.map +1 -0
  95. package/dist/index.cjs +8334 -0
  96. package/dist/index.cjs.map +1 -0
  97. package/dist/index.d.cts +1365 -0
  98. package/dist/index.d.ts +1365 -0
  99. package/dist/index.js +8105 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/indexes/index.cjs +67 -0
  102. package/dist/indexes/index.cjs.map +1 -0
  103. package/dist/indexes/index.d.cts +62 -0
  104. package/dist/indexes/index.d.ts +62 -0
  105. package/dist/indexes/index.js +6 -0
  106. package/dist/indexes/index.js.map +1 -0
  107. package/dist/interchange/index.cjs +612 -0
  108. package/dist/interchange/index.cjs.map +1 -0
  109. package/dist/interchange/index.d.cts +288 -0
  110. package/dist/interchange/index.d.ts +288 -0
  111. package/dist/interchange/index.js +598 -0
  112. package/dist/interchange/index.js.map +1 -0
  113. package/dist/profiler/index.cjs +793 -0
  114. package/dist/profiler/index.cjs.map +1 -0
  115. package/dist/profiler/index.d.cts +283 -0
  116. package/dist/profiler/index.d.ts +283 -0
  117. package/dist/profiler/index.js +785 -0
  118. package/dist/profiler/index.js.map +1 -0
  119. package/dist/store-60Lcfi0w.d.ts +2263 -0
  120. package/dist/store-Bifii8MZ.d.cts +2263 -0
  121. package/dist/test-helpers-BjyRYJZX.d.ts +22 -0
  122. package/dist/test-helpers-NoQXhleQ.d.cts +22 -0
  123. package/dist/types-BRzHlhKC.d.cts +14 -0
  124. package/dist/types-BRzHlhKC.d.ts +14 -0
  125. package/dist/types-BrSfFSpW.d.cts +158 -0
  126. package/dist/types-CX4cLd7M.d.ts +152 -0
  127. package/dist/types-CjZ7g_7v.d.ts +442 -0
  128. package/dist/types-DDOSfrih.d.cts +442 -0
  129. package/dist/types-D_3mEv2y.d.ts +158 -0
  130. package/dist/types-a5rAxC92.d.cts +152 -0
  131. package/package.json +201 -0
@@ -0,0 +1,344 @@
1
+ 'use strict';
2
+
3
+ var chunkUJAGXJDG_cjs = require('./chunk-UJAGXJDG.cjs');
4
+ var chunkF32HCHYA_cjs = require('./chunk-F32HCHYA.cjs');
5
+ var chunkSV5H3XM5_cjs = require('./chunk-SV5H3XM5.cjs');
6
+
7
+ // src/backend/drizzle/postgres.ts
8
+ function nowIso() {
9
+ return (/* @__PURE__ */ new Date()).toISOString();
10
+ }
11
+ function nullToUndefined(value) {
12
+ return value ?? void 0;
13
+ }
14
+ function formatTimestamp(value) {
15
+ if (value === null || value === void 0) return void 0;
16
+ if (value instanceof Date) return value.toISOString();
17
+ if (typeof value === "string") {
18
+ if (value.includes("T")) return value;
19
+ const date = new Date(value);
20
+ if (!Number.isNaN(date.getTime())) return date.toISOString();
21
+ return value;
22
+ }
23
+ return void 0;
24
+ }
25
+ function toNodeRow(row) {
26
+ return {
27
+ graph_id: row.graph_id,
28
+ kind: row.kind,
29
+ id: row.id,
30
+ // PostgreSQL JSONB is already parsed, stringify for consistency
31
+ props: typeof row.props === "string" ? row.props : JSON.stringify(row.props ?? {}),
32
+ version: row.version,
33
+ valid_from: nullToUndefined(formatTimestamp(row.valid_from)),
34
+ valid_to: nullToUndefined(formatTimestamp(row.valid_to)),
35
+ created_at: formatTimestamp(row.created_at) ?? "",
36
+ updated_at: formatTimestamp(row.updated_at) ?? "",
37
+ deleted_at: nullToUndefined(formatTimestamp(row.deleted_at))
38
+ };
39
+ }
40
+ function toEdgeRow(row) {
41
+ return {
42
+ graph_id: row.graph_id,
43
+ id: row.id,
44
+ kind: row.kind,
45
+ from_kind: row.from_kind,
46
+ from_id: row.from_id,
47
+ to_kind: row.to_kind,
48
+ to_id: row.to_id,
49
+ props: typeof row.props === "string" ? row.props : JSON.stringify(row.props ?? {}),
50
+ valid_from: nullToUndefined(formatTimestamp(row.valid_from)),
51
+ valid_to: nullToUndefined(formatTimestamp(row.valid_to)),
52
+ created_at: formatTimestamp(row.created_at) ?? "",
53
+ updated_at: formatTimestamp(row.updated_at) ?? "",
54
+ deleted_at: nullToUndefined(formatTimestamp(row.deleted_at))
55
+ };
56
+ }
57
+ function toUniqueRow(row) {
58
+ return {
59
+ graph_id: row.graph_id,
60
+ node_kind: row.node_kind,
61
+ constraint_name: row.constraint_name,
62
+ key: row.key,
63
+ node_id: row.node_id,
64
+ concrete_kind: row.concrete_kind,
65
+ deleted_at: nullToUndefined(formatTimestamp(row.deleted_at))
66
+ };
67
+ }
68
+ function toSchemaVersionRow(row) {
69
+ const isActiveValue = row.is_active;
70
+ const isActive = isActiveValue === true || isActiveValue === 1 || isActiveValue === "1";
71
+ return {
72
+ graph_id: row.graph_id,
73
+ version: row.version,
74
+ schema_hash: row.schema_hash,
75
+ schema_doc: typeof row.schema_doc === "string" ? row.schema_doc : JSON.stringify(row.schema_doc ?? {}),
76
+ created_at: formatTimestamp(row.created_at) ?? "",
77
+ is_active: isActive
78
+ };
79
+ }
80
+ function toEmbeddingRow(row) {
81
+ let embedding;
82
+ if (typeof row.embedding === "string") {
83
+ const content = row.embedding.slice(1, -1);
84
+ embedding = content === "" ? [] : content.split(",").map((s) => Number.parseFloat(s.trim()));
85
+ } else if (Array.isArray(row.embedding)) {
86
+ embedding = row.embedding;
87
+ } else {
88
+ embedding = [];
89
+ }
90
+ return {
91
+ graph_id: row.graph_id,
92
+ node_kind: row.node_kind,
93
+ node_id: row.node_id,
94
+ field_path: row.field_path,
95
+ embedding,
96
+ dimensions: row.dimensions,
97
+ created_at: formatTimestamp(row.created_at) ?? "",
98
+ updated_at: formatTimestamp(row.updated_at) ?? ""
99
+ };
100
+ }
101
+ var POSTGRES_VECTOR_CAPABILITIES = {
102
+ ...chunkF32HCHYA_cjs.POSTGRES_CAPABILITIES,
103
+ vector: {
104
+ supported: true,
105
+ metrics: ["cosine", "l2", "inner_product"],
106
+ indexTypes: ["hnsw", "ivfflat", "none"],
107
+ maxDimensions: 16e3
108
+ // pgvector limit
109
+ }
110
+ };
111
+ function createPostgresBackend(db, options = {}) {
112
+ const tables2 = options.tables ?? chunkUJAGXJDG_cjs.tables;
113
+ async function execAll(query) {
114
+ const result = await db.execute(query);
115
+ return result.rows;
116
+ }
117
+ async function execGet(query) {
118
+ const result = await db.execute(query);
119
+ return result.rows[0];
120
+ }
121
+ async function execRun(query) {
122
+ await db.execute(query);
123
+ }
124
+ const backend = {
125
+ dialect: "postgres",
126
+ capabilities: POSTGRES_VECTOR_CAPABILITIES,
127
+ // === Node Operations ===
128
+ async insertNode(params) {
129
+ const timestamp = nowIso();
130
+ const query = chunkF32HCHYA_cjs.buildInsertNode(tables2, params, timestamp);
131
+ const row = await execGet(query);
132
+ if (!row) throw new Error("Insert node failed: no row returned");
133
+ return toNodeRow(row);
134
+ },
135
+ async getNode(graphId, kind, id) {
136
+ const query = chunkF32HCHYA_cjs.buildGetNode(tables2, graphId, kind, id);
137
+ const row = await execGet(query);
138
+ return row ? toNodeRow(row) : void 0;
139
+ },
140
+ async updateNode(params) {
141
+ const timestamp = nowIso();
142
+ const query = chunkF32HCHYA_cjs.buildUpdateNode(tables2, params, timestamp);
143
+ const row = await execGet(query);
144
+ if (!row) throw new Error("Update node failed: no row returned");
145
+ return toNodeRow(row);
146
+ },
147
+ async deleteNode(params) {
148
+ const timestamp = nowIso();
149
+ const query = chunkF32HCHYA_cjs.buildDeleteNode(tables2, params, timestamp);
150
+ await execRun(query);
151
+ },
152
+ async hardDeleteNode(params) {
153
+ const deleteUniquesQuery = chunkF32HCHYA_cjs.buildHardDeleteUniquesByNode(
154
+ tables2,
155
+ params.graphId,
156
+ params.id
157
+ );
158
+ await execRun(deleteUniquesQuery);
159
+ const deleteEmbeddingsQuery = chunkF32HCHYA_cjs.buildHardDeleteEmbeddingsByNode(
160
+ tables2,
161
+ params.graphId,
162
+ params.kind,
163
+ params.id
164
+ );
165
+ await execRun(deleteEmbeddingsQuery);
166
+ const query = chunkF32HCHYA_cjs.buildHardDeleteNode(tables2, params);
167
+ await execRun(query);
168
+ },
169
+ // === Edge Operations ===
170
+ async insertEdge(params) {
171
+ const timestamp = nowIso();
172
+ const query = chunkF32HCHYA_cjs.buildInsertEdge(tables2, params, timestamp);
173
+ const row = await execGet(query);
174
+ if (!row) throw new Error("Insert edge failed: no row returned");
175
+ return toEdgeRow(row);
176
+ },
177
+ async getEdge(graphId, id) {
178
+ const query = chunkF32HCHYA_cjs.buildGetEdge(tables2, graphId, id);
179
+ const row = await execGet(query);
180
+ return row ? toEdgeRow(row) : void 0;
181
+ },
182
+ async updateEdge(params) {
183
+ const timestamp = nowIso();
184
+ const query = chunkF32HCHYA_cjs.buildUpdateEdge(tables2, params, timestamp);
185
+ const row = await execGet(query);
186
+ if (!row) throw new Error("Update edge failed: no row returned");
187
+ return toEdgeRow(row);
188
+ },
189
+ async deleteEdge(params) {
190
+ const timestamp = nowIso();
191
+ const query = chunkF32HCHYA_cjs.buildDeleteEdge(tables2, params, timestamp);
192
+ await execRun(query);
193
+ },
194
+ async hardDeleteEdge(params) {
195
+ const query = chunkF32HCHYA_cjs.buildHardDeleteEdge(tables2, params);
196
+ await execRun(query);
197
+ },
198
+ // === Edge Cardinality Operations ===
199
+ async countEdgesFrom(params) {
200
+ const query = chunkF32HCHYA_cjs.buildCountEdgesFrom(tables2, params);
201
+ const row = await execGet(query);
202
+ return Number(row?.count ?? 0);
203
+ },
204
+ async edgeExistsBetween(params) {
205
+ const query = chunkF32HCHYA_cjs.buildEdgeExistsBetween(tables2, params);
206
+ const row = await execGet(query);
207
+ return row !== void 0;
208
+ },
209
+ // === Edge Query Operations ===
210
+ async findEdgesConnectedTo(params) {
211
+ const query = chunkF32HCHYA_cjs.buildFindEdgesConnectedTo(tables2, params);
212
+ const rows = await execAll(query);
213
+ return rows.map((row) => toEdgeRow(row));
214
+ },
215
+ // === Collection Query Operations ===
216
+ async findNodesByKind(params) {
217
+ const query = chunkF32HCHYA_cjs.buildFindNodesByKind(tables2, params);
218
+ const rows = await execAll(query);
219
+ return rows.map((row) => toNodeRow(row));
220
+ },
221
+ async countNodesByKind(params) {
222
+ const query = chunkF32HCHYA_cjs.buildCountNodesByKind(tables2, params);
223
+ const row = await execGet(query);
224
+ return Number(row?.count ?? 0);
225
+ },
226
+ async findEdgesByKind(params) {
227
+ const query = chunkF32HCHYA_cjs.buildFindEdgesByKind(tables2, params);
228
+ const rows = await execAll(query);
229
+ return rows.map((row) => toEdgeRow(row));
230
+ },
231
+ async countEdgesByKind(params) {
232
+ const query = chunkF32HCHYA_cjs.buildCountEdgesByKind(tables2, params);
233
+ const row = await execGet(query);
234
+ return Number(row?.count ?? 0);
235
+ },
236
+ // === Unique Constraint Operations ===
237
+ async insertUnique(params) {
238
+ const query = chunkF32HCHYA_cjs.buildInsertUnique(tables2, "postgres", params);
239
+ const result = await execGet(query);
240
+ if (result && result.node_id !== params.nodeId) {
241
+ throw new chunkSV5H3XM5_cjs.UniquenessError({
242
+ constraintName: params.constraintName,
243
+ kind: params.nodeKind,
244
+ existingId: result.node_id,
245
+ newId: params.nodeId,
246
+ fields: []
247
+ // Fields not available at this level
248
+ });
249
+ }
250
+ },
251
+ async deleteUnique(params) {
252
+ const timestamp = nowIso();
253
+ const query = chunkF32HCHYA_cjs.buildDeleteUnique(tables2, params, timestamp);
254
+ await execRun(query);
255
+ },
256
+ async checkUnique(params) {
257
+ const query = chunkF32HCHYA_cjs.buildCheckUnique(tables2, params);
258
+ const row = await execGet(query);
259
+ return row ? toUniqueRow(row) : void 0;
260
+ },
261
+ // === Schema Operations ===
262
+ async getActiveSchema(graphId) {
263
+ const query = chunkF32HCHYA_cjs.buildGetActiveSchema(tables2, graphId, "postgres");
264
+ const row = await execGet(query);
265
+ return row ? toSchemaVersionRow(row) : void 0;
266
+ },
267
+ async insertSchema(params) {
268
+ const timestamp = nowIso();
269
+ const query = chunkF32HCHYA_cjs.buildInsertSchema(tables2, params, timestamp, "postgres");
270
+ const row = await execGet(query);
271
+ if (!row) throw new Error("Insert schema failed: no row returned");
272
+ return toSchemaVersionRow(row);
273
+ },
274
+ async getSchemaVersion(graphId, version) {
275
+ const query = chunkF32HCHYA_cjs.buildGetSchemaVersion(tables2, graphId, version);
276
+ const row = await execGet(query);
277
+ return row ? toSchemaVersionRow(row) : void 0;
278
+ },
279
+ async setActiveSchema(graphId, version) {
280
+ const queries = chunkF32HCHYA_cjs.buildSetActiveSchema(tables2, graphId, version, "postgres");
281
+ await execRun(queries.deactivateAll);
282
+ await execRun(queries.activateVersion);
283
+ },
284
+ // === Embedding Operations ===
285
+ async upsertEmbedding(params) {
286
+ const timestamp = nowIso();
287
+ const query = chunkF32HCHYA_cjs.buildUpsertEmbeddingPostgres(tables2, params, timestamp);
288
+ await execRun(query);
289
+ },
290
+ async deleteEmbedding(params) {
291
+ const query = chunkF32HCHYA_cjs.buildDeleteEmbedding(tables2, params);
292
+ await execRun(query);
293
+ },
294
+ async getEmbedding(graphId, nodeKind, nodeId, fieldPath) {
295
+ const query = chunkF32HCHYA_cjs.buildGetEmbedding(
296
+ tables2,
297
+ graphId,
298
+ nodeKind,
299
+ nodeId,
300
+ fieldPath
301
+ );
302
+ const row = await execGet(query);
303
+ return row ? toEmbeddingRow(row) : void 0;
304
+ },
305
+ async vectorSearch(params) {
306
+ const query = chunkF32HCHYA_cjs.buildVectorSearchPostgres(tables2, params);
307
+ const rows = await execAll(query);
308
+ return rows.map((row) => ({
309
+ nodeId: row.node_id,
310
+ score: row.score
311
+ }));
312
+ },
313
+ // === Query Execution ===
314
+ async execute(query) {
315
+ return execAll(query);
316
+ },
317
+ // === Transaction ===
318
+ async transaction(fn, options2) {
319
+ const txConfig = options2?.isolationLevel ? {
320
+ isolationLevel: options2.isolationLevel.replace("_", " ")
321
+ } : void 0;
322
+ return db.transaction(async (tx) => {
323
+ const txBackend = createTransactionBackend(
324
+ tx,
325
+ tables2
326
+ );
327
+ return fn(txBackend);
328
+ }, txConfig);
329
+ },
330
+ // === Lifecycle ===
331
+ async close() {
332
+ }
333
+ };
334
+ return backend;
335
+ }
336
+ function createTransactionBackend(tx, tables2) {
337
+ const txBackend = createPostgresBackend(tx, { tables: tables2 });
338
+ const { transaction: _tx, close: _close, ...ops } = txBackend;
339
+ return ops;
340
+ }
341
+
342
+ exports.createPostgresBackend = createPostgresBackend;
343
+ //# sourceMappingURL=chunk-TXHKFLWX.cjs.map
344
+ //# sourceMappingURL=chunk-TXHKFLWX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/backend/drizzle/postgres.ts"],"names":["POSTGRES_CAPABILITIES","tables","buildInsertNode","buildGetNode","buildUpdateNode","buildDeleteNode","buildHardDeleteUniquesByNode","buildHardDeleteEmbeddingsByNode","buildHardDeleteNode","buildInsertEdge","buildGetEdge","buildUpdateEdge","buildDeleteEdge","buildHardDeleteEdge","buildCountEdgesFrom","buildEdgeExistsBetween","buildFindEdgesConnectedTo","buildFindNodesByKind","buildCountNodesByKind","buildFindEdgesByKind","buildCountEdgesByKind","buildInsertUnique","UniquenessError","buildDeleteUnique","buildCheckUnique","buildGetActiveSchema","buildInsertSchema","buildGetSchemaVersion","buildSetActiveSchema","buildUpsertEmbeddingPostgres","buildDeleteEmbedding","buildGetEmbedding","buildVectorSearchPostgres","options"],"mappings":"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","file":"chunk-TXHKFLWX.cjs","sourcesContent":["/**\n * PostgreSQL backend adapter for TypeGraph.\n *\n * Works with any Drizzle PostgreSQL database instance:\n * - node-postgres (pg)\n * - PGlite\n * - Neon\n * - Vercel Postgres\n * - Supabase\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/node-postgres\";\n * import { Pool } from \"pg\";\n * import { createPostgresBackend } from \"@nicia-ai/typegraph/drizzle/postgres\";\n * import { tables } from \"@nicia-ai/typegraph/drizzle/schema/postgres\";\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const db = drizzle(pool);\n * const backend = createPostgresBackend(db, { tables });\n * ```\n */\nimport type { SQL } from \"drizzle-orm\";\nimport { type PgDatabase } from \"drizzle-orm/pg-core\";\n\nimport { UniquenessError } from \"../../errors\";\nimport {\n type BackendCapabilities,\n type CheckUniqueParams,\n type CountEdgesByKindParams,\n type CountEdgesFromParams,\n type CountNodesByKindParams,\n type DeleteEdgeParams,\n type DeleteEmbeddingParams,\n type DeleteNodeParams,\n type DeleteUniqueParams,\n type EdgeExistsBetweenParams,\n type EdgeRow,\n type EmbeddingRow,\n type FindEdgesByKindParams,\n type FindEdgesConnectedToParams,\n type FindNodesByKindParams,\n type GraphBackend,\n type HardDeleteEdgeParams,\n type HardDeleteNodeParams,\n type InsertEdgeParams,\n type InsertNodeParams,\n type InsertSchemaParams,\n type InsertUniqueParams,\n type NodeRow,\n POSTGRES_CAPABILITIES,\n type SchemaVersionRow,\n type TransactionBackend,\n type TransactionOptions,\n type UniqueRow,\n type UpdateEdgeParams,\n type UpdateNodeParams,\n type UpsertEmbeddingParams,\n type VectorSearchParams,\n type VectorSearchResult,\n} from \"../types\";\nimport * as ops from \"./operations\";\nimport {\n type PostgresTables,\n tables as defaultTables,\n} from \"./schema/postgres\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a PostgreSQL backend.\n */\nexport type PostgresBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createPostgresTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: PostgresTables;\n}>;\n\n/**\n * Any Drizzle PostgreSQL database instance.\n * Using 'any' for the query result type to support all PG drivers.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyPgDatabase = PgDatabase<any>;\n\n// ============================================================\n// Utilities\n// ============================================================\n\n/**\n * Gets the current timestamp in ISO format.\n */\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Converts null to undefined.\n */\nfunction nullToUndefined<T>(value: T | null): T | undefined {\n return value ?? undefined;\n}\n\n/**\n * Formats a timestamp value to ISO string.\n * PostgreSQL returns Date objects or timestamp strings, need to normalize to ISO format.\n */\nfunction formatTimestamp(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 already in ISO format, return as-is\n if (value.includes(\"T\")) return value;\n // Parse PostgreSQL timestamp format and convert to ISO\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 * Converts a database row to NodeRow type.\n * PostgreSQL returns dates as Date objects and JSONB as objects.\n * Raw SQL returns snake_case column names.\n */\nfunction toNodeRow(row: Record<string, unknown>): NodeRow {\n return {\n graph_id: row.graph_id as string,\n kind: row.kind as string,\n id: row.id as string,\n // PostgreSQL JSONB is already parsed, stringify for consistency\n props:\n typeof row.props === \"string\"\n ? row.props\n : JSON.stringify(row.props ?? {}),\n version: row.version as number,\n valid_from: nullToUndefined(formatTimestamp(row.valid_from)),\n valid_to: nullToUndefined(formatTimestamp(row.valid_to)),\n created_at: formatTimestamp(row.created_at) ?? \"\",\n updated_at: formatTimestamp(row.updated_at) ?? \"\",\n deleted_at: nullToUndefined(formatTimestamp(row.deleted_at)),\n };\n}\n\n/**\n * Converts a database row to EdgeRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEdgeRow(row: Record<string, unknown>): EdgeRow {\n return {\n graph_id: row.graph_id as string,\n id: row.id as string,\n kind: row.kind as string,\n from_kind: row.from_kind as string,\n from_id: row.from_id as string,\n to_kind: row.to_kind as string,\n to_id: row.to_id as string,\n props:\n typeof row.props === \"string\"\n ? row.props\n : JSON.stringify(row.props ?? {}),\n valid_from: nullToUndefined(formatTimestamp(row.valid_from)),\n valid_to: nullToUndefined(formatTimestamp(row.valid_to)),\n created_at: formatTimestamp(row.created_at) ?? \"\",\n updated_at: formatTimestamp(row.updated_at) ?? \"\",\n deleted_at: nullToUndefined(formatTimestamp(row.deleted_at)),\n };\n}\n\n/**\n * Converts a database row to UniqueRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n constraint_name: row.constraint_name as string,\n key: row.key as string,\n node_id: row.node_id as string,\n concrete_kind: row.concrete_kind as string,\n deleted_at: nullToUndefined(formatTimestamp(row.deleted_at)),\n };\n}\n\n/**\n * Converts a database row to SchemaVersionRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toSchemaVersionRow(row: Record<string, unknown>): SchemaVersionRow {\n // PostgreSQL may return is_active as boolean or number/string depending on driver\n const isActiveValue = row.is_active;\n const isActive = isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: row.graph_id as string,\n version: row.version as number,\n schema_hash: row.schema_hash as string,\n schema_doc:\n typeof row.schema_doc === \"string\"\n ? row.schema_doc\n : JSON.stringify(row.schema_doc ?? {}),\n created_at: formatTimestamp(row.created_at) ?? \"\",\n is_active: isActive,\n };\n}\n\n/**\n * Converts a database row to EmbeddingRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEmbeddingRow(row: Record<string, unknown>): EmbeddingRow {\n // pgvector returns embedding as a string '[1,2,3]' or as parsed array\n let embedding: readonly number[];\n if (typeof row.embedding === \"string\") {\n const content = row.embedding.slice(1, -1);\n embedding = content === \"\" ? [] : content.split(\",\").map((s) => Number.parseFloat(s.trim()));\n } else if (Array.isArray(row.embedding)) {\n embedding = row.embedding as number[];\n } else {\n embedding = [];\n }\n\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n node_id: row.node_id as string,\n field_path: row.field_path as string,\n embedding,\n dimensions: row.dimensions as number,\n created_at: formatTimestamp(row.created_at) ?? \"\",\n updated_at: formatTimestamp(row.updated_at) ?? \"\",\n };\n}\n\n/**\n * PostgreSQL capabilities with vector search support.\n * Extends base POSTGRES_CAPABILITIES with vector operations.\n */\nconst POSTGRES_VECTOR_CAPABILITIES: BackendCapabilities = {\n ...POSTGRES_CAPABILITIES,\n vector: {\n supported: true,\n metrics: [\"cosine\", \"l2\", \"inner_product\"] as const,\n indexTypes: [\"hnsw\", \"ivfflat\", \"none\"] as const,\n maxDimensions: 16_000, // pgvector limit\n },\n};\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for PostgreSQL databases.\n *\n * Works with any Drizzle PostgreSQL instance regardless of the underlying driver.\n *\n * @param db - A Drizzle PostgreSQL database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createPostgresBackend(\n db: AnyPgDatabase,\n options: PostgresBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n\n /**\n * Execute a query and return all rows.\n */\n async function execAll<T>(query: SQL): Promise<T[]> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const result: { rows: T[] } = await db.execute(query);\n return result.rows;\n }\n\n /**\n * Execute a query and return the first row.\n */\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const result: { rows: T[] } = await db.execute(query);\n return result.rows[0];\n }\n\n /**\n * Execute a modification query.\n */\n async function execRun(query: SQL): Promise<void> {\n await db.execute(query);\n }\n\n // Create the backend operations\n const backend: GraphBackend = {\n dialect: \"postgres\",\n capabilities: POSTGRES_VECTOR_CAPABILITIES,\n\n // === Node Operations ===\n\n async insertNode(params: InsertNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async getNode(\n graphId: string,\n kind: string,\n id: string,\n ): Promise<NodeRow | undefined> {\n const query = ops.buildGetNode(tables, graphId, kind, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toNodeRow(row) : undefined;\n },\n\n async updateNode(params: UpdateNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async deleteNode(params: DeleteNodeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteNode(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteNode(params: HardDeleteNodeParams): Promise<void> {\n // Delete associated uniqueness entries\n const deleteUniquesQuery = ops.buildHardDeleteUniquesByNode(\n tables,\n params.graphId,\n params.id,\n );\n await execRun(deleteUniquesQuery);\n\n // Delete associated embeddings\n const deleteEmbeddingsQuery = ops.buildHardDeleteEmbeddingsByNode(\n tables,\n params.graphId,\n params.kind,\n params.id,\n );\n await execRun(deleteEmbeddingsQuery);\n\n // Delete the node itself\n const query = ops.buildHardDeleteNode(tables, params);\n await execRun(query);\n },\n\n // === Edge Operations ===\n\n async insertEdge(params: InsertEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async getEdge(graphId: string, id: string): Promise<EdgeRow | undefined> {\n const query = ops.buildGetEdge(tables, graphId, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEdgeRow(row) : undefined;\n },\n\n async updateEdge(params: UpdateEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async deleteEdge(params: DeleteEdgeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteEdge(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteEdge(params: HardDeleteEdgeParams): Promise<void> {\n const query = ops.buildHardDeleteEdge(tables, params);\n await execRun(query);\n },\n\n // === Edge Cardinality Operations ===\n\n async countEdgesFrom(params: CountEdgesFromParams): Promise<number> {\n const query = ops.buildCountEdgesFrom(tables, params);\n const row = await execGet<{ count: string | number }>(query);\n // PostgreSQL returns count as string for bigint\n return Number(row?.count ?? 0);\n },\n\n async edgeExistsBetween(params: EdgeExistsBetweenParams): Promise<boolean> {\n const query = ops.buildEdgeExistsBetween(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row !== undefined;\n },\n\n // === Edge Query Operations ===\n\n async findEdgesConnectedTo(\n params: FindEdgesConnectedToParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesConnectedTo(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n // === Collection Query Operations ===\n\n async findNodesByKind(\n params: FindNodesByKindParams,\n ): Promise<readonly NodeRow[]> {\n const query = ops.buildFindNodesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toNodeRow(row));\n },\n\n async countNodesByKind(params: CountNodesByKindParams): Promise<number> {\n const query = ops.buildCountNodesByKind(tables, params);\n const row = await execGet<{ count: string | number }>(query);\n return Number(row?.count ?? 0);\n },\n\n async findEdgesByKind(\n params: FindEdgesByKindParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n async countEdgesByKind(params: CountEdgesByKindParams): Promise<number> {\n const query = ops.buildCountEdgesByKind(tables, params);\n const row = await execGet<{ count: string | number }>(query);\n return Number(row?.count ?? 0);\n },\n\n // === Unique Constraint Operations ===\n\n async insertUnique(params: InsertUniqueParams): Promise<void> {\n const query = ops.buildInsertUnique(tables, \"postgres\", params);\n const result = await execGet<{ node_id: string }>(query);\n\n // Check if the returned node_id matches our input\n // If different, another node holds this key (race condition or conflict)\n if (result && result.node_id !== params.nodeId) {\n throw new UniquenessError({\n constraintName: params.constraintName,\n kind: params.nodeKind,\n existingId: result.node_id,\n newId: params.nodeId,\n fields: [], // Fields not available at this level\n });\n }\n },\n\n async deleteUnique(params: DeleteUniqueParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteUnique(tables, params, timestamp);\n await execRun(query);\n },\n\n async checkUnique(\n params: CheckUniqueParams,\n ): Promise<UniqueRow | undefined> {\n const query = ops.buildCheckUnique(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toUniqueRow(row) : undefined;\n },\n\n // === Schema Operations ===\n\n async getActiveSchema(\n graphId: string,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetActiveSchema(tables, graphId, \"postgres\");\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async insertSchema(params: InsertSchemaParams): Promise<SchemaVersionRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertSchema(tables, params, timestamp, \"postgres\");\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert schema failed: no row returned\");\n return toSchemaVersionRow(row);\n },\n\n async getSchemaVersion(\n graphId: string,\n version: number,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetSchemaVersion(tables, graphId, version);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n const queries = ops.buildSetActiveSchema(tables, graphId, version, \"postgres\");\n await execRun(queries.deactivateAll);\n await execRun(queries.activateVersion);\n },\n\n // === Embedding Operations ===\n\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildUpsertEmbeddingPostgres(tables, params, timestamp);\n await execRun(query);\n },\n\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = ops.buildDeleteEmbedding(tables, params);\n await execRun(query);\n },\n\n async getEmbedding(\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n ): Promise<EmbeddingRow | undefined> {\n const query = ops.buildGetEmbedding(\n tables,\n graphId,\n nodeKind,\n nodeId,\n fieldPath,\n );\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEmbeddingRow(row) : undefined;\n },\n\n async vectorSearch(\n params: VectorSearchParams,\n ): Promise<readonly VectorSearchResult[]> {\n const query = ops.buildVectorSearchPostgres(tables, params);\n const rows = await execAll<{ node_id: string; score: number }>(query);\n return rows.map((row) => ({\n nodeId: row.node_id,\n score: row.score,\n }));\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return execAll<T>(query);\n },\n\n // === Transaction ===\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n // Map isolation levels to Drizzle format\n const txConfig = options?.isolationLevel\n ? {\n isolationLevel: options.isolationLevel.replace(\"_\", \" \") as\n | \"read uncommitted\"\n | \"read committed\"\n | \"repeatable read\"\n | \"serializable\",\n }\n : undefined;\n\n return db.transaction(async (tx) => {\n const txBackend = createTransactionBackend(\n tx as unknown as AnyPgDatabase,\n tables,\n );\n return fn(txBackend);\n }, txConfig);\n },\n\n // === Lifecycle ===\n\n async close(): Promise<void> {\n // Drizzle doesn't expose a close method\n // Users manage connection lifecycle themselves\n },\n };\n\n return backend;\n}\n\n/**\n * Creates a transaction backend from a Drizzle transaction.\n */\nfunction createTransactionBackend(\n tx: AnyPgDatabase,\n tables: PostgresTables,\n): TransactionBackend {\n // Create a new backend using the transaction\n const txBackend = createPostgresBackend(tx, { tables });\n\n // Return without transaction and close methods\n const { transaction: _tx, close: _close, ...ops } = txBackend;\n void _tx;\n void _close;\n return ops;\n}\n\n// Re-export schema utilities\nexport type { PostgresTables, TableNames } from \"./schema/postgres\";\nexport { createPostgresTables, tables } from \"./schema/postgres\";\n"]}
@@ -0,0 +1,170 @@
1
+ 'use strict';
2
+
3
+ var chunkDDM2FZRJ_cjs = require('./chunk-DDM2FZRJ.cjs');
4
+ var pgCore = require('drizzle-orm/pg-core');
5
+
6
+ var vector = pgCore.customType({
7
+ dataType(config) {
8
+ return config?.dimensions ? `vector(${config.dimensions})` : "vector";
9
+ },
10
+ toDriver(value) {
11
+ return `[${value.join(",")}]`;
12
+ },
13
+ fromDriver(value) {
14
+ if (Array.isArray(value)) {
15
+ return value;
16
+ }
17
+ const content = value.slice(1, -1);
18
+ if (content === "") {
19
+ return [];
20
+ }
21
+ return content.split(",").map((s) => Number.parseFloat(s.trim()));
22
+ }
23
+ });
24
+
25
+ // src/backend/drizzle/schema/postgres.ts
26
+ var DEFAULT_TABLE_NAMES = {
27
+ nodes: "typegraph_nodes",
28
+ edges: "typegraph_edges",
29
+ uniques: "typegraph_node_uniques",
30
+ schemaVersions: "typegraph_schema_versions",
31
+ embeddings: "typegraph_node_embeddings"
32
+ };
33
+ function createPostgresTables(names = {}, options = {}) {
34
+ const n = { ...DEFAULT_TABLE_NAMES, ...names };
35
+ const indexes = options.indexes ?? [];
36
+ const nodes2 = pgCore.pgTable(
37
+ n.nodes,
38
+ {
39
+ graphId: pgCore.text("graph_id").notNull(),
40
+ kind: pgCore.text("kind").notNull(),
41
+ id: pgCore.text("id").notNull(),
42
+ props: pgCore.jsonb("props").notNull(),
43
+ version: pgCore.integer("version").notNull().default(1),
44
+ validFrom: pgCore.timestamp("valid_from", { withTimezone: true }),
45
+ validTo: pgCore.timestamp("valid_to", { withTimezone: true }),
46
+ createdAt: pgCore.timestamp("created_at", { withTimezone: true }).notNull(),
47
+ updatedAt: pgCore.timestamp("updated_at", { withTimezone: true }).notNull(),
48
+ deletedAt: pgCore.timestamp("deleted_at", { withTimezone: true })
49
+ },
50
+ (t) => [
51
+ pgCore.primaryKey({ columns: [t.graphId, t.kind, t.id] }),
52
+ pgCore.index(`${n.nodes}_kind_idx`).on(t.graphId, t.kind),
53
+ pgCore.index(`${n.nodes}_deleted_idx`).on(t.graphId, t.deletedAt),
54
+ pgCore.index(`${n.nodes}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),
55
+ ...chunkDDM2FZRJ_cjs.buildPostgresNodeIndexBuilders(t, indexes)
56
+ ]
57
+ );
58
+ const edges2 = pgCore.pgTable(
59
+ n.edges,
60
+ {
61
+ graphId: pgCore.text("graph_id").notNull(),
62
+ id: pgCore.text("id").notNull(),
63
+ kind: pgCore.text("kind").notNull(),
64
+ fromKind: pgCore.text("from_kind").notNull(),
65
+ fromId: pgCore.text("from_id").notNull(),
66
+ toKind: pgCore.text("to_kind").notNull(),
67
+ toId: pgCore.text("to_id").notNull(),
68
+ props: pgCore.jsonb("props").notNull(),
69
+ validFrom: pgCore.timestamp("valid_from", { withTimezone: true }),
70
+ validTo: pgCore.timestamp("valid_to", { withTimezone: true }),
71
+ createdAt: pgCore.timestamp("created_at", { withTimezone: true }).notNull(),
72
+ updatedAt: pgCore.timestamp("updated_at", { withTimezone: true }).notNull(),
73
+ deletedAt: pgCore.timestamp("deleted_at", { withTimezone: true })
74
+ },
75
+ (t) => [
76
+ pgCore.primaryKey({ columns: [t.graphId, t.id] }),
77
+ pgCore.index(`${n.edges}_kind_idx`).on(t.graphId, t.kind),
78
+ pgCore.index(`${n.edges}_from_idx`).on(t.graphId, t.fromKind, t.fromId),
79
+ pgCore.index(`${n.edges}_to_idx`).on(t.graphId, t.toKind, t.toId),
80
+ pgCore.index(`${n.edges}_deleted_idx`).on(t.graphId, t.deletedAt),
81
+ pgCore.index(`${n.edges}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),
82
+ pgCore.index(`${n.edges}_cardinality_idx`).on(
83
+ t.graphId,
84
+ t.kind,
85
+ t.fromKind,
86
+ t.fromId,
87
+ t.validTo
88
+ ),
89
+ ...chunkDDM2FZRJ_cjs.buildPostgresEdgeIndexBuilders(t, indexes)
90
+ ]
91
+ );
92
+ const uniques2 = pgCore.pgTable(
93
+ n.uniques,
94
+ {
95
+ graphId: pgCore.text("graph_id").notNull(),
96
+ nodeKind: pgCore.text("node_kind").notNull(),
97
+ constraintName: pgCore.text("constraint_name").notNull(),
98
+ key: pgCore.text("key").notNull(),
99
+ nodeId: pgCore.text("node_id").notNull(),
100
+ concreteKind: pgCore.text("concrete_kind").notNull(),
101
+ deletedAt: pgCore.timestamp("deleted_at", { withTimezone: true })
102
+ },
103
+ (t) => [
104
+ pgCore.primaryKey({
105
+ columns: [t.graphId, t.nodeKind, t.constraintName, t.key]
106
+ }),
107
+ pgCore.index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId)
108
+ ]
109
+ );
110
+ const schemaVersions2 = pgCore.pgTable(
111
+ n.schemaVersions,
112
+ {
113
+ graphId: pgCore.text("graph_id").notNull(),
114
+ version: pgCore.integer("version").notNull(),
115
+ schemaHash: pgCore.text("schema_hash").notNull(),
116
+ schemaDoc: pgCore.jsonb("schema_doc").notNull(),
117
+ createdAt: pgCore.timestamp("created_at", { withTimezone: true }).notNull(),
118
+ isActive: pgCore.boolean("is_active").notNull().default(false)
119
+ },
120
+ (t) => [
121
+ pgCore.primaryKey({ columns: [t.graphId, t.version] }),
122
+ pgCore.index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive)
123
+ ]
124
+ );
125
+ const embeddings2 = pgCore.pgTable(
126
+ n.embeddings,
127
+ {
128
+ graphId: pgCore.text("graph_id").notNull(),
129
+ nodeKind: pgCore.text("node_kind").notNull(),
130
+ nodeId: pgCore.text("node_id").notNull(),
131
+ fieldPath: pgCore.text("field_path").notNull(),
132
+ /** Embedding vector stored as native pgvector type */
133
+ embedding: vector("embedding").notNull(),
134
+ /** Number of dimensions (for validation) */
135
+ dimensions: pgCore.integer("dimensions").notNull(),
136
+ createdAt: pgCore.timestamp("created_at", { withTimezone: true }).notNull(),
137
+ updatedAt: pgCore.timestamp("updated_at", { withTimezone: true }).notNull()
138
+ },
139
+ (t) => [
140
+ pgCore.primaryKey({
141
+ columns: [t.graphId, t.nodeKind, t.nodeId, t.fieldPath]
142
+ }),
143
+ // Index for looking up embeddings by node
144
+ pgCore.index(`${n.embeddings}_node_idx`).on(
145
+ t.graphId,
146
+ t.nodeKind,
147
+ t.nodeId
148
+ ),
149
+ // Index for filtering by kind and field (used in vector search)
150
+ pgCore.index(`${n.embeddings}_kind_field_idx`).on(
151
+ t.graphId,
152
+ t.nodeKind,
153
+ t.fieldPath
154
+ )
155
+ ]
156
+ );
157
+ return { nodes: nodes2, edges: edges2, uniques: uniques2, schemaVersions: schemaVersions2, embeddings: embeddings2 };
158
+ }
159
+ var tables = createPostgresTables();
160
+ var { nodes, edges, uniques, schemaVersions, embeddings } = tables;
161
+
162
+ exports.createPostgresTables = createPostgresTables;
163
+ exports.edges = edges;
164
+ exports.embeddings = embeddings;
165
+ exports.nodes = nodes;
166
+ exports.schemaVersions = schemaVersions;
167
+ exports.tables = tables;
168
+ exports.uniques = uniques;
169
+ //# sourceMappingURL=chunk-UJAGXJDG.cjs.map
170
+ //# sourceMappingURL=chunk-UJAGXJDG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/backend/drizzle/columns/vector.ts","../src/backend/drizzle/schema/postgres.ts"],"names":["customType","nodes","pgTable","text","jsonb","integer","timestamp","primaryKey","index","buildPostgresNodeIndexBuilders","edges","buildPostgresEdgeIndexBuilders","uniques","schemaVersions","boolean","embeddings"],"mappings":"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","file":"chunk-UJAGXJDG.cjs","sourcesContent":["/**\n * Custom Drizzle column type for pgvector's VECTOR type.\n *\n * Provides native support for PostgreSQL vector embeddings without\n * requiring runtime casts in queries.\n *\n * @example\n * ```typescript\n * import { pgTable, text, integer } from \"drizzle-orm/pg-core\";\n * import { vector } from \"./columns/vector\";\n *\n * const embeddings = pgTable(\"embeddings\", {\n * id: text(\"id\").primaryKey(),\n * embedding: vector(\"embedding\"),\n * dimensions: integer(\"dimensions\"),\n * });\n * ```\n */\nimport { customType } from \"drizzle-orm/pg-core\";\n\n/**\n * PostgreSQL vector column type for pgvector extension.\n *\n * Stores embeddings as native VECTOR type, enabling efficient\n * similarity search without runtime casts.\n *\n * The column type is unparameterized (`VECTOR` not `VECTOR(N)`)\n * to support multiple embedding dimensions in a single table.\n * Dimension validation is handled at the application level.\n *\n * @example\n * ```typescript\n * // In table definition\n * embedding: vector(\"embedding\").notNull(),\n *\n * // In queries - no cast needed\n * db.execute(sql`\n * SELECT * FROM embeddings\n * WHERE embedding <=> ${formatVector([0.1, 0.2, 0.3])} < 0.5\n * `);\n * ```\n */\nexport const vector = customType<{\n data: number[];\n driverData: string;\n config: { dimensions?: number };\n}>({\n dataType(config) {\n // Use parameterized type if dimensions specified, otherwise unparameterized\n return config?.dimensions ? `vector(${config.dimensions})` : \"vector\";\n },\n\n toDriver(value: number[]): string {\n // Format as pgvector literal: [1.0,2.0,3.0]\n return `[${value.join(\",\")}]`;\n },\n\n fromDriver(value: string): number[] {\n // pgvector returns '[1,2,3]' format\n // Handle both string and already-parsed array (some drivers differ)\n if (Array.isArray(value)) {\n return value as number[];\n }\n // Parse the string representation\n const content = value.slice(1, -1); // Remove [ and ]\n if (content === \"\") {\n return [];\n }\n return content.split(\",\").map((s) => Number.parseFloat(s.trim()));\n },\n});\n\n/**\n * Formats a number array as a pgvector literal string.\n *\n * Use this when building raw SQL queries with embeddings.\n *\n * @example\n * ```typescript\n * const embedding = [0.1, 0.2, 0.3];\n * db.execute(sql`\n * SELECT * FROM embeddings\n * WHERE embedding <=> ${formatVector(embedding)}::vector < 0.5\n * `);\n * ```\n */\nexport function formatVector(embedding: readonly number[]): string {\n return `[${embedding.join(\",\")}]`;\n}\n","/**\n * Drizzle PostgreSQL schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Uses PostgreSQL-native types: JSONB, TIMESTAMPTZ, BOOLEAN, VECTOR.\n *\n * The embeddings table uses pgvector's native VECTOR type. Ensure the\n * extension is enabled before creating tables:\n *\n * ```sql\n * CREATE EXTENSION IF NOT EXISTS vector;\n * ```\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/drizzle/schema/postgres\";\n *\n * // Custom table names\n * import { createPostgresTables } from \"@nicia-ai/typegraph/drizzle/schema/postgres\";\n * const tables = createPostgresTables({\n * nodes: \"myapp_nodes\",\n * edges: \"myapp_edges\",\n * });\n * ```\n */\nimport {\n boolean,\n index,\n integer,\n jsonb,\n pgTable,\n primaryKey,\n text,\n timestamp,\n} from \"drizzle-orm/pg-core\";\n\nimport {\n buildPostgresEdgeIndexBuilders,\n buildPostgresNodeIndexBuilders,\n type TypeGraphIndex,\n} from \"../../../indexes\";\nimport { vector } from \"../columns/vector\";\n\n/**\n * Table name configuration.\n */\nexport type TableNames = Readonly<{\n nodes: string;\n edges: string;\n uniques: string;\n schemaVersions: string;\n embeddings: string;\n}>;\n\nexport type CreatePostgresTablesOptions = Readonly<{\n /**\n * Additional TypeGraph indexes to include in the Drizzle schema.\n *\n * These become first-class Drizzle indexes, so drizzle-kit migrations will\n * pick them up automatically.\n */\n indexes?: readonly TypeGraphIndex[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: TableNames = {\n nodes: \"typegraph_nodes\",\n edges: \"typegraph_edges\",\n uniques: \"typegraph_node_uniques\",\n schemaVersions: \"typegraph_schema_versions\",\n embeddings: \"typegraph_node_embeddings\",\n};\n\n/**\n * Creates PostgreSQL table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createPostgresTables(\n names: Partial<TableNames> = {},\n options: CreatePostgresTablesOptions = {},\n) {\n const n: TableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n const indexes = options.indexes ?? [];\n\n const nodes = pgTable(\n n.nodes,\n {\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: jsonb(\"props\").notNull(),\n version: integer(\"version\").notNull().default(1),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n index(`${n.nodes}_kind_idx`).on(t.graphId, t.kind),\n index(`${n.nodes}_deleted_idx`).on(t.graphId, t.deletedAt),\n index(`${n.nodes}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),\n ...buildPostgresNodeIndexBuilders(t, indexes),\n ],\n );\n\n const edges = pgTable(\n n.edges,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: jsonb(\"props\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n index(`${n.edges}_kind_idx`).on(t.graphId, t.kind),\n index(`${n.edges}_from_idx`).on(t.graphId, t.fromKind, t.fromId),\n index(`${n.edges}_to_idx`).on(t.graphId, t.toKind, t.toId),\n index(`${n.edges}_deleted_idx`).on(t.graphId, t.deletedAt),\n index(`${n.edges}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),\n index(`${n.edges}_cardinality_idx`).on(\n t.graphId,\n t.kind,\n t.fromKind,\n t.fromId,\n t.validTo,\n ),\n ...buildPostgresEdgeIndexBuilders(t, indexes),\n ],\n );\n\n const uniques = pgTable(\n n.uniques,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n constraintName: text(\"constraint_name\").notNull(),\n key: text(\"key\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n concreteKind: text(\"concrete_kind\").notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n }),\n index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n ],\n );\n\n const schemaVersions = pgTable(\n n.schemaVersions,\n {\n graphId: text(\"graph_id\").notNull(),\n version: integer(\"version\").notNull(),\n schemaHash: text(\"schema_hash\").notNull(),\n schemaDoc: jsonb(\"schema_doc\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n isActive: boolean(\"is_active\").notNull().default(false),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.version] }),\n index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n ],\n );\n\n /**\n * Embeddings table for vector search.\n *\n * Stores embeddings using pgvector's native VECTOR type for efficient\n * similarity operations without runtime casts.\n *\n * The column uses unparameterized VECTOR type to support multiple\n * embedding dimensions in a single table. Dimension validation is\n * handled at the application level via the `dimensions` column.\n *\n * Requires pgvector extension:\n * CREATE EXTENSION IF NOT EXISTS vector;\n *\n * Vector indices (HNSW, IVFFlat) are created dynamically based on the\n * configured metric and dimensions.\n */\n const embeddings = pgTable(\n n.embeddings,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n fieldPath: text(\"field_path\").notNull(),\n /** Embedding vector stored as native pgvector type */\n embedding: vector(\"embedding\").notNull(),\n /** Number of dimensions (for validation) */\n dimensions: integer(\"dimensions\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.nodeId, t.fieldPath],\n }),\n // Index for looking up embeddings by node\n index(`${n.embeddings}_node_idx`).on(\n t.graphId,\n t.nodeKind,\n t.nodeId,\n ),\n // Index for filtering by kind and field (used in vector search)\n index(`${n.embeddings}_kind_field_idx`).on(\n t.graphId,\n t.nodeKind,\n t.fieldPath,\n ),\n ],\n );\n\n return { nodes, edges, uniques, schemaVersions, embeddings } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createPostgresTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const { nodes, edges, uniques, schemaVersions, embeddings } = tables;\n\n/**\n * Type representing the tables object returned by createPostgresTables.\n */\nexport type PostgresTables = ReturnType<typeof createPostgresTables>;\n\n/**\n * Type for nodes table.\n */\nexport type NodesTable = PostgresTables[\"nodes\"];\n\n/**\n * Type for edges table.\n */\nexport type EdgesTable = PostgresTables[\"edges\"];\n\n/**\n * Type for uniques table.\n */\nexport type UniquesTable = PostgresTables[\"uniques\"];\n\n/**\n * Type for schema versions table.\n */\nexport type SchemaVersionsTable = PostgresTables[\"schemaVersions\"];\n\n/**\n * Type for embeddings table.\n */\nexport type EmbeddingsTable = PostgresTables[\"embeddings\"];\n"]}