@nicia-ai/typegraph 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +2 -2
  2. package/dist/{ast-CXFx6bF6.d.ts → ast-CG87Zr6p.d.ts} +2 -2
  3. package/dist/{ast-D-3bOanX.d.cts → ast-Cq9qrnNP.d.cts} +2 -2
  4. package/dist/backend/postgres/index.cjs +295 -23
  5. package/dist/backend/postgres/index.cjs.map +1 -1
  6. package/dist/backend/postgres/index.d.cts +33 -10
  7. package/dist/backend/postgres/index.d.ts +33 -10
  8. package/dist/backend/postgres/index.js +285 -5
  9. package/dist/backend/postgres/index.js.map +1 -1
  10. package/dist/backend/sqlite/index.cjs +21 -90
  11. package/dist/backend/sqlite/index.cjs.map +1 -1
  12. package/dist/backend/sqlite/index.d.cts +22 -58
  13. package/dist/backend/sqlite/index.d.ts +22 -58
  14. package/dist/backend/sqlite/index.js +3 -78
  15. package/dist/backend/sqlite/index.js.map +1 -1
  16. package/dist/backend/sqlite/local.cjs +83 -0
  17. package/dist/backend/sqlite/local.cjs.map +1 -0
  18. package/dist/backend/sqlite/local.d.cts +66 -0
  19. package/dist/backend/sqlite/local.d.ts +66 -0
  20. package/dist/backend/sqlite/local.js +77 -0
  21. package/dist/backend/sqlite/local.js.map +1 -0
  22. package/dist/chunk-23NGZHUN.cjs +2132 -0
  23. package/dist/chunk-23NGZHUN.cjs.map +1 -0
  24. package/dist/{chunk-ZO2FRJ2U.js → chunk-2DKSQNPW.js} +3 -4
  25. package/dist/chunk-2DKSQNPW.js.map +1 -0
  26. package/dist/chunk-JPO7W262.js +2093 -0
  27. package/dist/chunk-JPO7W262.js.map +1 -0
  28. package/dist/{chunk-NYDXJGA3.cjs → chunk-K5O7TOJO.cjs} +15 -16
  29. package/dist/chunk-K5O7TOJO.cjs.map +1 -0
  30. package/dist/{backend/drizzle/schema/postgres.d.ts → ddl-Bcyb4DW1.d.cts} +17 -17
  31. package/dist/{backend/drizzle/schema/postgres.d.cts → ddl-D7DQx8w8.d.ts} +17 -17
  32. package/dist/{index-DyrR_d-H.d.cts → index-QTnQwakS.d.cts} +1 -1
  33. package/dist/{index-DyrR_d-H.d.ts → index-QTnQwakS.d.ts} +1 -1
  34. package/dist/index.cjs +238 -1
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +11 -12
  37. package/dist/index.d.ts +11 -12
  38. package/dist/index.js +238 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/indexes/index.d.cts +5 -6
  41. package/dist/indexes/index.d.ts +5 -6
  42. package/dist/interchange/index.d.cts +5 -6
  43. package/dist/interchange/index.d.ts +5 -6
  44. package/dist/{manager-0NysX4s6.d.cts → manager-BImRiYwz.d.cts} +3 -3
  45. package/dist/{manager-DFKe7ql3.d.ts → manager-DGQ9UF18.d.ts} +3 -3
  46. package/dist/profiler/index.d.cts +7 -8
  47. package/dist/profiler/index.d.ts +7 -8
  48. package/dist/schema/index.d.cts +6 -7
  49. package/dist/schema/index.d.ts +6 -7
  50. package/dist/{backend/drizzle/schema/sqlite.d.ts → sqlite-CSJ-fgIm.d.ts} +2 -25
  51. package/dist/{backend/drizzle/schema/sqlite.d.cts → sqlite-FWGZLwDd.d.cts} +2 -25
  52. package/dist/{store-SiovWEYA.d.ts → store-CscQUG-S.d.ts} +57 -6
  53. package/dist/{store-DhoA5uRc.d.cts → store-DNv1yd3n.d.cts} +57 -6
  54. package/dist/{types-DHRsi6j9.d.cts → types-BbMn2Ycv.d.cts} +2 -2
  55. package/dist/{types-ZT5mlism.d.ts → types-C2rhqkg7.d.ts} +2 -2
  56. package/dist/{types-6EKrWTs9.d.ts → types-D5ggX07j.d.ts} +7 -3
  57. package/dist/{types-BL1GyVku.d.cts → types-DEMAqkA1.d.cts} +1 -1
  58. package/dist/{types-DCGa53O2.d.ts → types-DJZoHy5R.d.ts} +1 -1
  59. package/dist/{types-DTJEu_-h.d.ts → types-DolHw9pJ.d.cts} +14 -1
  60. package/dist/{types-DTJEu_-h.d.cts → types-DolHw9pJ.d.ts} +14 -1
  61. package/dist/{types-BUy-pHKH.d.cts → types-SVDEKnU6.d.cts} +7 -3
  62. package/package.json +6 -46
  63. package/dist/backend/drizzle/index.cjs +0 -40
  64. package/dist/backend/drizzle/index.cjs.map +0 -1
  65. package/dist/backend/drizzle/index.d.cts +0 -13
  66. package/dist/backend/drizzle/index.d.ts +0 -13
  67. package/dist/backend/drizzle/index.js +0 -11
  68. package/dist/backend/drizzle/index.js.map +0 -1
  69. package/dist/backend/drizzle/postgres.cjs +0 -26
  70. package/dist/backend/drizzle/postgres.cjs.map +0 -1
  71. package/dist/backend/drizzle/postgres.d.cts +0 -35
  72. package/dist/backend/drizzle/postgres.d.ts +0 -35
  73. package/dist/backend/drizzle/postgres.js +0 -9
  74. package/dist/backend/drizzle/postgres.js.map +0 -1
  75. package/dist/backend/drizzle/schema/postgres.cjs +0 -39
  76. package/dist/backend/drizzle/schema/postgres.cjs.map +0 -1
  77. package/dist/backend/drizzle/schema/postgres.js +0 -6
  78. package/dist/backend/drizzle/schema/postgres.js.map +0 -1
  79. package/dist/backend/drizzle/schema/sqlite.cjs +0 -39
  80. package/dist/backend/drizzle/schema/sqlite.cjs.map +0 -1
  81. package/dist/backend/drizzle/schema/sqlite.js +0 -6
  82. package/dist/backend/drizzle/schema/sqlite.js.map +0 -1
  83. package/dist/backend/drizzle/sqlite.cjs +0 -26
  84. package/dist/backend/drizzle/sqlite.cjs.map +0 -1
  85. package/dist/backend/drizzle/sqlite.d.cts +0 -35
  86. package/dist/backend/drizzle/sqlite.d.ts +0 -35
  87. package/dist/backend/drizzle/sqlite.js +0 -9
  88. package/dist/backend/drizzle/sqlite.js.map +0 -1
  89. package/dist/chunk-3PURVEA4.js +0 -193
  90. package/dist/chunk-3PURVEA4.js.map +0 -1
  91. package/dist/chunk-7RVSDXT3.cjs +0 -1509
  92. package/dist/chunk-7RVSDXT3.cjs.map +0 -1
  93. package/dist/chunk-LUARLSYT.cjs +0 -289
  94. package/dist/chunk-LUARLSYT.cjs.map +0 -1
  95. package/dist/chunk-NU2XNMVI.cjs +0 -201
  96. package/dist/chunk-NU2XNMVI.cjs.map +0 -1
  97. package/dist/chunk-NYDXJGA3.cjs.map +0 -1
  98. package/dist/chunk-OGGLFYFA.js +0 -177
  99. package/dist/chunk-OGGLFYFA.js.map +0 -1
  100. package/dist/chunk-Q6PXIKRQ.js +0 -287
  101. package/dist/chunk-Q6PXIKRQ.js.map +0 -1
  102. package/dist/chunk-SMLIWLS7.js +0 -236
  103. package/dist/chunk-SMLIWLS7.js.map +0 -1
  104. package/dist/chunk-UYMT4LO2.cjs +0 -241
  105. package/dist/chunk-UYMT4LO2.cjs.map +0 -1
  106. package/dist/chunk-XZL6MCZJ.cjs +0 -185
  107. package/dist/chunk-XZL6MCZJ.cjs.map +0 -1
  108. package/dist/chunk-ZO2FRJ2U.js.map +0 -1
  109. package/dist/chunk-ZQGOBVXZ.js +0 -1488
  110. package/dist/chunk-ZQGOBVXZ.js.map +0 -1
  111. package/dist/test-helpers-CIq1Hhj1.d.ts +0 -26
  112. package/dist/test-helpers-DPRFVky4.d.cts +0 -26
  113. package/dist/types-BRzHlhKC.d.cts +0 -14
  114. package/dist/types-BRzHlhKC.d.ts +0 -14
