bettersqlkeza 1.0.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/dist/bettersql.d.ts +107 -0
  4. package/dist/bettersql.d.ts.map +1 -0
  5. package/dist/bettersql.js +181 -0
  6. package/dist/bettersql.js.map +1 -0
  7. package/dist/delete-builder.d.ts +58 -0
  8. package/dist/delete-builder.d.ts.map +1 -0
  9. package/dist/delete-builder.js +129 -0
  10. package/dist/delete-builder.js.map +1 -0
  11. package/dist/index.d.ts +67 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +77 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/insert-builder.d.ts +62 -0
  16. package/dist/insert-builder.d.ts.map +1 -0
  17. package/dist/insert-builder.js +136 -0
  18. package/dist/insert-builder.js.map +1 -0
  19. package/dist/model.d.ts +185 -0
  20. package/dist/model.d.ts.map +1 -0
  21. package/dist/model.js +404 -0
  22. package/dist/model.js.map +1 -0
  23. package/dist/query-builder.d.ts +140 -0
  24. package/dist/query-builder.d.ts.map +1 -0
  25. package/dist/query-builder.js +298 -0
  26. package/dist/query-builder.js.map +1 -0
  27. package/dist/raw-query-builder.d.ts +70 -0
  28. package/dist/raw-query-builder.d.ts.map +1 -0
  29. package/dist/raw-query-builder.js +118 -0
  30. package/dist/raw-query-builder.js.map +1 -0
  31. package/dist/result-proxy.d.ts +63 -0
  32. package/dist/result-proxy.d.ts.map +1 -0
  33. package/dist/result-proxy.js +166 -0
  34. package/dist/result-proxy.js.map +1 -0
  35. package/dist/types.d.ts +87 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +6 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/update-builder.d.ts +59 -0
  40. package/dist/update-builder.d.ts.map +1 -0
  41. package/dist/update-builder.js +136 -0
  42. package/dist/update-builder.js.map +1 -0
  43. package/dist/where-builder.d.ts +18 -0
  44. package/dist/where-builder.d.ts.map +1 -0
  45. package/dist/where-builder.js +117 -0
  46. package/dist/where-builder.js.map +1 -0
  47. package/package.json +48 -0
