@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,646 @@
1
+ import { getDialect } from './chunk-IIAT36MI.js';
2
+ import { sql, getTableName } from 'drizzle-orm';
3
+
4
+ // src/backend/types.ts
5
+ var SQLITE_CAPABILITIES = {
6
+ jsonb: false,
7
+ // SQLite uses TEXT with json functions
8
+ partialIndexes: true,
9
+ // SQLite supports WHERE in CREATE INDEX
10
+ ginIndexes: false,
11
+ // SQLite doesn't have GIN
12
+ cte: true,
13
+ // SQLite supports WITH
14
+ returning: true,
15
+ // SQLite 3.35+ supports RETURNING
16
+ transactions: true
17
+ // SQLite supports transactions
18
+ };
19
+ var POSTGRES_CAPABILITIES = {
20
+ jsonb: true,
21
+ // PostgreSQL has native JSONB
22
+ partialIndexes: true,
23
+ ginIndexes: true,
24
+ cte: true,
25
+ returning: true,
26
+ transactions: true
27
+ // PostgreSQL supports transactions
28
+ };
29
+ var D1_CAPABILITIES = {
30
+ jsonb: false,
31
+ // D1 uses TEXT with json functions
32
+ partialIndexes: true,
33
+ ginIndexes: false,
34
+ cte: true,
35
+ returning: true,
36
+ transactions: false
37
+ // D1 does NOT support atomic transactions
38
+ };
39
+ function sqlNull(value) {
40
+ return value ?? sql.raw("NULL");
41
+ }
42
+ function buildInsertNode(tables, params, timestamp) {
43
+ const { nodes } = tables;
44
+ const propsJson = JSON.stringify(params.props);
45
+ const cols = sql.raw(`"${nodes.graphId.name}", "${nodes.kind.name}", "${nodes.id.name}", "${nodes.props.name}", "${nodes.version.name}", "${nodes.validFrom.name}", "${nodes.validTo.name}", "${nodes.createdAt.name}", "${nodes.updatedAt.name}"`);
46
+ return sql`
47
+ INSERT INTO ${nodes} (${cols})
48
+ VALUES (
49
+ ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},
50
+ 1, ${sqlNull(params.validFrom)}, ${sqlNull(params.validTo)},
51
+ ${timestamp}, ${timestamp}
52
+ )
53
+ RETURNING *
54
+ `;
55
+ }
56
+ function buildGetNode(tables, graphId, kind, id) {
57
+ const { nodes } = tables;
58
+ return sql`
59
+ SELECT * FROM ${nodes}
60
+ WHERE ${nodes.graphId} = ${graphId}
61
+ AND ${nodes.kind} = ${kind}
62
+ AND ${nodes.id} = ${id}
63
+ `;
64
+ }
65
+ function buildUpdateNode(tables, params, timestamp) {
66
+ const { nodes } = tables;
67
+ const propsJson = JSON.stringify(params.props);
68
+ const col = (c) => sql.raw(`"${c.name}"`);
69
+ const setParts = [
70
+ sql`${col(nodes.props)} = ${propsJson}`,
71
+ sql`${col(nodes.updatedAt)} = ${timestamp}`
72
+ ];
73
+ if (params.incrementVersion) {
74
+ setParts.push(sql`${col(nodes.version)} = ${col(nodes.version)} + 1`);
75
+ }
76
+ if (params.validTo !== void 0) {
77
+ setParts.push(sql`${col(nodes.validTo)} = ${params.validTo}`);
78
+ }
79
+ if (params.clearDeleted) {
80
+ setParts.push(sql`${col(nodes.deletedAt)} = NULL`);
81
+ }
82
+ const setClause = sql.join(setParts, sql`, `);
83
+ if (params.clearDeleted) {
84
+ return sql`
85
+ UPDATE ${nodes}
86
+ SET ${setClause}
87
+ WHERE ${nodes.graphId} = ${params.graphId}
88
+ AND ${nodes.kind} = ${params.kind}
89
+ AND ${nodes.id} = ${params.id}
90
+ RETURNING *
91
+ `;
92
+ }
93
+ return sql`
94
+ UPDATE ${nodes}
95
+ SET ${setClause}
96
+ WHERE ${nodes.graphId} = ${params.graphId}
97
+ AND ${nodes.kind} = ${params.kind}
98
+ AND ${nodes.id} = ${params.id}
99
+ AND ${nodes.deletedAt} IS NULL
100
+ RETURNING *
101
+ `;
102
+ }
103
+ function buildDeleteNode(tables, params, timestamp) {
104
+ const { nodes } = tables;
105
+ const col = (c) => sql.raw(`"${c.name}"`);
106
+ return sql`
107
+ UPDATE ${nodes}
108
+ SET ${col(nodes.deletedAt)} = ${timestamp}
109
+ WHERE ${nodes.graphId} = ${params.graphId}
110
+ AND ${nodes.kind} = ${params.kind}
111
+ AND ${nodes.id} = ${params.id}
112
+ AND ${nodes.deletedAt} IS NULL
113
+ `;
114
+ }
115
+ function buildHardDeleteNode(tables, params) {
116
+ const { nodes } = tables;
117
+ return sql`
118
+ DELETE FROM ${nodes}
119
+ WHERE ${nodes.graphId} = ${params.graphId}
120
+ AND ${nodes.kind} = ${params.kind}
121
+ AND ${nodes.id} = ${params.id}
122
+ `;
123
+ }
124
+ function buildInsertEdge(tables, params, timestamp) {
125
+ const { edges } = tables;
126
+ const propsJson = JSON.stringify(params.props);
127
+ const cols = sql.raw(`"${edges.graphId.name}", "${edges.id.name}", "${edges.kind.name}", "${edges.fromKind.name}", "${edges.fromId.name}", "${edges.toKind.name}", "${edges.toId.name}", "${edges.props.name}", "${edges.validFrom.name}", "${edges.validTo.name}", "${edges.createdAt.name}", "${edges.updatedAt.name}"`);
128
+ return sql`
129
+ INSERT INTO ${edges} (${cols})
130
+ VALUES (
131
+ ${params.graphId}, ${params.id}, ${params.kind},
132
+ ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},
133
+ ${propsJson}, ${sqlNull(params.validFrom)}, ${sqlNull(params.validTo)},
134
+ ${timestamp}, ${timestamp}
135
+ )
136
+ RETURNING *
137
+ `;
138
+ }
139
+ function buildGetEdge(tables, graphId, id) {
140
+ const { edges } = tables;
141
+ return sql`
142
+ SELECT * FROM ${edges}
143
+ WHERE ${edges.graphId} = ${graphId}
144
+ AND ${edges.id} = ${id}
145
+ `;
146
+ }
147
+ function buildUpdateEdge(tables, params, timestamp) {
148
+ const { edges } = tables;
149
+ const propsJson = JSON.stringify(params.props);
150
+ const col = (c) => sql.raw(`"${c.name}"`);
151
+ if (params.validTo !== void 0) {
152
+ return sql`
153
+ UPDATE ${edges}
154
+ SET ${col(edges.props)} = ${propsJson},
155
+ ${col(edges.validTo)} = ${params.validTo},
156
+ ${col(edges.updatedAt)} = ${timestamp}
157
+ WHERE ${edges.graphId} = ${params.graphId}
158
+ AND ${edges.id} = ${params.id}
159
+ AND ${edges.deletedAt} IS NULL
160
+ RETURNING *
161
+ `;
162
+ }
163
+ return sql`
164
+ UPDATE ${edges}
165
+ SET ${col(edges.props)} = ${propsJson},
166
+ ${col(edges.updatedAt)} = ${timestamp}
167
+ WHERE ${edges.graphId} = ${params.graphId}
168
+ AND ${edges.id} = ${params.id}
169
+ AND ${edges.deletedAt} IS NULL
170
+ RETURNING *
171
+ `;
172
+ }
173
+ function buildDeleteEdge(tables, params, timestamp) {
174
+ const { edges } = tables;
175
+ const col = (c) => sql.raw(`"${c.name}"`);
176
+ return sql`
177
+ UPDATE ${edges}
178
+ SET ${col(edges.deletedAt)} = ${timestamp}
179
+ WHERE ${edges.graphId} = ${params.graphId}
180
+ AND ${edges.id} = ${params.id}
181
+ AND ${edges.deletedAt} IS NULL
182
+ `;
183
+ }
184
+ function buildHardDeleteEdge(tables, params) {
185
+ const { edges } = tables;
186
+ return sql`
187
+ DELETE FROM ${edges}
188
+ WHERE ${edges.graphId} = ${params.graphId}
189
+ AND ${edges.id} = ${params.id}
190
+ `;
191
+ }
192
+ function buildInsertUniqueSqlite(tables, params) {
193
+ const { uniques } = tables;
194
+ const cols = sql.raw(`"${uniques.graphId.name}", "${uniques.nodeKind.name}", "${uniques.constraintName.name}", "${uniques.key.name}", "${uniques.nodeId.name}", "${uniques.concreteKind.name}", "${uniques.deletedAt.name}"`);
195
+ const conflictCols = sql.raw(`"${uniques.graphId.name}", "${uniques.nodeKind.name}", "${uniques.constraintName.name}", "${uniques.key.name}"`);
196
+ const col = (c) => sql.raw(`"${c.name}"`);
197
+ return sql`
198
+ INSERT INTO ${uniques} (${cols})
199
+ VALUES (
200
+ ${params.graphId}, ${params.nodeKind}, ${params.constraintName},
201
+ ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw("NULL")}
202
+ )
203
+ ON CONFLICT (${conflictCols})
204
+ DO UPDATE SET
205
+ ${col(uniques.nodeId)} = CASE
206
+ WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN ${params.nodeId}
207
+ WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}
208
+ ELSE ${col(uniques.nodeId)}
209
+ END,
210
+ ${col(uniques.concreteKind)} = CASE
211
+ WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN ${params.concreteKind}
212
+ WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}
213
+ ELSE ${col(uniques.concreteKind)}
214
+ END,
215
+ ${col(uniques.deletedAt)} = CASE
216
+ WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN NULL
217
+ WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN NULL
218
+ ELSE ${col(uniques.deletedAt)}
219
+ END
220
+ RETURNING ${col(uniques.nodeId)} as node_id
221
+ `;
222
+ }
223
+ function buildInsertUniquePostgres(tables, params) {
224
+ const { uniques } = tables;
225
+ const cols = sql.raw(`"${uniques.graphId.name}", "${uniques.nodeKind.name}", "${uniques.constraintName.name}", "${uniques.key.name}", "${uniques.nodeId.name}", "${uniques.concreteKind.name}", "${uniques.deletedAt.name}"`);
226
+ const conflictCols = sql.raw(`"${uniques.graphId.name}", "${uniques.nodeKind.name}", "${uniques.constraintName.name}", "${uniques.key.name}"`);
227
+ const col = (c) => sql.raw(`"${c.name}"`);
228
+ const tableName = getTableName(uniques);
229
+ const existingCol = (c) => sql.raw(`"${tableName}"."${c.name}"`);
230
+ return sql`
231
+ INSERT INTO ${uniques} (${cols})
232
+ VALUES (
233
+ ${params.graphId}, ${params.nodeKind}, ${params.constraintName},
234
+ ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw("NULL")}
235
+ )
236
+ ON CONFLICT (${conflictCols})
237
+ DO UPDATE SET
238
+ ${col(uniques.nodeId)} = CASE
239
+ WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN ${params.nodeId}
240
+ WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}
241
+ ELSE ${existingCol(uniques.nodeId)}
242
+ END,
243
+ ${col(uniques.concreteKind)} = CASE
244
+ WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN ${params.concreteKind}
245
+ WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}
246
+ ELSE ${existingCol(uniques.concreteKind)}
247
+ END,
248
+ ${col(uniques.deletedAt)} = CASE
249
+ WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN NULL
250
+ WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN NULL
251
+ ELSE ${existingCol(uniques.deletedAt)}
252
+ END
253
+ RETURNING ${col(uniques.nodeId)} as node_id
254
+ `;
255
+ }
256
+ function buildInsertUnique(tables, dialect, params) {
257
+ if (dialect === "sqlite") {
258
+ return buildInsertUniqueSqlite(tables, params);
259
+ }
260
+ return buildInsertUniquePostgres(tables, params);
261
+ }
262
+ function buildDeleteUnique(tables, params, timestamp) {
263
+ const { uniques } = tables;
264
+ const col = (c) => sql.raw(`"${c.name}"`);
265
+ return sql`
266
+ UPDATE ${uniques}
267
+ SET ${col(uniques.deletedAt)} = ${timestamp}
268
+ WHERE ${uniques.graphId} = ${params.graphId}
269
+ AND ${uniques.nodeKind} = ${params.nodeKind}
270
+ AND ${uniques.constraintName} = ${params.constraintName}
271
+ AND ${uniques.key} = ${params.key}
272
+ AND ${uniques.deletedAt} IS NULL
273
+ `;
274
+ }
275
+ function buildHardDeleteUniquesByNode(tables, graphId, nodeId) {
276
+ const { uniques } = tables;
277
+ return sql`
278
+ DELETE FROM ${uniques}
279
+ WHERE ${uniques.graphId} = ${graphId}
280
+ AND ${uniques.nodeId} = ${nodeId}
281
+ `;
282
+ }
283
+ function buildHardDeleteEmbeddingsByNode(tables, graphId, nodeKind, nodeId) {
284
+ const { embeddings } = tables;
285
+ return sql`
286
+ DELETE FROM ${embeddings}
287
+ WHERE ${embeddings.graphId} = ${graphId}
288
+ AND ${embeddings.nodeKind} = ${nodeKind}
289
+ AND ${embeddings.nodeId} = ${nodeId}
290
+ `;
291
+ }
292
+ function buildCheckUnique(tables, params) {
293
+ const { uniques } = tables;
294
+ return sql`
295
+ SELECT * FROM ${uniques}
296
+ WHERE ${uniques.graphId} = ${params.graphId}
297
+ AND ${uniques.nodeKind} = ${params.nodeKind}
298
+ AND ${uniques.constraintName} = ${params.constraintName}
299
+ AND ${uniques.key} = ${params.key}
300
+ AND ${uniques.deletedAt} IS NULL
301
+ `;
302
+ }
303
+ function buildCountEdgesFrom(tables, params) {
304
+ const { edges } = tables;
305
+ if (params.activeOnly) {
306
+ return sql`
307
+ SELECT COUNT(*) as count FROM ${edges}
308
+ WHERE ${edges.graphId} = ${params.graphId}
309
+ AND ${edges.kind} = ${params.edgeKind}
310
+ AND ${edges.fromKind} = ${params.fromKind}
311
+ AND ${edges.fromId} = ${params.fromId}
312
+ AND ${edges.deletedAt} IS NULL
313
+ AND ${edges.validTo} IS NULL
314
+ `;
315
+ }
316
+ return sql`
317
+ SELECT COUNT(*) as count FROM ${edges}
318
+ WHERE ${edges.graphId} = ${params.graphId}
319
+ AND ${edges.kind} = ${params.edgeKind}
320
+ AND ${edges.fromKind} = ${params.fromKind}
321
+ AND ${edges.fromId} = ${params.fromId}
322
+ AND ${edges.deletedAt} IS NULL
323
+ `;
324
+ }
325
+ function buildEdgeExistsBetween(tables, params) {
326
+ const { edges } = tables;
327
+ return sql`
328
+ SELECT 1 FROM ${edges}
329
+ WHERE ${edges.graphId} = ${params.graphId}
330
+ AND ${edges.kind} = ${params.edgeKind}
331
+ AND ${edges.fromKind} = ${params.fromKind}
332
+ AND ${edges.fromId} = ${params.fromId}
333
+ AND ${edges.toKind} = ${params.toKind}
334
+ AND ${edges.toId} = ${params.toId}
335
+ AND ${edges.deletedAt} IS NULL
336
+ LIMIT 1
337
+ `;
338
+ }
339
+ function buildFindEdgesConnectedTo(tables, params) {
340
+ const { edges } = tables;
341
+ return sql`
342
+ SELECT * FROM ${edges}
343
+ WHERE ${edges.graphId} = ${params.graphId}
344
+ AND ${edges.deletedAt} IS NULL
345
+ AND (
346
+ (${edges.fromKind} = ${params.nodeKind} AND ${edges.fromId} = ${params.nodeId})
347
+ OR
348
+ (${edges.toKind} = ${params.nodeKind} AND ${edges.toId} = ${params.nodeId})
349
+ )
350
+ `;
351
+ }
352
+ function buildFindNodesByKind(tables, params) {
353
+ const { nodes } = tables;
354
+ const excludeDeleted = params.excludeDeleted ?? true;
355
+ const baseCondition = excludeDeleted ? sql`${nodes.graphId} = ${params.graphId} AND ${nodes.kind} = ${params.kind} AND ${nodes.deletedAt} IS NULL` : sql`${nodes.graphId} = ${params.graphId} AND ${nodes.kind} = ${params.kind}`;
356
+ if (params.limit !== void 0 && params.offset !== void 0) {
357
+ return sql`
358
+ SELECT * FROM ${nodes}
359
+ WHERE ${baseCondition}
360
+ ORDER BY ${nodes.createdAt} DESC
361
+ LIMIT ${params.limit} OFFSET ${params.offset}
362
+ `;
363
+ }
364
+ if (params.limit !== void 0) {
365
+ return sql`
366
+ SELECT * FROM ${nodes}
367
+ WHERE ${baseCondition}
368
+ ORDER BY ${nodes.createdAt} DESC
369
+ LIMIT ${params.limit}
370
+ `;
371
+ }
372
+ return sql`
373
+ SELECT * FROM ${nodes}
374
+ WHERE ${baseCondition}
375
+ ORDER BY ${nodes.createdAt} DESC
376
+ `;
377
+ }
378
+ function buildCountNodesByKind(tables, params) {
379
+ const { nodes } = tables;
380
+ const excludeDeleted = params.excludeDeleted ?? true;
381
+ if (excludeDeleted) {
382
+ return sql`
383
+ SELECT COUNT(*) as count FROM ${nodes}
384
+ WHERE ${nodes.graphId} = ${params.graphId}
385
+ AND ${nodes.kind} = ${params.kind}
386
+ AND ${nodes.deletedAt} IS NULL
387
+ `;
388
+ }
389
+ return sql`
390
+ SELECT COUNT(*) as count FROM ${nodes}
391
+ WHERE ${nodes.graphId} = ${params.graphId}
392
+ AND ${nodes.kind} = ${params.kind}
393
+ `;
394
+ }
395
+ function buildFindEdgesByKind(tables, params) {
396
+ const { edges } = tables;
397
+ const excludeDeleted = params.excludeDeleted ?? true;
398
+ const conditions = [
399
+ sql`${edges.graphId} = ${params.graphId}`,
400
+ sql`${edges.kind} = ${params.kind}`
401
+ ];
402
+ if (excludeDeleted) {
403
+ conditions.push(sql`${edges.deletedAt} IS NULL`);
404
+ }
405
+ if (params.fromKind !== void 0) {
406
+ conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);
407
+ }
408
+ if (params.fromId !== void 0) {
409
+ conditions.push(sql`${edges.fromId} = ${params.fromId}`);
410
+ }
411
+ if (params.toKind !== void 0) {
412
+ conditions.push(sql`${edges.toKind} = ${params.toKind}`);
413
+ }
414
+ if (params.toId !== void 0) {
415
+ conditions.push(sql`${edges.toId} = ${params.toId}`);
416
+ }
417
+ const whereClause = sql.join(conditions, sql` AND `);
418
+ if (params.limit !== void 0 && params.offset !== void 0) {
419
+ return sql`
420
+ SELECT * FROM ${edges}
421
+ WHERE ${whereClause}
422
+ ORDER BY ${edges.createdAt} DESC
423
+ LIMIT ${params.limit} OFFSET ${params.offset}
424
+ `;
425
+ }
426
+ if (params.limit !== void 0) {
427
+ return sql`
428
+ SELECT * FROM ${edges}
429
+ WHERE ${whereClause}
430
+ ORDER BY ${edges.createdAt} DESC
431
+ LIMIT ${params.limit}
432
+ `;
433
+ }
434
+ return sql`
435
+ SELECT * FROM ${edges}
436
+ WHERE ${whereClause}
437
+ ORDER BY ${edges.createdAt} DESC
438
+ `;
439
+ }
440
+ function buildCountEdgesByKind(tables, params) {
441
+ const { edges } = tables;
442
+ const excludeDeleted = params.excludeDeleted ?? true;
443
+ const conditions = [
444
+ sql`${edges.graphId} = ${params.graphId}`,
445
+ sql`${edges.kind} = ${params.kind}`
446
+ ];
447
+ if (excludeDeleted) {
448
+ conditions.push(sql`${edges.deletedAt} IS NULL`);
449
+ }
450
+ if (params.fromKind !== void 0) {
451
+ conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);
452
+ }
453
+ if (params.fromId !== void 0) {
454
+ conditions.push(sql`${edges.fromId} = ${params.fromId}`);
455
+ }
456
+ if (params.toKind !== void 0) {
457
+ conditions.push(sql`${edges.toKind} = ${params.toKind}`);
458
+ }
459
+ if (params.toId !== void 0) {
460
+ conditions.push(sql`${edges.toId} = ${params.toId}`);
461
+ }
462
+ const whereClause = sql.join(conditions, sql` AND `);
463
+ return sql`
464
+ SELECT COUNT(*) as count FROM ${edges}
465
+ WHERE ${whereClause}
466
+ `;
467
+ }
468
+ function buildInsertSchemaSqlite(tables, params, timestamp) {
469
+ const { schemaVersions } = tables;
470
+ const schemaDocumentJson = JSON.stringify(params.schemaDoc);
471
+ const isActiveValue = params.isActive ? sql.raw("1") : sql.raw("0");
472
+ const cols = sql.raw(`"${schemaVersions.graphId.name}", "${schemaVersions.version.name}", "${schemaVersions.schemaHash.name}", "${schemaVersions.schemaDoc.name}", "${schemaVersions.createdAt.name}", "${schemaVersions.isActive.name}"`);
473
+ return sql`
474
+ INSERT INTO ${schemaVersions} (${cols})
475
+ VALUES (
476
+ ${params.graphId}, ${params.version},
477
+ ${params.schemaHash}, ${schemaDocumentJson},
478
+ ${timestamp}, ${isActiveValue}
479
+ )
480
+ RETURNING *
481
+ `;
482
+ }
483
+ function buildInsertSchemaPostgres(tables, params, timestamp) {
484
+ const { schemaVersions } = tables;
485
+ const schemaDocumentJson = JSON.stringify(params.schemaDoc);
486
+ const isActiveValue = params.isActive ? sql.raw("true") : sql.raw("false");
487
+ const cols = sql.raw(`"${schemaVersions.graphId.name}", "${schemaVersions.version.name}", "${schemaVersions.schemaHash.name}", "${schemaVersions.schemaDoc.name}", "${schemaVersions.createdAt.name}", "${schemaVersions.isActive.name}"`);
488
+ return sql`
489
+ INSERT INTO ${schemaVersions} (${cols})
490
+ VALUES (
491
+ ${params.graphId}, ${params.version},
492
+ ${params.schemaHash}, ${schemaDocumentJson},
493
+ ${timestamp}, ${isActiveValue}
494
+ )
495
+ RETURNING *
496
+ `;
497
+ }
498
+ function buildInsertSchema(tables, params, timestamp, dialect = "sqlite") {
499
+ if (dialect === "postgres") {
500
+ return buildInsertSchemaPostgres(tables, params, timestamp);
501
+ }
502
+ return buildInsertSchemaSqlite(tables, params, timestamp);
503
+ }
504
+ function buildGetActiveSchema(tables, graphId, dialect = "sqlite") {
505
+ const { schemaVersions } = tables;
506
+ const adapter = getDialect(dialect);
507
+ return sql`
508
+ SELECT * FROM ${schemaVersions}
509
+ WHERE ${schemaVersions.graphId} = ${graphId}
510
+ AND ${schemaVersions.isActive} = ${adapter.booleanLiteral(true)}
511
+ `;
512
+ }
513
+ function buildGetSchemaVersion(tables, graphId, version) {
514
+ const { schemaVersions } = tables;
515
+ return sql`
516
+ SELECT * FROM ${schemaVersions}
517
+ WHERE ${schemaVersions.graphId} = ${graphId}
518
+ AND ${schemaVersions.version} = ${version}
519
+ `;
520
+ }
521
+ function buildSetActiveSchema(tables, graphId, version, dialect = "sqlite") {
522
+ const { schemaVersions } = tables;
523
+ const adapter = getDialect(dialect);
524
+ const col = (c) => sql.raw(`"${c.name}"`);
525
+ const deactivateAll = sql`
526
+ UPDATE ${schemaVersions}
527
+ SET ${col(schemaVersions.isActive)} = ${adapter.booleanLiteral(false)}
528
+ WHERE ${schemaVersions.graphId} = ${graphId}
529
+ `;
530
+ const activateVersion = sql`
531
+ UPDATE ${schemaVersions}
532
+ SET ${col(schemaVersions.isActive)} = ${adapter.booleanLiteral(true)}
533
+ WHERE ${schemaVersions.graphId} = ${graphId}
534
+ AND ${schemaVersions.version} = ${version}
535
+ `;
536
+ return { deactivateAll, activateVersion };
537
+ }
538
+ function assertFiniteNumberArray(array, name) {
539
+ for (const [index, value] of array.entries()) {
540
+ if (typeof value !== "number" || !Number.isFinite(value)) {
541
+ throw new TypeError(
542
+ `${name}[${index}] must be a finite number, got: ${value}`
543
+ );
544
+ }
545
+ }
546
+ }
547
+ function formatEmbeddingLiteral(embedding) {
548
+ assertFiniteNumberArray(embedding, "embedding");
549
+ return `[${embedding.join(",")}]`;
550
+ }
551
+ function buildUpsertEmbeddingPostgres(tables, params, timestamp) {
552
+ const { embeddings } = tables;
553
+ const embeddingLiteral = formatEmbeddingLiteral(params.embedding);
554
+ const cols = sql.raw(
555
+ `"${embeddings.graphId.name}", "${embeddings.nodeKind.name}", "${embeddings.nodeId.name}", "${embeddings.fieldPath.name}", "${embeddings.embedding.name}", "${embeddings.dimensions.name}", "${embeddings.createdAt.name}", "${embeddings.updatedAt.name}"`
556
+ );
557
+ const conflictCols = sql.raw(
558
+ `"${embeddings.graphId.name}", "${embeddings.nodeKind.name}", "${embeddings.nodeId.name}", "${embeddings.fieldPath.name}"`
559
+ );
560
+ const col = (c) => sql.raw(`"${c.name}"`);
561
+ return sql`
562
+ INSERT INTO ${embeddings} (${cols})
563
+ VALUES (
564
+ ${params.graphId}, ${params.nodeKind}, ${params.nodeId}, ${params.fieldPath},
565
+ ${embeddingLiteral}::vector, ${params.dimensions}, ${timestamp}, ${timestamp}
566
+ )
567
+ ON CONFLICT (${conflictCols})
568
+ DO UPDATE SET
569
+ ${col(embeddings.embedding)} = ${embeddingLiteral}::vector,
570
+ ${col(embeddings.dimensions)} = ${params.dimensions},
571
+ ${col(embeddings.updatedAt)} = ${timestamp}
572
+ `;
573
+ }
574
+ function buildDeleteEmbedding(tables, params) {
575
+ const { embeddings } = tables;
576
+ return sql`
577
+ DELETE FROM ${embeddings}
578
+ WHERE ${embeddings.graphId} = ${params.graphId}
579
+ AND ${embeddings.nodeKind} = ${params.nodeKind}
580
+ AND ${embeddings.nodeId} = ${params.nodeId}
581
+ AND ${embeddings.fieldPath} = ${params.fieldPath}
582
+ `;
583
+ }
584
+ function buildGetEmbedding(tables, graphId, nodeKind, nodeId, fieldPath) {
585
+ const { embeddings } = tables;
586
+ return sql`
587
+ SELECT * FROM ${embeddings}
588
+ WHERE ${embeddings.graphId} = ${graphId}
589
+ AND ${embeddings.nodeKind} = ${nodeKind}
590
+ AND ${embeddings.nodeId} = ${nodeId}
591
+ AND ${embeddings.fieldPath} = ${fieldPath}
592
+ `;
593
+ }
594
+ function buildDistanceExpression(embeddingColumn, queryLiteral, metric) {
595
+ const vectorParam = sql`${queryLiteral}::vector`;
596
+ switch (metric) {
597
+ case "cosine": {
598
+ return sql`(${embeddingColumn} <=> ${vectorParam})`;
599
+ }
600
+ case "l2": {
601
+ return sql`(${embeddingColumn} <-> ${vectorParam})`;
602
+ }
603
+ case "inner_product": {
604
+ return sql`(${embeddingColumn} <#> ${vectorParam})`;
605
+ }
606
+ }
607
+ }
608
+ function buildVectorSearchPostgres(tables, params) {
609
+ const { embeddings } = tables;
610
+ const queryLiteral = formatEmbeddingLiteral(params.queryEmbedding);
611
+ const embeddingColumn = sql`${embeddings.embedding}`;
612
+ const distanceExpr = buildDistanceExpression(
613
+ embeddingColumn,
614
+ queryLiteral,
615
+ params.metric
616
+ );
617
+ const conditions = [
618
+ sql`${embeddings.graphId} = ${params.graphId}`,
619
+ sql`${embeddings.nodeKind} = ${params.nodeKind}`,
620
+ sql`${embeddings.fieldPath} = ${params.fieldPath}`
621
+ ];
622
+ if (params.minScore !== void 0) {
623
+ if (!Number.isFinite(params.minScore)) {
624
+ throw new TypeError(`minScore must be a finite number, got: ${params.minScore}`);
625
+ }
626
+ const threshold = 1 - params.minScore;
627
+ conditions.push(sql`${distanceExpr} <= ${threshold}`);
628
+ }
629
+ if (!Number.isInteger(params.limit) || params.limit <= 0) {
630
+ throw new Error(`limit must be a positive integer, got: ${params.limit}`);
631
+ }
632
+ const whereClause = sql.join(conditions, sql` AND `);
633
+ return sql`
634
+ SELECT
635
+ ${embeddings.nodeId} as node_id,
636
+ (1 - (${distanceExpr})) as score
637
+ FROM ${embeddings}
638
+ WHERE ${whereClause}
639
+ ORDER BY ${distanceExpr} ASC
640
+ LIMIT ${params.limit}
641
+ `;
642
+ }
643
+
644
+ export { D1_CAPABILITIES, POSTGRES_CAPABILITIES, SQLITE_CAPABILITIES, buildCheckUnique, buildCountEdgesByKind, buildCountEdgesFrom, buildCountNodesByKind, buildDeleteEdge, buildDeleteEmbedding, buildDeleteNode, buildDeleteUnique, buildEdgeExistsBetween, buildFindEdgesByKind, buildFindEdgesConnectedTo, buildFindNodesByKind, buildGetActiveSchema, buildGetEdge, buildGetEmbedding, buildGetNode, buildGetSchemaVersion, buildHardDeleteEdge, buildHardDeleteEmbeddingsByNode, buildHardDeleteNode, buildHardDeleteUniquesByNode, buildInsertEdge, buildInsertNode, buildInsertSchema, buildInsertUnique, buildSetActiveSchema, buildUpdateEdge, buildUpdateNode, buildUpsertEmbeddingPostgres, buildVectorSearchPostgres };
645
+ //# sourceMappingURL=chunk-RYT4H46I.js.map
646
+ //# sourceMappingURL=chunk-RYT4H46I.js.map