@@ -1,236 +0,0 @@
1
- import { tables as tables$1 } from './chunk-OGGLFYFA.js';
2
- import { tables } from './chunk-3PURVEA4.js';
3
- import { getTableConfig as getTableConfig$1 } from 'drizzle-orm/pg-core';
4
- import { getTableConfig } from 'drizzle-orm/sqlite-core';
5
-
6
- function getSqliteColumnType(column) {
7
- switch (column.columnType) {
8
- case "SQLiteText": {
9
- return "TEXT";
10
- }
11
- case "SQLiteInteger": {
12
- return "INTEGER";
13
- }
14
- case "SQLiteReal": {
15
- return "REAL";
16
- }
17
- case "SQLiteBlob": {
18
- return "BLOB";
19
- }
20
- default: {
21
- return "TEXT";
22
- }
23
- }
24
- }
25
- function formatDefaultValue(value) {
26
- if (value === null) return "NULL";
27
- if (typeof value === "string") return `'${value}'`;
28
- if (typeof value === "number") return String(value);
29
- if (typeof value === "boolean") return value ? "1" : "0";
30
- return JSON.stringify(value);
31
- }
32
- function generateSqliteCreateTableSQL(table) {
33
- const config = getTableConfig(table);
34
- const columnDefs = [];
35
- for (const column of config.columns) {
36
- const parts = [
37
- `"${column.name}"`,
38
- getSqliteColumnType(column)
39
- ];
40
- if (column.notNull) {
41
- parts.push("NOT NULL");
42
- }
43
- if (column.hasDefault && column.default !== void 0) {
44
- parts.push(`DEFAULT ${formatDefaultValue(column.default)}`);
45
- }
46
- columnDefs.push(parts.join(" "));
47
- }
48
- const pk = config.primaryKeys[0];
49
- if (pk) {
50
- const pkColumns = pk.columns.map((c) => `"${c.name}"`).join(", ");
51
- columnDefs.push(`PRIMARY KEY (${pkColumns})`);
52
- }
53
- return `CREATE TABLE IF NOT EXISTS "${config.name}" (
54
- ${columnDefs.join(",\n ")}
55
- );`;
56
- }
57
- function renderIndexColumn(col) {
58
- if (col && typeof col === "object" && "name" in col) {
59
- return `"${col.name}"`;
60
- }
61
- const sql = tryInlineSql(col);
62
- if (sql !== void 0) {
63
- return sql;
64
- }
65
- return "unknown";
66
- }
67
- function tryInlineSql(value) {
68
- if (value && typeof value === "object" && "getSQL" in value) {
69
- const maybe = value;
70
- if (typeof maybe.getSQL === "function") {
71
- return inlineSql(maybe.getSQL());
72
- }
73
- }
74
- return inlineSql(value);
75
- }
76
- function flattenSqlChunk(chunk) {
77
- if (typeof chunk === "string") {
78
- return chunk;
79
- }
80
- if (typeof chunk === "object" && chunk !== null) {
81
- if ("value" in chunk && Array.isArray(chunk.value)) {
82
- return chunk.value.map((part) => flattenSqlChunk(part)).join("");
83
- }
84
- if ("queryChunks" in chunk && Array.isArray(chunk.queryChunks)) {
85
- return chunk.queryChunks.map((part) => flattenSqlChunk(part)).join("");
86
- }
87
- if ("getSQL" in chunk) {
88
- const maybe = chunk;
89
- if (typeof maybe.getSQL === "function") {
90
- return flattenSqlChunk(maybe.getSQL());
91
- }
92
- }
93
- }
94
- throw new Error(`Unable to inline SQL chunk: ${String(chunk)}`);
95
- }
96
- function inlineSql(value) {
97
- try {
98
- return flattenSqlChunk(value);
99
- } catch {
100
- return void 0;
101
- }
102
- }
103
- function inlineSqlOrThrow(value, context) {
104
- const inlined = inlineSql(value);
105
- if (inlined === void 0) {
106
- throw new Error(`Unable to inline SQL for ${context}`);
107
- }
108
- return inlined;
109
- }
110
- function generateSqliteCreateIndexSQL(table) {
111
- const config = getTableConfig(table);
112
- const statements = [];
113
- for (const index of config.indexes) {
114
- const indexConfig = index.config;
115
- const columns = indexConfig.columns.map((c) => renderIndexColumn(c)).join(", ");
116
- const unique = indexConfig.unique ? "UNIQUE " : "";
117
- const where = indexConfig.where ? ` WHERE ${inlineSqlOrThrow(indexConfig.where, `SQLite index "${indexConfig.name}" WHERE clause`)}` : "";
118
- statements.push(
119
- `CREATE ${unique}INDEX IF NOT EXISTS "${indexConfig.name}" ON "${config.name}" (${columns})${where};`
120
- );
121
- }
122
- return statements;
123
- }
124
- function generateSqliteDDL(tables3 = tables$1) {
125
- const statements = [];
126
- for (const table of Object.values(tables3)) {
127
- statements.push(generateSqliteCreateTableSQL(table));
128
- }
129
- for (const table of Object.values(tables3)) {
130
- statements.push(...generateSqliteCreateIndexSQL(table));
131
- }
132
- return statements;
133
- }
134
- function getSqliteMigrationSQL(tables3 = tables$1) {
135
- return generateSqliteDDL(tables3).join("\n\n");
136
- }
137
- function getPgColumnType(column) {
138
- switch (column.columnType) {
139
- case "PgText": {
140
- return "TEXT";
141
- }
142
- case "PgInteger": {
143
- return "INTEGER";
144
- }
145
- case "PgBoolean": {
146
- return "BOOLEAN";
147
- }
148
- case "PgJsonb": {
149
- return "JSONB";
150
- }
151
- case "PgTimestamp": {
152
- return column.config?.withTimezone ? "TIMESTAMPTZ" : "TIMESTAMP";
153
- }
154
- case "PgReal": {
155
- return "REAL";
156
- }
157
- case "PgDoublePrecision": {
158
- return "DOUBLE PRECISION";
159
- }
160
- case "PgCustomColumn": {
161
- const dataType = column.getSQLType?.();
162
- return dataType ?? "TEXT";
163
- }
164
- default: {
165
- return "TEXT";
166
- }
167
- }
168
- }
169
- function formatPgDefaultValue(value) {
170
- if (value === null) return "NULL";
171
- if (typeof value === "string") return `'${value}'`;
172
- if (typeof value === "number") return String(value);
173
- if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
174
- return JSON.stringify(value);
175
- }
176
- function generatePgCreateTableSQL(table) {
177
- const config = getTableConfig$1(table);
178
- const columnDefs = [];
179
- for (const column of config.columns) {
180
- const parts = [
181
- `"${column.name}"`,
182
- getPgColumnType(column)
183
- ];
184
- if (column.notNull) {
185
- parts.push("NOT NULL");
186
- }
187
- if (column.hasDefault && column.default !== void 0) {
188
- parts.push(`DEFAULT ${formatPgDefaultValue(column.default)}`);
189
- }
190
- columnDefs.push(parts.join(" "));
191
- }
192
- const pk = config.primaryKeys[0];
193
- if (pk) {
194
- const pkColumns = pk.columns.map((c) => `"${c.name}"`).join(", ");
195
- columnDefs.push(`PRIMARY KEY (${pkColumns})`);
196
- }
197
- return `CREATE TABLE IF NOT EXISTS "${config.name}" (
198
- ${columnDefs.join(",\n ")}
199
- );`;
200
- }
201
- function generatePgCreateIndexSQL(table) {
202
- const config = getTableConfig$1(table);
203
- const statements = [];
204
- for (const index of config.indexes) {
205
- const indexConfig = index.config;
206
- const columns = indexConfig.columns.map((c) => renderIndexColumn(c)).join(", ");
207
- const unique = indexConfig.unique ? "UNIQUE " : "";
208
- const method = indexConfig.method && indexConfig.method !== "btree" ? ` USING ${indexConfig.method}` : "";
209
- const where = indexConfig.where ? ` WHERE ${inlineSqlOrThrow(indexConfig.where, `PostgreSQL index "${indexConfig.name}" WHERE clause`)}` : "";
210
- statements.push(
211
- `CREATE ${unique}INDEX IF NOT EXISTS "${indexConfig.name}" ON "${config.name}"${method} (${columns})${where};`
212
- );
213
- }
214
- return statements;
215
- }
216
- function generatePostgresDDL(tables3 = tables) {
217
- const statements = [];
218
- for (const table of Object.values(tables3)) {
219
- statements.push(generatePgCreateTableSQL(table));
220
- }
221
- for (const table of Object.values(tables3)) {
222
- statements.push(...generatePgCreateIndexSQL(table));
223
- }
224
- return statements;
225
- }
226
- function getPostgresMigrationSQL(tables3 = tables) {
227
- const extensionSql = "-- Enable pgvector extension for vector similarity search\nCREATE EXTENSION IF NOT EXISTS vector;";
228
- const ddlSql = generatePostgresDDL(tables3).join("\n\n");
229
- return `${extensionSql}
230
-
231
- ${ddlSql}`;
232
- }
233
-
234
- export { generatePostgresDDL, generateSqliteDDL, getPostgresMigrationSQL, getSqliteMigrationSQL };
235
- //# sourceMappingURL=chunk-SMLIWLS7.js.map
236
- //# sourceMappingURL=chunk-SMLIWLS7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/backend/drizzle/test-helpers.ts"],"names":["getSqliteTableConfig","tables","getPgTableConfig"],"mappings":"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","file":"chunk-SMLIWLS7.js","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// Narrow interfaces for Drizzle column internals not exposed in public types.\n// These are accessed only in DDL generation for migration scripts.\ntype TimestampColumnConfig = Readonly<{\n config?: Readonly<{ withTimezone?: boolean }>;\n}>;\ntype CustomColumnType = Readonly<{\n getSQLType?: () => string;\n}>;\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 return (column as unknown as TimestampColumnConfig).config?.withTimezone ?\n \"TIMESTAMPTZ\"\n : \"TIMESTAMP\";\n }\n case \"PgReal\": {\n return \"REAL\";\n }\n case \"PgDoublePrecision\": {\n return \"DOUBLE PRECISION\";\n }\n case \"PgCustomColumn\": {\n const dataType = (column as unknown as CustomColumnType).getSQLType?.();\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"]}
@@ -1,241 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkXZL6MCZJ_cjs = require('./chunk-XZL6MCZJ.cjs');
4
- var chunkNU2XNMVI_cjs = require('./chunk-NU2XNMVI.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 = chunkXZL6MCZJ_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 = chunkXZL6MCZJ_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 = chunkNU2XNMVI_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 = chunkNU2XNMVI_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.generatePostgresDDL = generatePostgresDDL;
237
- exports.generateSqliteDDL = generateSqliteDDL;
238
- exports.getPostgresMigrationSQL = getPostgresMigrationSQL;
239
- exports.getSqliteMigrationSQL = getSqliteMigrationSQL;
240
- //# sourceMappingURL=chunk-UYMT4LO2.cjs.map
241
- //# sourceMappingURL=chunk-UYMT4LO2.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/backend/drizzle/test-helpers.ts"],"names":["getSqliteTableConfig","tables","getPgTableConfig"],"mappings":"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","file":"chunk-UYMT4LO2.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// Narrow interfaces for Drizzle column internals not exposed in public types.\n// These are accessed only in DDL generation for migration scripts.\ntype TimestampColumnConfig = Readonly<{\n config?: Readonly<{ withTimezone?: boolean }>;\n}>;\ntype CustomColumnType = Readonly<{\n getSQLType?: () => string;\n}>;\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 return (column as unknown as TimestampColumnConfig).config?.withTimezone ?\n \"TIMESTAMPTZ\"\n : \"TIMESTAMP\";\n }\n case \"PgReal\": {\n return \"REAL\";\n }\n case \"PgDoublePrecision\": {\n return \"DOUBLE PRECISION\";\n }\n case \"PgCustomColumn\": {\n const dataType = (column as unknown as CustomColumnType).getSQLType?.();\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"]}