@zauso-ai/capstan-db 1.0.0-beta.6 → 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 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),
@@ -41,5 +38,5 @@ export interface DatabaseInstance {
41
38
  * url: "mysql://user:pass@localhost:3306/mydb",
42
39
  * });
43
40
  */
44
- export declare function createDatabase(config: DatabaseConfig): DatabaseInstance;
41
+ export declare function createDatabase(config: DatabaseConfig): Promise<DatabaseInstance>;
45
42
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,EAAE,EAAE,OAAO,CAAC;IACZ,gDAAgD;IAChD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAiBvE"}
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,5 +1,13 @@
1
- import { createRequire } from "node:module";
2
- const require = createRequire(import.meta.url);
1
+ import { createDatabaseRuntime } from "./runtime.js";
2
+ // Helper to dynamically import optional peer dependencies without TypeScript
3
+ // trying to resolve them at compile time (they may not be installed).
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ async function importPeer(specifier) {
6
+ return import(specifier);
7
+ }
8
+ function normalizeParams(params) {
9
+ return params ?? [];
10
+ }
3
11
  /**
4
12
  * Create a Drizzle database instance backed by better-sqlite3 (SQLite),
5
13
  * node-postgres (PostgreSQL), or mysql2 (MySQL).
@@ -36,7 +44,7 @@ const require = createRequire(import.meta.url);
36
44
  * url: "mysql://user:pass@localhost:3306/mydb",
37
45
  * });
38
46
  */
