@nicia-ai/typegraph 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/ast-BVyihVbP.d.cts +564 -0
- package/dist/ast-BVyihVbP.d.ts +564 -0
- package/dist/backend/drizzle/index.cjs +41 -0
- package/dist/backend/drizzle/index.cjs.map +1 -0
- package/dist/backend/drizzle/index.d.cts +12 -0
- package/dist/backend/drizzle/index.d.ts +12 -0
- package/dist/backend/drizzle/index.js +12 -0
- package/dist/backend/drizzle/index.js.map +1 -0
- package/dist/backend/drizzle/postgres.cjs +27 -0
- package/dist/backend/drizzle/postgres.cjs.map +1 -0
- package/dist/backend/drizzle/postgres.d.cts +37 -0
- package/dist/backend/drizzle/postgres.d.ts +37 -0
- package/dist/backend/drizzle/postgres.js +10 -0
- package/dist/backend/drizzle/postgres.js.map +1 -0
- package/dist/backend/drizzle/schema/postgres.cjs +40 -0
- package/dist/backend/drizzle/schema/postgres.cjs.map +1 -0
- package/dist/backend/drizzle/schema/postgres.d.cts +2419 -0
- package/dist/backend/drizzle/schema/postgres.d.ts +2419 -0
- package/dist/backend/drizzle/schema/postgres.js +7 -0
- package/dist/backend/drizzle/schema/postgres.js.map +1 -0
- package/dist/backend/drizzle/schema/sqlite.cjs +40 -0
- package/dist/backend/drizzle/schema/sqlite.cjs.map +1 -0
- package/dist/backend/drizzle/schema/sqlite.d.cts +2647 -0
- package/dist/backend/drizzle/schema/sqlite.d.ts +2647 -0
- package/dist/backend/drizzle/schema/sqlite.js +7 -0
- package/dist/backend/drizzle/schema/sqlite.js.map +1 -0
- package/dist/backend/drizzle/sqlite.cjs +27 -0
- package/dist/backend/drizzle/sqlite.cjs.map +1 -0
- package/dist/backend/drizzle/sqlite.d.cts +36 -0
- package/dist/backend/drizzle/sqlite.d.ts +36 -0
- package/dist/backend/drizzle/sqlite.js +10 -0
- package/dist/backend/drizzle/sqlite.js.map +1 -0
- package/dist/backend/postgres/index.cjs +53 -0
- package/dist/backend/postgres/index.cjs.map +1 -0
- package/dist/backend/postgres/index.d.cts +12 -0
- package/dist/backend/postgres/index.d.ts +12 -0
- package/dist/backend/postgres/index.js +12 -0
- package/dist/backend/postgres/index.js.map +1 -0
- package/dist/backend/sqlite/index.cjs +117 -0
- package/dist/backend/sqlite/index.cjs.map +1 -0
- package/dist/backend/sqlite/index.d.cts +71 -0
- package/dist/backend/sqlite/index.d.ts +71 -0
- package/dist/backend/sqlite/index.js +78 -0
- package/dist/backend/sqlite/index.js.map +1 -0
- package/dist/chunk-2QHQ2C4P.js +146 -0
- package/dist/chunk-2QHQ2C4P.js.map +1 -0
- package/dist/chunk-3A5TKOEJ.js +306 -0
- package/dist/chunk-3A5TKOEJ.js.map +1 -0
- package/dist/chunk-4PIEL2VO.js +162 -0
- package/dist/chunk-4PIEL2VO.js.map +1 -0
- package/dist/chunk-536PH5FT.js +342 -0
- package/dist/chunk-536PH5FT.js.map +1 -0
- package/dist/chunk-DBFCKELK.cjs +156 -0
- package/dist/chunk-DBFCKELK.cjs.map +1 -0
- package/dist/chunk-DDM2FZRJ.cjs +1143 -0
- package/dist/chunk-DDM2FZRJ.cjs.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-F32HCHYA.cjs +680 -0
- package/dist/chunk-F32HCHYA.cjs.map +1 -0
- package/dist/chunk-IIAT36MI.js +353 -0
- package/dist/chunk-IIAT36MI.js.map +1 -0
- package/dist/chunk-JDAET5LO.js +236 -0
- package/dist/chunk-JDAET5LO.js.map +1 -0
- package/dist/chunk-JEQ2X3Z6.cjs +12 -0
- package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
- package/dist/chunk-JKTO7TW3.js +299 -0
- package/dist/chunk-JKTO7TW3.js.map +1 -0
- package/dist/chunk-K7SQ3SWP.js +497 -0
- package/dist/chunk-K7SQ3SWP.js.map +1 -0
- package/dist/chunk-L642L24T.js +142 -0
- package/dist/chunk-L642L24T.js.map +1 -0
- package/dist/chunk-MFVCSNIY.cjs +308 -0
- package/dist/chunk-MFVCSNIY.cjs.map +1 -0
- package/dist/chunk-MNO33ASC.cjs +240 -0
- package/dist/chunk-MNO33ASC.cjs.map +1 -0
- package/dist/chunk-N4AOJ3VF.cjs +154 -0
- package/dist/chunk-N4AOJ3VF.cjs.map +1 -0
- package/dist/chunk-P5CNM325.cjs +508 -0
- package/dist/chunk-P5CNM325.cjs.map +1 -0
- package/dist/chunk-RYT4H46I.js +646 -0
- package/dist/chunk-RYT4H46I.js.map +1 -0
- package/dist/chunk-SV5H3XM5.cjs +321 -0
- package/dist/chunk-SV5H3XM5.cjs.map +1 -0
- package/dist/chunk-TXHKFLWX.cjs +344 -0
- package/dist/chunk-TXHKFLWX.cjs.map +1 -0
- package/dist/chunk-UJAGXJDG.cjs +170 -0
- package/dist/chunk-UJAGXJDG.cjs.map +1 -0
- package/dist/chunk-VXRVGFCI.js +1128 -0
- package/dist/chunk-VXRVGFCI.js.map +1 -0
- package/dist/chunk-YM5AL65Y.cjs +357 -0
- package/dist/chunk-YM5AL65Y.cjs.map +1 -0
- package/dist/index.cjs +8334 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1365 -0
- package/dist/index.d.ts +1365 -0
- package/dist/index.js +8105 -0
- package/dist/index.js.map +1 -0
- package/dist/indexes/index.cjs +67 -0
- package/dist/indexes/index.cjs.map +1 -0
- package/dist/indexes/index.d.cts +62 -0
- package/dist/indexes/index.d.ts +62 -0
- package/dist/indexes/index.js +6 -0
- package/dist/indexes/index.js.map +1 -0
- package/dist/interchange/index.cjs +612 -0
- package/dist/interchange/index.cjs.map +1 -0
- package/dist/interchange/index.d.cts +288 -0
- package/dist/interchange/index.d.ts +288 -0
- package/dist/interchange/index.js +598 -0
- package/dist/interchange/index.js.map +1 -0
- package/dist/profiler/index.cjs +793 -0
- package/dist/profiler/index.cjs.map +1 -0
- package/dist/profiler/index.d.cts +283 -0
- package/dist/profiler/index.d.ts +283 -0
- package/dist/profiler/index.js +785 -0
- package/dist/profiler/index.js.map +1 -0
- package/dist/store-60Lcfi0w.d.ts +2263 -0
- package/dist/store-Bifii8MZ.d.cts +2263 -0
- package/dist/test-helpers-BjyRYJZX.d.ts +22 -0
- package/dist/test-helpers-NoQXhleQ.d.cts +22 -0
- package/dist/types-BRzHlhKC.d.cts +14 -0
- package/dist/types-BRzHlhKC.d.ts +14 -0
- package/dist/types-BrSfFSpW.d.cts +158 -0
- package/dist/types-CX4cLd7M.d.ts +152 -0
- package/dist/types-CjZ7g_7v.d.ts +442 -0
- package/dist/types-DDOSfrih.d.cts +442 -0
- package/dist/types-D_3mEv2y.d.ts +158 -0
- package/dist/types-a5rAxC92.d.cts +152 -0
- package/package.json +201 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkUJAGXJDG_cjs = require('./chunk-UJAGXJDG.cjs');
|
|
4
|
+
var chunkN4AOJ3VF_cjs = require('./chunk-N4AOJ3VF.cjs');
|
|
5
|
+
var pgCore = require('drizzle-orm/pg-core');
|
|
6
|
+
var sqliteCore = require('drizzle-orm/sqlite-core');
|
|
7
|
+
|
|
8
|
+
function getSqliteColumnType(column) {
|
|
9
|
+
switch (column.columnType) {
|
|
10
|
+
case "SQLiteText": {
|
|
11
|
+
return "TEXT";
|
|
12
|
+
}
|
|
13
|
+
case "SQLiteInteger": {
|
|
14
|
+
return "INTEGER";
|
|
15
|
+
}
|
|
16
|
+
case "SQLiteReal": {
|
|
17
|
+
return "REAL";
|
|
18
|
+
}
|
|
19
|
+
case "SQLiteBlob": {
|
|
20
|
+
return "BLOB";
|
|
21
|
+
}
|
|
22
|
+
default: {
|
|
23
|
+
return "TEXT";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function formatDefaultValue(value) {
|
|
28
|
+
if (value === null) return "NULL";
|
|
29
|
+
if (typeof value === "string") return `'${value}'`;
|
|
30
|
+
if (typeof value === "number") return String(value);
|
|
31
|
+
if (typeof value === "boolean") return value ? "1" : "0";
|
|
32
|
+
return JSON.stringify(value);
|
|
33
|
+
}
|
|
34
|
+
function generateSqliteCreateTableSQL(table) {
|
|
35
|
+
const config = sqliteCore.getTableConfig(table);
|
|
36
|
+
const columnDefs = [];
|
|
37
|
+
for (const column of config.columns) {
|
|
38
|
+
const parts = [
|
|
39
|
+
`"${column.name}"`,
|
|
40
|
+
getSqliteColumnType(column)
|
|
41
|
+
];
|
|
42
|
+
if (column.notNull) {
|
|
43
|
+
parts.push("NOT NULL");
|
|
44
|
+
}
|
|
45
|
+
if (column.hasDefault && column.default !== void 0) {
|
|
46
|
+
parts.push(`DEFAULT ${formatDefaultValue(column.default)}`);
|
|
47
|
+
}
|
|
48
|
+
columnDefs.push(parts.join(" "));
|
|
49
|
+
}
|
|
50
|
+
const pk = config.primaryKeys[0];
|
|
51
|
+
if (pk) {
|
|
52
|
+
const pkColumns = pk.columns.map((c) => `"${c.name}"`).join(", ");
|
|
53
|
+
columnDefs.push(`PRIMARY KEY (${pkColumns})`);
|
|
54
|
+
}
|
|
55
|
+
return `CREATE TABLE IF NOT EXISTS "${config.name}" (
|
|
56
|
+
${columnDefs.join(",\n ")}
|
|
57
|
+
);`;
|
|
58
|
+
}
|
|
59
|
+
function renderIndexColumn(col) {
|
|
60
|
+
if (col && typeof col === "object" && "name" in col) {
|
|
61
|
+
return `"${col.name}"`;
|
|
62
|
+
}
|
|
63
|
+
const sql = tryInlineSql(col);
|
|
64
|
+
if (sql !== void 0) {
|
|
65
|
+
return sql;
|
|
66
|
+
}
|
|
67
|
+
return "unknown";
|
|
68
|
+
}
|
|
69
|
+
function tryInlineSql(value) {
|
|
70
|
+
if (value && typeof value === "object" && "getSQL" in value) {
|
|
71
|
+
const maybe = value;
|
|
72
|
+
if (typeof maybe.getSQL === "function") {
|
|
73
|
+
return inlineSql(maybe.getSQL());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return inlineSql(value);
|
|
77
|
+
}
|
|
78
|
+
function flattenSqlChunk(chunk) {
|
|
79
|
+
if (typeof chunk === "string") {
|
|
80
|
+
return chunk;
|
|
81
|
+
}
|
|
82
|
+
if (typeof chunk === "object" && chunk !== null) {
|
|
83
|
+
if ("value" in chunk && Array.isArray(chunk.value)) {
|
|
84
|
+
return chunk.value.map((part) => flattenSqlChunk(part)).join("");
|
|
85
|
+
}
|
|
86
|
+
if ("queryChunks" in chunk && Array.isArray(chunk.queryChunks)) {
|
|
87
|
+
return chunk.queryChunks.map((part) => flattenSqlChunk(part)).join("");
|
|
88
|
+
}
|
|
89
|
+
if ("getSQL" in chunk) {
|
|
90
|
+
const maybe = chunk;
|
|
91
|
+
if (typeof maybe.getSQL === "function") {
|
|
92
|
+
return flattenSqlChunk(maybe.getSQL());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
throw new Error(`Unable to inline SQL chunk: ${String(chunk)}`);
|
|
97
|
+
}
|
|
98
|
+
function inlineSql(value) {
|
|
99
|
+
try {
|
|
100
|
+
return flattenSqlChunk(value);
|
|
101
|
+
} catch {
|
|
102
|
+
return void 0;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function inlineSqlOrThrow(value, context) {
|
|
106
|
+
const inlined = inlineSql(value);
|
|
107
|
+
if (inlined === void 0) {
|
|
108
|
+
throw new Error(`Unable to inline SQL for ${context}`);
|
|
109
|
+
}
|
|
110
|
+
return inlined;
|
|
111
|
+
}
|
|
112
|
+
function generateSqliteCreateIndexSQL(table) {
|
|
113
|
+
const config = sqliteCore.getTableConfig(table);
|
|
114
|
+
const statements = [];
|
|
115
|
+
for (const index of config.indexes) {
|
|
116
|
+
const indexConfig = index.config;
|
|
117
|
+
const columns = indexConfig.columns.map((c) => renderIndexColumn(c)).join(", ");
|
|
118
|
+
const unique = indexConfig.unique ? "UNIQUE " : "";
|
|
119
|
+
const where = indexConfig.where ? ` WHERE ${inlineSqlOrThrow(indexConfig.where, `SQLite index "${indexConfig.name}" WHERE clause`)}` : "";
|
|
120
|
+
statements.push(
|
|
121
|
+
`CREATE ${unique}INDEX IF NOT EXISTS "${indexConfig.name}" ON "${config.name}" (${columns})${where};`
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
return statements;
|
|
125
|
+
}
|
|
126
|
+
function generateSqliteDDL(tables3 = chunkN4AOJ3VF_cjs.tables) {
|
|
127
|
+
const statements = [];
|
|
128
|
+
for (const table of Object.values(tables3)) {
|
|
129
|
+
statements.push(generateSqliteCreateTableSQL(table));
|
|
130
|
+
}
|
|
131
|
+
for (const table of Object.values(tables3)) {
|
|
132
|
+
statements.push(...generateSqliteCreateIndexSQL(table));
|
|
133
|
+
}
|
|
134
|
+
return statements;
|
|
135
|
+
}
|
|
136
|
+
function getSqliteMigrationSQL(tables3 = chunkN4AOJ3VF_cjs.tables) {
|
|
137
|
+
return generateSqliteDDL(tables3).join("\n\n");
|
|
138
|
+
}
|
|
139
|
+
function getPgColumnType(column) {
|
|
140
|
+
switch (column.columnType) {
|
|
141
|
+
case "PgText": {
|
|
142
|
+
return "TEXT";
|
|
143
|
+
}
|
|
144
|
+
case "PgInteger": {
|
|
145
|
+
return "INTEGER";
|
|
146
|
+
}
|
|
147
|
+
case "PgBoolean": {
|
|
148
|
+
return "BOOLEAN";
|
|
149
|
+
}
|
|
150
|
+
case "PgJsonb": {
|
|
151
|
+
return "JSONB";
|
|
152
|
+
}
|
|
153
|
+
case "PgTimestamp": {
|
|
154
|
+
return column.config?.withTimezone ? "TIMESTAMPTZ" : "TIMESTAMP";
|
|
155
|
+
}
|
|
156
|
+
case "PgReal": {
|
|
157
|
+
return "REAL";
|
|
158
|
+
}
|
|
159
|
+
case "PgDoublePrecision": {
|
|
160
|
+
return "DOUBLE PRECISION";
|
|
161
|
+
}
|
|
162
|
+
case "PgCustomColumn": {
|
|
163
|
+
const dataType = column.getSQLType?.();
|
|
164
|
+
return dataType ?? "TEXT";
|
|
165
|
+
}
|
|
166
|
+
default: {
|
|
167
|
+
return "TEXT";
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function formatPgDefaultValue(value) {
|
|
172
|
+
if (value === null) return "NULL";
|
|
173
|
+
if (typeof value === "string") return `'${value}'`;
|
|
174
|
+
if (typeof value === "number") return String(value);
|
|
175
|
+
if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
|
|
176
|
+
return JSON.stringify(value);
|
|
177
|
+
}
|
|
178
|
+
function generatePgCreateTableSQL(table) {
|
|
179
|
+
const config = pgCore.getTableConfig(table);
|
|
180
|
+
const columnDefs = [];
|
|
181
|
+
for (const column of config.columns) {
|
|
182
|
+
const parts = [
|
|
183
|
+
`"${column.name}"`,
|
|
184
|
+
getPgColumnType(column)
|
|
185
|
+
];
|
|
186
|
+
if (column.notNull) {
|
|
187
|
+
parts.push("NOT NULL");
|
|
188
|
+
}
|
|
189
|
+
if (column.hasDefault && column.default !== void 0) {
|
|
190
|
+
parts.push(`DEFAULT ${formatPgDefaultValue(column.default)}`);
|
|
191
|
+
}
|
|
192
|
+
columnDefs.push(parts.join(" "));
|
|
193
|
+
}
|
|
194
|
+
const pk = config.primaryKeys[0];
|
|
195
|
+
if (pk) {
|
|
196
|
+
const pkColumns = pk.columns.map((c) => `"${c.name}"`).join(", ");
|
|
197
|
+
columnDefs.push(`PRIMARY KEY (${pkColumns})`);
|
|
198
|
+
}
|
|
199
|
+
return `CREATE TABLE IF NOT EXISTS "${config.name}" (
|
|
200
|
+
${columnDefs.join(",\n ")}
|
|
201
|
+
);`;
|
|
202
|
+
}
|
|
203
|
+
function generatePgCreateIndexSQL(table) {
|
|
204
|
+
const config = pgCore.getTableConfig(table);
|
|
205
|
+
const statements = [];
|
|
206
|
+
for (const index of config.indexes) {
|
|
207
|
+
const indexConfig = index.config;
|
|
208
|
+
const columns = indexConfig.columns.map((c) => renderIndexColumn(c)).join(", ");
|
|
209
|
+
const unique = indexConfig.unique ? "UNIQUE " : "";
|
|
210
|
+
const method = indexConfig.method && indexConfig.method !== "btree" ? ` USING ${indexConfig.method}` : "";
|
|
211
|
+
const where = indexConfig.where ? ` WHERE ${inlineSqlOrThrow(indexConfig.where, `PostgreSQL index "${indexConfig.name}" WHERE clause`)}` : "";
|
|
212
|
+
statements.push(
|
|
213
|
+
`CREATE ${unique}INDEX IF NOT EXISTS "${indexConfig.name}" ON "${config.name}"${method} (${columns})${where};`
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
return statements;
|
|
217
|
+
}
|
|
218
|
+
function generatePostgresDDL(tables3 = chunkUJAGXJDG_cjs.tables) {
|
|
219
|
+
const statements = [];
|
|
220
|
+
for (const table of Object.values(tables3)) {
|
|
221
|
+
statements.push(generatePgCreateTableSQL(table));
|
|
222
|
+
}
|
|
223
|
+
for (const table of Object.values(tables3)) {
|
|
224
|
+
statements.push(...generatePgCreateIndexSQL(table));
|
|
225
|
+
}
|
|
226
|
+
return statements;
|
|
227
|
+
}
|
|
228
|
+
function getPostgresMigrationSQL(tables3 = chunkUJAGXJDG_cjs.tables) {
|
|
229
|
+
const extensionSql = "-- Enable pgvector extension for vector similarity search\nCREATE EXTENSION IF NOT EXISTS vector;";
|
|
230
|
+
const ddlSql = generatePostgresDDL(tables3).join("\n\n");
|
|
231
|
+
return `${extensionSql}
|
|
232
|
+
|
|
233
|
+
${ddlSql}`;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
exports.generateSqliteDDL = generateSqliteDDL;
|
|
237
|
+
exports.getPostgresMigrationSQL = getPostgresMigrationSQL;
|
|
238
|
+
exports.getSqliteMigrationSQL = getSqliteMigrationSQL;
|
|
239
|
+
//# sourceMappingURL=chunk-MNO33ASC.cjs.map
|
|
240
|
+
//# sourceMappingURL=chunk-MNO33ASC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/drizzle/test-helpers.ts"],"names":["getSqliteTableConfig","tables","getPgTableConfig"],"mappings":";;;;;;;AA2BA,SAAS,oBAAoB,MAAA,EAA8B;AACzD,EAAA,QAAQ,OAAO,UAAA;AAAY,IACzB,KAAK,YAAA,EAAc;AACjB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA,KAAK,eAAA,EAAiB;AACpB,MAAA,OAAO,SAAA;AAAA,IACT;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA,SAAS;AACP,MAAA,OAAO,MAAA;AAAA,IACT;AAAA;AAEJ;AAKA,SAAS,mBAAmB,KAAA,EAAwB;AAClD,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAI,KAAK,CAAA,CAAA,CAAA;AAC/C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,OAAO,KAAK,CAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,GAAA,GAAM,GAAA;AAErD,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAKA,SAAS,6BAEP,KAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAASA,0BAAqB,KAAK,CAAA;AACzC,EAAA,MAAM,aAAuB,EAAC;AAG9B,EAAA,KAAA,MAAW,MAAA,IAAU,OAAO,OAAA,EAAS;AACnC,IAAA,MAAM,KAAA,GAAkB;AAAA,MACtB,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,CAAA,CAAA;AAAA,MACf,oBAAoB,MAAsB;AAAA,KAC5C;AAEA,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,IACvB;AAEA,IAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,OAAA,KAAY,MAAA,EAAW;AACrD,MAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,kBAAA,CAAmB,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5D;AAEA,IAAA,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACjC;AAGA,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,CAAC,CAAA;AAC/B,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAChE,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,CAAA,4BAAA,EAA+B,OAAO,IAAI,CAAA;AAAA,EAAA,EAAU,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC;AAAA,EAAA,CAAA;AACrF;AAKA,SAAS,kBAAkB,GAAA,EAAsB;AAC/C,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,UAAU,GAAA,EAAK;AACnD,IAAA,OAAO,CAAA,CAAA,EAAK,IAAyB,IAAI,CAAA,CAAA,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,GAAA,GAAM,aAAa,GAAG,CAAA;AAC5B,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAAoC;AACxD,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,YAAY,KAAA,EAAO;AAC3D,IAAA,MAAM,KAAA,GAAQ,KAAA;AACd,IAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,UAAA,EAAY;AACtC,MAAA,OAAO,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ,CAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,OAAO,UAAU,KAAK,CAAA;AACxB;AAEA,SAAS,gBAAgB,KAAA,EAAwB;AAC/C,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,IAAI,WAAW,KAAA,IAAS,KAAA,CAAM,OAAA,CAAS,KAAA,CAA6B,KAAK,CAAA,EAAG;AAC1E,MAAA,OAAQ,KAAA,CAAwC,KAAA,CAC7C,GAAA,CAAI,CAAC,IAAA,KAAS,gBAAgB,IAAI,CAAC,CAAA,CACnC,IAAA,CAAK,EAAE,CAAA;AAAA,IACZ;AAEA,IAAA,IACE,iBAAiB,KAAA,IACjB,KAAA,CAAM,OAAA,CAAS,KAAA,CAAmC,WAAW,CAAA,EAC7D;AACA,MAAA,OAAQ,KAAA,CAA8C,WAAA,CACnD,GAAA,CAAI,CAAC,IAAA,KAAS,gBAAgB,IAAI,CAAC,CAAA,CACnC,IAAA,CAAK,EAAE,CAAA;AAAA,IACZ;AAEA,IAAA,IAAI,YAAY,KAAA,EAAO;AACrB,MAAA,MAAM,KAAA,GAAQ,KAAA;AACd,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,UAAA,EAAY;AACtC,QAAA,OAAO,eAAA,CAAgB,KAAA,CAAM,MAAA,EAAQ,CAAA;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAChE;AAEA,SAAS,UAAU,KAAA,EAAoC;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,gBAAA,CAAiB,OAAgB,OAAA,EAAyB;AACjE,EAAA,MAAM,OAAA,GAAU,UAAU,KAAK,CAAA;AAC/B,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,OAAO,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,OAAA;AACT;AAKA,SAAS,6BAEP,KAAA,EACU;AACV,EAAA,MAAM,MAAA,GAASA,0BAAqB,KAAK,CAAA;AACzC,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,OAAA,EAAS;AAClC,IAAA,MAAM,cAAc,KAAA,CAAM,MAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CACzB,GAAA,CAAI,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAC,CAAC,CAAA,CAC/B,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,GAAS,SAAA,GAAY,EAAA;AAChD,IAAA,MAAM,KAAA,GACJ,WAAA,CAAY,KAAA,GACV,CAAA,OAAA,EAAU,gBAAA,CAAiB,WAAA,CAAY,KAAA,EAAO,CAAA,cAAA,EAAiB,WAAA,CAAY,IAAI,CAAA,cAAA,CAAgB,CAAC,CAAA,CAAA,GAChG,EAAA;AAEJ,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,CAAA,OAAA,EAAU,MAAM,CAAA,qBAAA,EAAwB,WAAA,CAAY,IAAI,CAAA,MAAA,EAAS,MAAA,CAAO,IAAI,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA,KACpG;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAKO,SAAS,iBAAA,CAAkBC,UAAuBA,wBAAA,EAAwB;AAC/E,EAAA,MAAM,aAAuB,EAAC;AAG9B,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAOA,OAAM,CAAA,EAAG;AACzC,IAAA,UAAA,CAAW,IAAA,CAAK,4BAAA,CAA6B,KAAK,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAOA,OAAM,CAAA,EAAG;AACzC,IAAA,UAAA,CAAW,IAAA,CAAK,GAAG,4BAAA,CAA6B,KAAK,CAAC,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,UAAA;AACT;AAMO,SAAS,qBAAA,CAAsBA,UAAuBA,wBAAA,EAAsB;AACjF,EAAA,OAAO,iBAAA,CAAkBA,OAAM,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAC9C;AASA,SAAS,gBAAgB,MAAA,EAA0B;AACjD,EAAA,QAAQ,OAAO,UAAA;AAAY,IACzB,KAAK,QAAA,EAAU;AACb,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,OAAO,SAAA;AAAA,IACT;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,OAAO,SAAA;AAAA,IACT;AAAA,IACA,KAAK,SAAA,EAAW;AACd,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,IACA,KAAK,aAAA,EAAe;AAGlB,MAAA,OAAQ,MAAA,CAAe,MAAA,EAAQ,YAAA,GAAe,aAAA,GAAgB,WAAA;AAAA,IAChE;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA,KAAK,mBAAA,EAAqB;AACxB,MAAA,OAAO,kBAAA;AAAA,IACT;AAAA,IACA,KAAK,gBAAA,EAAkB;AAIrB,MAAA,MAAM,QAAA,GAAY,OAAe,UAAA,IAAa;AAC9C,MAAA,OAAO,QAAA,IAAY,MAAA;AAAA,IACrB;AAAA,IACA,SAAS;AACP,MAAA,OAAO,MAAA;AAAA,IACT;AAAA;AAEJ;AAKA,SAAS,qBAAqB,KAAA,EAAwB;AACpD,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAI,KAAK,CAAA,CAAA,CAAA;AAC/C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,OAAO,KAAK,CAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,MAAA,GAAS,OAAA;AAExD,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAKA,SAAS,yBAEP,KAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAASC,sBAAiB,KAAK,CAAA;AACrC,EAAA,MAAM,aAAuB,EAAC;AAG9B,EAAA,KAAA,MAAW,MAAA,IAAU,OAAO,OAAA,EAAS;AACnC,IAAA,MAAM,KAAA,GAAkB;AAAA,MACtB,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,CAAA,CAAA;AAAA,MACf,gBAAgB,MAAM;AAAA,KACxB;AAEA,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,IACvB;AAEA,IAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,OAAA,KAAY,MAAA,EAAW;AACrD,MAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D;AAEA,IAAA,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACjC;AAGA,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,CAAC,CAAA;AAC/B,EAAA,IAAI,EAAA,EAAI;AACN,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAChE,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,CAAA,4BAAA,EAA+B,OAAO,IAAI,CAAA;AAAA,EAAA,EAAU,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC;AAAA,EAAA,CAAA;AACrF;AAKA,SAAS,yBAEP,KAAA,EACU;AACV,EAAA,MAAM,MAAA,GAASA,sBAAiB,KAAK,CAAA;AACrC,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,OAAA,EAAS;AAClC,IAAA,MAAM,cAAc,KAAA,CAAM,MAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CACzB,GAAA,CAAI,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAC,CAAC,CAAA,CAC/B,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,GAAS,SAAA,GAAY,EAAA;AAChD,IAAA,MAAM,MAAA,GACJ,YAAY,MAAA,IAAU,WAAA,CAAY,WAAW,OAAA,GAC3C,CAAA,OAAA,EAAU,WAAA,CAAY,MAAM,CAAA,CAAA,GAC5B,EAAA;AACJ,IAAA,MAAM,KAAA,GACJ,WAAA,CAAY,KAAA,GACV,CAAA,OAAA,EAAU,gBAAA,CAAiB,WAAA,CAAY,KAAA,EAAO,CAAA,kBAAA,EAAqB,WAAA,CAAY,IAAI,CAAA,cAAA,CAAgB,CAAC,CAAA,CAAA,GACpG,EAAA;AAEJ,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,CAAA,OAAA,EAAU,MAAM,CAAA,qBAAA,EAAwB,WAAA,CAAY,IAAI,CAAA,MAAA,EAAS,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,EAAK,OAAO,IAAI,KAAK,CAAA,CAAA;AAAA,KAC7G;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAKO,SAAS,mBAAA,CAAoBD,UAAyBA,wBAAAA,EAA0B;AACrF,EAAA,MAAM,aAAuB,EAAC;AAG9B,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAOA,OAAM,CAAA,EAAG;AACzC,IAAA,UAAA,CAAW,IAAA,CAAK,wBAAA,CAAyB,KAAK,CAAC,CAAA;AAAA,EACjD;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAOA,OAAM,CAAA,EAAG;AACzC,IAAA,UAAA,CAAW,IAAA,CAAK,GAAG,wBAAA,CAAyB,KAAK,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,UAAA;AACT;AASO,SAAS,uBAAA,CAAwBA,UAAyBA,wBAAAA,EAAwB;AAEvF,EAAA,MAAM,YAAA,GAAe,mGAAA;AACrB,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoBA,OAAM,CAAA,CAAE,KAAK,MAAM,CAAA;AACtD,EAAA,OAAO,GAAG,YAAY;;AAAA,EAAO,MAAM,CAAA,CAAA;AACrC","file":"chunk-MNO33ASC.cjs","sourcesContent":["/**\n * DDL generation utilities for TypeGraph backends.\n *\n * Provides utilities for generating DDL statements from Drizzle\n * table definitions. This ensures migrations match production schema.\n */\nimport {\n getTableConfig as getPgTableConfig,\n type PgColumn,\n type PgTableWithColumns,\n} from \"drizzle-orm/pg-core\";\nimport {\n getTableConfig as getSqliteTableConfig,\n type SQLiteColumn,\n type SQLiteTableWithColumns,\n} from \"drizzle-orm/sqlite-core\";\n\nimport { type PostgresTables, tables as postgresTables } from \"./schema/postgres\";\nimport { type SqliteTables, tables as sqliteTables } from \"./schema/sqlite\";\n\n// ============================================================\n// SQLite DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to SQLite types.\n */\nfunction getSqliteColumnType(column: SQLiteColumn): string {\n switch (column.columnType) {\n case \"SQLiteText\": {\n return \"TEXT\";\n }\n case \"SQLiteInteger\": {\n return \"INTEGER\";\n }\n case \"SQLiteReal\": {\n return \"REAL\";\n }\n case \"SQLiteBlob\": {\n return \"BLOB\";\n }\n default: {\n return \"TEXT\";\n }\n }\n}\n\n/**\n * Formats a default value for SQLite.\n */\nfunction formatDefaultValue(value: unknown): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value}'`;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n // For other types, use JSON.stringify to avoid [object Object]\n return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle SQLite table definition.\n */\nfunction generateSqliteCreateTableSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: SQLiteTableWithColumns<any>,\n): string {\n const config = getSqliteTableConfig(table);\n const columnDefs: string[] = [];\n\n // Generate column definitions\n for (const column of config.columns) {\n const parts: string[] = [\n `\"${column.name}\"`,\n getSqliteColumnType(column as SQLiteColumn),\n ];\n\n if (column.notNull) {\n parts.push(\"NOT NULL\");\n }\n\n if (column.hasDefault && column.default !== undefined) {\n parts.push(`DEFAULT ${formatDefaultValue(column.default)}`);\n }\n\n columnDefs.push(parts.join(\" \"));\n }\n\n // Add primary key constraint\n const pk = config.primaryKeys[0];\n if (pk) {\n const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n ${columnDefs.join(\",\\n \")}\\n);`;\n}\n\n/**\n * Gets the column name from an index column, handling both Column and SQL types.\n */\nfunction renderIndexColumn(col: unknown): string {\n if (col && typeof col === \"object\" && \"name\" in col) {\n return `\"${(col as { name: string }).name}\"`;\n }\n\n const sql = tryInlineSql(col);\n if (sql !== undefined) {\n return sql;\n }\n\n return \"unknown\";\n}\n\nfunction tryInlineSql(value: unknown): string | undefined {\n if (value && typeof value === \"object\" && \"getSQL\" in value) {\n const maybe = value as { getSQL?: () => unknown };\n if (typeof maybe.getSQL === \"function\") {\n return inlineSql(maybe.getSQL());\n }\n }\n\n return inlineSql(value);\n}\n\nfunction flattenSqlChunk(chunk: unknown): string {\n if (typeof chunk === \"string\") {\n return chunk;\n }\n\n if (typeof chunk === \"object\" && chunk !== null) {\n if (\"value\" in chunk && Array.isArray((chunk as { value: unknown }).value)) {\n return (chunk as { value: readonly unknown[] }).value\n .map((part) => flattenSqlChunk(part))\n .join(\"\");\n }\n\n if (\n \"queryChunks\" in chunk &&\n Array.isArray((chunk as { queryChunks: unknown }).queryChunks)\n ) {\n return (chunk as { queryChunks: readonly unknown[] }).queryChunks\n .map((part) => flattenSqlChunk(part))\n .join(\"\");\n }\n\n if (\"getSQL\" in chunk) {\n const maybe = chunk as { getSQL?: () => unknown };\n if (typeof maybe.getSQL === \"function\") {\n return flattenSqlChunk(maybe.getSQL());\n }\n }\n }\n\n throw new Error(`Unable to inline SQL chunk: ${String(chunk)}`);\n}\n\nfunction inlineSql(value: unknown): string | undefined {\n try {\n return flattenSqlChunk(value);\n } catch {\n return undefined;\n }\n}\n\nfunction inlineSqlOrThrow(value: unknown, context: string): string {\n const inlined = inlineSql(value);\n if (inlined === undefined) {\n throw new Error(`Unable to inline SQL for ${context}`);\n }\n return inlined;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle SQLite table definition.\n */\nfunction generateSqliteCreateIndexSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: SQLiteTableWithColumns<any>,\n): string[] {\n const config = getSqliteTableConfig(table);\n const statements: string[] = [];\n\n for (const index of config.indexes) {\n const indexConfig = index.config;\n const columns = indexConfig.columns\n .map((c) => renderIndexColumn(c))\n .join(\", \");\n const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n const where =\n indexConfig.where ?\n ` WHERE ${inlineSqlOrThrow(indexConfig.where, `SQLite index \"${indexConfig.name}\" WHERE clause`)}`\n : \"\";\n\n statements.push(\n `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\" (${columns})${where};`,\n );\n }\n\n return statements;\n}\n\n/**\n * Generates all DDL statements for the given SQLite tables.\n */\nexport function generateSqliteDDL(tables: SqliteTables = sqliteTables): string[] {\n const statements: string[] = [];\n\n // Generate in dependency order (tables first, then indexes)\n for (const table of Object.values(tables)) {\n statements.push(generateSqliteCreateTableSQL(table));\n }\n\n for (const table of Object.values(tables)) {\n statements.push(...generateSqliteCreateIndexSQL(table));\n }\n\n return statements;\n}\n\n/**\n * Generates a single SQL string for SQLite migrations.\n * Convenience function that joins all DDL statements.\n */\nexport function getSqliteMigrationSQL(tables: SqliteTables = sqliteTables): string {\n return generateSqliteDDL(tables).join(\"\\n\\n\");\n}\n\n// ============================================================\n// PostgreSQL DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to PostgreSQL types.\n */\nfunction getPgColumnType(column: PgColumn): string {\n switch (column.columnType) {\n case \"PgText\": {\n return \"TEXT\";\n }\n case \"PgInteger\": {\n return \"INTEGER\";\n }\n case \"PgBoolean\": {\n return \"BOOLEAN\";\n }\n case \"PgJsonb\": {\n return \"JSONB\";\n }\n case \"PgTimestamp\": {\n // Check if it has timezone\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n return (column as any).config?.withTimezone ? \"TIMESTAMPTZ\" : \"TIMESTAMP\";\n }\n case \"PgReal\": {\n return \"REAL\";\n }\n case \"PgDoublePrecision\": {\n return \"DOUBLE PRECISION\";\n }\n case \"PgCustomColumn\": {\n // Custom column type - get the SQL type from dataType()\n // This handles our vector column type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const dataType = (column as any).getSQLType?.() as string | undefined;\n return dataType ?? \"TEXT\";\n }\n default: {\n return \"TEXT\";\n }\n }\n}\n\n/**\n * Formats a default value for PostgreSQL.\n */\nfunction formatPgDefaultValue(value: unknown): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value}'`;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n // For other types, use JSON.stringify to avoid [object Object]\n return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle PostgreSQL table definition.\n */\nfunction generatePgCreateTableSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: PgTableWithColumns<any>,\n): string {\n const config = getPgTableConfig(table);\n const columnDefs: string[] = [];\n\n // Generate column definitions\n for (const column of config.columns) {\n const parts: string[] = [\n `\"${column.name}\"`,\n getPgColumnType(column),\n ];\n\n if (column.notNull) {\n parts.push(\"NOT NULL\");\n }\n\n if (column.hasDefault && column.default !== undefined) {\n parts.push(`DEFAULT ${formatPgDefaultValue(column.default)}`);\n }\n\n columnDefs.push(parts.join(\" \"));\n }\n\n // Add primary key constraint\n const pk = config.primaryKeys[0];\n if (pk) {\n const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n ${columnDefs.join(\",\\n \")}\\n);`;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle PostgreSQL table definition.\n */\nfunction generatePgCreateIndexSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: PgTableWithColumns<any>,\n): string[] {\n const config = getPgTableConfig(table);\n const statements: string[] = [];\n\n for (const index of config.indexes) {\n const indexConfig = index.config;\n const columns = indexConfig.columns\n .map((c) => renderIndexColumn(c))\n .join(\", \");\n const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n const method =\n indexConfig.method && indexConfig.method !== \"btree\" ?\n ` USING ${indexConfig.method}`\n : \"\";\n const where =\n indexConfig.where ?\n ` WHERE ${inlineSqlOrThrow(indexConfig.where, `PostgreSQL index \"${indexConfig.name}\" WHERE clause`)}`\n : \"\";\n\n statements.push(\n `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\"${method} (${columns})${where};`,\n );\n }\n\n return statements;\n}\n\n/**\n * Generates all DDL statements for the given PostgreSQL tables.\n */\nexport function generatePostgresDDL(tables: PostgresTables = postgresTables): string[] {\n const statements: string[] = [];\n\n // Generate in dependency order (tables first, then indexes)\n for (const table of Object.values(tables)) {\n statements.push(generatePgCreateTableSQL(table));\n }\n\n for (const table of Object.values(tables)) {\n statements.push(...generatePgCreateIndexSQL(table));\n }\n\n return statements;\n}\n\n/**\n * Generates a single SQL string for PostgreSQL migrations.\n * Convenience function that joins all DDL statements.\n *\n * Includes CREATE EXTENSION for pgvector since the embeddings table\n * uses the native VECTOR type.\n */\nexport function getPostgresMigrationSQL(tables: PostgresTables = postgresTables): string {\n // pgvector extension is required for the embeddings table\n const extensionSql = \"-- Enable pgvector extension for vector similarity search\\nCREATE EXTENSION IF NOT EXISTS vector;\";\n const ddlSql = generatePostgresDDL(tables).join(\"\\n\\n\");\n return `${extensionSql}\\n\\n${ddlSql}`;\n}\n"]}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkDDM2FZRJ_cjs = require('./chunk-DDM2FZRJ.cjs');
|
|
4
|
+
var sqliteCore = require('drizzle-orm/sqlite-core');
|
|
5
|
+
|
|
6
|
+
var DEFAULT_TABLE_NAMES = {
|
|
7
|
+
nodes: "typegraph_nodes",
|
|
8
|
+
edges: "typegraph_edges",
|
|
9
|
+
uniques: "typegraph_node_uniques",
|
|
10
|
+
schemaVersions: "typegraph_schema_versions",
|
|
11
|
+
embeddings: "typegraph_node_embeddings"
|
|
12
|
+
};
|
|
13
|
+
function createSqliteTables(names = {}, options = {}) {
|
|
14
|
+
const n = { ...DEFAULT_TABLE_NAMES, ...names };
|
|
15
|
+
const indexes = options.indexes ?? [];
|
|
16
|
+
const nodes2 = sqliteCore.sqliteTable(
|
|
17
|
+
n.nodes,
|
|
18
|
+
{
|
|
19
|
+
graphId: sqliteCore.text("graph_id").notNull(),
|
|
20
|
+
kind: sqliteCore.text("kind").notNull(),
|
|
21
|
+
id: sqliteCore.text("id").notNull(),
|
|
22
|
+
props: sqliteCore.text("props").notNull(),
|
|
23
|
+
version: sqliteCore.integer("version").notNull().default(1),
|
|
24
|
+
validFrom: sqliteCore.text("valid_from"),
|
|
25
|
+
validTo: sqliteCore.text("valid_to"),
|
|
26
|
+
createdAt: sqliteCore.text("created_at").notNull(),
|
|
27
|
+
updatedAt: sqliteCore.text("updated_at").notNull(),
|
|
28
|
+
deletedAt: sqliteCore.text("deleted_at")
|
|
29
|
+
},
|
|
30
|
+
(t) => [
|
|
31
|
+
sqliteCore.primaryKey({ columns: [t.graphId, t.kind, t.id] }),
|
|
32
|
+
sqliteCore.index(`${n.nodes}_kind_idx`).on(t.graphId, t.kind),
|
|
33
|
+
sqliteCore.index(`${n.nodes}_deleted_idx`).on(t.graphId, t.deletedAt),
|
|
34
|
+
sqliteCore.index(`${n.nodes}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),
|
|
35
|
+
...chunkDDM2FZRJ_cjs.buildSqliteNodeIndexBuilders(t, indexes)
|
|
36
|
+
]
|
|
37
|
+
);
|
|
38
|
+
const edges2 = sqliteCore.sqliteTable(
|
|
39
|
+
n.edges,
|
|
40
|
+
{
|
|
41
|
+
graphId: sqliteCore.text("graph_id").notNull(),
|
|
42
|
+
id: sqliteCore.text("id").notNull(),
|
|
43
|
+
kind: sqliteCore.text("kind").notNull(),
|
|
44
|
+
fromKind: sqliteCore.text("from_kind").notNull(),
|
|
45
|
+
fromId: sqliteCore.text("from_id").notNull(),
|
|
46
|
+
toKind: sqliteCore.text("to_kind").notNull(),
|
|
47
|
+
toId: sqliteCore.text("to_id").notNull(),
|
|
48
|
+
props: sqliteCore.text("props").notNull(),
|
|
49
|
+
validFrom: sqliteCore.text("valid_from"),
|
|
50
|
+
validTo: sqliteCore.text("valid_to"),
|
|
51
|
+
createdAt: sqliteCore.text("created_at").notNull(),
|
|
52
|
+
updatedAt: sqliteCore.text("updated_at").notNull(),
|
|
53
|
+
deletedAt: sqliteCore.text("deleted_at")
|
|
54
|
+
},
|
|
55
|
+
(t) => [
|
|
56
|
+
sqliteCore.primaryKey({ columns: [t.graphId, t.id] }),
|
|
57
|
+
sqliteCore.index(`${n.edges}_kind_idx`).on(t.graphId, t.kind),
|
|
58
|
+
sqliteCore.index(`${n.edges}_from_idx`).on(t.graphId, t.fromKind, t.fromId),
|
|
59
|
+
sqliteCore.index(`${n.edges}_to_idx`).on(t.graphId, t.toKind, t.toId),
|
|
60
|
+
sqliteCore.index(`${n.edges}_deleted_idx`).on(t.graphId, t.deletedAt),
|
|
61
|
+
sqliteCore.index(`${n.edges}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),
|
|
62
|
+
sqliteCore.index(`${n.edges}_cardinality_idx`).on(
|
|
63
|
+
t.graphId,
|
|
64
|
+
t.kind,
|
|
65
|
+
t.fromKind,
|
|
66
|
+
t.fromId,
|
|
67
|
+
t.validTo
|
|
68
|
+
),
|
|
69
|
+
...chunkDDM2FZRJ_cjs.buildSqliteEdgeIndexBuilders(t, indexes)
|
|
70
|
+
]
|
|
71
|
+
);
|
|
72
|
+
const uniques2 = sqliteCore.sqliteTable(
|
|
73
|
+
n.uniques,
|
|
74
|
+
{
|
|
75
|
+
graphId: sqliteCore.text("graph_id").notNull(),
|
|
76
|
+
nodeKind: sqliteCore.text("node_kind").notNull(),
|
|
77
|
+
constraintName: sqliteCore.text("constraint_name").notNull(),
|
|
78
|
+
key: sqliteCore.text("key").notNull(),
|
|
79
|
+
nodeId: sqliteCore.text("node_id").notNull(),
|
|
80
|
+
concreteKind: sqliteCore.text("concrete_kind").notNull(),
|
|
81
|
+
deletedAt: sqliteCore.text("deleted_at")
|
|
82
|
+
},
|
|
83
|
+
(t) => [
|
|
84
|
+
sqliteCore.primaryKey({
|
|
85
|
+
columns: [t.graphId, t.nodeKind, t.constraintName, t.key]
|
|
86
|
+
}),
|
|
87
|
+
sqliteCore.index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId)
|
|
88
|
+
]
|
|
89
|
+
);
|
|
90
|
+
const schemaVersions2 = sqliteCore.sqliteTable(
|
|
91
|
+
n.schemaVersions,
|
|
92
|
+
{
|
|
93
|
+
graphId: sqliteCore.text("graph_id").notNull(),
|
|
94
|
+
version: sqliteCore.integer("version").notNull(),
|
|
95
|
+
schemaHash: sqliteCore.text("schema_hash").notNull(),
|
|
96
|
+
schemaDoc: sqliteCore.text("schema_doc").notNull(),
|
|
97
|
+
createdAt: sqliteCore.text("created_at").notNull(),
|
|
98
|
+
isActive: sqliteCore.integer("is_active", { mode: "boolean" }).notNull().default(false)
|
|
99
|
+
},
|
|
100
|
+
(t) => [
|
|
101
|
+
sqliteCore.primaryKey({ columns: [t.graphId, t.version] }),
|
|
102
|
+
sqliteCore.index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive)
|
|
103
|
+
]
|
|
104
|
+
);
|
|
105
|
+
const embeddings2 = sqliteCore.sqliteTable(
|
|
106
|
+
n.embeddings,
|
|
107
|
+
{
|
|
108
|
+
graphId: sqliteCore.text("graph_id").notNull(),
|
|
109
|
+
nodeKind: sqliteCore.text("node_kind").notNull(),
|
|
110
|
+
nodeId: sqliteCore.text("node_id").notNull(),
|
|
111
|
+
fieldPath: sqliteCore.text("field_path").notNull(),
|
|
112
|
+
/**
|
|
113
|
+
* Embedding vector.
|
|
114
|
+
* Stored as BLOB for sqlite-vec binary format, or JSON text for fallback.
|
|
115
|
+
* For sqlite-vec: use vec_f32() to convert JSON array to binary.
|
|
116
|
+
*/
|
|
117
|
+
embedding: sqliteCore.blob("embedding", { mode: "buffer" }).notNull(),
|
|
118
|
+
/** Number of dimensions (for validation) */
|
|
119
|
+
dimensions: sqliteCore.integer("dimensions").notNull(),
|
|
120
|
+
createdAt: sqliteCore.text("created_at").notNull(),
|
|
121
|
+
updatedAt: sqliteCore.text("updated_at").notNull()
|
|
122
|
+
},
|
|
123
|
+
(t) => [
|
|
124
|
+
sqliteCore.primaryKey({
|
|
125
|
+
columns: [t.graphId, t.nodeKind, t.nodeId, t.fieldPath]
|
|
126
|
+
}),
|
|
127
|
+
// Index for looking up embeddings by node
|
|
128
|
+
sqliteCore.index(`${n.embeddings}_node_idx`).on(
|
|
129
|
+
t.graphId,
|
|
130
|
+
t.nodeKind,
|
|
131
|
+
t.nodeId
|
|
132
|
+
),
|
|
133
|
+
// Index for filtering by kind and field (used in vector search)
|
|
134
|
+
sqliteCore.index(`${n.embeddings}_kind_field_idx`).on(
|
|
135
|
+
t.graphId,
|
|
136
|
+
t.nodeKind,
|
|
137
|
+
t.fieldPath
|
|
138
|
+
)
|
|
139
|
+
]
|
|
140
|
+
);
|
|
141
|
+
return { nodes: nodes2, edges: edges2, uniques: uniques2, schemaVersions: schemaVersions2, embeddings: embeddings2 };
|
|
142
|
+
}
|
|
143
|
+
var tables = createSqliteTables();
|
|
144
|
+
var { nodes, edges, uniques, schemaVersions, embeddings } = tables;
|
|
145
|
+
|
|
146
|
+
exports.createSqliteTables = createSqliteTables;
|
|
147
|
+
exports.edges = edges;
|
|
148
|
+
exports.embeddings = embeddings;
|
|
149
|
+
exports.nodes = nodes;
|
|
150
|
+
exports.schemaVersions = schemaVersions;
|
|
151
|
+
exports.tables = tables;
|
|
152
|
+
exports.uniques = uniques;
|
|
153
|
+
//# sourceMappingURL=chunk-N4AOJ3VF.cjs.map
|
|
154
|
+
//# sourceMappingURL=chunk-N4AOJ3VF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/drizzle/schema/sqlite.ts"],"names":["nodes","sqliteTable","text","integer","primaryKey","index","buildSqliteNodeIndexBuilders","edges","buildSqliteEdgeIndexBuilders","uniques","schemaVersions","embeddings","blob"],"mappings":";;;;;AAwDA,IAAM,mBAAA,GAAkC;AAAA,EACtC,KAAA,EAAO,iBAAA;AAAA,EACP,KAAA,EAAO,iBAAA;AAAA,EACP,OAAA,EAAS,wBAAA;AAAA,EACT,cAAA,EAAgB,2BAAA;AAAA,EAChB,UAAA,EAAY;AACd,CAAA;AAMO,SAAS,mBACd,KAAA,GAA6B,EAAC,EAC9B,OAAA,GAAqC,EAAC,EACtC;AACA,EAAA,MAAM,CAAA,GAAgB,EAAE,GAAG,mBAAA,EAAqB,GAAG,KAAA,EAAM;AACzD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,EAAC;AAEpC,EAAA,MAAMA,MAAAA,GAAQC,sBAAA;AAAA,IACZ,CAAA,CAAE,KAAA;AAAA,IACF;AAAA,MACE,OAAA,EAASC,eAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA,MAClC,IAAA,EAAMA,eAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ;AAAA,MAC3B,EAAA,EAAIA,eAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAAA,MACvB,KAAA,EAAOA,eAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ;AAAA,MAC7B,SAASC,kBAAA,CAAQ,SAAS,EAAE,OAAA,EAAQ,CAAE,QAAQ,CAAC,CAAA;AAAA,MAC/C,SAAA,EAAWD,gBAAK,YAAY,CAAA;AAAA,MAC5B,OAAA,EAASA,gBAAK,UAAU,CAAA;AAAA,MACxB,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MACtC,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MACtC,SAAA,EAAWA,gBAAK,YAAY;AAAA,KAC9B;AAAA,IACA,CAAC,CAAA,KAAM;AAAA,MACLE,qBAAA,CAAW,EAAE,OAAA,EAAS,CAAC,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,EAAE,CAAA,EAAG,CAAA;AAAA,MACjDC,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,SAAA,CAAW,EAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,IAAI,CAAA;AAAA,MACjDA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,YAAA,CAAc,EAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,SAAS,CAAA;AAAA,MACzDA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,UAAA,CAAY,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,SAAA,EAAW,CAAA,CAAE,OAAO,CAAA;AAAA,MAClE,GAAGC,8CAAA,CAA6B,CAAA,EAAG,OAAO;AAAA;AAC5C,GACF;AAEA,EAAA,MAAMC,MAAAA,GAAQN,sBAAA;AAAA,IACZ,CAAA,CAAE,KAAA;AAAA,IACF;AAAA,MACE,OAAA,EAASC,eAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA,MAClC,EAAA,EAAIA,eAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAAA,MACvB,IAAA,EAAMA,eAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ;AAAA,MAC3B,QAAA,EAAUA,eAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ;AAAA,MACpC,MAAA,EAAQA,eAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ;AAAA,MAChC,MAAA,EAAQA,eAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ;AAAA,MAChC,IAAA,EAAMA,eAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ;AAAA,MAC5B,KAAA,EAAOA,eAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ;AAAA,MAC7B,SAAA,EAAWA,gBAAK,YAAY,CAAA;AAAA,MAC5B,OAAA,EAASA,gBAAK,UAAU,CAAA;AAAA,MACxB,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MACtC,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MACtC,SAAA,EAAWA,gBAAK,YAAY;AAAA,KAC9B;AAAA,IACA,CAAC,CAAA,KAAM;AAAA,MACLE,qBAAA,CAAW,EAAE,OAAA,EAAS,CAAC,EAAE,OAAA,EAAS,CAAA,CAAE,EAAE,CAAA,EAAG,CAAA;AAAA,MACzCC,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,SAAA,CAAW,EAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,IAAI,CAAA;AAAA,MACjDA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,SAAA,CAAW,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,MAAM,CAAA;AAAA,MAC/DA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,OAAA,CAAS,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,IAAI,CAAA;AAAA,MACzDA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,YAAA,CAAc,EAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,SAAS,CAAA;AAAA,MACzDA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,UAAA,CAAY,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,SAAA,EAAW,CAAA,CAAE,OAAO,CAAA;AAAA,MAClEA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,KAAK,kBAAkB,CAAA,CAAE,EAAA;AAAA,QAClC,CAAA,CAAE,OAAA;AAAA,QACF,CAAA,CAAE,IAAA;AAAA,QACF,CAAA,CAAE,QAAA;AAAA,QACF,CAAA,CAAE,MAAA;AAAA,QACF,CAAA,CAAE;AAAA,OACJ;AAAA,MACA,GAAGG,8CAAA,CAA6B,CAAA,EAAG,OAAO;AAAA;AAC5C,GACF;AAEA,EAAA,MAAMC,QAAAA,GAAUR,sBAAA;AAAA,IACd,CAAA,CAAE,OAAA;AAAA,IACF;AAAA,MACE,OAAA,EAASC,eAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA,MAClC,QAAA,EAAUA,eAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ;AAAA,MACpC,cAAA,EAAgBA,eAAA,CAAK,iBAAiB,CAAA,CAAE,OAAA,EAAQ;AAAA,MAChD,GAAA,EAAKA,eAAA,CAAK,KAAK,CAAA,CAAE,OAAA,EAAQ;AAAA,MACzB,MAAA,EAAQA,eAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ;AAAA,MAChC,YAAA,EAAcA,eAAA,CAAK,eAAe,CAAA,CAAE,OAAA,EAAQ;AAAA,MAC5C,SAAA,EAAWA,gBAAK,YAAY;AAAA,KAC9B;AAAA,IACA,CAAC,CAAA,KAAM;AAAA,MACLE,qBAAA,CAAW;AAAA,QACT,OAAA,EAAS,CAAC,CAAA,CAAE,OAAA,EAAS,EAAE,QAAA,EAAU,CAAA,CAAE,cAAA,EAAgB,CAAA,CAAE,GAAG;AAAA,OACzD,CAAA;AAAA,MACDC,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,SAAA,CAAW,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,YAAA,EAAc,CAAA,CAAE,MAAM;AAAA;AACvE,GACF;AAEA,EAAA,MAAMK,eAAAA,GAAiBT,sBAAA;AAAA,IACrB,CAAA,CAAE,cAAA;AAAA,IACF;AAAA,MACE,OAAA,EAASC,eAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA,MAClC,OAAA,EAASC,kBAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ;AAAA,MACpC,UAAA,EAAYD,eAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ;AAAA,MACxC,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MACtC,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MACtC,QAAA,EAAUC,kBAAA,CAAQ,WAAA,EAAa,EAAE,IAAA,EAAM,SAAA,EAAW,CAAA,CAC/C,OAAA,EAAQ,CACR,OAAA,CAAQ,KAAK;AAAA,KAClB;AAAA,IACA,CAAC,CAAA,KAAM;AAAA,MACLC,qBAAA,CAAW,EAAE,OAAA,EAAS,CAAC,EAAE,OAAA,EAAS,CAAA,CAAE,OAAO,CAAA,EAAG,CAAA;AAAA,MAC9CC,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,cAAc,CAAA,WAAA,CAAa,EAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAQ;AAAA;AAClE,GACF;AASA,EAAA,MAAMM,WAAAA,GAAaV,sBAAA;AAAA,IACjB,CAAA,CAAE,UAAA;AAAA,IACF;AAAA,MACE,OAAA,EAASC,eAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ;AAAA,MAClC,QAAA,EAAUA,eAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ;AAAA,MACpC,MAAA,EAAQA,eAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ;AAAA,MAChC,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtC,SAAA,EAAWU,gBAAK,WAAA,EAAa,EAAE,MAAM,QAAA,EAAU,EAAE,OAAA,EAAQ;AAAA;AAAA,MAEzD,UAAA,EAAYT,kBAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MAC1C,SAAA,EAAWD,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ;AAAA,MACtC,SAAA,EAAWA,eAAA,CAAK,YAAY,CAAA,CAAE,OAAA;AAAQ,KACxC;AAAA,IACA,CAAC,CAAA,KAAM;AAAA,MACLE,qBAAA,CAAW;AAAA,QACT,OAAA,EAAS,CAAC,CAAA,CAAE,OAAA,EAAS,EAAE,QAAA,EAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,SAAS;AAAA,OACvD,CAAA;AAAA;AAAA,MAEDC,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,UAAU,WAAW,CAAA,CAAE,EAAA;AAAA,QAChC,CAAA,CAAE,OAAA;AAAA,QACF,CAAA,CAAE,QAAA;AAAA,QACF,CAAA,CAAE;AAAA,OACJ;AAAA;AAAA,MAEAA,gBAAA,CAAM,CAAA,EAAG,CAAA,CAAE,UAAU,iBAAiB,CAAA,CAAE,EAAA;AAAA,QACtC,CAAA,CAAE,OAAA;AAAA,QACF,CAAA,CAAE,QAAA;AAAA,QACF,CAAA,CAAE;AAAA;AACJ;AACF,GACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAAL,MAAAA,EAAO,KAAA,EAAAO,MAAAA,EAAO,SAAAE,QAAAA,EAAS,cAAA,EAAAC,eAAAA,EAAgB,UAAA,EAAAC,WAAAA,EAAW;AAC7D;AAKO,IAAM,SAAS,kBAAA;AAKf,IAAM,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,cAAA,EAAgB,YAAW,GAAI","file":"chunk-N4AOJ3VF.cjs","sourcesContent":["/**\n * Drizzle SQLite schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Users import these tables into their Drizzle schema and use drizzle-kit\n * for migrations.\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/drizzle/schema/sqlite\";\n *\n * // Custom table names\n * import { createSqliteTables } from \"@nicia-ai/typegraph/drizzle/schema/sqlite\";\n * const tables = createSqliteTables({\n * nodes: \"myapp_nodes\",\n * edges: \"myapp_edges\",\n * });\n * ```\n */\nimport {\n blob,\n index,\n integer,\n primaryKey,\n sqliteTable,\n text,\n} from \"drizzle-orm/sqlite-core\";\n\nimport {\n buildSqliteEdgeIndexBuilders,\n buildSqliteNodeIndexBuilders,\n type TypeGraphIndex,\n} from \"../../../indexes\";\n\n/**\n * Table name configuration.\n */\nexport type TableNames = Readonly<{\n nodes: string;\n edges: string;\n uniques: string;\n schemaVersions: string;\n embeddings: string;\n}>;\n\nexport type CreateSqliteTablesOptions = Readonly<{\n /**\n * Additional TypeGraph indexes to include in the Drizzle schema.\n *\n * These become first-class Drizzle indexes, so drizzle-kit migrations will\n * pick them up automatically.\n */\n indexes?: readonly TypeGraphIndex[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: TableNames = {\n nodes: \"typegraph_nodes\",\n edges: \"typegraph_edges\",\n uniques: \"typegraph_node_uniques\",\n schemaVersions: \"typegraph_schema_versions\",\n embeddings: \"typegraph_node_embeddings\",\n};\n\n/**\n * Creates SQLite table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createSqliteTables(\n names: Partial<TableNames> = {},\n options: CreateSqliteTablesOptions = {},\n) {\n const n: TableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n const indexes = options.indexes ?? [];\n\n const nodes = sqliteTable(\n n.nodes,\n {\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: text(\"props\").notNull(),\n version: integer(\"version\").notNull().default(1),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n index(`${n.nodes}_kind_idx`).on(t.graphId, t.kind),\n index(`${n.nodes}_deleted_idx`).on(t.graphId, t.deletedAt),\n index(`${n.nodes}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),\n ...buildSqliteNodeIndexBuilders(t, indexes),\n ],\n );\n\n const edges = sqliteTable(\n n.edges,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: text(\"props\").notNull(),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n index(`${n.edges}_kind_idx`).on(t.graphId, t.kind),\n index(`${n.edges}_from_idx`).on(t.graphId, t.fromKind, t.fromId),\n index(`${n.edges}_to_idx`).on(t.graphId, t.toKind, t.toId),\n index(`${n.edges}_deleted_idx`).on(t.graphId, t.deletedAt),\n index(`${n.edges}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),\n index(`${n.edges}_cardinality_idx`).on(\n t.graphId,\n t.kind,\n t.fromKind,\n t.fromId,\n t.validTo,\n ),\n ...buildSqliteEdgeIndexBuilders(t, indexes),\n ],\n );\n\n const uniques = sqliteTable(\n n.uniques,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n constraintName: text(\"constraint_name\").notNull(),\n key: text(\"key\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n concreteKind: text(\"concrete_kind\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n }),\n index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n ],\n );\n\n const schemaVersions = sqliteTable(\n n.schemaVersions,\n {\n graphId: text(\"graph_id\").notNull(),\n version: integer(\"version\").notNull(),\n schemaHash: text(\"schema_hash\").notNull(),\n schemaDoc: text(\"schema_doc\").notNull(),\n createdAt: text(\"created_at\").notNull(),\n isActive: integer(\"is_active\", { mode: \"boolean\" })\n .notNull()\n .default(false),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.version] }),\n index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n ],\n );\n\n /**\n * Embeddings table for vector search.\n *\n * Stores embeddings as BLOB (for sqlite-vec binary format) or as JSON text.\n * When sqlite-vec extension is loaded, the BLOB column can be used with\n * vec_f32() for similarity operations.\n */\n const embeddings = sqliteTable(\n n.embeddings,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n fieldPath: text(\"field_path\").notNull(),\n /**\n * Embedding vector.\n * Stored as BLOB for sqlite-vec binary format, or JSON text for fallback.\n * For sqlite-vec: use vec_f32() to convert JSON array to binary.\n */\n embedding: blob(\"embedding\", { mode: \"buffer\" }).notNull(),\n /** Number of dimensions (for validation) */\n dimensions: integer(\"dimensions\").notNull(),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.nodeId, t.fieldPath],\n }),\n // Index for looking up embeddings by node\n index(`${n.embeddings}_node_idx`).on(\n t.graphId,\n t.nodeKind,\n t.nodeId,\n ),\n // Index for filtering by kind and field (used in vector search)\n index(`${n.embeddings}_kind_field_idx`).on(\n t.graphId,\n t.nodeKind,\n t.fieldPath,\n ),\n ],\n );\n\n return { nodes, edges, uniques, schemaVersions, embeddings } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createSqliteTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const { nodes, edges, uniques, schemaVersions, embeddings } = tables;\n\n/**\n * Type representing the tables object returned by createSqliteTables.\n */\nexport type SqliteTables = ReturnType<typeof createSqliteTables>;\n\n/**\n * Type for nodes table.\n */\nexport type NodesTable = SqliteTables[\"nodes\"];\n\n/**\n * Type for edges table.\n */\nexport type EdgesTable = SqliteTables[\"edges\"];\n\n/**\n * Type for uniques table.\n */\nexport type UniquesTable = SqliteTables[\"uniques\"];\n\n/**\n * Type for schema versions table.\n */\nexport type SchemaVersionsTable = SqliteTables[\"schemaVersions\"];\n\n/**\n * Type for embeddings table.\n */\nexport type EmbeddingsTable = SqliteTables[\"embeddings\"];\n"]}
|