@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.
- package/README.md +39 -0
- package/dist/backend/postgres/index.cjs +19 -18
- package/dist/backend/postgres/index.d.cts +6 -6
- package/dist/backend/postgres/index.d.ts +6 -6
- package/dist/backend/postgres/index.js +9 -8
- package/dist/backend/postgres/pglite.cjs +13 -12
- package/dist/backend/postgres/pglite.cjs.map +1 -1
- package/dist/backend/postgres/pglite.d.cts +3 -3
- package/dist/backend/postgres/pglite.d.ts +3 -3
- package/dist/backend/postgres/pglite.js +9 -8
- package/dist/backend/postgres/pglite.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +16 -16
- package/dist/backend/sqlite/index.d.cts +7 -7
- package/dist/backend/sqlite/index.d.ts +7 -7
- package/dist/backend/sqlite/index.js +7 -7
- package/dist/backend/sqlite/libsql.cjs +12 -12
- package/dist/backend/sqlite/libsql.d.cts +3 -3
- package/dist/backend/sqlite/libsql.d.ts +3 -3
- package/dist/backend/sqlite/libsql.js +8 -8
- package/dist/backend/sqlite/local.cjs +13 -13
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +8 -8
- package/dist/{chunk-AI3RNREM.js → chunk-2HZGWCB4.js} +94 -496
- package/dist/chunk-2HZGWCB4.js.map +1 -0
- package/dist/chunk-2YMGNYXY.js +40 -0
- package/dist/chunk-2YMGNYXY.js.map +1 -0
- package/dist/chunk-2ZY4K43M.js +90 -0
- package/dist/chunk-2ZY4K43M.js.map +1 -0
- package/dist/chunk-3EUKJEQ3.js +77 -0
- package/dist/chunk-3EUKJEQ3.js.map +1 -0
- package/dist/chunk-3JBJEYWE.cjs +604 -0
- package/dist/chunk-3JBJEYWE.cjs.map +1 -0
- package/dist/{chunk-IUIJJYPI.js → chunk-4A4GUZTQ.js} +6 -5
- package/dist/chunk-4A4GUZTQ.js.map +1 -0
- package/dist/{chunk-WEMZM7J7.cjs → chunk-54JVNOAQ.cjs} +5 -41
- package/dist/chunk-54JVNOAQ.cjs.map +1 -0
- package/dist/{chunk-IE6GN7L3.cjs → chunk-5CN7B4CZ.cjs} +17 -98
- package/dist/chunk-5CN7B4CZ.cjs.map +1 -0
- package/dist/{chunk-K4N35E7B.cjs → chunk-5DTPBFX5.cjs} +64 -63
- package/dist/chunk-5DTPBFX5.cjs.map +1 -0
- package/dist/chunk-6G35I3VW.cjs +40 -0
- package/dist/chunk-6G35I3VW.cjs.map +1 -0
- package/dist/{chunk-4BXHVEFB.cjs → chunk-6RMLO5O4.cjs} +6 -51
- package/dist/chunk-6RMLO5O4.cjs.map +1 -0
- package/dist/chunk-6SA7UIQJ.cjs +94 -0
- package/dist/chunk-6SA7UIQJ.cjs.map +1 -0
- package/dist/chunk-6ZR4QC3O.cjs +12 -0
- package/dist/{chunk-LUHU4T2F.cjs.map → chunk-6ZR4QC3O.cjs.map} +1 -1
- package/dist/chunk-73KASJGO.cjs +52 -0
- package/dist/chunk-73KASJGO.cjs.map +1 -0
- package/dist/chunk-A3W7QG7K.js +45 -0
- package/dist/chunk-A3W7QG7K.js.map +1 -0
- package/dist/{chunk-FWBVPATK.cjs → chunk-ASYQDPPU.cjs} +19 -19
- package/dist/{chunk-FWBVPATK.cjs.map → chunk-ASYQDPPU.cjs.map} +1 -1
- package/dist/{chunk-FVIGJTS7.js → chunk-ATTXBMAX.js} +4 -74
- package/dist/chunk-ATTXBMAX.js.map +1 -0
- package/dist/chunk-AW4A3P5A.cjs +51 -0
- package/dist/chunk-AW4A3P5A.cjs.map +1 -0
- package/dist/{chunk-WFCECD6Q.cjs → chunk-CIINW6PS.cjs} +73 -68
- package/dist/chunk-CIINW6PS.cjs.map +1 -0
- package/dist/{chunk-26HWIIVS.cjs → chunk-FLOI7QOT.cjs} +63 -62
- package/dist/chunk-FLOI7QOT.cjs.map +1 -0
- package/dist/{chunk-633N7DSE.js → chunk-GKFWM3DS.js} +4 -36
- package/dist/chunk-GKFWM3DS.js.map +1 -0
- package/dist/chunk-HTGDWIDE.cjs +89 -0
- package/dist/chunk-HTGDWIDE.cjs.map +1 -0
- package/dist/{chunk-R4JOBEJU.js → chunk-IJORSAC3.js} +4 -40
- package/dist/chunk-IJORSAC3.js.map +1 -0
- package/dist/{chunk-SGPXKJ4A.cjs → chunk-KTIEB7VH.cjs} +26 -16
- package/dist/chunk-KTIEB7VH.cjs.map +1 -0
- package/dist/chunk-LJLMDDCW.js +282 -0
- package/dist/chunk-LJLMDDCW.js.map +1 -0
- package/dist/{chunk-VFX3LC76.cjs → chunk-N2MBPTAF.cjs} +14 -14
- package/dist/{chunk-VFX3LC76.cjs.map → chunk-N2MBPTAF.cjs.map} +1 -1
- package/dist/{chunk-3IRMLJEK.js → chunk-O4VUR6SI.js} +3 -3
- package/dist/{chunk-3IRMLJEK.js.map → chunk-O4VUR6SI.js.map} +1 -1
- package/dist/chunk-RZ4DH4E7.cjs +15832 -0
- package/dist/chunk-RZ4DH4E7.cjs.map +1 -0
- package/dist/chunk-SAJSMR2B.js +35 -0
- package/dist/chunk-SAJSMR2B.js.map +1 -0
- package/dist/{chunk-4LBO6KIF.cjs → chunk-SFFJ2IKN.cjs} +60 -59
- package/dist/chunk-SFFJ2IKN.cjs.map +1 -0
- package/dist/{chunk-K5VREXMZ.js → chunk-STP7QVUB.js} +7 -6
- package/dist/chunk-STP7QVUB.js.map +1 -0
- package/dist/chunk-THX25XW6.js +590 -0
- package/dist/chunk-THX25XW6.js.map +1 -0
- package/dist/chunk-UIFEEPME.js +15787 -0
- package/dist/chunk-UIFEEPME.js.map +1 -0
- package/dist/{chunk-2QA5EHEN.js → chunk-UJ4V3YUQ.js} +3 -3
- package/dist/{chunk-2QA5EHEN.js.map → chunk-UJ4V3YUQ.js.map} +1 -1
- package/dist/{chunk-UESTHN47.cjs → chunk-V4IQYOQ4.cjs} +95 -507
- package/dist/chunk-V4IQYOQ4.cjs.map +1 -0
- package/dist/chunk-VMEWZU2N.cjs +287 -0
- package/dist/chunk-VMEWZU2N.cjs.map +1 -0
- package/dist/{chunk-N2OEOGBB.js → chunk-VZX2KSY3.js} +13 -8
- package/dist/chunk-VZX2KSY3.js.map +1 -0
- package/dist/{chunk-IX7RE7CG.js → chunk-WYTUF3QO.js} +3 -3
- package/dist/{chunk-IX7RE7CG.js.map → chunk-WYTUF3QO.js.map} +1 -1
- package/dist/{chunk-3JLRHQ67.js → chunk-XKJQQQVR.js} +6 -5
- package/dist/chunk-XKJQQQVR.js.map +1 -0
- package/dist/{chunk-ENDUY2CD.js → chunk-YCV72E6L.js} +23 -17
- package/dist/chunk-YCV72E6L.js.map +1 -0
- package/dist/{ddl-EdkIiFVU.d.ts → ddl-BJcPrB4L.d.ts} +3 -3
- package/dist/{ddl-BSFlbGQF.d.cts → ddl-CPZ7mB7X.d.cts} +3 -3
- package/dist/{extension-types-CwHV-Uk4.d.cts → extension-types-D1k0inWU.d.cts} +1 -1
- package/dist/{extension-types-CwHV-Uk4.d.ts → extension-types-D1k0inWU.d.ts} +1 -1
- package/dist/graph-extension/index.cjs +17 -17
- package/dist/graph-extension/index.d.cts +5 -16
- package/dist/graph-extension/index.d.ts +5 -16
- package/dist/graph-extension/index.js +2 -2
- package/dist/graph-merge/index.cjs +3822 -0
- package/dist/graph-merge/index.cjs.map +1 -0
- package/dist/graph-merge/index.d.cts +1191 -0
- package/dist/graph-merge/index.d.ts +1191 -0
- package/dist/graph-merge/index.js +3791 -0
- package/dist/graph-merge/index.js.map +1 -0
- package/dist/{index-DzeIiMO3.d.ts → index-BEK0VtNB.d.ts} +2 -2
- package/dist/{index-Ln_KHTGA.d.cts → index-C8sSTErx.d.cts} +2 -2
- package/dist/index.cjs +281 -15913
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -11
- package/dist/index.d.ts +12 -11
- package/dist/index.js +23 -15790
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +30 -26
- package/dist/indexes/index.d.cts +5 -5
- package/dist/indexes/index.d.ts +5 -5
- package/dist/indexes/index.js +6 -2
- package/dist/interchange/index.cjs +49 -592
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +5 -5
- package/dist/interchange/index.d.ts +5 -5
- package/dist/interchange/index.js +2 -588
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-BbdyNhkv.d.ts → manager-By-WEd8M.d.ts} +3 -3
- package/dist/{manager-wTDgjoXG.d.cts → manager-Np7VVSlE.d.cts} +3 -3
- package/dist/{materialize-indexes-lkawaDor.d.ts → materialize-indexes-CAGhqPHQ.d.ts} +1 -1
- package/dist/{materialize-indexes-oanE3RU0.d.cts → materialize-indexes-DEYkU-wr.d.cts} +1 -1
- package/dist/{postgres-CK2ByP1q.d.cts → postgres-4J2tmauh.d.cts} +1 -1
- package/dist/{postgres-ymXYC6Rr.d.ts → postgres-BdIb7tS_.d.ts} +1 -1
- package/dist/profiler/index.d.cts +7 -7
- package/dist/profiler/index.d.ts +7 -7
- package/dist/result-DWo6mUVz.d.cts +37 -0
- package/dist/result-DWo6mUVz.d.ts +37 -0
- package/dist/schema/index.cjs +29 -28
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +7 -7
- package/dist/schema/index.d.ts +7 -7
- package/dist/schema/index.js +6 -5
- package/dist/schema/index.js.map +1 -1
- package/dist/{sqlite-DxH1lrwD.d.cts → sqlite-Gatk_iw_.d.cts} +1 -1
- package/dist/{sqlite-R8YGOqVQ.d.ts → sqlite-aM_PAz-O.d.ts} +1 -1
- package/dist/{store--z1Tmk7U.d.cts → store-DuCbdqsh.d.cts} +49 -49
- package/dist/{store-CNKM334w.d.ts → store-MloRPwb9.d.ts} +49 -49
- package/dist/{types-BBiDqJCU.d.ts → types-BKQljXom.d.ts} +16 -2
- package/dist/{types-dL-clxO3.d.cts → types-C1CYxWrL.d.cts} +16 -2
- package/dist/{types-D5B6Be5c.d.cts → types-DoByHGyU.d.cts} +2 -2
- package/dist/{types-CMvxx2kd.d.ts → types-K3vpaJAL.d.ts} +2 -2
- package/dist/{where-CAo6wsBZ.d.ts → where-Dt49bvo6.d.ts} +2 -2
- package/dist/{where-bJjuOCeV.d.cts → where-DydZjGOb.d.cts} +2 -2
- package/package.json +6 -1
- package/dist/chunk-26HWIIVS.cjs.map +0 -1
- package/dist/chunk-3JLRHQ67.js.map +0 -1
- package/dist/chunk-4BXHVEFB.cjs.map +0 -1
- package/dist/chunk-4LBO6KIF.cjs.map +0 -1
- package/dist/chunk-633N7DSE.js.map +0 -1
- package/dist/chunk-AI3RNREM.js.map +0 -1
- package/dist/chunk-ENDUY2CD.js.map +0 -1
- package/dist/chunk-FVIGJTS7.js.map +0 -1
- package/dist/chunk-IE6GN7L3.cjs.map +0 -1
- package/dist/chunk-IUIJJYPI.js.map +0 -1
- package/dist/chunk-K4N35E7B.cjs.map +0 -1
- package/dist/chunk-K5VREXMZ.js.map +0 -1
- package/dist/chunk-LUHU4T2F.cjs +0 -12
- package/dist/chunk-N2OEOGBB.js.map +0 -1
- package/dist/chunk-R4JOBEJU.js.map +0 -1
- package/dist/chunk-SGPXKJ4A.cjs.map +0 -1
- package/dist/chunk-UESTHN47.cjs.map +0 -1
- package/dist/chunk-WEMZM7J7.cjs.map +0 -1
- package/dist/chunk-WFCECD6Q.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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: `${
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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 ${
|
|
191
|
+
return drizzleOrm.sql.raw(`DROP INDEX IF EXISTS ${chunkV4IQYOQ4_cjs.quoteIdentifier(indexName)}`);
|
|
192
192
|
},
|
|
193
193
|
buildDropStorage(slot) {
|
|
194
|
-
const table =
|
|
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
|
|
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 =
|
|
210
|
-
const quotedTable =
|
|
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
|
-
|
|
317
|
-
|
|
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
|
|
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
|
-
|
|
15
|
+
chunkKTIEB7VH_cjs.assertSchemaKeysAreFree(
|
|
15
16
|
"Node",
|
|
16
17
|
name,
|
|
17
18
|
Object.keys(schema.shape),
|
|
18
|
-
|
|
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
|
-
|
|
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
|
-
|
|
37
|
+
chunkKTIEB7VH_cjs.assertSchemaKeysAreFree(
|
|
37
38
|
"Edge",
|
|
38
39
|
name,
|
|
39
40
|
Object.keys(schema.shape),
|
|
40
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
100
|
+
var broaderMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_BROADER, {
|
|
100
101
|
transitive: true,
|
|
101
|
-
inverse:
|
|
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(
|
|
113
|
+
var narrowerMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_NARROWER, {
|
|
113
114
|
transitive: true,
|
|
114
|
-
inverse:
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
188
|
+
var partOfMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_PART_OF, {
|
|
188
189
|
transitive: true,
|
|
189
|
-
inverse:
|
|
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(
|
|
201
|
+
var hasPartMetaEdge = createMetaEdge(chunkKTIEB7VH_cjs.META_EDGE_HAS_PART, {
|
|
201
202
|
transitive: true,
|
|
202
|
-
inverse:
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1016
|
+
case chunkKTIEB7VH_cjs.META_EDGE_SUB_CLASS_OF: {
|
|
1016
1017
|
subClassRelations.push([fromName, toName]);
|
|
1017
1018
|
break;
|
|
1018
1019
|
}
|
|
1019
|
-
case
|
|
1020
|
+
case chunkKTIEB7VH_cjs.META_EDGE_BROADER: {
|
|
1020
1021
|
broaderRelations.push([fromName, toName]);
|
|
1021
1022
|
break;
|
|
1022
1023
|
}
|
|
1023
|
-
case
|
|
1024
|
+
case chunkKTIEB7VH_cjs.META_EDGE_NARROWER: {
|
|
1024
1025
|
broaderRelations.push([toName, fromName]);
|
|
1025
1026
|
break;
|
|
1026
1027
|
}
|
|
1027
|
-
case
|
|
1028
|
-
case
|
|
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
|
|
1033
|
+
case chunkKTIEB7VH_cjs.META_EDGE_DISJOINT_WITH: {
|
|
1033
1034
|
disjointRelations.push([fromName, toName]);
|
|
1034
1035
|
break;
|
|
1035
1036
|
}
|
|
1036
|
-
case
|
|
1037
|
+
case chunkKTIEB7VH_cjs.META_EDGE_PART_OF: {
|
|
1037
1038
|
partOfRelations.push([fromName, toName]);
|
|
1038
1039
|
break;
|
|
1039
1040
|
}
|
|
1040
|
-
case
|
|
1041
|
+
case chunkKTIEB7VH_cjs.META_EDGE_HAS_PART: {
|
|
1041
1042
|
partOfRelations.push([toName, fromName]);
|
|
1042
1043
|
break;
|
|
1043
1044
|
}
|
|
1044
|
-
case
|
|
1045
|
+
case chunkKTIEB7VH_cjs.META_EDGE_INVERSE_OF: {
|
|
1045
1046
|
inverseOfRelations.push([fromName, toName]);
|
|
1046
1047
|
break;
|
|
1047
1048
|
}
|
|
1048
|
-
case
|
|
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 =
|
|
1055
|
-
const subClassDescendants =
|
|
1056
|
-
const broaderClosure =
|
|
1057
|
-
const narrowerClosure =
|
|
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 =
|
|
1062
|
-
const hasPartClosure =
|
|
1062
|
+
const partOfClosure = chunkKTIEB7VH_cjs.computeTransitiveClosure(partOfRelations);
|
|
1063
|
+
const hasPartClosure = chunkKTIEB7VH_cjs.invertClosure(partOfClosure);
|
|
1063
1064
|
const edgeInverses = computeEdgeInverses(inverseOfRelations);
|
|
1064
|
-
const edgeImplicationsClosure =
|
|
1065
|
-
const edgeImplyingClosure =
|
|
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 !==
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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-
|
|
2721
|
-
//# sourceMappingURL=chunk-
|
|
2721
|
+
//# sourceMappingURL=chunk-5DTPBFX5.cjs.map
|
|
2722
|
+
//# sourceMappingURL=chunk-5DTPBFX5.cjs.map
|