39
- export function createDatabase(config) {
47
+ export async function createDatabase(config) {
40
48
  switch (config.provider) {
41
49
  case "sqlite":
42
50
  return createSqliteDatabase(config.url);
@@ -55,11 +63,12 @@ export function createDatabase(config) {
55
63
  // ---------------------------------------------------------------------------
56
64
  // SQLite (better-sqlite3)
57
65
  // ---------------------------------------------------------------------------
58
- function createSqliteDatabase(url) {
66
+ async function createSqliteDatabase(url) {
59
67
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
68
  let BetterSqlite3;
61
69
  try {
62
- BetterSqlite3 = require("better-sqlite3");
70
+ const mod = await importPeer("better-sqlite3");
71
+ BetterSqlite3 = mod.default ?? mod;
63
72
  }
64
73
  catch {
65
74
  throw new Error(`@zauso-ai/capstan-db: "better-sqlite3" is required for SQLite support but is not installed.\n` +
@@ -70,7 +79,7 @@ function createSqliteDatabase(url) {
70
79
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
80
  let drizzle;
72
81
  try {
73
- const drizzleModule = require("drizzle-orm/better-sqlite3");
82
+ const drizzleModule = await importPeer("drizzle-orm/better-sqlite3");
74
83
  drizzle = drizzleModule.drizzle;
75
84
  }
76
85
  catch {
@@ -81,22 +90,46 @@ function createSqliteDatabase(url) {
81
90
  // Enable WAL mode for better concurrent read performance.
82
91
  sqlite.pragma("journal_mode = WAL");
83
92
  const db = drizzle({ client: sqlite });
84
- return {
85
- db,
86
- close() {
87
- sqlite.close();
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
+ }
88
120
  },
89
121
  };
122
+ return createDatabaseRuntime(db, "sqlite", () => sqlite.close(), adapter);
90
123
  }
91
124
  // ---------------------------------------------------------------------------
92
125
  // PostgreSQL (node-postgres / pg)
93
126
  // ---------------------------------------------------------------------------
94
- function createPostgresDatabase(url) {
127
+ async function createPostgresDatabase(url) {
95
128
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
129
  let Pool;
97
130
  try {
98
- const pgModule = require("pg");
99
- Pool = pgModule.Pool;
131
+ const pgModule = await importPeer("pg");
132
+ Pool = pgModule.Pool ?? pgModule.default?.Pool;
100
133
  }
101
134
  catch {
102
135
  throw new Error(`@zauso-ai/capstan-db: "pg" (node-postgres) is required for PostgreSQL support but is not installed.\n` +
@@ -105,7 +138,7 @@ function createPostgresDatabase(url) {
105
138
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
139
  let drizzle;
107
140
  try {
108
- const drizzleModule = require("drizzle-orm/node-postgres");
141
+ const drizzleModule = await importPeer("drizzle-orm/node-postgres");
109
142
  drizzle = drizzleModule.drizzle;
110
143
  }
111
144
  catch {
@@ -114,22 +147,64 @@ function createPostgresDatabase(url) {
114
147
  }
115
148
  const pool = new Pool({ connectionString: url });
116
149
  const db = drizzle({ client: pool });
117
- return {
118
- db,
119
- close() {
120
- pool.end();
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
+ }
121
195
  },
122
196
  };
197
+ return createDatabaseRuntime(db, "postgres", () => pool.end(), rootAdapter);
123
198
  }
124
199
  // ---------------------------------------------------------------------------
125
200
  // MySQL (mysql2)
126
201
  // ---------------------------------------------------------------------------
127
- function createMysqlDatabase(url) {
202
+ async function createMysqlDatabase(url) {
128
203
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
129
204
  let createPool;
130
205
  try {
131
- const mysql2 = require("mysql2/promise");
132
- createPool = mysql2.createPool;
206
+ const mysql2 = await importPeer("mysql2/promise");
207
+ createPool = mysql2.createPool ?? mysql2.default?.createPool;
133
208
  }
134
209
  catch {
135
210
  throw new Error(`@zauso-ai/capstan-db: "mysql2" is required for MySQL support but is not installed.\n` +
@@ -138,7 +213,7 @@ function createMysqlDatabase(url) {
138
213
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
214
  let drizzle;
140
215
  try {
141
- const drizzleModule = require("drizzle-orm/mysql2");
216
+ const drizzleModule = await importPeer("drizzle-orm/mysql2");
142
217
  drizzle = drizzleModule.drizzle;
143
218
  }
144
219
  catch {
@@ -147,23 +222,71 @@ function createMysqlDatabase(url) {
147
222
  }
148
223
  const pool = createPool({ uri: url });
149
224
  const db = drizzle({ client: pool });
150
- return {
151
- db,
152
- close() {
153
- // The interface is synchronous; fire-and-forget the async pool shutdown.
154
- void pool.end();
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
+ }
155
275
  },
156
276
  };
277
+ return createDatabaseRuntime(db, "mysql", () => {
278
+ void pool.end();
279
+ }, rootAdapter);
157
280
  }
158
281
  // ---------------------------------------------------------------------------
159
282
  // libSQL / Turso (@libsql/client)
160
283
  // ---------------------------------------------------------------------------
161
- function createLibsqlDatabase(url) {
284
+ async function createLibsqlDatabase(url) {
162
285
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
163
286
  let createClient;
164
287
  try {
165
- const libsqlModule = require("@libsql/client");
166
- createClient = libsqlModule.createClient;
288
+ const libsqlModule = await importPeer("@libsql/client");
289
+ createClient = libsqlModule.createClient ?? libsqlModule.default?.createClient;
167
290
  }
168
291
  catch {
169
292
  throw new Error(`@zauso-ai/capstan-db: "@libsql/client" is required for libSQL/Turso support but is not installed.\n` +
@@ -172,7 +295,7 @@ function createLibsqlDatabase(url) {
172
295
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
296
  let drizzle;
174
297
  try {
175
- const drizzleModule = require("drizzle-orm/libsql");
298
+ const drizzleModule = await importPeer("drizzle-orm/libsql");
176
299
  drizzle = drizzleModule.drizzle;
177
300
  }
178
301
  catch {
@@ -181,11 +304,32 @@ function createLibsqlDatabase(url) {
181
304
  }
182
305
  const client = createClient({ url });
183
306
  const db = drizzle({ client });
184
- return {
185
- db,
186
- close() {
187
- client.close();
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
+ }
188
331
  },
189
332
  };
333
+ return createDatabaseRuntime(db, "libsql", () => client.close(), adapter);
190
334
  }
191
335
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
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
@@ -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;AAMnE,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0B9C;AAiHD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc,EAAE,CAsG3E"}
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
- if (word.length === 0)
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,25 +123,25 @@ 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.toLowerCase());
126
+ const plural = pluralize(model.name);
138
127
  const resourceName = model.name;
139
- // Determine which fields are auto-generated (id, updatedAt).
140
- const autoFields = new Set();
141
- for (const [name, field] of Object.entries(model.fields)) {
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 });
133
+ const tableName = plural;
149
134
  const indexContent = `// Auto-generated CRUD routes for ${resourceName}
150
135
  // This file was generated by @zauso-ai/capstan-db generateCrudRoutes().
151
136
 
152
137
  import { defineAPI } from "@zauso-ai/capstan-core";
138
+ import { prepareCreateData } from "@zauso-ai/capstan-db";
153
139
  import { z } from "zod";
140
+ import { db } from "../../db.js";
141
+ import { ${tableName} } from "../../db/schema.js";
154
142
 
155
143
  export const meta = { resource: "${resourceName}" };
144
+ const model = ${serializedModel};
156
145
 
157
146
  const CreateInput = ${createSchema};
158
147
 
@@ -161,8 +150,8 @@ export const GET = defineAPI({
161
150
  resource: "${resourceName}",
162
151
  description: "List all ${plural}",
163
152
  handler: async ({ ctx }) => {
164
- // TODO: replace with actual database query
165
- return { data: [], total: 0 };
153
+ const items = await db.select().from(${tableName});
154
+ return { data: items, total: items.length };
166
155
  },
167
156
  });
168
157
 
@@ -173,8 +162,9 @@ export const POST = defineAPI({
173
162
  policy: "requireAuth",
174
163
  input: CreateInput,
175
164
  handler: async ({ input, ctx }) => {
176
- // TODO: replace with actual database insert
177
- return { data: { id: "TODO", ...input }, created: true };
165
+ const values = await prepareCreateData(model, input) as typeof ${tableName}.$inferInsert;
166
+ const result = await db.insert(${tableName}).values(values).returning();
167
+ return { data: result[0], created: true };
178
168
  },
179
169
  });
180
170
  `;
@@ -187,9 +177,14 @@ export const POST = defineAPI({
187
177
  // This file was generated by @zauso-ai/capstan-db generateCrudRoutes().
188
178
 
189
179
  import { defineAPI } from "@zauso-ai/capstan-core";
180
+ import { prepareUpdateData } from "@zauso-ai/capstan-db";
190
181
  import { z } from "zod";
182
+ import { eq } from "drizzle-orm";
183
+ import { db } from "../../db.js";
184
+ import { ${tableName} } from "../../db/schema.js";
191
185
 
192
186
  export const meta = { resource: "${resourceName}" };
187
+ const model = ${serializedModel};
193
188
 
194
189
  const UpdateInput = ${updateSchema};
195
190
 
@@ -197,9 +192,9 @@ export const GET = defineAPI({
197
192
  capability: "read",
198
193
  resource: "${resourceName}",
199
194
  description: "Get a ${resourceName} by id",
200
- handler: async ({ input, ctx }) => {
201
- // TODO: replace with actual database lookup
202
- return { data: null };
195
+ handler: async ({ input, ctx, params }) => {
196
+ const items = await db.select().from(${tableName}).where(eq(${tableName}.${primaryKeyField}, params.id));
197
+ return { data: items[0] ?? null };
203
198
  },
204
199
  });
205
200
 
@@ -209,9 +204,10 @@ export const PUT = defineAPI({
209
204
  description: "Update a ${resourceName}",
210
205
  policy: "requireAuth",
211
206
  input: UpdateInput,
212
- handler: async ({ input, ctx }) => {
213
- // TODO: replace with actual database update
214
- return { data: { id: "TODO", ...input }, updated: true };
207
+ handler: async ({ input, ctx, params }) => {
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();
210
+ return { data: result[0], updated: true };
215
211
  },
216
212
  });
217
213
 
@@ -220,8 +216,8 @@ export const DELETE = defineAPI({
220
216
  resource: "${resourceName}",
221
217
  description: "Delete a ${resourceName}",
222
218
  policy: "requireAuth",
223
- handler: async ({ ctx }) => {
224
- // TODO: replace with actual database delete
219
+ handler: async ({ ctx, params }) => {
220
+ await db.delete(${tableName}).where(eq(${tableName}.${primaryKeyField}, params.id));
225
221
  return { deleted: true };
226
222
  },
227
223
  });
@@ -231,4 +227,18 @@ export const DELETE = defineAPI({
231
227
  { path: `${plural}/[id].api.ts`, content: idContent },
232
228
  ];
233
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
+ }
234
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":"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"}
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"}