@zauso-ai/capstan-db 1.0.0-beta.7 → 1.0.0-beta.8
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 +2 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +156 -17
- 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 +35 -31
- 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/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate.d.ts +22 -46
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +245 -160
- package/dist/migrate.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 -209
- package/dist/schema.js.map +1 -1
- 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 +5 -1
package/dist/client.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
+
import type { DatabaseRuntime } from "./runtime.js";
|
|
1
2
|
import type { DatabaseConfig } from "./types.js";
|
|
2
|
-
export interface DatabaseInstance {
|
|
3
|
-
/** The Drizzle ORM database instance. */
|
|
4
|
-
db: unknown;
|
|
5
|
-
/** Close the underlying database connection. */
|
|
6
|
-
close: () => void;
|
|
3
|
+
export interface DatabaseInstance extends DatabaseRuntime {
|
|
7
4
|
}
|
|
8
5
|
/**
|
|
9
6
|
* Create a Drizzle database instance backed by better-sqlite3 (SQLite),
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAwC,MAAM,cAAc,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AASjD,MAAM,WAAW,gBAAiB,SAAQ,eAAe;CAAG;AAM5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBtF"}
|
package/dist/client.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { createDatabaseRuntime } from "./runtime.js";
|
|
1
2
|
// Helper to dynamically import optional peer dependencies without TypeScript
|
|
2
3
|
// trying to resolve them at compile time (they may not be installed).
|
|
3
4
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
5
|
async function importPeer(specifier) {
|
|
5
6
|
return import(specifier);
|
|
6
7
|
}
|
|
8
|
+
function normalizeParams(params) {
|
|
9
|
+
return params ?? [];
|
|
10
|
+
}
|
|
7
11
|
/**
|
|
8
12
|
* Create a Drizzle database instance backed by better-sqlite3 (SQLite),
|
|
9
13
|
* node-postgres (PostgreSQL), or mysql2 (MySQL).
|
|
@@ -86,12 +90,36 @@ async function createSqliteDatabase(url) {
|
|
|
86
90
|
// Enable WAL mode for better concurrent read performance.
|
|
87
91
|
sqlite.pragma("journal_mode = WAL");
|
|
88
92
|
const db = drizzle({ client: sqlite });
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
sqlite.
|
|
93
|
+
const adapter = {
|
|
94
|
+
provider: "sqlite",
|
|
95
|
+
async query(sql, params) {
|
|
96
|
+
const statement = sqlite.prepare(sql);
|
|
97
|
+
return statement.all(...normalizeParams(params));
|
|
98
|
+
},
|
|
99
|
+
async execute(sql, params) {
|
|
100
|
+
const statement = sqlite.prepare(sql);
|
|
101
|
+
const normalized = sql.trim().toUpperCase();
|
|
102
|
+
if (normalized.startsWith("SELECT") || normalized.includes(" RETURNING ")) {
|
|
103
|
+
const rows = statement.all(...normalizeParams(params));
|
|
104
|
+
return { affectedRows: rows.length, rows };
|
|
105
|
+
}
|
|
106
|
+
const result = statement.run(...normalizeParams(params));
|
|
107
|
+
return { affectedRows: Number(result.changes ?? 0) };
|
|
108
|
+
},
|
|
109
|
+
async transaction(fn) {
|
|
110
|
+
sqlite.exec("BEGIN");
|
|
111
|
+
try {
|
|
112
|
+
const result = await fn(adapter);
|
|
113
|
+
sqlite.exec("COMMIT");
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
sqlite.exec("ROLLBACK");
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
93
120
|
},
|
|
94
121
|
};
|
|
122
|
+
return createDatabaseRuntime(db, "sqlite", () => sqlite.close(), adapter);
|
|
95
123
|
}
|
|
96
124
|
// ---------------------------------------------------------------------------
|
|
97
125
|
// PostgreSQL (node-postgres / pg)
|
|
@@ -119,12 +147,54 @@ async function createPostgresDatabase(url) {
|
|
|
119
147
|
}
|
|
120
148
|
const pool = new Pool({ connectionString: url });
|
|
121
149
|
const db = drizzle({ client: pool });
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
pool.
|
|
150
|
+
const rootAdapter = {
|
|
151
|
+
provider: "postgres",
|
|
152
|
+
async query(sql, params) {
|
|
153
|
+
const result = await pool.query(sql, normalizeParams(params));
|
|
154
|
+
return result.rows;
|
|
155
|
+
},
|
|
156
|
+
async execute(sql, params) {
|
|
157
|
+
const result = await pool.query(sql, normalizeParams(params));
|
|
158
|
+
return {
|
|
159
|
+
affectedRows: result.rowCount ?? result.rows.length,
|
|
160
|
+
rows: result.rows,
|
|
161
|
+
};
|
|
162
|
+
},
|
|
163
|
+
async transaction(fn) {
|
|
164
|
+
const client = await pool.connect();
|
|
165
|
+
const adapter = {
|
|
166
|
+
provider: "postgres",
|
|
167
|
+
async query(statement, params) {
|
|
168
|
+
const result = await client.query(statement, normalizeParams(params));
|
|
169
|
+
return result.rows;
|
|
170
|
+
},
|
|
171
|
+
async execute(statement, params) {
|
|
172
|
+
const result = await client.query(statement, normalizeParams(params));
|
|
173
|
+
return {
|
|
174
|
+
affectedRows: result.rowCount ?? result.rows.length,
|
|
175
|
+
rows: result.rows,
|
|
176
|
+
};
|
|
177
|
+
},
|
|
178
|
+
async transaction(innerFn) {
|
|
179
|
+
return innerFn(adapter);
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
await client.query("BEGIN");
|
|
183
|
+
try {
|
|
184
|
+
const result = await fn(adapter);
|
|
185
|
+
await client.query("COMMIT");
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
await client.query("ROLLBACK");
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
client.release();
|
|
194
|
+
}
|
|
126
195
|
},
|
|
127
196
|
};
|
|
197
|
+
return createDatabaseRuntime(db, "postgres", () => pool.end(), rootAdapter);
|
|
128
198
|
}
|
|
129
199
|
// ---------------------------------------------------------------------------
|
|
130
200
|
// MySQL (mysql2)
|
|
@@ -152,13 +222,61 @@ async function createMysqlDatabase(url) {
|
|
|
152
222
|
}
|
|
153
223
|
const pool = createPool({ uri: url });
|
|
154
224
|
const db = drizzle({ client: pool });
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
225
|
+
function normalizeMysqlRows(result) {
|
|
226
|
+
return Array.isArray(result) ? result : [];
|
|
227
|
+
}
|
|
228
|
+
const rootAdapter = {
|
|
229
|
+
provider: "mysql",
|
|
230
|
+
async query(sql, params) {
|
|
231
|
+
const [rows] = await pool.query(sql, normalizeParams(params));
|
|
232
|
+
return normalizeMysqlRows(rows);
|
|
233
|
+
},
|
|
234
|
+
async execute(sql, params) {
|
|
235
|
+
const [result] = await pool.query(sql, normalizeParams(params));
|
|
236
|
+
if (Array.isArray(result)) {
|
|
237
|
+
return { affectedRows: result.length, rows: result };
|
|
238
|
+
}
|
|
239
|
+
const payload = result;
|
|
240
|
+
return { affectedRows: payload.affectedRows ?? 0 };
|
|
241
|
+
},
|
|
242
|
+
async transaction(fn) {
|
|
243
|
+
const connection = await pool.getConnection();
|
|
244
|
+
const adapter = {
|
|
245
|
+
provider: "mysql",
|
|
246
|
+
async query(statement, params) {
|
|
247
|
+
const [rows] = await connection.query(statement, normalizeParams(params));
|
|
248
|
+
return normalizeMysqlRows(rows);
|
|
249
|
+
},
|
|
250
|
+
async execute(statement, params) {
|
|
251
|
+
const [result] = await connection.query(statement, normalizeParams(params));
|
|
252
|
+
if (Array.isArray(result)) {
|
|
253
|
+
return { affectedRows: result.length, rows: result };
|
|
254
|
+
}
|
|
255
|
+
const payload = result;
|
|
256
|
+
return { affectedRows: payload.affectedRows ?? 0 };
|
|
257
|
+
},
|
|
258
|
+
async transaction(innerFn) {
|
|
259
|
+
return innerFn(adapter);
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
await connection.beginTransaction();
|
|
263
|
+
try {
|
|
264
|
+
const result = await fn(adapter);
|
|
265
|
+
await connection.commit();
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
await connection.rollback();
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
finally {
|
|
273
|
+
connection.release();
|
|
274
|
+
}
|
|
160
275
|
},
|
|
161
276
|
};
|
|
277
|
+
return createDatabaseRuntime(db, "mysql", () => {
|
|
278
|
+
void pool.end();
|
|
279
|
+
}, rootAdapter);
|
|
162
280
|
}
|
|
163
281
|
// ---------------------------------------------------------------------------
|
|
164
282
|
// libSQL / Turso (@libsql/client)
|
|
@@ -186,11 +304,32 @@ async function createLibsqlDatabase(url) {
|
|
|
186
304
|
}
|
|
187
305
|
const client = createClient({ url });
|
|
188
306
|
const db = drizzle({ client });
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
client.
|
|
307
|
+
const adapter = {
|
|
308
|
+
provider: "libsql",
|
|
309
|
+
async query(sql, params) {
|
|
310
|
+
const result = await client.execute({ sql, args: normalizeParams(params) });
|
|
311
|
+
return result.rows;
|
|
312
|
+
},
|
|
313
|
+
async execute(sql, params) {
|
|
314
|
+
const result = await client.execute({ sql, args: normalizeParams(params) });
|
|
315
|
+
return {
|
|
316
|
+
affectedRows: Number(result.rowsAffected ?? result.rows.length ?? 0),
|
|
317
|
+
rows: result.rows,
|
|
318
|
+
};
|
|
319
|
+
},
|
|
320
|
+
async transaction(fn) {
|
|
321
|
+
await client.execute("BEGIN");
|
|
322
|
+
try {
|
|
323
|
+
const result = await fn(adapter);
|
|
324
|
+
await client.execute("COMMIT");
|
|
325
|
+
return result;
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
await client.execute("ROLLBACK");
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
193
331
|
},
|
|
194
332
|
};
|
|
333
|
+
return createDatabaseRuntime(db, "libsql", () => client.close(), adapter);
|
|
195
334
|
}
|
|
196
335
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/crud.d.ts
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
+
import type { DatabaseRuntime, FindManyOptions, ModelRepository } from "./runtime.js";
|
|
2
|
+
import type { PrepareWriteOptions } from "./write.js";
|
|
1
3
|
import type { ModelDefinition } from "./types.js";
|
|
2
4
|
export interface CrudRouteFiles {
|
|
3
5
|
/** File path relative to app/routes/, e.g. "tickets/index.api.ts" */
|
|
4
6
|
path: string;
|
|
5
7
|
content: string;
|
|
6
8
|
}
|
|
9
|
+
export interface CrudQueryOptions extends FindManyOptions {
|
|
10
|
+
}
|
|
11
|
+
export interface CrudRuntime<M extends ModelDefinition = ModelDefinition> {
|
|
12
|
+
repository: ModelRepository<M>;
|
|
13
|
+
list: (options?: CrudQueryOptions) => Promise<Array<Record<string, unknown>>>;
|
|
14
|
+
get: (id: unknown, options?: Omit<CrudQueryOptions, "where" | "limit" | "offset">) => Promise<Record<string, unknown> | null>;
|
|
15
|
+
create: (input: Record<string, unknown>, options?: PrepareWriteOptions) => Promise<Record<string, unknown>>;
|
|
16
|
+
update: (id: unknown, input: Record<string, unknown>, options?: PrepareWriteOptions) => Promise<Record<string, unknown> | null>;
|
|
17
|
+
remove: (id: unknown) => Promise<boolean>;
|
|
18
|
+
}
|
|
7
19
|
/**
|
|
8
20
|
* Naive English pluraliser — sufficient for model-name pluralisation.
|
|
9
21
|
*
|
|
@@ -24,4 +36,6 @@ export declare function pluralize(word: string): string;
|
|
|
24
36
|
* 2. `<plural>/[id].api.ts` — GET (by id) + PUT (update) + DELETE
|
|
25
37
|
*/
|
|
26
38
|
export declare function generateCrudRoutes(model: ModelDefinition): CrudRouteFiles[];
|
|
39
|
+
export declare function createCrudRepository<M extends ModelDefinition>(database: DatabaseRuntime, model: M | string): ModelRepository<M>;
|
|
40
|
+
export declare function createCrudRuntime<M extends ModelDefinition>(database: DatabaseRuntime, model: M | string): CrudRuntime<M>;
|
|
27
41
|
//# sourceMappingURL=crud.d.ts.map
|
package/dist/crud.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAOnE,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;CAAG;AAE5D,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACtE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9H,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5G,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAChI,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C;AAMD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAsHD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc,EAAE,CAgH3E;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,eAAe,EAC5D,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,CAAC,GAAG,MAAM,GAChB,eAAe,CAAC,CAAC,CAAC,CAEpB;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,CAAC,GAAG,MAAM,GAChB,WAAW,CAAC,CAAC,CAAC,CAUhB"}
|
package/dist/crud.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { autoFieldNames, findPrimaryKeyField, pluralizeModelName } from "./naming.js";
|
|
1
2
|
// ---------------------------------------------------------------------------
|
|
2
3
|
// Pluralisation helper
|
|
3
4
|
// ---------------------------------------------------------------------------
|
|
@@ -10,24 +11,7 @@
|
|
|
10
11
|
* bus -> buses
|
|
11
12
|
*/
|
|
12
13
|
export function pluralize(word) {
|
|
13
|
-
|
|
14
|
-
return word;
|
|
15
|
-
const lower = word.toLowerCase();
|
|
16
|
-
// Words ending in consonant + y → ies
|
|
17
|
-
if (lower.endsWith("y") &&
|
|
18
|
-
lower.length > 1 &&
|
|
19
|
-
!"aeiou".includes(lower[lower.length - 2])) {
|
|
20
|
-
return word.slice(0, -1) + "ies";
|
|
21
|
-
}
|
|
22
|
-
// Words ending in s, sh, ch, x, z → es
|
|
23
|
-
if (lower.endsWith("s") ||
|
|
24
|
-
lower.endsWith("sh") ||
|
|
25
|
-
lower.endsWith("ch") ||
|
|
26
|
-
lower.endsWith("x") ||
|
|
27
|
-
lower.endsWith("z")) {
|
|
28
|
-
return word + "es";
|
|
29
|
-
}
|
|
30
|
-
return word + "s";
|
|
14
|
+
return pluralizeModelName(word);
|
|
31
15
|
}
|
|
32
16
|
// ---------------------------------------------------------------------------
|
|
33
17
|
// Field → Zod mapping
|
|
@@ -62,6 +46,11 @@ function fieldToZod(field) {
|
|
|
62
46
|
case "json":
|
|
63
47
|
base = "z.unknown()";
|
|
64
48
|
break;
|
|
49
|
+
case "vector":
|
|
50
|
+
base = field.dimensions !== undefined
|
|
51
|
+
? `z.array(z.number()).length(${field.dimensions})`
|
|
52
|
+
: "z.array(z.number())";
|
|
53
|
+
break;
|
|
65
54
|
default:
|
|
66
55
|
base = "z.unknown()";
|
|
67
56
|
}
|
|
@@ -134,16 +123,11 @@ function buildZodObject(fields, options) {
|
|
|
134
123
|
* 2. `<plural>/[id].api.ts` — GET (by id) + PUT (update) + DELETE
|
|
135
124
|
*/
|
|
136
125
|
export function generateCrudRoutes(model) {
|
|
137
|
-
const plural = pluralize(model.name
|
|
126
|
+
const plural = pluralize(model.name);
|
|
138
127
|
const resourceName = model.name;
|
|
139
|
-
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
if (field.autoId)
|
|
143
|
-
autoFields.add(name);
|
|
144
|
-
if (field.updatedAt)
|
|
145
|
-
autoFields.add(name);
|
|
146
|
-
}
|
|
128
|
+
const serializedModel = JSON.stringify(model, null, 2);
|
|
129
|
+
const primaryKeyField = findPrimaryKeyField(model) ?? "id";
|
|
130
|
+
const autoFields = autoFieldNames(model);
|
|
147
131
|
// ----- index.api.ts (list + create) -----
|
|
148
132
|
const createSchema = buildZodObject(model.fields, { exclude: autoFields });
|
|
149
133
|
const tableName = plural;
|
|
@@ -151,11 +135,13 @@ export function generateCrudRoutes(model) {
|
|
|
151
135
|
// This file was generated by @zauso-ai/capstan-db generateCrudRoutes().
|
|
152
136
|
|
|
153
137
|
import { defineAPI } from "@zauso-ai/capstan-core";
|
|
138
|
+
import { prepareCreateData } from "@zauso-ai/capstan-db";
|
|
154
139
|
import { z } from "zod";
|
|
155
140
|
import { db } from "../../db.js";
|
|
156
141
|
import { ${tableName} } from "../../db/schema.js";
|
|
157
142
|
|
|
158
143
|
export const meta = { resource: "${resourceName}" };
|
|
144
|
+
const model = ${serializedModel};
|
|
159
145
|
|
|
160
146
|
const CreateInput = ${createSchema};
|
|
161
147
|
|
|
@@ -176,7 +162,8 @@ export const POST = defineAPI({
|
|
|
176
162
|
policy: "requireAuth",
|
|
177
163
|
input: CreateInput,
|
|
178
164
|
handler: async ({ input, ctx }) => {
|
|
179
|
-
const
|
|
165
|
+
const values = await prepareCreateData(model, input) as typeof ${tableName}.$inferInsert;
|
|
166
|
+
const result = await db.insert(${tableName}).values(values).returning();
|
|
180
167
|
return { data: result[0], created: true };
|
|
181
168
|
},
|
|
182
169
|
});
|
|
@@ -190,12 +177,14 @@ export const POST = defineAPI({
|
|
|
190
177
|
// This file was generated by @zauso-ai/capstan-db generateCrudRoutes().
|
|
191
178
|
|
|
192
179
|
import { defineAPI } from "@zauso-ai/capstan-core";
|
|
180
|
+
import { prepareUpdateData } from "@zauso-ai/capstan-db";
|
|
193
181
|
import { z } from "zod";
|
|
194
182
|
import { eq } from "drizzle-orm";
|
|
195
183
|
import { db } from "../../db.js";
|
|
196
184
|
import { ${tableName} } from "../../db/schema.js";
|
|
197
185
|
|
|
198
186
|
export const meta = { resource: "${resourceName}" };
|
|
187
|
+
const model = ${serializedModel};
|
|
199
188
|
|
|
200
189
|
const UpdateInput = ${updateSchema};
|
|
201
190
|
|
|
@@ -204,7 +193,7 @@ export const GET = defineAPI({
|
|
|
204
193
|
resource: "${resourceName}",
|
|
205
194
|
description: "Get a ${resourceName} by id",
|
|
206
195
|
handler: async ({ input, ctx, params }) => {
|
|
207
|
-
const items = await db.select().from(${tableName}).where(eq(${tableName}
|
|
196
|
+
const items = await db.select().from(${tableName}).where(eq(${tableName}.${primaryKeyField}, params.id));
|
|
208
197
|
return { data: items[0] ?? null };
|
|
209
198
|
},
|
|
210
199
|
});
|
|
@@ -216,7 +205,8 @@ export const PUT = defineAPI({
|
|
|
216
205
|
policy: "requireAuth",
|
|
217
206
|
input: UpdateInput,
|
|
218
207
|
handler: async ({ input, ctx, params }) => {
|
|
219
|
-
const
|
|
208
|
+
const values = await prepareUpdateData(model, input) as Partial<typeof ${tableName}.$inferInsert>;
|
|
209
|
+
const result = await db.update(${tableName}).set(values).where(eq(${tableName}.${primaryKeyField}, params.id)).returning();
|
|
220
210
|
return { data: result[0], updated: true };
|
|
221
211
|
},
|
|
222
212
|
});
|
|
@@ -227,7 +217,7 @@ export const DELETE = defineAPI({
|
|
|
227
217
|
description: "Delete a ${resourceName}",
|
|
228
218
|
policy: "requireAuth",
|
|
229
219
|
handler: async ({ ctx, params }) => {
|
|
230
|
-
await db.delete(${tableName}).where(eq(${tableName}
|
|
220
|
+
await db.delete(${tableName}).where(eq(${tableName}.${primaryKeyField}, params.id));
|
|
231
221
|
return { deleted: true };
|
|
232
222
|
},
|
|
233
223
|
});
|
|
@@ -237,4 +227,18 @@ export const DELETE = defineAPI({
|
|
|
237
227
|
{ path: `${plural}/[id].api.ts`, content: idContent },
|
|
238
228
|
];
|
|
239
229
|
}
|
|
230
|
+
export function createCrudRepository(database, model) {
|
|
231
|
+
return database.model(model);
|
|
232
|
+
}
|
|
233
|
+
export function createCrudRuntime(database, model) {
|
|
234
|
+
const repository = createCrudRepository(database, model);
|
|
235
|
+
return {
|
|
236
|
+
repository,
|
|
237
|
+
list: (options) => repository.findMany(options),
|
|
238
|
+
get: (id, options) => repository.findById(id, options),
|
|
239
|
+
create: (input, options) => repository.create(input, options),
|
|
240
|
+
update: (id, input, options) => repository.update(id, input, options),
|
|
241
|
+
remove: (id) => repository.delete(id),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
240
244
|
//# sourceMappingURL=crud.js.map
|
package/dist/crud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DbProvider, FieldDefinition, ScalarType } from "./types.js";
|
|
2
|
+
export interface ProviderMeta {
|
|
3
|
+
tableBuilder: string;
|
|
4
|
+
importModule: string;
|
|
5
|
+
nowDefaultSql: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ColumnMapping {
|
|
8
|
+
builder: string;
|
|
9
|
+
import: string;
|
|
10
|
+
config?: string;
|
|
11
|
+
sqlType: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function providerMeta(provider: DbProvider): ProviderMeta;
|
|
14
|
+
export declare function columnMapping(fieldType: ScalarType, provider: DbProvider, dimensions?: number): ColumnMapping;
|
|
15
|
+
export declare function columnMappingForReference(targetField: FieldDefinition, provider: DbProvider): ColumnMapping;
|
|
16
|
+
export declare function sqlTypeForField(def: FieldDefinition, provider: DbProvider): string;
|
|
17
|
+
export declare function sqlTypeForReference(targetField: FieldDefinition, provider: DbProvider): string;
|
|
18
|
+
export declare function autoIdSchemaExpr(columnName: string, provider: DbProvider): {
|
|
19
|
+
expr: string;
|
|
20
|
+
imports: string[];
|
|
21
|
+
needsSql: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare function autoIdSqlDefault(provider: DbProvider): string;
|
|
24
|
+
export declare function sqlDefaultClause(def: FieldDefinition, provider: DbProvider): string | null;
|
|
25
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../src/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAQD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,UAAU,GAAG,YAAY,CAsB/D;AAyED,wBAAgB,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAU7G;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,GAAG,aAAa,CAc3G;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,CAalF;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,CAE9F;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAsBjI;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAU7D;AAMD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAiC1F"}
|