@zauso-ai/capstan-db 0.2.0 → 0.3.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/dist/client.d.ts +3 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +206 -27
- package/dist/client.js.map +1 -1
- package/dist/crud.d.ts +14 -0
- package/dist/crud.d.ts.map +1 -1
- package/dist/crud.js +49 -39
- package/dist/crud.js.map +1 -1
- package/dist/dialect.d.ts +25 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +208 -0
- package/dist/dialect.js.map +1 -0
- package/dist/embedding.d.ts +63 -0
- package/dist/embedding.d.ts.map +1 -0
- package/dist/embedding.js +61 -0
- package/dist/embedding.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate.d.ts +44 -23
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +308 -125
- package/dist/migrate.js.map +1 -1
- package/dist/model.d.ts +9 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +13 -0
- package/dist/model.js.map +1 -1
- package/dist/naming.d.ts +37 -0
- package/dist/naming.d.ts.map +1 -0
- package/dist/naming.js +196 -0
- package/dist/naming.js.map +1 -0
- package/dist/runtime.d.ts +51 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +490 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema.d.ts +2 -27
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +181 -197
- package/dist/schema.js.map +1 -1
- package/dist/search.d.ts +52 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +110 -0
- package/dist/search.js.map +1 -0
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vector-store-memory.d.ts +31 -0
- package/dist/vector-store-memory.d.ts.map +1 -0
- package/dist/vector-store-memory.js +125 -0
- package/dist/vector-store-memory.js.map +1 -0
- package/dist/vector-store-pgvector.d.ts +46 -0
- package/dist/vector-store-pgvector.d.ts.map +1 -0
- package/dist/vector-store-pgvector.js +215 -0
- package/dist/vector-store-pgvector.js.map +1 -0
- package/dist/vector-store-sqlite.d.ts +51 -0
- package/dist/vector-store-sqlite.d.ts.map +1 -0
- package/dist/vector-store-sqlite.js +203 -0
- package/dist/vector-store-sqlite.js.map +1 -0
- package/dist/vector-store.d.ts +79 -0
- package/dist/vector-store.d.ts.map +1 -0
- package/dist/vector-store.js +5 -0
- package/dist/vector-store.js.map +1 -0
- package/dist/write.d.ts +15 -0
- package/dist/write.d.ts.map +1 -0
- package/dist/write.js +156 -0
- package/dist/write.js.map +1 -0
- package/package.json +9 -4
package/dist/migrate.js
CHANGED
|
@@ -1,175 +1,289 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
function toSnakeCase(str) {
|
|
5
|
-
return str.replace(/[A-Z]/g, (ch) => `_${ch.toLowerCase()}`);
|
|
6
|
-
}
|
|
7
|
-
function pluralise(name) {
|
|
8
|
-
const lower = name.charAt(0).toLowerCase() + name.slice(1);
|
|
9
|
-
if (lower.endsWith("y") && !/[aeiou]y$/i.test(lower)) {
|
|
10
|
-
return lower.slice(0, -1) + "ies";
|
|
11
|
-
}
|
|
12
|
-
if (lower.endsWith("s") || lower.endsWith("x") || lower.endsWith("sh") || lower.endsWith("ch")) {
|
|
13
|
-
return lower + "es";
|
|
14
|
-
}
|
|
15
|
-
return lower + "s";
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Map a Capstan scalar type to a SQLite column type.
|
|
19
|
-
*/
|
|
20
|
-
function sqliteType(type) {
|
|
21
|
-
switch (type) {
|
|
22
|
-
case "string":
|
|
23
|
-
case "text":
|
|
24
|
-
case "date":
|
|
25
|
-
case "datetime":
|
|
26
|
-
case "json":
|
|
27
|
-
return "TEXT";
|
|
28
|
-
case "integer":
|
|
29
|
-
case "boolean":
|
|
30
|
-
return "INTEGER";
|
|
31
|
-
case "number":
|
|
32
|
-
return "REAL";
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Generate the SQL default expression for a field.
|
|
37
|
-
*/
|
|
38
|
-
function sqlDefault(def) {
|
|
39
|
-
if (def.default === undefined)
|
|
40
|
-
return null;
|
|
41
|
-
if (def.default === "now")
|
|
42
|
-
return "DEFAULT (datetime('now'))";
|
|
43
|
-
if (typeof def.default === "string")
|
|
44
|
-
return `DEFAULT '${def.default.replace(/'/g, "''")}'`;
|
|
45
|
-
if (typeof def.default === "boolean")
|
|
46
|
-
return `DEFAULT ${def.default ? 1 : 0}`;
|
|
47
|
-
if (typeof def.default === "number")
|
|
48
|
-
return `DEFAULT ${def.default}`;
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Build a column definition clause for a CREATE TABLE statement.
|
|
53
|
-
*/
|
|
54
|
-
function columnDef(fieldName, def) {
|
|
1
|
+
import { sqlDefaultClause, sqlTypeForField, sqlTypeForReference } from "./dialect.js";
|
|
2
|
+
import { indexSignature, resolveReferenceField, stableFieldSignature, tableNameForModel, toSnakeCase } from "./naming.js";
|
|
3
|
+
function columnDef(fieldName, def, provider, modelMap) {
|
|
55
4
|
const colName = toSnakeCase(fieldName);
|
|
56
|
-
const
|
|
5
|
+
const referencedField = def.references
|
|
6
|
+
? (() => {
|
|
7
|
+
const target = resolveReferenceField(def.references, modelMap);
|
|
8
|
+
return modelMap.get(target.modelName)?.fields[target.fieldName];
|
|
9
|
+
})()
|
|
10
|
+
: undefined;
|
|
11
|
+
const parts = [colName, referencedField ? sqlTypeForReference(referencedField, provider) : sqlTypeForField(def, provider)];
|
|
57
12
|
if (def.autoId) {
|
|
58
13
|
parts.push("PRIMARY KEY");
|
|
59
14
|
}
|
|
60
|
-
if (def.required && !def.autoId) {
|
|
15
|
+
if ((def.required || def.updatedAt) && !def.autoId) {
|
|
61
16
|
parts.push("NOT NULL");
|
|
62
17
|
}
|
|
63
18
|
if (def.unique && !def.autoId) {
|
|
64
19
|
parts.push("UNIQUE");
|
|
65
20
|
}
|
|
66
|
-
const defaultExpr =
|
|
21
|
+
const defaultExpr = sqlDefaultClause(def, provider);
|
|
67
22
|
if (defaultExpr) {
|
|
68
23
|
parts.push(defaultExpr);
|
|
69
24
|
}
|
|
70
25
|
if (def.references) {
|
|
71
|
-
const
|
|
72
|
-
parts.push(`REFERENCES ${
|
|
26
|
+
const target = resolveReferenceField(def.references, modelMap);
|
|
27
|
+
parts.push(`REFERENCES ${tableNameForModel(target.modelName)}(${toSnakeCase(target.fieldName)})`);
|
|
73
28
|
}
|
|
74
29
|
return parts.join(" ");
|
|
75
30
|
}
|
|
76
|
-
function
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
function createTableSQL(model) {
|
|
80
|
-
const tableName = pluralise(model.name);
|
|
81
|
-
const cols = Object.entries(model.fields).map(([name, def]) => ` ${columnDef(name, def)}`);
|
|
31
|
+
function createTableSQL(model, provider, modelMap, tableNameOverride) {
|
|
32
|
+
const tableName = tableNameOverride ?? tableNameForModel(model);
|
|
33
|
+
const cols = Object.entries(model.fields).map(([name, def]) => ` ${columnDef(name, def, provider, modelMap)}`);
|
|
82
34
|
return `CREATE TABLE ${tableName} (\n${cols.join(",\n")}\n)`;
|
|
83
35
|
}
|
|
84
|
-
function dropTableSQL(tableName) {
|
|
85
|
-
|
|
36
|
+
function dropTableSQL(tableName, provider) {
|
|
37
|
+
switch (provider) {
|
|
38
|
+
case "sqlite":
|
|
39
|
+
case "libsql":
|
|
40
|
+
case "postgres":
|
|
41
|
+
case "mysql":
|
|
42
|
+
return `DROP TABLE IF EXISTS ${tableName}`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function addColumnSQL(tableName, fieldName, def, provider, modelMap) {
|
|
46
|
+
return `ALTER TABLE ${tableName} ADD COLUMN ${columnDef(fieldName, def, provider, modelMap)}`;
|
|
47
|
+
}
|
|
48
|
+
function renameColumnSQL(tableName, fromFieldName, toFieldName) {
|
|
49
|
+
return `ALTER TABLE ${tableName} RENAME COLUMN ${toSnakeCase(fromFieldName)} TO ${toSnakeCase(toFieldName)}`;
|
|
50
|
+
}
|
|
51
|
+
function renameTableSQL(fromTableName, toTableName, provider) {
|
|
52
|
+
switch (provider) {
|
|
53
|
+
case "mysql":
|
|
54
|
+
return `RENAME TABLE ${fromTableName} TO ${toTableName}`;
|
|
55
|
+
case "sqlite":
|
|
56
|
+
case "libsql":
|
|
57
|
+
case "postgres":
|
|
58
|
+
return `ALTER TABLE ${fromTableName} RENAME TO ${toTableName}`;
|
|
59
|
+
}
|
|
86
60
|
}
|
|
87
|
-
function
|
|
88
|
-
return `
|
|
61
|
+
function indexName(tableName, idx) {
|
|
62
|
+
return `idx_${tableName}_${idx.fields.map(toSnakeCase).join("_")}`;
|
|
89
63
|
}
|
|
90
|
-
function createIndexSQL(tableName, idx,
|
|
91
|
-
const idxName =
|
|
64
|
+
function createIndexSQL(tableName, idx, provider) {
|
|
65
|
+
const idxName = indexName(tableName, idx);
|
|
92
66
|
const unique = idx.unique ? "UNIQUE " : "";
|
|
93
|
-
const cols = idx.fields.map((
|
|
94
|
-
const col = toSnakeCase(
|
|
67
|
+
const cols = idx.fields.map((fieldName) => {
|
|
68
|
+
const col = toSnakeCase(fieldName);
|
|
95
69
|
return idx.order ? `${col} ${idx.order.toUpperCase()}` : col;
|
|
96
70
|
});
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
71
|
+
switch (provider) {
|
|
72
|
+
case "sqlite":
|
|
73
|
+
case "libsql":
|
|
74
|
+
case "postgres":
|
|
75
|
+
return `CREATE ${unique}INDEX IF NOT EXISTS ${idxName} ON ${tableName} (${cols.join(", ")})`;
|
|
76
|
+
case "mysql":
|
|
77
|
+
return `CREATE ${unique}INDEX ${idxName} ON ${tableName} (${cols.join(", ")})`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function dropIndexSQL(tableName, idx, provider) {
|
|
81
|
+
const idxName = indexName(tableName, idx);
|
|
82
|
+
switch (provider) {
|
|
83
|
+
case "sqlite":
|
|
84
|
+
case "libsql":
|
|
85
|
+
case "postgres":
|
|
86
|
+
return `DROP INDEX IF EXISTS ${idxName}`;
|
|
87
|
+
case "mysql":
|
|
88
|
+
return `DROP INDEX ${idxName} ON ${tableName}`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function tableInfo(model) {
|
|
92
|
+
return { tableName: tableNameForModel(model), model };
|
|
93
|
+
}
|
|
94
|
+
function resolveMigrationOptions(options) {
|
|
95
|
+
if (!options) {
|
|
96
|
+
return { provider: "sqlite", allowDestructive: false, strict: false };
|
|
97
|
+
}
|
|
98
|
+
if (typeof options === "string") {
|
|
99
|
+
return { provider: options, allowDestructive: false, strict: false };
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
provider: options.provider ?? "sqlite",
|
|
103
|
+
allowDestructive: options.allowDestructive ?? false,
|
|
104
|
+
strict: options.strict ?? false,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function isBlockingIssue(issue) {
|
|
108
|
+
return issue.code !== "RENAME_COLUMN";
|
|
109
|
+
}
|
|
110
|
+
function detectColumnRenames(fromModel, toModel) {
|
|
111
|
+
const removed = Object.keys(fromModel.fields).filter((fieldName) => !(fieldName in toModel.fields));
|
|
112
|
+
const added = Object.keys(toModel.fields).filter((fieldName) => !(fieldName in fromModel.fields));
|
|
113
|
+
const used = new Set();
|
|
114
|
+
const renames = [];
|
|
115
|
+
for (const toFieldName of added) {
|
|
116
|
+
const matches = removed.filter((fromFieldName) => !used.has(fromFieldName) &&
|
|
117
|
+
stableFieldSignature(fromModel.fields[fromFieldName]) === stableFieldSignature(toModel.fields[toFieldName]));
|
|
118
|
+
if (matches.length === 1) {
|
|
119
|
+
const fromFieldName = matches[0];
|
|
120
|
+
used.add(fromFieldName);
|
|
121
|
+
renames.push({ fromFieldName, toFieldName });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return renames;
|
|
125
|
+
}
|
|
126
|
+
function tempTableName(tableName) {
|
|
127
|
+
return `__capstan_tmp_${tableName}`;
|
|
128
|
+
}
|
|
129
|
+
function buildTableRewriteSQL(fromModel, toModel, provider, modelMap, renames) {
|
|
130
|
+
const tableName = tableNameForModel(toModel);
|
|
131
|
+
const tempName = tempTableName(tableName);
|
|
132
|
+
const renamedFields = new Map(renames.map((rename) => [rename.toFieldName, rename.fromFieldName]));
|
|
133
|
+
const copyColumns = Object.keys(toModel.fields)
|
|
134
|
+
.map((fieldName) => {
|
|
135
|
+
const sourceFieldName = renamedFields.get(fieldName) ?? (fieldName in fromModel.fields ? fieldName : null);
|
|
136
|
+
if (!sourceFieldName) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
targetColumn: toSnakeCase(fieldName),
|
|
141
|
+
sourceColumn: toSnakeCase(sourceFieldName),
|
|
142
|
+
};
|
|
143
|
+
})
|
|
144
|
+
.filter((entry) => entry !== null);
|
|
145
|
+
const statements = [createTableSQL(toModel, provider, modelMap, tempName)];
|
|
146
|
+
if (copyColumns.length > 0) {
|
|
147
|
+
statements.push(`INSERT INTO ${tempName} (${copyColumns.map((entry) => entry.targetColumn).join(", ")}) ` +
|
|
148
|
+
`SELECT ${copyColumns.map((entry) => entry.sourceColumn).join(", ")} FROM ${tableName}`);
|
|
149
|
+
}
|
|
150
|
+
statements.push(dropTableSQL(tableName, provider));
|
|
151
|
+
statements.push(renameTableSQL(tempName, tableName, provider));
|
|
152
|
+
for (const idx of toModel.indexes) {
|
|
153
|
+
statements.push(createIndexSQL(tableName, idx, provider));
|
|
154
|
+
}
|
|
155
|
+
return statements;
|
|
156
|
+
}
|
|
157
|
+
export function planMigration(fromModels, toModels, options) {
|
|
158
|
+
const resolved = resolveMigrationOptions(options);
|
|
114
159
|
const statements = [];
|
|
160
|
+
const issues = [];
|
|
115
161
|
const fromMap = new Map();
|
|
116
|
-
for (const
|
|
117
|
-
const info = tableInfo(
|
|
162
|
+
for (const model of fromModels) {
|
|
163
|
+
const info = tableInfo(model);
|
|
118
164
|
fromMap.set(info.tableName, info);
|
|
119
165
|
}
|
|
120
166
|
const toMap = new Map();
|
|
121
|
-
for (const
|
|
122
|
-
const info = tableInfo(
|
|
167
|
+
for (const model of toModels) {
|
|
168
|
+
const info = tableInfo(model);
|
|
123
169
|
toMap.set(info.tableName, info);
|
|
124
170
|
}
|
|
125
|
-
|
|
171
|
+
const modelMap = new Map([
|
|
172
|
+
...fromModels.map((model) => [model.name, model]),
|
|
173
|
+
...toModels.map((model) => [model.name, model]),
|
|
174
|
+
]);
|
|
126
175
|
for (const [tableName] of fromMap) {
|
|
127
176
|
if (!toMap.has(tableName)) {
|
|
128
|
-
|
|
177
|
+
issues.push({
|
|
178
|
+
code: "DROP_TABLE",
|
|
179
|
+
tableName,
|
|
180
|
+
destructive: true,
|
|
181
|
+
message: `Table "${tableName}" no longer exists in the target model set.`,
|
|
182
|
+
});
|
|
183
|
+
if (resolved.allowDestructive) {
|
|
184
|
+
statements.push(dropTableSQL(tableName, resolved.provider));
|
|
185
|
+
}
|
|
129
186
|
}
|
|
130
187
|
}
|
|
131
|
-
// Tables in `to`
|
|
132
188
|
for (const [tableName, toInfo] of toMap) {
|
|
133
189
|
const fromInfo = fromMap.get(tableName);
|
|
134
190
|
if (!fromInfo) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
for (let i = 0; i < toInfo.model.indexes.length; i++) {
|
|
139
|
-
statements.push(createIndexSQL(tableName, toInfo.model.indexes[i], i));
|
|
191
|
+
statements.push(createTableSQL(toInfo.model, resolved.provider, modelMap));
|
|
192
|
+
for (const idx of toInfo.model.indexes) {
|
|
193
|
+
statements.push(createIndexSQL(tableName, idx, resolved.provider));
|
|
140
194
|
}
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const fromFieldNames = new Set(Object.keys(fromInfo.model.fields));
|
|
198
|
+
const toFieldNames = new Set(Object.keys(toInfo.model.fields));
|
|
199
|
+
const renames = detectColumnRenames(fromInfo.model, toInfo.model);
|
|
200
|
+
const renamedFrom = new Set(renames.map((rename) => rename.fromFieldName));
|
|
201
|
+
const renamedTo = new Set(renames.map((rename) => rename.toFieldName));
|
|
202
|
+
const addedFieldNames = [...toFieldNames].filter((fieldName) => !fromFieldNames.has(fieldName) && !renamedTo.has(fieldName));
|
|
203
|
+
const removedFieldNames = [...fromFieldNames].filter((fieldName) => !toFieldNames.has(fieldName) && !renamedFrom.has(fieldName));
|
|
204
|
+
const changedFieldNames = Object.keys(toInfo.model.fields).filter((fieldName) => fieldName in fromInfo.model.fields &&
|
|
205
|
+
stableFieldSignature(fromInfo.model.fields[fieldName]) !== stableFieldSignature(toInfo.model.fields[fieldName]));
|
|
206
|
+
for (const rename of renames) {
|
|
207
|
+
issues.push({
|
|
208
|
+
code: "RENAME_COLUMN",
|
|
209
|
+
tableName,
|
|
210
|
+
fieldName: `${rename.fromFieldName}->${rename.toFieldName}`,
|
|
211
|
+
destructive: false,
|
|
212
|
+
message: `Column "${tableName}.${rename.fromFieldName}" was renamed to "${rename.toFieldName}".`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
for (const fieldName of removedFieldNames) {
|
|
216
|
+
issues.push({
|
|
217
|
+
code: "DROP_COLUMN",
|
|
218
|
+
tableName,
|
|
219
|
+
fieldName,
|
|
220
|
+
destructive: true,
|
|
221
|
+
message: `Column "${tableName}.${fieldName}" no longer exists in the target model set.`,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
const needsRewrite = changedFieldNames.length > 0 || removedFieldNames.length > 0;
|
|
225
|
+
const canRewrite = removedFieldNames.length === 0 || resolved.allowDestructive;
|
|
226
|
+
if (needsRewrite && canRewrite) {
|
|
227
|
+
statements.push(...buildTableRewriteSQL(fromInfo.model, toInfo.model, resolved.provider, modelMap, renames));
|
|
141
228
|
}
|
|
142
229
|
else {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
230
|
+
for (const rename of renames) {
|
|
231
|
+
statements.push(renameColumnSQL(tableName, rename.fromFieldName, rename.toFieldName));
|
|
232
|
+
}
|
|
233
|
+
for (const fieldName of addedFieldNames) {
|
|
234
|
+
statements.push(addColumnSQL(tableName, fieldName, toInfo.model.fields[fieldName], resolved.provider, modelMap));
|
|
235
|
+
}
|
|
236
|
+
for (const fieldName of changedFieldNames) {
|
|
237
|
+
issues.push({
|
|
238
|
+
code: "ALTER_COLUMN",
|
|
239
|
+
tableName,
|
|
240
|
+
fieldName,
|
|
241
|
+
destructive: false,
|
|
242
|
+
message: `Column "${tableName}.${fieldName}" changed shape and requires a table rewrite migration.`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const existingIndexes = new Map(fromInfo.model.indexes.map((idx) => [indexSignature(idx), idx]));
|
|
247
|
+
const nextIndexes = new Map(toInfo.model.indexes.map((idx) => [indexSignature(idx), idx]));
|
|
248
|
+
if (!needsRewrite || !canRewrite) {
|
|
249
|
+
for (const [signature, idx] of nextIndexes) {
|
|
250
|
+
if (!existingIndexes.has(signature)) {
|
|
251
|
+
statements.push(createIndexSQL(tableName, idx, resolved.provider));
|
|
148
252
|
}
|
|
149
253
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
254
|
+
for (const [signature, idx] of existingIndexes) {
|
|
255
|
+
if (!nextIndexes.has(signature)) {
|
|
256
|
+
issues.push({
|
|
257
|
+
code: "DROP_INDEX",
|
|
258
|
+
tableName,
|
|
259
|
+
destructive: true,
|
|
260
|
+
message: `Index "${indexName(tableName, idx)}" no longer exists in the target model set.`,
|
|
261
|
+
});
|
|
262
|
+
if (resolved.allowDestructive) {
|
|
263
|
+
statements.push(dropIndexSQL(tableName, idx, resolved.provider));
|
|
264
|
+
}
|
|
157
265
|
}
|
|
158
266
|
}
|
|
159
267
|
}
|
|
160
268
|
}
|
|
161
|
-
return
|
|
269
|
+
return {
|
|
270
|
+
provider: resolved.provider,
|
|
271
|
+
statements,
|
|
272
|
+
issues,
|
|
273
|
+
safe: issues.every((issue) => !isBlockingIssue(issue)),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
export function generateMigration(fromModels, toModels, options) {
|
|
277
|
+
const resolved = resolveMigrationOptions(options);
|
|
278
|
+
const plan = planMigration(fromModels, toModels, resolved);
|
|
279
|
+
if (resolved.strict && plan.issues.some((issue) => isBlockingIssue(issue))) {
|
|
280
|
+
const details = plan.issues
|
|
281
|
+
.map((issue) => `- ${issue.code}: ${issue.message}`)
|
|
282
|
+
.join("\n");
|
|
283
|
+
throw new Error(`Unsafe or unsupported migration changes detected:\n${details}`);
|
|
284
|
+
}
|
|
285
|
+
return plan.statements;
|
|
162
286
|
}
|
|
163
|
-
/**
|
|
164
|
-
* Execute an array of SQL migration statements against a database.
|
|
165
|
-
*
|
|
166
|
-
* The statements are run inside a transaction so that either all succeed or
|
|
167
|
-
* none are applied.
|
|
168
|
-
*
|
|
169
|
-
* @param db - A Drizzle `BetterSQLite3Database` instance (or any object whose
|
|
170
|
-
* `$client` property is a better-sqlite3 `Database`).
|
|
171
|
-
* @param sql - The SQL statements to execute.
|
|
172
|
-
*/
|
|
173
287
|
export function applyMigration(db, sql) {
|
|
174
288
|
if (sql.length === 0)
|
|
175
289
|
return;
|
|
@@ -186,4 +300,73 @@ export function applyMigration(db, sql) {
|
|
|
186
300
|
throw err;
|
|
187
301
|
}
|
|
188
302
|
}
|
|
303
|
+
function createTrackingTableSQL(provider) {
|
|
304
|
+
switch (provider) {
|
|
305
|
+
case "postgres":
|
|
306
|
+
return `CREATE TABLE IF NOT EXISTS _capstan_migrations (
|
|
307
|
+
id SERIAL PRIMARY KEY,
|
|
308
|
+
name TEXT NOT NULL UNIQUE,
|
|
309
|
+
applied_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
310
|
+
)`;
|
|
311
|
+
case "mysql":
|
|
312
|
+
return `CREATE TABLE IF NOT EXISTS _capstan_migrations (
|
|
313
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
314
|
+
name VARCHAR(255) NOT NULL UNIQUE,
|
|
315
|
+
applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
316
|
+
)`;
|
|
317
|
+
case "sqlite":
|
|
318
|
+
case "libsql":
|
|
319
|
+
default:
|
|
320
|
+
return `CREATE TABLE IF NOT EXISTS _capstan_migrations (
|
|
321
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
322
|
+
name TEXT NOT NULL UNIQUE,
|
|
323
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
324
|
+
)`;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
export function ensureTrackingTable(client, provider = "sqlite") {
|
|
328
|
+
client.exec(createTrackingTableSQL(provider));
|
|
329
|
+
}
|
|
330
|
+
export function getAppliedMigrations(client) {
|
|
331
|
+
const rows = client.prepare("SELECT name FROM _capstan_migrations ORDER BY id ASC").all();
|
|
332
|
+
return rows.map((row) => row.name);
|
|
333
|
+
}
|
|
334
|
+
export function getMigrationStatus(client, allMigrationNames, provider = "sqlite") {
|
|
335
|
+
ensureTrackingTable(client, provider);
|
|
336
|
+
const rows = client.prepare("SELECT name, applied_at FROM _capstan_migrations ORDER BY id ASC").all();
|
|
337
|
+
const appliedSet = new Set(rows.map((row) => row.name));
|
|
338
|
+
return {
|
|
339
|
+
applied: rows.map((row) => ({ name: row.name, appliedAt: row.applied_at })),
|
|
340
|
+
pending: allMigrationNames.filter((name) => !appliedSet.has(name)),
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
export function applyTrackedMigrations(client, migrations, provider = "sqlite") {
|
|
344
|
+
ensureTrackingTable(client, provider);
|
|
345
|
+
const applied = getAppliedMigrations(client);
|
|
346
|
+
const appliedSet = new Set(applied);
|
|
347
|
+
const pending = migrations.filter((migration) => !appliedSet.has(migration.name));
|
|
348
|
+
if (pending.length === 0)
|
|
349
|
+
return [];
|
|
350
|
+
const executed = [];
|
|
351
|
+
for (const migration of pending) {
|
|
352
|
+
const statements = migration.sql
|
|
353
|
+
.split(";")
|
|
354
|
+
.map((statement) => statement.trim())
|
|
355
|
+
.filter((statement) => statement.length > 0 && !statement.startsWith("--"));
|
|
356
|
+
client.exec("BEGIN TRANSACTION");
|
|
357
|
+
try {
|
|
358
|
+
for (const stmt of statements) {
|
|
359
|
+
client.exec(stmt);
|
|
360
|
+
}
|
|
361
|
+
client.prepare("INSERT INTO _capstan_migrations (name) VALUES (?)").run(migration.name);
|
|
362
|
+
client.exec("COMMIT");
|
|
363
|
+
executed.push(migration.name);
|
|
364
|
+
}
|
|
365
|
+
catch (err) {
|
|
366
|
+
client.exec("ROLLBACK");
|
|
367
|
+
throw err;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return executed;
|
|
371
|
+
}
|
|
189
372
|
//# sourceMappingURL=migrate.js.map
|
package/dist/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/model.d.ts
CHANGED
|
@@ -37,6 +37,15 @@ export declare const field: {
|
|
|
37
37
|
* JSON field (stored as TEXT with JSON serialisation in SQLite).
|
|
38
38
|
*/
|
|
39
39
|
json<_T = unknown>(opts?: FieldOptions): FieldDefinition;
|
|
40
|
+
/**
|
|
41
|
+
* Vector embedding field — stores a fixed-length float array.
|
|
42
|
+
* Uses pgvector on PostgreSQL, JSON array on SQLite/MySQL.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* field.vector(1536) // OpenAI ada-002 embeddings
|
|
46
|
+
* field.vector(384, { required: true })
|
|
47
|
+
*/
|
|
48
|
+
vector(dimensions: number, opts?: FieldOptions): FieldDefinition;
|
|
40
49
|
/**
|
|
41
50
|
* Enum field — stored as TEXT with a constrained set of values.
|
|
42
51
|
*
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAc,MAAM,YAAY,CAAC;AAMpH,KAAK,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAc,MAAM,YAAY,CAAC;AAMpH,KAAK,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAmBlD,eAAO,MAAM,KAAK;IAChB;;OAEG;UACG,eAAe;IAIrB;;OAEG;kBACW,YAAY,GAAG,eAAe;IAI5C;;OAEG;gBACS,YAAY,GAAG,eAAe;IAI1C;;OAEG;mBACY,YAAY,GAAG,eAAe;IAI7C;;OAEG;kBACW,YAAY,GAAG,eAAe;IAI5C;;OAEG;mBACY,YAAY,GAAG,eAAe;IAI7C;;OAEG;gBACS,YAAY,GAAG,eAAe;IAI1C;;OAEG;oBACa,YAAY,GAAG,eAAe;IAI9C;;OAEG;SACE,EAAE,mBAAmB,YAAY,GAAG,eAAe;IAIxD;;;;;;;OAOG;uBACgB,MAAM,SAAS,YAAY,GAAG,eAAe;IAIhE;;;;;OAKG;iBACU,SAAS,MAAM,EAAE,SAAS,YAAY,GAAG,eAAe;CAGtE,CAAC;AAMF,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,QAAQ;qBACF,MAAM,SAAS,eAAe,GAAG,kBAAkB;mBAIrD,MAAM,SAAS,eAAe,GAAG,kBAAkB;kBAIpD,MAAM,SAAS,eAAe,GAAG,kBAAkB;sBAI/C,MAAM,SAAS,eAAe,GAAG,kBAAkB;CAGtE,CAAC;AAMF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;CAC7B,GACA,eAAe,CAOjB"}
|
package/dist/model.js
CHANGED
|
@@ -17,6 +17,8 @@ function makeField(type, opts) {
|
|
|
17
17
|
def.updatedAt = opts.updatedAt;
|
|
18
18
|
if (opts.autoId !== undefined)
|
|
19
19
|
def.autoId = opts.autoId;
|
|
20
|
+
if (opts.dimensions !== undefined)
|
|
21
|
+
def.dimensions = opts.dimensions;
|
|
20
22
|
if (opts.references !== undefined)
|
|
21
23
|
def.references = opts.references;
|
|
22
24
|
}
|
|
@@ -77,6 +79,17 @@ export const field = {
|
|
|
77
79
|
json(opts) {
|
|
78
80
|
return makeField("json", opts);
|
|
79
81
|
},
|
|
82
|
+
/**
|
|
83
|
+
* Vector embedding field — stores a fixed-length float array.
|
|
84
|
+
* Uses pgvector on PostgreSQL, JSON array on SQLite/MySQL.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* field.vector(1536) // OpenAI ada-002 embeddings
|
|
88
|
+
* field.vector(384, { required: true })
|
|
89
|
+
*/
|
|
90
|
+
vector(dimensions, opts) {
|
|
91
|
+
return makeField("vector", { ...opts, dimensions });
|
|
92
|
+
},
|
|
80
93
|
/**
|
|
81
94
|
* Enum field — stored as TEXT with a constrained set of values.
|
|
82
95
|
*
|
package/dist/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/naming.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { FieldDefinition, ModelDefinition, RelationDefinition } from "./types.js";
|
|
2
|
+
export declare function toSnakeCase(str: string): string;
|
|
3
|
+
export declare function lowerFirst(str: string): string;
|
|
4
|
+
export declare function pluralizeModelName(name: string): string;
|
|
5
|
+
export declare function tableNameForModel(model: Pick<ModelDefinition, "name"> | string): string;
|
|
6
|
+
export declare function tableVarForModel(model: Pick<ModelDefinition, "name"> | string): string;
|
|
7
|
+
export declare function inferRelationForeignKey(relation: RelationDefinition): string;
|
|
8
|
+
export declare function inferTargetRelationForeignKey(sourceModel: Pick<ModelDefinition, "name"> | string, relation: RelationDefinition): string;
|
|
9
|
+
export declare function resolveTargetRelationForeignKey(sourceModel: ModelDefinition, relation: RelationDefinition, modelMap: Map<string, ModelDefinition>): string;
|
|
10
|
+
export declare function autoFieldNames(model: ModelDefinition): Set<string>;
|
|
11
|
+
export declare function updatedAtFieldNames(model: ModelDefinition): string[];
|
|
12
|
+
export declare function findPrimaryKeyField(model: ModelDefinition): string | null;
|
|
13
|
+
export interface ReferenceTarget {
|
|
14
|
+
modelName: string;
|
|
15
|
+
fieldName?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function parseReferenceTarget(reference: string): ReferenceTarget;
|
|
18
|
+
export declare function resolveReferenceField(reference: string, modelMap?: Map<string, ModelDefinition>): ReferenceTarget & {
|
|
19
|
+
fieldName: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function findModelByReference(reference: string, modelMap: Map<string, ModelDefinition>): ModelDefinition | null;
|
|
22
|
+
export interface ManyToManyResolution {
|
|
23
|
+
throughModel: ModelDefinition;
|
|
24
|
+
sourceForeignKey: string;
|
|
25
|
+
targetForeignKey: string;
|
|
26
|
+
sourcePrimaryKey: string;
|
|
27
|
+
targetPrimaryKey: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function resolveManyToManyRelation(sourceModel: ModelDefinition, relation: RelationDefinition, modelMap: Map<string, ModelDefinition>): ManyToManyResolution | null;
|
|
30
|
+
export declare function stableFieldSignature(field: FieldDefinition): string;
|
|
31
|
+
export declare function indexSignature(index: {
|
|
32
|
+
fields: string[];
|
|
33
|
+
unique?: boolean;
|
|
34
|
+
order?: "asc" | "desc";
|
|
35
|
+
}): string;
|
|
36
|
+
export declare function cloneDefaultValue<T>(value: T): T;
|
|
37
|
+
//# sourceMappingURL=naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEvF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAEtF;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAE5E;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,MAAM,EACnD,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,CAER;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,eAAe,EAC5B,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACrC,MAAM,CAiBR;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAQlE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,CAQpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAYzE;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAGvE;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACtC,eAAe,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAWzC;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACrC,eAAe,GAAG,IAAI,CAiBxB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,eAAe,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,eAAe,EAC5B,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACrC,oBAAoB,GAAG,IAAI,CA2D7B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAcnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,GAAG,MAAM,CAM5G;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAOhD"}
|