@nicia-ai/typegraph 0.30.0 → 0.31.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 (181) hide show
  1. package/README.md +39 -0
  2. package/dist/backend/postgres/index.cjs +19 -18
  3. package/dist/backend/postgres/index.d.cts +6 -6
  4. package/dist/backend/postgres/index.d.ts +6 -6
  5. package/dist/backend/postgres/index.js +9 -8
  6. package/dist/backend/postgres/pglite.cjs +13 -12
  7. package/dist/backend/postgres/pglite.cjs.map +1 -1
  8. package/dist/backend/postgres/pglite.d.cts +3 -3
  9. package/dist/backend/postgres/pglite.d.ts +3 -3
  10. package/dist/backend/postgres/pglite.js +9 -8
  11. package/dist/backend/postgres/pglite.js.map +1 -1
  12. package/dist/backend/sqlite/index.cjs +16 -16
  13. package/dist/backend/sqlite/index.d.cts +7 -7
  14. package/dist/backend/sqlite/index.d.ts +7 -7
  15. package/dist/backend/sqlite/index.js +7 -7
  16. package/dist/backend/sqlite/libsql.cjs +12 -12
  17. package/dist/backend/sqlite/libsql.d.cts +3 -3
  18. package/dist/backend/sqlite/libsql.d.ts +3 -3
  19. package/dist/backend/sqlite/libsql.js +8 -8
  20. package/dist/backend/sqlite/local.cjs +13 -13
  21. package/dist/backend/sqlite/local.d.cts +3 -3
  22. package/dist/backend/sqlite/local.d.ts +3 -3
  23. package/dist/backend/sqlite/local.js +8 -8
  24. package/dist/{chunk-AI3RNREM.js → chunk-2HZGWCB4.js} +94 -496
  25. package/dist/chunk-2HZGWCB4.js.map +1 -0
  26. package/dist/chunk-2YMGNYXY.js +40 -0
  27. package/dist/chunk-2YMGNYXY.js.map +1 -0
  28. package/dist/chunk-2ZY4K43M.js +90 -0
  29. package/dist/chunk-2ZY4K43M.js.map +1 -0
  30. package/dist/chunk-3EUKJEQ3.js +77 -0
  31. package/dist/chunk-3EUKJEQ3.js.map +1 -0
  32. package/dist/chunk-3JBJEYWE.cjs +604 -0
  33. package/dist/chunk-3JBJEYWE.cjs.map +1 -0
  34. package/dist/{chunk-IUIJJYPI.js → chunk-4A4GUZTQ.js} +6 -5
  35. package/dist/chunk-4A4GUZTQ.js.map +1 -0
  36. package/dist/{chunk-WEMZM7J7.cjs → chunk-54JVNOAQ.cjs} +5 -41
  37. package/dist/chunk-54JVNOAQ.cjs.map +1 -0
  38. package/dist/{chunk-IE6GN7L3.cjs → chunk-5CN7B4CZ.cjs} +17 -98
  39. package/dist/chunk-5CN7B4CZ.cjs.map +1 -0
  40. package/dist/{chunk-K4N35E7B.cjs → chunk-5DTPBFX5.cjs} +64 -63
  41. package/dist/chunk-5DTPBFX5.cjs.map +1 -0
  42. package/dist/chunk-6G35I3VW.cjs +40 -0
  43. package/dist/chunk-6G35I3VW.cjs.map +1 -0
  44. package/dist/{chunk-4BXHVEFB.cjs → chunk-6RMLO5O4.cjs} +6 -51
  45. package/dist/chunk-6RMLO5O4.cjs.map +1 -0
  46. package/dist/chunk-6SA7UIQJ.cjs +94 -0
  47. package/dist/chunk-6SA7UIQJ.cjs.map +1 -0
  48. package/dist/chunk-6ZR4QC3O.cjs +12 -0
  49. package/dist/{chunk-LUHU4T2F.cjs.map → chunk-6ZR4QC3O.cjs.map} +1 -1
  50. package/dist/chunk-73KASJGO.cjs +52 -0
  51. package/dist/chunk-73KASJGO.cjs.map +1 -0
  52. package/dist/chunk-A3W7QG7K.js +45 -0
  53. package/dist/chunk-A3W7QG7K.js.map +1 -0
  54. package/dist/{chunk-FWBVPATK.cjs → chunk-ASYQDPPU.cjs} +19 -19
  55. package/dist/{chunk-FWBVPATK.cjs.map → chunk-ASYQDPPU.cjs.map} +1 -1
  56. package/dist/{chunk-FVIGJTS7.js → chunk-ATTXBMAX.js} +4 -74
  57. package/dist/chunk-ATTXBMAX.js.map +1 -0
  58. package/dist/chunk-AW4A3P5A.cjs +51 -0
  59. package/dist/chunk-AW4A3P5A.cjs.map +1 -0
  60. package/dist/{chunk-WFCECD6Q.cjs → chunk-CIINW6PS.cjs} +73 -68
  61. package/dist/chunk-CIINW6PS.cjs.map +1 -0
  62. package/dist/{chunk-26HWIIVS.cjs → chunk-FLOI7QOT.cjs} +63 -62
  63. package/dist/chunk-FLOI7QOT.cjs.map +1 -0
  64. package/dist/{chunk-633N7DSE.js → chunk-GKFWM3DS.js} +4 -36
  65. package/dist/chunk-GKFWM3DS.js.map +1 -0
  66. package/dist/chunk-HTGDWIDE.cjs +89 -0
  67. package/dist/chunk-HTGDWIDE.cjs.map +1 -0
  68. package/dist/{chunk-R4JOBEJU.js → chunk-IJORSAC3.js} +4 -40
  69. package/dist/chunk-IJORSAC3.js.map +1 -0
  70. package/dist/{chunk-SGPXKJ4A.cjs → chunk-KTIEB7VH.cjs} +26 -16
  71. package/dist/chunk-KTIEB7VH.cjs.map +1 -0
  72. package/dist/chunk-LJLMDDCW.js +282 -0
  73. package/dist/chunk-LJLMDDCW.js.map +1 -0
  74. package/dist/{chunk-VFX3LC76.cjs → chunk-N2MBPTAF.cjs} +14 -14
  75. package/dist/{chunk-VFX3LC76.cjs.map → chunk-N2MBPTAF.cjs.map} +1 -1
  76. package/dist/{chunk-3IRMLJEK.js → chunk-O4VUR6SI.js} +3 -3
  77. package/dist/{chunk-3IRMLJEK.js.map → chunk-O4VUR6SI.js.map} +1 -1
  78. package/dist/chunk-RZ4DH4E7.cjs +15832 -0
  79. package/dist/chunk-RZ4DH4E7.cjs.map +1 -0
  80. package/dist/chunk-SAJSMR2B.js +35 -0
  81. package/dist/chunk-SAJSMR2B.js.map +1 -0
  82. package/dist/{chunk-4LBO6KIF.cjs → chunk-SFFJ2IKN.cjs} +60 -59
  83. package/dist/chunk-SFFJ2IKN.cjs.map +1 -0
  84. package/dist/{chunk-K5VREXMZ.js → chunk-STP7QVUB.js} +7 -6
  85. package/dist/chunk-STP7QVUB.js.map +1 -0
  86. package/dist/chunk-THX25XW6.js +590 -0
  87. package/dist/chunk-THX25XW6.js.map +1 -0
  88. package/dist/chunk-UIFEEPME.js +15787 -0
  89. package/dist/chunk-UIFEEPME.js.map +1 -0
  90. package/dist/{chunk-2QA5EHEN.js → chunk-UJ4V3YUQ.js} +3 -3
  91. package/dist/{chunk-2QA5EHEN.js.map → chunk-UJ4V3YUQ.js.map} +1 -1
  92. package/dist/{chunk-UESTHN47.cjs → chunk-V4IQYOQ4.cjs} +95 -507
  93. package/dist/chunk-V4IQYOQ4.cjs.map +1 -0
  94. package/dist/chunk-VMEWZU2N.cjs +287 -0
  95. package/dist/chunk-VMEWZU2N.cjs.map +1 -0
  96. package/dist/{chunk-N2OEOGBB.js → chunk-VZX2KSY3.js} +13 -8
  97. package/dist/chunk-VZX2KSY3.js.map +1 -0
  98. package/dist/{chunk-IX7RE7CG.js → chunk-WYTUF3QO.js} +3 -3
  99. package/dist/{chunk-IX7RE7CG.js.map → chunk-WYTUF3QO.js.map} +1 -1
  100. package/dist/{chunk-3JLRHQ67.js → chunk-XKJQQQVR.js} +6 -5
  101. package/dist/chunk-XKJQQQVR.js.map +1 -0
  102. package/dist/{chunk-ENDUY2CD.js → chunk-YCV72E6L.js} +23 -17
  103. package/dist/chunk-YCV72E6L.js.map +1 -0
  104. package/dist/{ddl-EdkIiFVU.d.ts → ddl-BJcPrB4L.d.ts} +3 -3
  105. package/dist/{ddl-BSFlbGQF.d.cts → ddl-CPZ7mB7X.d.cts} +3 -3
  106. package/dist/{extension-types-CwHV-Uk4.d.cts → extension-types-D1k0inWU.d.cts} +1 -1
  107. package/dist/{extension-types-CwHV-Uk4.d.ts → extension-types-D1k0inWU.d.ts} +1 -1
  108. package/dist/graph-extension/index.cjs +17 -17
  109. package/dist/graph-extension/index.d.cts +5 -16
  110. package/dist/graph-extension/index.d.ts +5 -16
  111. package/dist/graph-extension/index.js +2 -2
  112. package/dist/graph-merge/index.cjs +3822 -0
  113. package/dist/graph-merge/index.cjs.map +1 -0
  114. package/dist/graph-merge/index.d.cts +1191 -0
  115. package/dist/graph-merge/index.d.ts +1191 -0
  116. package/dist/graph-merge/index.js +3791 -0
  117. package/dist/graph-merge/index.js.map +1 -0
  118. package/dist/{index-DzeIiMO3.d.ts → index-BEK0VtNB.d.ts} +2 -2
  119. package/dist/{index-Ln_KHTGA.d.cts → index-C8sSTErx.d.cts} +2 -2
  120. package/dist/index.cjs +281 -15913
  121. package/dist/index.cjs.map +1 -1
  122. package/dist/index.d.cts +12 -11
  123. package/dist/index.d.ts +12 -11
  124. package/dist/index.js +23 -15790
  125. package/dist/index.js.map +1 -1
  126. package/dist/indexes/index.cjs +30 -26
  127. package/dist/indexes/index.d.cts +5 -5
  128. package/dist/indexes/index.d.ts +5 -5
  129. package/dist/indexes/index.js +6 -2
  130. package/dist/interchange/index.cjs +49 -592
  131. package/dist/interchange/index.cjs.map +1 -1
  132. package/dist/interchange/index.d.cts +5 -5
  133. package/dist/interchange/index.d.ts +5 -5
  134. package/dist/interchange/index.js +2 -588
  135. package/dist/interchange/index.js.map +1 -1
  136. package/dist/{manager-BbdyNhkv.d.ts → manager-By-WEd8M.d.ts} +3 -3
  137. package/dist/{manager-wTDgjoXG.d.cts → manager-Np7VVSlE.d.cts} +3 -3
  138. package/dist/{materialize-indexes-lkawaDor.d.ts → materialize-indexes-CAGhqPHQ.d.ts} +1 -1
  139. package/dist/{materialize-indexes-oanE3RU0.d.cts → materialize-indexes-DEYkU-wr.d.cts} +1 -1
  140. package/dist/{postgres-CK2ByP1q.d.cts → postgres-4J2tmauh.d.cts} +1 -1
  141. package/dist/{postgres-ymXYC6Rr.d.ts → postgres-BdIb7tS_.d.ts} +1 -1
  142. package/dist/profiler/index.d.cts +7 -7
  143. package/dist/profiler/index.d.ts +7 -7
  144. package/dist/result-DWo6mUVz.d.cts +37 -0
  145. package/dist/result-DWo6mUVz.d.ts +37 -0
  146. package/dist/schema/index.cjs +29 -28
  147. package/dist/schema/index.cjs.map +1 -1
  148. package/dist/schema/index.d.cts +7 -7
  149. package/dist/schema/index.d.ts +7 -7
  150. package/dist/schema/index.js +6 -5
  151. package/dist/schema/index.js.map +1 -1
  152. package/dist/{sqlite-DxH1lrwD.d.cts → sqlite-Gatk_iw_.d.cts} +1 -1
  153. package/dist/{sqlite-R8YGOqVQ.d.ts → sqlite-aM_PAz-O.d.ts} +1 -1
  154. package/dist/{store--z1Tmk7U.d.cts → store-DuCbdqsh.d.cts} +49 -49
  155. package/dist/{store-CNKM334w.d.ts → store-MloRPwb9.d.ts} +49 -49
  156. package/dist/{types-BBiDqJCU.d.ts → types-BKQljXom.d.ts} +16 -2
  157. package/dist/{types-dL-clxO3.d.cts → types-C1CYxWrL.d.cts} +16 -2
  158. package/dist/{types-D5B6Be5c.d.cts → types-DoByHGyU.d.cts} +2 -2
  159. package/dist/{types-CMvxx2kd.d.ts → types-K3vpaJAL.d.ts} +2 -2
  160. package/dist/{where-CAo6wsBZ.d.ts → where-Dt49bvo6.d.ts} +2 -2
  161. package/dist/{where-bJjuOCeV.d.cts → where-DydZjGOb.d.cts} +2 -2
  162. package/package.json +6 -1
  163. package/dist/chunk-26HWIIVS.cjs.map +0 -1
  164. package/dist/chunk-3JLRHQ67.js.map +0 -1
  165. package/dist/chunk-4BXHVEFB.cjs.map +0 -1
  166. package/dist/chunk-4LBO6KIF.cjs.map +0 -1
  167. package/dist/chunk-633N7DSE.js.map +0 -1
  168. package/dist/chunk-AI3RNREM.js.map +0 -1
  169. package/dist/chunk-ENDUY2CD.js.map +0 -1
  170. package/dist/chunk-FVIGJTS7.js.map +0 -1
  171. package/dist/chunk-IE6GN7L3.cjs.map +0 -1
  172. package/dist/chunk-IUIJJYPI.js.map +0 -1
  173. package/dist/chunk-K4N35E7B.cjs.map +0 -1
  174. package/dist/chunk-K5VREXMZ.js.map +0 -1
  175. package/dist/chunk-LUHU4T2F.cjs +0 -12
  176. package/dist/chunk-N2OEOGBB.js.map +0 -1
  177. package/dist/chunk-R4JOBEJU.js.map +0 -1
  178. package/dist/chunk-SGPXKJ4A.cjs.map +0 -1
  179. package/dist/chunk-UESTHN47.cjs.map +0 -1
  180. package/dist/chunk-WEMZM7J7.cjs.map +0 -1
  181. package/dist/chunk-WFCECD6Q.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUESTHN47_cjs = require('./chunk-UESTHN47.cjs');