package/dist/model.js ADDED
@@ -0,0 +1,404 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Model = void 0;
4
+ exports.generateCreateTableSQL = generateCreateTableSQL;
5
+ const query_builder_1 = require("./query-builder");
6
+ const raw_query_builder_1 = require("./raw-query-builder");
7
+ const delete_builder_1 = require("./delete-builder");
8
+ const update_builder_1 = require("./update-builder");
9
+ const insert_builder_1 = require("./insert-builder");
10
+ const where_builder_1 = require("./where-builder");
11
+ const result_proxy_1 = require("./result-proxy");
12
+ /**
13
+ * Model<T> - Represents a database table with typed CRUD operations
14
+ */
15
+ class Model {
16
+ db;
17
+ tableName;
18
+ schema;
19
+ statementCache;
20
+ primaryKey = null;
21
+ constructor(db, tableName, schema, statementCache) {
22
+ this.db = db;
23
+ this.tableName = tableName;
24
+ this.schema = schema;
25
+ this.statementCache = statementCache;
26
+ // Find primary key
27
+ for (const [key, def] of Object.entries(schema)) {
28
+ if (def.primary) {
29
+ this.primaryKey = key;
30
+ break;
31
+ }
32
+ }
33
+ }
34
+ /**
35
+ * Get or create a cached prepared statement
36
+ */
37
+ getStatement(sql) {
38
+ let stmt = this.statementCache.get(sql);
39
+ if (!stmt) {
40
+ stmt = this.db.prepare(sql);
41
+ this.statementCache.set(sql, stmt);
42
+ }
43
+ return stmt;
44
+ }
45
+ /**
46
+ * Create a QueryBuilder with optional initial WHERE conditions
47
+ */
48
+ find(where) {
49
+ return new query_builder_1.QueryBuilder(this.db, this.tableName, this.statementCache, where, this.primaryKey);
50
+ }
51
+ /**
52
+ * Create a QueryBuilder for SELECT queries with fluent chaining
53
+ * @example
54
+ * const users = User.select().where("lid", "=", id).get();
55
+ * const activeUsers = User.select().where({ status: "active" }).orderBy("name").all();
56
+ */
57
+ select(where) {
58
+ return new query_builder_1.QueryBuilder(this.db, this.tableName, this.statementCache, where, this.primaryKey);
59
+ }
60
+ query(whereOrRawSql, params) {
61
+ // If a string is passed, treat it as raw SQL
62
+ if (typeof whereOrRawSql === 'string') {
63
+ return new raw_query_builder_1.RawQueryBuilder(this.db, this.tableName, this.statementCache, this.primaryKey, whereOrRawSql, params);
64
+ }
65
+ // Otherwise, create a QueryBuilder
66
+ return new query_builder_1.QueryBuilder(this.db, this.tableName, this.statementCache, whereOrRawSql, this.primaryKey);
67
+ }
68
+ /**
69
+ * Find a record by its primary key
70
+ * Returns a result with chainable methods like delete(), update(), save()
71
+ */
72
+ findById(id) {
73
+ if (!this.primaryKey) {
74
+ throw new Error(`No primary key defined for table "${this.tableName}"`);
75
+ }
76
+ const sql = `SELECT * FROM "${this.tableName}" WHERE "${this.primaryKey}" = ?`;
77
+ const stmt = this.getStatement(sql);
78
+ const data = stmt.get(id) || null;
79
+ return (0, result_proxy_1.createResultProxy)(this.db, this.tableName, this.statementCache, this.primaryKey, data);
80
+ }
81
+ /**
82
+ * Insert a new record (immediate execution)
83
+ */
84
+ insert(data) {
85
+ const keys = Object.keys(data);
86
+ const values = Object.values(data);
87
+ const placeholders = keys.map(() => '?').join(', ');
88
+ const columns = keys.map((k) => `"${k}"`).join(', ');
89
+ const sql = `INSERT INTO "${this.tableName}" (${columns}) VALUES (${placeholders})`;
90
+ const stmt = this.getStatement(sql);
91
+ const info = stmt.run(...values);
92
+ // Use the lastInsertRowid from stmt.run() return value (more efficient)
93
+ if (this.primaryKey) {
94
+ return this.findById(Number(info.lastInsertRowid));
95
+ }
96
+ // If no primary key, return the inserted data merged with defaults
97
+ return { ...data };
98
+ }
99
+ /**
100
+ * Create an InsertBuilder for fluent chaining with options like ifNotExists, orIgnore, orReplace
101
+ * @example
102
+ * // Insert with existence check (avoids UNIQUE constraint errors)
103
+ * const user = User.insertBuilder({ email: "test@example.com", name: "Test" })
104
+ * .ifNotExists({ email: "test@example.com" })
105
+ * .run();
106
+ *
107
+ * // Insert with OR IGNORE (silently skip on conflict)
108
+ * const user = User.insertBuilder({ email: "test@example.com", name: "Test" })
109
+ * .orIgnore()
110
+ * .run();
111
+ *
112
+ * // Insert with OR REPLACE (replace on conflict)
113
+ * const user = User.insertBuilder({ email: "test@example.com", name: "Test" })
114
+ * .orReplace()
115
+ * .run();
116
+ */
117
+ insertBuilder(data) {
118
+ return new insert_builder_1.InsertBuilder(this.db, this.tableName, this.statementCache, data, this.schema, this.primaryKey);
119
+ }
120
+ /**
121
+ * Insert multiple records at once
122
+ */
123
+ insertMany(dataArray) {
124
+ if (dataArray.length === 0)
125
+ return [];
126
+ const results = [];
127
+ for (const data of dataArray) {
128
+ results.push(this.insert(data));
129
+ }
130
+ return results;
131
+ }
132
+ update(whereOrData, data) {
133
+ // If only one argument, return an UpdateBuilder for chaining
134
+ if (data === undefined) {
135
+ return new update_builder_1.UpdateBuilder(this.db, this.tableName, this.statementCache, whereOrData);
136
+ }
137
+ // Otherwise, execute immediately (existing behavior)
138
+ const where = whereOrData;
139
+ const updateKeys = Object.keys(data);
140
+ const updateValues = Object.values(data);
141
+ const setClauses = updateKeys.map((k) => `"${k}" = ?`).join(', ');
142
+ const whereKeys = Object.keys(where);
143
+ const whereValues = Object.values(where);
144
+ const whereConditions = whereKeys.map((k) => `"${k}" = ?`).join(' AND ');
145
+ const sql = `UPDATE "${this.tableName}" SET ${setClauses} WHERE ${whereConditions}`;
146
+ const stmt = this.getStatement(sql);
147
+ const info = stmt.run(...updateValues, ...whereValues);
148
+ // Use the changes from stmt.run() return value (more efficient)
149
+ return info.changes;
150
+ }
151
+ /**
152
+ * Update a record by its primary key
153
+ */
154
+ updateById(id, data) {
155
+ if (!this.primaryKey) {
156
+ throw new Error(`No primary key defined for table "${this.tableName}"`);
157
+ }
158
+ const changes = this.update({ [this.primaryKey]: id }, data);
159
+ return changes > 0;
160
+ }
161
+ delete(where) {
162
+ // If no argument, return a DeleteBuilder for chaining
163
+ if (where === undefined) {
164
+ return new delete_builder_1.DeleteBuilder(this.db, this.tableName, this.statementCache);
165
+ }
166
+ // Otherwise, execute immediately (existing behavior)
167
+ const whereKeys = Object.keys(where);
168
+ const whereValues = Object.values(where);
169
+ const whereConditions = whereKeys.map((k) => `"${k}" = ?`).join(' AND ');
170
+ const sql = `DELETE FROM "${this.tableName}" WHERE ${whereConditions}`;
171
+ const stmt = this.getStatement(sql);
172
+ const info = stmt.run(...whereValues);
173
+ // Use the changes from stmt.run() return value (more efficient)
174
+ return info.changes;
175
+ }
176
+ /**
177
+ * Delete a record by its primary key
178
+ */
179
+ deleteById(id) {
180
+ if (!this.primaryKey) {
181
+ throw new Error(`No primary key defined for table "${this.tableName}"`);
182
+ }
183
+ const changes = this.delete({
184
+ [this.primaryKey]: id
185
+ });
186
+ return changes > 0;
187
+ }
188
+ /**
189
+ * Count records matching the WHERE conditions
190
+ */
191
+ count(where) {
192
+ let sql = `SELECT COUNT(*) as count FROM "${this.tableName}"`;
193
+ const params = [];
194
+ if (where) {
195
+ const whereKeys = Object.keys(where);
196
+ if (whereKeys.length > 0) {
197
+ const whereConditions = whereKeys.map((k) => {
198
+ params.push(where[k]);
199
+ return `"${k}" = ?`;
200
+ });
201
+ sql += ` WHERE ${whereConditions.join(' AND ')}`;
202
+ }
203
+ }
204
+ const stmt = this.getStatement(sql);
205
+ return stmt.get(...params).count;
206
+ }
207
+ /**
208
+ * Get all records from the table
209
+ */
210
+ all() {
211
+ const sql = `SELECT * FROM "${this.tableName}"`;
212
+ const stmt = this.getStatement(sql);
213
+ return stmt.all();
214
+ }
215
+ /**
216
+ * Insert or replace a record (upsert)
217
+ * Uses SQLite's INSERT OR REPLACE
218
+ */
219
+ upsert(data) {
220
+ const keys = Object.keys(data);
221
+ const values = Object.values(data);
222
+ const placeholders = keys.map(() => '?').join(', ');
223
+ const columns = keys.map((k) => `"${k}"`).join(', ');
224
+ const sql = `INSERT OR REPLACE INTO "${this.tableName}" (${columns}) VALUES (${placeholders})`;
225
+ const stmt = this.getStatement(sql);
226
+ stmt.run(...values);
227
+ // Get the last inserted row
228
+ const lastIdStmt = this.db.prepare('SELECT last_insert_rowid() as id');
229
+ const lastId = lastIdStmt.get();
230
+ if (this.primaryKey) {
231
+ return this.findById(lastId.id);
232
+ }
233
+ return { ...data };
234
+ }
235
+ /**
236
+ * Insert or update on conflict (more granular upsert)
237
+ * Uses SQLite's INSERT ... ON CONFLICT DO UPDATE
238
+ */
239
+ upsertOn(data, conflictColumns, updateData) {
240
+ const keys = Object.keys(data);
241
+ const values = Object.values(data);
242
+ const placeholders = keys.map(() => '?').join(', ');
243
+ const columns = keys.map((k) => `"${k}"`).join(', ');
244
+ const conflictCols = conflictColumns.map((c) => `"${String(c)}"`).join(', ');
245
+ // Determine what to update on conflict
246
+ const updateKeys = updateData
247
+ ? Object.keys(updateData)
248
+ : keys.filter((k) => !conflictColumns.includes(k));
249
+ const updateValues = updateData ? Object.values(updateData) : [];
250
+ const updateClauses = updateKeys.map((k) => `"${k}" = excluded."${k}"`).join(', ');
251
+ let sql = `INSERT INTO "${this.tableName}" (${columns}) VALUES (${placeholders})`;
252
+ sql += ` ON CONFLICT (${conflictCols}) DO UPDATE SET ${updateClauses}`;
253
+ const stmt = this.getStatement(sql);
254
+ stmt.run(...values, ...updateValues);
255
+ // Get the last inserted/updated row
256
+ const lastIdStmt = this.db.prepare('SELECT last_insert_rowid() as id');
257
+ const lastId = lastIdStmt.get();
258
+ if (this.primaryKey) {
259
+ return this.findById(lastId.id);
260
+ }
261
+ return { ...data };
262
+ }
263
+ /**
264
+ * Check if any records exist matching the conditions
265
+ */
266
+ exists(where) {
267
+ return this.find(where).exists();
268
+ }
269
+ /**
270
+ * Find a record by primary key or throw an error
271
+ * Returns a result with chainable methods like delete(), update(), save()
272
+ */
273
+ findByIdOrFail(id) {
274
+ const result = this.findById(id);
275
+ if (result === null) {
276
+ throw new Error(`Record with id "${id}" not found in table "${this.tableName}"`);
277
+ }
278
+ return result;
279
+ }
280
+ /**
281
+ * Get array of values for a single column
282
+ */
283
+ pluck(column, where) {
284
+ return this.find(where).pluck(column);
285
+ }
286
+ /**
287
+ * Get distinct values for a column
288
+ */
289
+ distinct(column, where) {
290
+ const sql = where
291
+ ? this.find(where)
292
+ .select(column)
293
+ .distinct()
294
+ .toSQL()
295
+ : { sql: `SELECT DISTINCT "${String(column)}" FROM "${this.tableName}"`, params: [] };
296
+ const stmt = this.db.prepare(sql.sql);
297
+ const results = stmt.all(...sql.params);
298
+ return results.map((row) => row[String(column)]);
299
+ }
300
+ /**
301
+ * Get the sum of a column
302
+ */
303
+ sum(column, where) {
304
+ return this.find(where).sum(column);
305
+ }
306
+ /**
307
+ * Get the average of a column
308
+ */
309
+ avg(column, where) {
310
+ return this.find(where).avg(column);
311
+ }
312
+ /**
313
+ * Get the minimum value of a column
314
+ */
315
+ min(column, where) {
316
+ return this.find(where).min(column);
317
+ }
318
+ /**
319
+ * Get the maximum value of a column
320
+ */
321
+ max(column, where) {
322
+ return this.find(where).max(column);
323
+ }
324
+ /**
325
+ * Increment a column value
326
+ */
327
+ increment(column, amount = 1, where) {
328
+ let sql = `UPDATE "${this.tableName}" SET "${String(column)}" = "${String(column)}" + ?`;
329
+ const params = [amount];
330
+ if (where) {
331
+ const whereClause = (0, where_builder_1.buildWhereClause)(where, params);
332
+ if (whereClause) {
333
+ sql += ` WHERE ${whereClause}`;
334
+ }
335
+ }
336
+ const stmt = this.getStatement(sql);
337
+ stmt.run(...params);
338
+ const changesStmt = this.db.prepare('SELECT changes() as count');
339
+ return changesStmt.get().count;
340
+ }
341
+ /**
342
+ * Decrement a column value
343
+ */
344
+ decrement(column, amount = 1, where) {
345
+ return this.increment(column, -amount, where);
346
+ }
347
+ /**
348
+ * Truncate the table (delete all records)
349
+ */
350
+ truncate() {
351
+ const sql = `DELETE FROM "${this.tableName}"`;
352
+ this.db.exec(sql);
353
+ // Reset autoincrement counter - use parameterized query for safety
354
+ const resetSeqStmt = this.db.prepare('DELETE FROM sqlite_sequence WHERE name = ?');
355
+ resetSeqStmt.run(this.tableName);
356
+ }
357
+ /**
358
+ * Get the table name
359
+ */
360
+ getTableName() {
361
+ return this.tableName;
362
+ }
363
+ /**
364
+ * Get the schema definition
365
+ */
366
+ getSchema() {
367
+ return this.schema;
368
+ }
369
+ /**
370
+ * Generate CREATE TABLE SQL for this model
371
+ */
372
+ toCreateTableSQL() {
373
+ return generateCreateTableSQL(this.tableName, this.schema);
374
+ }
375
+ }
376
+ exports.Model = Model;
377
+ /**
378
+ * Generate CREATE TABLE SQL from schema definition
379
+ */
380
+ function generateCreateTableSQL(tableName, schema) {
381
+ const columns = [];
382
+ for (const [name, def] of Object.entries(schema)) {
383
+ let col = `"${name}" ${def.type}`;
384
+ if (def.primary) {
385
+ col += ' PRIMARY KEY';
386
+ }
387
+ if (def.autoIncrement) {
388
+ col += ' AUTOINCREMENT';
389
+ }
390
+ if (def.unique && !def.primary) {
391
+ col += ' UNIQUE';
392
+ }
393
+ if (def.notNull && !def.primary) {
394
+ col += ' NOT NULL';
395
+ }
396
+ if (def.default !== undefined) {
397
+ const defaultValue = typeof def.default === 'string' ? `'${def.default}'` : def.default;
398
+ col += ` DEFAULT ${defaultValue}`;
399
+ }
400
+ columns.push(col);
401
+ }
402
+ return `CREATE TABLE IF NOT EXISTS "${tableName}" (${columns.join(', ')})`;
403
+ }
404
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { ComparisonOperator, OrderDirection, SQLQueryBindings, WhereCondition } from './types';
3
+ import { ResultProxy } from './result-proxy';
4
+ /**
5
+ * QueryBuilder<T> - A fluent query builder for constructing SQL queries
6
+ * Queries are only executed when .all(), .first(), or .run() are called
7
+ */
8
+ export declare class QueryBuilder<T extends Record<string, unknown>> {
9
+ private db;
10
+ private tableName;
11
+ private _where;
12
+ private _orConditions;
13
+ private _orderBy;
14
+ private _limit?;
15
+ private _offset?;
16
+ private _select;
17
+ private _distinct;
18
+ private _groupBy;
19
+ private _having;
20
+ private statementCache;
21
+ private primaryKey;
22
+ constructor(db: Database.Database, tableName: string, statementCache: Map<string, Database.Statement>, initialWhere?: WhereCondition<T>, primaryKey?: string | null);
23
+ /**
24
+ * Add WHERE conditions to the query (AND)
25
+ * @overload where(conditions) - Add conditions object
26
+ * @overload where(column, operator, value) - Add single condition with operator
27
+ */
28
+ where(conditions: WhereCondition<T>): QueryBuilder<T>;
29
+ where<K extends keyof T>(column: K, operator: ComparisonOperator, value: T[K]): QueryBuilder<T>;
30
+ /**
31
+ * Add OR conditions to the query
32
+ * @overload orWhere(conditions) - Add conditions object
33
+ * @overload orWhere(column, operator, value) - Add single condition with operator
34
+ */
35
+ orWhere(conditions: WhereCondition<T>): QueryBuilder<T>;
36
+ orWhere<K extends keyof T>(column: K, operator: ComparisonOperator, value: T[K]): QueryBuilder<T>;
37
+ /**
38
+ * Add ORDER BY clause to the query
39
+ */
40
+ orderBy(column: keyof T, direction?: OrderDirection): QueryBuilder<T>;
41
+ /**
42
+ * Set LIMIT for the query
43
+ */
44
+ limit(count: number): QueryBuilder<T>;
45
+ /**
46
+ * Set OFFSET for the query
47
+ */
48
+ offset(count: number): QueryBuilder<T>;
49
+ /**
50
+ * Select specific columns
51
+ */
52
+ select(...columns: (keyof T)[]): QueryBuilder<T>;
53
+ /**
54
+ * Select DISTINCT rows
55
+ */
56
+ distinct(): QueryBuilder<T>;
57
+ /**
58
+ * Add GROUP BY clause
59
+ */
60
+ groupBy(...columns: (keyof T)[]): QueryBuilder<T>;
61
+ /**
62
+ * Add HAVING clause (for use with GROUP BY)
63
+ */
64
+ having(conditions: WhereCondition<T>): QueryBuilder<T>;
65
+ /**
66
+ * Build the SQL query and parameters
67
+ */
68
+ private buildQuery;
69
+ /**
70
+ * Get or create a cached prepared statement
71
+ */
72
+ private getStatement;
73
+ /**
74
+ * Execute query and return all matching rows
75
+ */
76
+ all(): T[];
77
+ /**
78
+ * Execute query and return the first matching row with chainable methods
79
+ * The result has both the data properties AND methods like delete(), update(), save()
80
+ * @example
81
+ * const user = User.query().where("id", "=", 1).first();
82
+ * user?.name; // Access property
83
+ * user?.delete(); // Delete the record
84
+ * user?.update({ name: "New Name" }); // Update the record
85
+ */
86
+ first(): (T & ResultProxy<T>) | null;
87
+ /**
88
+ * Execute query and return the first matching row or throw an error
89
+ * The result has both the data properties AND methods like delete(), update(), save()
90
+ */
91
+ firstOrFail(): T & ResultProxy<T>;
92
+ /**
93
+ * Check if any records exist matching the query
94
+ */
95
+ exists(): boolean;
96
+ /**
97
+ * Get array of values for a single column
98
+ */
99
+ pluck<K extends keyof T>(column: K): T[K][];
100
+ /**
101
+ * Execute query and return raw results (alias for all())
102
+ */
103
+ run(): T[];
104
+ /**
105
+ * Execute query and return all matching rows (alias for all())
106
+ */
107
+ get(): T[];
108
+ /**
109
+ * Get the count of matching records
110
+ */
111
+ count(): number;
112
+ /**
113
+ * Get the sum of a column
114
+ */
115
+ sum(column: keyof T): number;
116
+ /**
117
+ * Get the average of a column
118
+ */
119
+ avg(column: keyof T): number;
120
+ /**
121
+ * Get the minimum value of a column
122
+ */
123
+ min(column: keyof T): number;
124
+ /**
125
+ * Get the maximum value of a column
126
+ */
127
+ max(column: keyof T): number;
128
+ /**
129
+ * Execute an aggregate function
130
+ */
131
+ private aggregate;
132
+ /**
133
+ * Get the SQL string for debugging
134
+ */
135
+ toSQL(): {
136
+ sql: string;
137
+ params: SQLQueryBindings[];
138
+ };
139
+ }
140
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}