3
+ var chunkV4IQYOQ4_cjs = require('./chunk-V4IQYOQ4.cjs');
4
4
  var drizzleOrm = require('drizzle-orm');
5
5
  var pgCore = require('drizzle-orm/pg-core');
6
6
 
@@ -72,7 +72,7 @@ function operatorClass(metric) {
72
72
  }
73
73
  }
74
74
  function vectorLiteral(embedding, name) {
75
- chunkUESTHN47_cjs.assertFiniteEmbedding(embedding, name);
75
+ chunkV4IQYOQ4_cjs.assertFiniteEmbedding(embedding, name);
76
76
  return drizzleOrm.sql`${formatVector(embedding)}::vector`;
77
77
  }
78
78
  function distanceExpression(embeddingColumn, queryEmbedding, metric) {
@@ -97,11 +97,11 @@ var pgvectorStrategy = {
97
97
  name: "pgvector",
98
98
  capabilities: PGVECTOR_CAPABILITIES,
99
99
  tableName(graphId, nodeKind, fieldPath) {
100
- return chunkUESTHN47_cjs.vectorPhysicalName(TABLE_PREFIX, graphId, nodeKind, fieldPath);
100
+ return chunkV4IQYOQ4_cjs.vectorPhysicalName(TABLE_PREFIX, graphId, nodeKind, fieldPath);
101
101
  },
102
102
  ownedTables(slot) {
103
103
  const table = this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath);
104
- const name = chunkUESTHN47_cjs.quoteIdentifier(table);
104
+ const name = chunkV4IQYOQ4_cjs.quoteIdentifier(table);
105
105
  const createDdl = [
106
106
  `CREATE TABLE IF NOT EXISTS ${name} (
107
107
  "graph_id" TEXT NOT NULL,
@@ -114,7 +114,7 @@ var pgvectorStrategy = {
114
114
  ];
115
115
  return [
116
116
  {
117
- logicalName: `${chunkUESTHN47_cjs.VECTOR_CONTRIBUTION_PREFIX}:${slot.nodeKind}.${slot.fieldPath}`,
117
+ logicalName: `${chunkV4IQYOQ4_cjs.VECTOR_CONTRIBUTION_PREFIX}:${slot.nodeKind}.${slot.fieldPath}`,
118
118
  owner: "pgvector",
119
119
  tableName: table,
120
120
  createDdl,
@@ -123,7 +123,7 @@ var pgvectorStrategy = {
123
123
  ];
124
124
  },
125
125
  buildUpsert(slot, params, timestamp) {
126
- const table = chunkUESTHN47_cjs.quotedTableName(
126
+ const table = chunkV4IQYOQ4_cjs.quotedTableName(
127
127
  this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
128
128
  );
129
129
  const value = vectorLiteral(params.embedding, "embedding");
@@ -137,7 +137,7 @@ var pgvectorStrategy = {
137
137
  ];
138
138
  },
139
139
  buildDelete(slot, params) {
140
- const table = chunkUESTHN47_cjs.quotedTableName(
140
+ const table = chunkV4IQYOQ4_cjs.quotedTableName(
141
141
  this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
142
142
  );
143
143
  return [
@@ -148,7 +148,7 @@ var pgvectorStrategy = {
148
148
  ];
149
149
  },
150
150
  buildSearch(slot, params) {
151
- const table = chunkUESTHN47_cjs.quotedTableName(
151
+ const table = chunkV4IQYOQ4_cjs.quotedTableName(
152
152
  this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
153
153
  );
154
154
  const embeddingColumn = drizzleOrm.sql`${table}."embedding"`;
@@ -157,11 +157,11 @@ var pgvectorStrategy = {
157
157
  params.queryEmbedding,
158
158
  params.metric
159
159
  );
160
- const score = chunkUESTHN47_cjs.vectorScoreExpression(distance, params.metric);
160
+ const score = chunkV4IQYOQ4_cjs.vectorScoreExpression(distance, params.metric);
161
161
  const conditions = [drizzleOrm.sql`${table}."graph_id" = ${params.graphId}`];
162
162
  if (params.minScore !== void 0) {
163
163
  conditions.push(
164
- chunkUESTHN47_cjs.vectorMinScoreCondition(distance, params.metric, params.minScore)
164
+ chunkV4IQYOQ4_cjs.vectorMinScoreCondition(distance, params.metric, params.minScore)
165
165
  );
166
166
  }
167
167
  return drizzleOrm.sql`
@@ -188,17 +188,17 @@ var pgvectorStrategy = {
188
188
  buildDropIndex(slot) {
189
189
  if (!usesAnnIndex(slot)) return void 0;
190
190
  const indexName = pgvectorIndexName(slot);
191
- return drizzleOrm.sql.raw(`DROP INDEX IF EXISTS ${chunkUESTHN47_cjs.quoteIdentifier(indexName)}`);
191
+ return drizzleOrm.sql.raw(`DROP INDEX IF EXISTS ${chunkV4IQYOQ4_cjs.quoteIdentifier(indexName)}`);
192
192
  },
193
193
  buildDropStorage(slot) {
194
- const table = chunkUESTHN47_cjs.quoteIdentifier(
194
+ const table = chunkV4IQYOQ4_cjs.quoteIdentifier(
195
195
  this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
196
196
  );
197
197
  return [`DROP TABLE IF EXISTS ${table} CASCADE`];
198
198
  }
199
199
  };
200
200
  function pgvectorIndexName(slot) {
201
- return chunkUESTHN47_cjs.vectorPhysicalName(
201
+ return chunkV4IQYOQ4_cjs.vectorPhysicalName(
202
202
  INDEX_PREFIX,
203
203
  slot.graphId,
204
204
  slot.nodeKind,
@@ -206,8 +206,8 @@ function pgvectorIndexName(slot) {
206
206
  );
207
207
  }
208
208
  function pgvectorIndexDdl(table, slot, concurrent) {
209
- const indexName = chunkUESTHN47_cjs.quoteIdentifier(pgvectorIndexName(slot));
210
- const quotedTable = chunkUESTHN47_cjs.quoteIdentifier(table);
209
+ const indexName = chunkV4IQYOQ4_cjs.quoteIdentifier(pgvectorIndexName(slot));
210
+ const quotedTable = chunkV4IQYOQ4_cjs.quoteIdentifier(table);
211
211
  const opClass = operatorClass(slot.metric);
212
212
  const m = slot.indexParams?.m ?? DEFAULT_HNSW_M;
213
213
  const efConstruction = slot.indexParams?.efConstruction ?? DEFAULT_HNSW_EF_CONSTRUCTION;
@@ -231,89 +231,8 @@ function pgvectorIndexDdl(table, slot, concurrent) {
231
231
  }
232
232
  }
233
233
  }
234
- var NODE_COLUMNS = [
235
- "id",
236
- "kind",
237
- "props",
238
- "version",
239
- "valid_from",
240
- "valid_to",
241
- "created_at",
242
- "updated_at",
243
- "deleted_at"
244
- ];
245
- var EDGE_COLUMNS = [
246
- "id",
247
- "kind",
248
- "from_id",
249
- "to_id",
250
- "props",
251
- "valid_from",
252
- "valid_to",
253
- "created_at",
254
- "updated_at",
255
- "deleted_at"
256
- ];
257
- var EMPTY_REQUIRED_COLUMNS = /* @__PURE__ */ new Set();
258
- function quoteIdentifier2(identifier) {
259
- return drizzleOrm.sql.raw(`"${identifier.replaceAll('"', '""')}"`);
260
- }
261
- function shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns) {
262
- if (alwaysRequiredColumns?.has(column)) return true;
263
- if (requiredColumns === void 0) return true;
264
- return requiredColumns.has(column);
265
- }
266
- function addRequiredColumn(requiredColumnsByAlias, alias, column) {
267
- const existing = requiredColumnsByAlias.get(alias);
268
- if (existing) {
269
- existing.add(column);
270
- return;
271
- }
272
- requiredColumnsByAlias.set(alias, /* @__PURE__ */ new Set([column]));
273
- }
274
- function markFieldRefAsRequired(requiredColumnsByAlias, field) {
275
- const column = field.path[0];
276
- if (column === void 0) return;
277
- addRequiredColumn(requiredColumnsByAlias, field.alias, column);
278
- }
279
- function mapSelectiveSystemFieldToColumn(field) {
280
- if (field === "fromId") return "from_id";
281
- if (field === "toId") return "to_id";
282
- if (field.startsWith("meta.")) {
283
- return field.slice(5).replaceAll(/([A-Z])/g, "_$1").toLowerCase();
284
- }
285
- return field;
286
- }
287
- function markSelectiveFieldAsRequired(requiredColumnsByAlias, field) {
288
- if (field.isSystemField) {
289
- addRequiredColumn(
290
- requiredColumnsByAlias,
291
- field.alias,
292
- mapSelectiveSystemFieldToColumn(field.field)
293
- );
294
- return;
295
- }
296
- addRequiredColumn(requiredColumnsByAlias, field.alias, "props");
297
- }
298
- function isIdFieldRef(field) {
299
- return field.path.length === 1 && field.path[0] === "id" && field.jsonPointer === void 0;
300
- }
301
- function isAggregateExpr(source) {
302
- return "__type" in source && source.__type === "aggregate";
303
- }
304
234
 
305
- exports.EDGE_COLUMNS = EDGE_COLUMNS;
306
- exports.EMPTY_REQUIRED_COLUMNS = EMPTY_REQUIRED_COLUMNS;
307
- exports.NODE_COLUMNS = NODE_COLUMNS;
308
- exports.addRequiredColumn = addRequiredColumn;
309
235
  exports.assertPgvectorEfSearch = assertPgvectorEfSearch;
310
- exports.isAggregateExpr = isAggregateExpr;
311
- exports.isIdFieldRef = isIdFieldRef;
312
- exports.mapSelectiveSystemFieldToColumn = mapSelectiveSystemFieldToColumn;
313
- exports.markFieldRefAsRequired = markFieldRefAsRequired;
314
- exports.markSelectiveFieldAsRequired = markSelectiveFieldAsRequired;
315
236
  exports.pgvectorStrategy = pgvectorStrategy;
316
- exports.quoteIdentifier = quoteIdentifier2;
317
- exports.shouldProjectColumn = shouldProjectColumn;
318
- //# sourceMappingURL=chunk-IE6GN7L3.cjs.map
319
- //# sourceMappingURL=chunk-IE6GN7L3.cjs.map
237
+ //# sourceMappingURL=chunk-5CN7B4CZ.cjs.map
238
+ //# sourceMappingURL=chunk-5CN7B4CZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/backend/drizzle/columns/vector.ts","../src/query/dialect/vector/pgvector-strategy.ts"],"names":["customType","assertFiniteEmbedding","sql","vectorPhysicalName","quoteIdentifier","VECTOR_CONTRIBUTION_PREFIX","quotedTableName","vectorScoreExpression","vectorMinScoreCondition"],"mappings":"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","file":"chunk-5CN7B4CZ.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 * pgvector strategy.\n *\n * Postgres' pgvector extension is the one engine where the *same* SQL serves\n * brute-force and ANN: `ORDER BY embedding <=> q LIMIT k` scans sequentially\n * with no index and is rewritten to an HNSW/IVFFlat scan the moment a matching\n * index exists — the planner picks it up automatically. So `buildSearch` never\n * branches on `slot.indexType`; it emits one relevance scan and lets Postgres\n * decide. (Contrast libSQL/sqlite-vec, whose ANN needs distinct syntax.)\n *\n * Storage is per-`(nodeKind, fieldPath)`: a `vector(N)` column carrying the\n * field's fixed dimension `N`, with the operator-class-typed ANN index folded\n * into the same table contribution so materialization builds table + index\n * together. The typed column means the index does not need the legacy\n * `::vector(N)` cast-in-index escape hatch the old shared table relied on.\n *\n * Metric support is the full pgvector set — `cosine`, `l2`, `inner_product` —\n * advertised as data on `capabilities`, mirroring `vector_cosine_ops` /\n * `vector_l2_ops` / `vector_ip_ops` and the `<=>` / `<->` / `<#>` operators.\n *\n * Mirrors the `libsqlVectorStrategy` / `sqliteVecStrategy` structure while\n * letting Postgres' planner pick the ANN index when one exists.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { formatVector } from \"../../../backend/drizzle/columns/vector\";\nimport { quotedTableName } from \"../../../backend/drizzle/operations/shared\";\nimport { type StrategyTableContribution } from \"../../../backend/table-contribution\";\nimport {\n type DeleteEmbeddingParams,\n type UpsertEmbeddingParams,\n type VectorCapabilities,\n type VectorMetric,\n type VectorSearchParams,\n} from \"../../../backend/types\";\nimport {\n assertFiniteEmbedding,\n quoteIdentifier,\n VECTOR_CONTRIBUTION_PREFIX,\n vectorMinScoreCondition,\n vectorPhysicalName,\n vectorScoreExpression,\n type VectorSlot,\n type VectorStrategy,\n} from \"../vector-strategy\";\n\n/** Physical-name prefixes for the per-field table and its ANN index. */\nconst TABLE_PREFIX = \"tg_vec\";\nconst INDEX_PREFIX = \"tg_vecidx\";\n\n/**\n * pgvector defines `hnsw.ef_search` as an integer GUC with a valid range\n * of 1..1000; `SET hnsw.ef_search = 1001` errors at the server. The\n * backend validates a per-search `efSearch` against this ceiling before\n * inlining it into `SET LOCAL`, surfacing a clear message instead of a raw\n * pgvector error.\n */\nexport const MAX_HNSW_EF_SEARCH = 1000;\n\n/**\n * Validates a per-search `efSearch` override against pgvector's\n * `hnsw.ef_search` valid range. `undefined` (no override) is accepted.\n */\nexport function assertPgvectorEfSearch(efSearch?: number): void {\n if (efSearch === undefined) return;\n if (!Number.isInteger(efSearch) || efSearch <= 0) {\n throw new Error(`efSearch must be a positive integer, got: ${efSearch}`);\n }\n if (efSearch > MAX_HNSW_EF_SEARCH) {\n throw new RangeError(\n `efSearch must be ≤ ${MAX_HNSW_EF_SEARCH} (pgvector's hnsw.ef_search ` +\n `valid range is 1..${MAX_HNSW_EF_SEARCH}), got: ${efSearch}`,\n );\n }\n}\n\n/**\n * pgvector's `vector` type caps at 16,000 dimensions for a stored column\n * (2,000 for an indexed column, but the column-type ceiling is what governs\n * storage; recall degradation beyond 2,000 is a tuning concern, not a hard\n * limit advertised here).\n */\nconst PGVECTOR_MAX_DIMENSIONS = 16_000;\n\n/** Default HNSW `m` (max connections per layer) — pgvector's own default. */\nconst DEFAULT_HNSW_M = 16;\n/** Default HNSW `ef_construction` (build candidate list) — pgvector's own default. */\nconst DEFAULT_HNSW_EF_CONSTRUCTION = 64;\n/** Default IVFFlat `lists` (inverted lists) — pgvector's own default. */\nconst DEFAULT_IVFFLAT_LISTS = 100;\n\nconst PGVECTOR_CAPABILITIES: VectorCapabilities = {\n supported: true,\n metrics: [\"cosine\", \"l2\", \"inner_product\"],\n indexTypes: [\"hnsw\", \"ivfflat\", \"none\"],\n maxDimensions: PGVECTOR_MAX_DIMENSIONS,\n};\n\n/** Whether a slot's declared index type materializes a real pgvector ANN index. */\nfunction usesAnnIndex(slot: VectorSlot): boolean {\n return slot.indexType === \"hnsw\" || slot.indexType === \"ivfflat\";\n}\n\n/**\n * pgvector operator class for a metric's ANN index — `vector_cosine_ops` /\n * `vector_l2_ops` / `vector_ip_ops`, mirroring the `<=>` / `<->` / `<#>`\n * distance operators this strategy emits.\n */\nfunction operatorClass(metric: VectorMetric): string {\n switch (metric) {\n case \"cosine\": {\n return \"vector_cosine_ops\";\n }\n case \"l2\": {\n return \"vector_l2_ops\";\n }\n case \"inner_product\": {\n return \"vector_ip_ops\";\n }\n default: {\n const _exhaustive: never = metric;\n throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);\n }\n }\n}\n\n/**\n * Formats an embedding as a `::vector` literal. The value is bound as a\n * parameter (not interpolated) — Postgres parses the `[a,b,c]` text and the\n * cast types it. Finiteness is validated first so a NaN names its index.\n */\nfunction vectorLiteral(embedding: readonly number[], name: string): SQL {\n assertFiniteEmbedding(embedding, name);\n return sql`${formatVector(embedding)}::vector`;\n}\n\nfunction distanceExpression(\n embeddingColumn: SQL,\n queryEmbedding: readonly number[],\n metric: VectorMetric,\n): SQL {\n const query = vectorLiteral(queryEmbedding, \"queryEmbedding\");\n switch (metric) {\n case \"cosine\": {\n return sql`(${embeddingColumn} <=> ${query})`;\n }\n case \"l2\": {\n return sql`(${embeddingColumn} <-> ${query})`;\n }\n case \"inner_product\": {\n return sql`(${embeddingColumn} <#> ${query})`;\n }\n default: {\n const _exhaustive: never = metric;\n throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);\n }\n }\n}\n\nexport const pgvectorStrategy: VectorStrategy = {\n name: \"pgvector\",\n capabilities: PGVECTOR_CAPABILITIES,\n\n tableName(graphId, nodeKind, fieldPath) {\n return vectorPhysicalName(TABLE_PREFIX, graphId, nodeKind, fieldPath);\n },\n\n ownedTables(slot): readonly StrategyTableContribution[] {\n const table = this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath);\n const name = quoteIdentifier(table);\n\n // No standalone graph_id index: the PRIMARY KEY (graph_id, node_id) already\n // covers `WHERE graph_id = ?` via its leading column, so a separate index\n // would be pure write amplification.\n const createDdl = [\n `CREATE TABLE IF NOT EXISTS ${name} (\n \"graph_id\" TEXT NOT NULL,\n \"node_id\" TEXT NOT NULL,\n \"embedding\" vector(${slot.dimensions}) NOT NULL,\n \"created_at\" TIMESTAMPTZ NOT NULL,\n \"updated_at\" TIMESTAMPTZ NOT NULL,\n PRIMARY KEY (\"graph_id\", \"node_id\")\n);`,\n ];\n\n // The HNSW/IVFFlat index is intentionally NOT created here. pgvector\n // similarity SQL is planner-driven (`ORDER BY embedding <=> q LIMIT k`\n // uses the index when present, sequential-scans when not), so the index\n // is a pure materialization concern: `buildCreateIndex` builds it through\n // `materializeIndexes()` with the field's declared `m`/`ef_construction`/\n // `lists`. Building it eagerly here would bake in default tuning (the\n // write-ensure slot has no `indexParams`) and `CREATE INDEX IF NOT EXISTS`\n // would then mask the tuned index materialization would emit.\n\n return [\n {\n logicalName: `${VECTOR_CONTRIBUTION_PREFIX}:${slot.nodeKind}.${slot.fieldPath}`,\n owner: \"pgvector\",\n tableName: table,\n createDdl,\n runtimeEnsure: true,\n },\n ];\n },\n\n buildUpsert(slot, params: UpsertEmbeddingParams, timestamp): readonly SQL[] {\n const table = quotedTableName(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n const value = vectorLiteral(params.embedding, \"embedding\");\n return [\n sql`\n INSERT INTO ${table} (\"graph_id\", \"node_id\", \"embedding\", \"created_at\", \"updated_at\")\n VALUES (${params.graphId}, ${params.nodeId}, ${value}, ${timestamp}, ${timestamp})\n ON CONFLICT (\"graph_id\", \"node_id\")\n DO UPDATE SET \"embedding\" = EXCLUDED.\"embedding\", \"updated_at\" = EXCLUDED.\"updated_at\"\n `,\n ];\n },\n\n buildDelete(slot, params: DeleteEmbeddingParams): readonly SQL[] {\n const table = quotedTableName(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n return [\n sql`\n DELETE FROM ${table}\n WHERE \"graph_id\" = ${params.graphId} AND \"node_id\" = ${params.nodeId}\n `,\n ];\n },\n\n buildSearch(slot, params: VectorSearchParams): SQL {\n const table = quotedTableName(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n const embeddingColumn = sql`${table}.\"embedding\"`;\n const distance = distanceExpression(\n embeddingColumn,\n params.queryEmbedding,\n params.metric,\n );\n const score = vectorScoreExpression(distance, params.metric);\n\n // Same SQL for brute-force and ANN: with a matching HNSW/IVFFlat index the\n // Postgres planner rewrites this `ORDER BY distance LIMIT k` into an index\n // scan automatically, so the strategy never branches on `slot.indexType`.\n const conditions: SQL[] = [sql`${table}.\"graph_id\" = ${params.graphId}`];\n if (params.minScore !== undefined) {\n conditions.push(\n vectorMinScoreCondition(distance, params.metric, params.minScore),\n );\n }\n return sql`\n SELECT ${table}.\"node_id\" AS node_id, ${score} AS score\n FROM ${table}\n WHERE ${sql.join(conditions, sql` AND `)}\n ORDER BY ${distance} ASC\n LIMIT ${params.limit}\n `;\n },\n\n distanceExpression(embeddingColumn, queryEmbedding, metric) {\n return distanceExpression(embeddingColumn, queryEmbedding, metric);\n },\n\n buildCreateIndex(slot, options): SQL | undefined {\n if (!usesAnnIndex(slot)) return undefined;\n return sql.raw(\n pgvectorIndexDdl(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n slot,\n options?.concurrent === true,\n ),\n );\n },\n\n buildDropIndex(slot): SQL | undefined {\n if (!usesAnnIndex(slot)) return undefined;\n const indexName = pgvectorIndexName(slot);\n return sql.raw(`DROP INDEX IF EXISTS ${quoteIdentifier(indexName)}`);\n },\n\n buildDropStorage(slot): readonly string[] {\n const table = quoteIdentifier(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n // CASCADE drops the ANN index along with the table.\n return [`DROP TABLE IF EXISTS ${table} CASCADE`];\n },\n};\n\nfunction pgvectorIndexName(slot: VectorSlot): string {\n return vectorPhysicalName(\n INDEX_PREFIX,\n slot.graphId,\n slot.nodeKind,\n slot.fieldPath,\n );\n}\n\nfunction pgvectorIndexDdl(\n table: string,\n slot: VectorSlot,\n concurrent: boolean,\n): string {\n const indexName = quoteIdentifier(pgvectorIndexName(slot));\n const quotedTable = quoteIdentifier(table);\n const opClass = operatorClass(slot.metric);\n // Honor the field's declared tuning; fall back to pgvector defaults.\n const m = slot.indexParams?.m ?? DEFAULT_HNSW_M;\n const efConstruction =\n slot.indexParams?.efConstruction ?? DEFAULT_HNSW_EF_CONSTRUCTION;\n const lists = slot.indexParams?.lists ?? DEFAULT_IVFFLAT_LISTS;\n // CONCURRENTLY builds without taking a write-blocking lock on the live table\n // (materializeIndexes passes concurrent on Postgres). Run outside a tx.\n const create = `CREATE INDEX${concurrent ? \" CONCURRENTLY\" : \"\"} IF NOT EXISTS`;\n\n switch (slot.indexType) {\n case \"hnsw\": {\n return `${create} ${indexName} ON ${quotedTable} USING hnsw (\"embedding\" ${opClass}) WITH (m = ${m}, ef_construction = ${efConstruction});`;\n }\n case \"ivfflat\": {\n return `${create} ${indexName} ON ${quotedTable} USING ivfflat (\"embedding\" ${opClass}) WITH (lists = ${lists});`;\n }\n case \"none\": {\n throw new Error(\n \"pgvectorIndexDdl called for a brute-force-only slot (indexType 'none').\",\n );\n }\n default: {\n const _exhaustive: never = slot.indexType;\n throw new Error(`Unsupported vector index type: ${String(_exhaustive)}`);\n }\n }\n}\n"]}
@@ -1,27 +1,28 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk7JGLPAFV_cjs = require('./chunk-7JGLPAFV.cjs');
4
- var chunkSGPXKJ4A_cjs = require('./chunk-SGPXKJ4A.cjs');
5
- var chunkRP7YITHX_cjs = require('./chunk-RP7YITHX.cjs');
6
- var chunk4BXHVEFB_cjs = require('./chunk-4BXHVEFB.cjs');
4
+ var chunk6RMLO5O4_cjs = require('./chunk-6RMLO5O4.cjs');
7
5
  var chunkYQGLVWB2_cjs = require('./chunk-YQGLVWB2.cjs');
8
6
  var chunkZFWNO3GE_cjs = require('./chunk-ZFWNO3GE.cjs');
7
+ var chunkKTIEB7VH_cjs = require('./chunk-KTIEB7VH.cjs');
8
+ var chunkRP7YITHX_cjs = require('./chunk-RP7YITHX.cjs');
9
+ var chunk73KASJGO_cjs = require('./chunk-73KASJGO.cjs');
9
10
  var chunkJIEJCTDS_cjs = require('./chunk-JIEJCTDS.cjs');
10
11
  var zod = require('zod');
11
12
 
12
13
  // src/core/node.ts
13
14
  function validateSchemaKeys(schema, name) {
14
- chunkSGPXKJ4A_cjs.assertSchemaKeysAreFree(
15
+ chunkKTIEB7VH_cjs.assertSchemaKeysAreFree(
15
16
  "Node",
16
17
  name,
17
18
  Object.keys(schema.shape),
18
- chunkSGPXKJ4A_cjs.RESERVED_NODE_KEYS
19
+ chunkKTIEB7VH_cjs.RESERVED_NODE_KEYS
19
20
  );
20
21
  }
21
22
  function defineNode(name, options) {
22
23
  validateSchemaKeys(options.schema, name);
23
24
  if (options.annotations !== void 0) {
24
- chunkSGPXKJ4A_cjs.assertJsonValue(options.annotations, "annotations", `Node "${name}"`);
25
+ chunkKTIEB7VH_cjs.assertJsonValue(options.annotations, "annotations", `Node "${name}"`);
25
26
  }
26
27
  return Object.freeze({
27
28
  [chunk7JGLPAFV_cjs.NODE_TYPE_BRAND]: true,
@@ -33,18 +34,18 @@ function defineNode(name, options) {
33
34
  }
34
35
  var EMPTY_SCHEMA = zod.z.object({});
35
36
  function validateSchemaKeys2(schema, name) {
36
- chunkSGPXKJ4A_cjs.assertSchemaKeysAreFree(
37
+ chunkKTIEB7VH_cjs.assertSchemaKeysAreFree(
37
38
  "Edge",
38
39
  name,
39
40
  Object.keys(schema.shape),
40
- chunkSGPXKJ4A_cjs.RESERVED_EDGE_KEYS
41
+ chunkKTIEB7VH_cjs.RESERVED_EDGE_KEYS
41
42
  );
42
43
  }
43
44
  function defineEdge(name, options) {
44
45
  const schema = options?.schema ?? EMPTY_SCHEMA;
45
46
  validateSchemaKeys2(schema, name);
46
47
  if (options?.annotations !== void 0) {
47
- chunkSGPXKJ4A_cjs.assertJsonValue(options.annotations, "annotations", `Edge "${name}"`);
48
+ chunkKTIEB7VH_cjs.assertJsonValue(options.annotations, "annotations", `Edge "${name}"`);
48
49
  }
49
50
  return Object.freeze({
50
51
  [chunk7JGLPAFV_cjs.EDGE_TYPE_BRAND]: true,
@@ -84,7 +85,7 @@ function createMetaEdge(name, properties) {
84
85
  }
85
86
  });
86
87
  }
87
- var subClassOfMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_SUB_CLASS_OF, {
88
+ var subClassOfMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_SUB_CLASS_OF, {
88
89
  transitive: true,
89
90
  inference: "subsumption",
90
91
  description: "Type inheritance (Podcast subClassOf Media)"
@@ -96,9 +97,9 @@ function subClassOf(child, parent) {
96
97
  to: parent
97
98
  };
98
99
  }
99
- var broaderMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_BROADER, {
100
+ var broaderMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_BROADER, {
100
101
  transitive: true,
101
- inverse: chunkSGPXKJ4A_cjs.META_EDGE_NARROWER,
102
+ inverse: chunkKTIEB7VH_cjs.META_EDGE_NARROWER,
102
103
  inference: "hierarchy",
103
104
  description: "Broader concept (ML broader AI)"
104
105
  });
@@ -109,9 +110,9 @@ function broader(narrowerConcept, broaderConcept) {
109
110
  to: broaderConcept
110
111
  };
111
112
  }
112
- var narrowerMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_NARROWER, {
113
+ var narrowerMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_NARROWER, {
113
114
  transitive: true,
114
- inverse: chunkSGPXKJ4A_cjs.META_EDGE_BROADER,
115
+ inverse: chunkKTIEB7VH_cjs.META_EDGE_BROADER,
115
116
  inference: "hierarchy",
116
117
  description: "Narrower concept (AI narrower ML)"
117
118
  });
@@ -122,7 +123,7 @@ function narrower(broaderConcept, narrowerConcept) {
122
123
  to: narrowerConcept
123
124
  };
124
125
  }
125
- var relatedToMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_RELATED_TO, {
126
+ var relatedToMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_RELATED_TO, {
126
127
  symmetric: true,
127
128
  inference: "association",
128
129
  description: "Non-hierarchical association"
@@ -134,7 +135,7 @@ function relatedTo(conceptA, conceptB) {
134
135
  to: conceptB
135
136
  };
136
137
  }
137
- var equivalentToMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_EQUIVALENT_TO, {
138
+ var equivalentToMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_EQUIVALENT_TO, {
138
139
  symmetric: true,
139
140
  transitive: true,
140
141
  inference: "substitution",
@@ -147,7 +148,7 @@ function equivalentTo(kindA, kindBOrIri) {
147
148
  to: kindBOrIri
148
149
  };
149
150
  }
150
- var sameAsMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_SAME_AS, {
151
+ var sameAsMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_SAME_AS, {
151
152
  symmetric: true,
152
153
  transitive: true,
153
154
  inference: "substitution",
@@ -160,7 +161,7 @@ function sameAs(kindA, kindBOrIri) {
160
161
  to: kindBOrIri
161
162
  };
162
163
  }
163
- var differentFromMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_DIFFERENT_FROM, {
164
+ var differentFromMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_DIFFERENT_FROM, {
164
165
  symmetric: true,
165
166
  inference: "constraint",
166
167
  description: "Explicitly different individuals"
@@ -172,7 +173,7 @@ function differentFrom(kindA, kindB) {
172
173
  to: kindB
173
174
  };
174
175
  }
175
- var disjointWithMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_DISJOINT_WITH, {
176
+ var disjointWithMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_DISJOINT_WITH, {
176
177
  symmetric: true,
177
178
  inference: "constraint",
178
179
  description: "Mutually exclusive types"
@@ -184,9 +185,9 @@ function disjointWith(kindA, kindB) {
184
185
  to: kindB
185
186
  };
186
187
  }
187
- var partOfMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_PART_OF, {
188
+ var partOfMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_PART_OF, {
188
189
  transitive: true,
189
- inverse: chunkSGPXKJ4A_cjs.META_EDGE_HAS_PART,
190
+ inverse: chunkKTIEB7VH_cjs.META_EDGE_HAS_PART,
190
191
  inference: "composition",
191
192
  description: "X is part of Y"
192
193
  });
@@ -197,9 +198,9 @@ function partOf(part, whole) {
197
198
  to: whole
198
199
  };
199
200
  }
200
- var hasPartMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_HAS_PART, {
201
+ var hasPartMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_HAS_PART, {
201
202
  transitive: true,
202
- inverse: chunkSGPXKJ4A_cjs.META_EDGE_PART_OF,
203
+ inverse: chunkKTIEB7VH_cjs.META_EDGE_PART_OF,
203
204
  inference: "composition",
204
205
  description: "Y has part X"
205
206
  });
@@ -210,12 +211,12 @@ function hasPart(whole, part) {
210
211
  to: part
211
212
  };
212
213
  }
213
- var inverseOfMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_INVERSE_OF, {
214
+ var inverseOfMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_INVERSE_OF, {
214
215
  symmetric: true,
215
216
  inference: "none",
216
217
  description: "Edge A is inverse of edge B"
217
218
  });
218
- var impliesMetaEdge = createMetaEdge(chunkSGPXKJ4A_cjs.META_EDGE_IMPLIES, {
219
+ var impliesMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_IMPLIES, {
219
220
  transitive: true,
220
221
  inference: "none",
221
222
  description: "Edge A implies edge B exists"
@@ -804,7 +805,7 @@ var KindRegistry = class {
804
805
  * Checks if child is a subclass of parent (directly or transitively).
805
806
  */
806
807
  isSubClassOf(child, parent) {
807
- return chunkSGPXKJ4A_cjs.isReachable(this.subClassAncestors, child, parent);
808
+ return chunkKTIEB7VH_cjs.isReachable(this.subClassAncestors, child, parent);
808
809
  }
809
810
  /**
810
811
  * Expands a kind to include all its subclasses.
@@ -831,13 +832,13 @@ var KindRegistry = class {
831
832
  * Checks if narrowerConcept is narrower than broaderConcept.
832
833
  */
833
834
  isNarrowerThan(narrowerConcept, broaderConcept) {
834
- return chunkSGPXKJ4A_cjs.isReachable(this.broaderClosure, narrowerConcept, broaderConcept);
835
+ return chunkKTIEB7VH_cjs.isReachable(this.broaderClosure, narrowerConcept, broaderConcept);
835
836
  }
836
837
  /**
837
838
  * Checks if broaderConcept is broader than narrowerConcept.
838
839
  */
839
840
  isBroaderThan(broaderConcept, narrowerConcept) {
840
- return chunkSGPXKJ4A_cjs.isReachable(this.narrowerClosure, broaderConcept, narrowerConcept);
841
+ return chunkKTIEB7VH_cjs.isReachable(this.narrowerClosure, broaderConcept, narrowerConcept);
841
842
  }
842
843
  /**
843
844
  * Expands to include all narrower concepts.
@@ -901,7 +902,7 @@ var KindRegistry = class {
901
902
  * Checks if part is part of whole (directly or transitively).
902
903
  */
903
904
  isPartOf(part, whole) {
904
- return chunkSGPXKJ4A_cjs.isReachable(this.partOfClosure, part, whole);
905
+ return chunkKTIEB7VH_cjs.isReachable(this.partOfClosure, part, whole);
905
906
  }
906
907
  /**
907
908
  * Gets all wholes that contain this part.
@@ -1012,57 +1013,57 @@ function computeClosuresFromOntology(ontology) {
1012
1013
  const fromName = getKindName(relation.from);
1013
1014
  const toName = getKindName(relation.to);
1014
1015
  switch (relation.metaEdge.name) {
1015
- case chunkSGPXKJ4A_cjs.META_EDGE_SUB_CLASS_OF: {
1016
+ case chunkKTIEB7VH_cjs.META_EDGE_SUB_CLASS_OF: {
1016
1017
  subClassRelations.push([fromName, toName]);
1017
1018
  break;
1018
1019
  }
1019
- case chunkSGPXKJ4A_cjs.META_EDGE_BROADER: {
1020
+ case chunkKTIEB7VH_cjs.META_EDGE_BROADER: {
1020
1021
  broaderRelations.push([fromName, toName]);
1021
1022
  break;
1022
1023
  }
1023
- case chunkSGPXKJ4A_cjs.META_EDGE_NARROWER: {
1024
+ case chunkKTIEB7VH_cjs.META_EDGE_NARROWER: {
1024
1025
  broaderRelations.push([toName, fromName]);
1025
1026
  break;
1026
1027
  }
1027
- case chunkSGPXKJ4A_cjs.META_EDGE_EQUIVALENT_TO:
1028
- case chunkSGPXKJ4A_cjs.META_EDGE_SAME_AS: {
1028
+ case chunkKTIEB7VH_cjs.META_EDGE_EQUIVALENT_TO:
1029
+ case chunkKTIEB7VH_cjs.META_EDGE_SAME_AS: {
1029
1030
  equivalentRelations.push([fromName, toName]);
1030
1031
  break;
1031
1032
  }
1032
- case chunkSGPXKJ4A_cjs.META_EDGE_DISJOINT_WITH: {
1033
+ case chunkKTIEB7VH_cjs.META_EDGE_DISJOINT_WITH: {
1033
1034
  disjointRelations.push([fromName, toName]);
1034
1035
  break;
1035
1036
  }
1036
- case chunkSGPXKJ4A_cjs.META_EDGE_PART_OF: {
1037
+ case chunkKTIEB7VH_cjs.META_EDGE_PART_OF: {
1037
1038
  partOfRelations.push([fromName, toName]);
1038
1039
  break;
1039
1040
  }
1040
- case chunkSGPXKJ4A_cjs.META_EDGE_HAS_PART: {
1041
+ case chunkKTIEB7VH_cjs.META_EDGE_HAS_PART: {
1041
1042
  partOfRelations.push([toName, fromName]);
1042
1043
  break;
1043
1044
  }
1044
- case chunkSGPXKJ4A_cjs.META_EDGE_INVERSE_OF: {
1045
+ case chunkKTIEB7VH_cjs.META_EDGE_INVERSE_OF: {
1045
1046
  inverseOfRelations.push([fromName, toName]);
1046
1047
  break;
1047
1048
  }
1048
- case chunkSGPXKJ4A_cjs.META_EDGE_IMPLIES: {
1049
+ case chunkKTIEB7VH_cjs.META_EDGE_IMPLIES: {
1049
1050
  impliesRelations.push([fromName, toName]);
1050
1051
  break;
1051
1052
  }
1052
1053
  }
1053
1054
  }
1054
- const subClassAncestors = chunkSGPXKJ4A_cjs.computeTransitiveClosure(subClassRelations);
1055
- const subClassDescendants = chunkSGPXKJ4A_cjs.invertClosure(subClassAncestors);
1056
- const broaderClosure = chunkSGPXKJ4A_cjs.computeTransitiveClosure(broaderRelations);
1057
- const narrowerClosure = chunkSGPXKJ4A_cjs.invertClosure(broaderClosure);
1055
+ const subClassAncestors = chunkKTIEB7VH_cjs.computeTransitiveClosure(subClassRelations);
1056
+ const subClassDescendants = chunkKTIEB7VH_cjs.invertClosure(subClassAncestors);
1057
+ const broaderClosure = chunkKTIEB7VH_cjs.computeTransitiveClosure(broaderRelations);
1058
+ const narrowerClosure = chunkKTIEB7VH_cjs.invertClosure(broaderClosure);
1058
1059
  const equivalenceSets = computeEquivalenceSets(equivalentRelations);
1059
1060
  const iriToKind = computeIriMapping(equivalentRelations);
1060
1061
  const disjointPairs = computeDisjointPairs(disjointRelations);
1061
- const partOfClosure = chunkSGPXKJ4A_cjs.computeTransitiveClosure(partOfRelations);
1062
- const hasPartClosure = chunkSGPXKJ4A_cjs.invertClosure(partOfClosure);
1062
+ const partOfClosure = chunkKTIEB7VH_cjs.computeTransitiveClosure(partOfRelations);
1063
+ const hasPartClosure = chunkKTIEB7VH_cjs.invertClosure(partOfClosure);
1063
1064
  const edgeInverses = computeEdgeInverses(inverseOfRelations);
1064
- const edgeImplicationsClosure = chunkSGPXKJ4A_cjs.computeTransitiveClosure(impliesRelations);
1065
- const edgeImplyingClosure = chunkSGPXKJ4A_cjs.invertClosure(edgeImplicationsClosure);
1065
+ const edgeImplicationsClosure = chunkKTIEB7VH_cjs.computeTransitiveClosure(impliesRelations);
1066
+ const edgeImplyingClosure = chunkKTIEB7VH_cjs.invertClosure(edgeImplicationsClosure);
1066
1067
  return {
1067
1068
  subClassAncestors,
1068
1069
  subClassDescendants,
@@ -1197,7 +1198,7 @@ function serializeDeprecatedKinds(set) {
1197
1198
  function canonicalExtension(document) {
1198
1199
  if (document === void 0) return void 0;
1199
1200
  if (document.version === void 0) return document;
1200
- if (document.version !== chunkSGPXKJ4A_cjs.LEGACY_GRAPH_EXTENSION_VERSION) return document;
1201
+ if (document.version !== chunkKTIEB7VH_cjs.LEGACY_GRAPH_EXTENSION_VERSION) return document;
1201
1202
  const { version: _omit, ...rest } = document;
1202
1203
  return rest;
1203
1204
  }
@@ -1488,7 +1489,7 @@ async function computeSchemaHash(schema) {
1488
1489
  ...schema.deprecatedKinds === void 0 ? {} : { deprecatedKinds: schema.deprecatedKinds }
1489
1490
  };
1490
1491
  const json = JSON.stringify(hashable, chunkRP7YITHX_cjs.sortedReplacer);
1491
- return chunk4BXHVEFB_cjs.sha256Hex(json);
1492
+ return chunk73KASJGO_cjs.sha256Hex(json);
1492
1493
  }
1493
1494
  var COMPILE_NODE_CACHE = /* @__PURE__ */ new Map();
1494
1495
  var COMPILE_EDGE_SCHEMA_CACHE = /* @__PURE__ */ new WeakMap();
@@ -1536,7 +1537,7 @@ function compileNode(kindName, document) {
1536
1537
  const schema = buildObjectSchema(document.properties);
1537
1538
  const type = defineNode(
1538
1539
  kindName,
1539
- chunkSGPXKJ4A_cjs.compactUndefined({
1540
+ chunkKTIEB7VH_cjs.compactUndefined({
1540
1541
  schema,
1541
1542
  description: document.description,
1542
1543
  annotations: document.annotations
@@ -1560,7 +1561,7 @@ function compileEdge(kindName, document, nodeTypeByName) {
1560
1561
  (name) => nodeTypeByName.get(name) ?? name
1561
1562
  );
1562
1563
  return Object.freeze(
1563
- chunkSGPXKJ4A_cjs.compactUndefined({
1564
+ chunkKTIEB7VH_cjs.compactUndefined({
1564
1565
  kindName,
1565
1566
  schema,
1566
1567
  description: document.description,
@@ -1694,7 +1695,7 @@ function makeWherePredicate(field, op) {
1694
1695
  };
1695
1696
  }
1696
1697
  var META_EDGE_BY_NAME = Object.fromEntries(
1697
- chunkSGPXKJ4A_cjs.ALL_META_EDGE_NAMES.map((name) => [name, core[`${name}MetaEdge`]])
1698
+ chunkKTIEB7VH_cjs.ALL_META_EDGE_NAMES.map((name) => [name, core[`${name}MetaEdge`]])
1698
1699
  );
1699
1700
  function compileOntologyRelation(relation, nodeTypeByName) {
1700
1701
  const metaEdge = META_EDGE_BY_NAME[relation.metaEdge];
@@ -1733,7 +1734,7 @@ function mergeGraphExtension(graph, document) {
1733
1734
  if (graph.extension !== void 0 && chunkRP7YITHX_cjs.canonicalEqual(unionDocument, existingDocument)) {
1734
1735
  return graph;
1735
1736
  }
1736
- const validatedUnion = chunkSGPXKJ4A_cjs.unwrap(chunkSGPXKJ4A_cjs.validateGraphExtension(unionDocument));
1737
+ const validatedUnion = chunkKTIEB7VH_cjs.unwrap(chunkKTIEB7VH_cjs.validateGraphExtension(unionDocument));
1737
1738
  const compiled = compileGraphExtension(validatedUnion);
1738
1739
  const { nodes: runtimeNodeNames, edges: runtimeEdgeNames } = extensionKindNames(existingDocument);
1739
1740
  const nodeKinds = /* @__PURE__ */ new Map();
@@ -1785,7 +1786,7 @@ function mergeGraphExtension(graph, document) {
1785
1786
  });
1786
1787
  const type = defineEdge(
1787
1788
  edge.kindName,
1788
- chunkSGPXKJ4A_cjs.compactUndefined({
1789
+ chunkKTIEB7VH_cjs.compactUndefined({
1789
1790
  schema: edge.schema,
1790
1791
  description: edge.description,
1791
1792
  annotations: edge.annotations,
@@ -1886,7 +1887,7 @@ function compileGraphExtensionRelationalIndexes(documents, nodeKinds, mergedEdge
1886
1887
  suggestion: "Declare the kind under `nodes` in this graph extension, or remove the index from `indexes`."
1887
1888
  });
1888
1889
  }
1889
- const declaration2 = chunk4BXHVEFB_cjs.defineNodeIndex(
1890
+ const declaration2 = chunk6RMLO5O4_cjs.defineNodeIndex(
1890
1891
  node,
1891
1892
  toNodeIndexConfig(document)
1892
1893
  );
@@ -1900,7 +1901,7 @@ function compileGraphExtensionRelationalIndexes(documents, nodeKinds, mergedEdge
1900
1901
  suggestion: "Declare the edge under `edges` in this graph extension, or remove the index from `indexes`."
1901
1902
  });
1902
1903
  }
1903
- const declaration = chunk4BXHVEFB_cjs.defineEdgeIndex(
1904
+ const declaration = chunk6RMLO5O4_cjs.defineEdgeIndex(
1904
1905
  edgeRegistration.type,
1905
1906
  toEdgeIndexConfig(document)
1906
1907
  );
@@ -1921,7 +1922,7 @@ function buildWhereCallback(where) {
1921
1922
  };
1922
1923
  }
1923
1924
  function toNodeIndexConfig(document) {
1924
- return chunkSGPXKJ4A_cjs.compactUndefined({
1925
+ return chunkKTIEB7VH_cjs.compactUndefined({
1925
1926
  fields: document.fields,
1926
1927
  coveringFields: document.coveringFields,
1927
1928
  unique: document.unique,
@@ -1931,7 +1932,7 @@ function toNodeIndexConfig(document) {
1931
1932
  });
1932
1933
  }
1933
1934
  function toEdgeIndexConfig(document) {
1934
- return chunkSGPXKJ4A_cjs.compactUndefined({
1935
+ return chunkKTIEB7VH_cjs.compactUndefined({
1935
1936
  fields: document.fields,
1936
1937
  coveringFields: document.coveringFields,
1937
1938
  unique: document.unique,
@@ -1987,14 +1988,14 @@ function isEmptyExtension(extension) {
1987
1988
  }
1988
1989
  function assertNoCollision(kindName, entity, collides, graphId) {
1989
1990
  if (!collides) return;
1990
- throw new chunkSGPXKJ4A_cjs.KindCollisionError(kindName, entity, graphId);
1991
+ throw new chunkKTIEB7VH_cjs.KindCollisionError(kindName, entity, graphId);
1991
1992
  }
1992
1993
  function resolveEndpoints(entries, nodeKinds, context) {
1993
1994
  return entries.map((entry) => {
1994
1995
  if (typeof entry !== "string") return entry;
1995
1996
  const resolved = nodeKinds.get(entry);
1996
1997
  if (resolved === void 0) {
1997
- throw new chunkSGPXKJ4A_cjs.GraphExtensionUnresolvedEndpointError(
1998
+ throw new chunkKTIEB7VH_cjs.GraphExtensionUnresolvedEndpointError(
1998
1999
  context.edgeKind,
1999
2000
  context.side,
2000
2001
  entry,
@@ -2352,7 +2353,7 @@ function parseSerializedSchema(json) {
2352
2353
  { operation: "select", entity: "schema" }
2353
2354
  );
2354
2355
  }
2355
- const validated = chunkSGPXKJ4A_cjs.freezeDeep(result.data);
2356
+ const validated = chunkKTIEB7VH_cjs.freezeDeep(result.data);
2356
2357
  if (PARSE_CACHE.size >= PARSE_CACHE_LIMIT) {
2357
2358
  const oldest = PARSE_CACHE.keys().next().value;
2358
2359
  if (oldest !== void 0) PARSE_CACHE.delete(oldest);
@@ -2717,5 +2718,5 @@ exports.validateEdgeProps = validateEdgeProps;
2717
2718
  exports.validateNodeProps = validateNodeProps;
2718
2719
  exports.validateProps = validateProps;
2719
2720
  exports.wrapZodError = wrapZodError;
2720
- //# sourceMappingURL=chunk-K4N35E7B.cjs.map
2721
- //# sourceMappingURL=chunk-K4N35E7B.cjs.map
2721
+ //# sourceMappingURL=chunk-5DTPBFX5.cjs.map
2722
+ //# sourceMappingURL=chunk-5DTPBFX5.cjs.map