@pineliner/odb-client 1.0.6 → 1.0.7

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.
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Simple ORM for Database Operations
3
+ *
4
+ * Provides a Drizzle-like API for common database operations
5
+ * Wraps the raw SQL query interface with a more intuitive syntax
6
+ */
7
+ import type { Connection } from '../database/index.ts';
8
+ type WhereCondition = {
9
+ sql: string;
10
+ params: any[];
11
+ };
12
+ type OrderByDirection = 'ASC' | 'DESC';
13
+ /**
14
+ * Equal condition
15
+ */
16
+ export declare function eq(field: string, value: any): WhereCondition;
17
+ /**
18
+ * Not equal condition
19
+ */
20
+ export declare function ne(field: string, value: any): WhereCondition;
21
+ /**
22
+ * Greater than condition
23
+ */
24
+ export declare function gt(field: string, value: any): WhereCondition;
25
+ /**
26
+ * Greater than or equal condition
27
+ */
28
+ export declare function gte(field: string, value: any): WhereCondition;
29
+ /**
30
+ * Less than condition
31
+ */
32
+ export declare function lt(field: string, value: any): WhereCondition;
33
+ /**
34
+ * Less than or equal condition
35
+ */
36
+ export declare function lte(field: string, value: any): WhereCondition;
37
+ /**
38
+ * LIKE condition
39
+ */
40
+ export declare function like(field: string, pattern: string): WhereCondition;
41
+ /**
42
+ * IN condition
43
+ */
44
+ export declare function inArray(field: string, values: any[]): WhereCondition;
45
+ /**
46
+ * IS NULL condition
47
+ */
48
+ export declare function isNull(field: string): WhereCondition;
49
+ /**
50
+ * IS NOT NULL condition
51
+ */
52
+ export declare function isNotNull(field: string): WhereCondition;
53
+ /**
54
+ * AND combinator
55
+ */
56
+ export declare function and(...conditions: WhereCondition[]): WhereCondition;
57
+ /**
58
+ * OR combinator
59
+ */
60
+ export declare function or(...conditions: WhereCondition[]): WhereCondition;
61
+ /**
62
+ * Select Query Builder
63
+ */
64
+ declare class SelectBuilder<T = any> {
65
+ private db;
66
+ private tableName;
67
+ private selectFields;
68
+ private whereConditions;
69
+ private orderByField?;
70
+ private orderByDir;
71
+ private limitValue?;
72
+ private offsetValue?;
73
+ constructor(db: Connection, tableName: string);
74
+ /**
75
+ * Specify which fields to select
76
+ */
77
+ select(fields?: Record<string, any>): this;
78
+ /**
79
+ * Add WHERE clause (can be called multiple times, will be combined with AND)
80
+ */
81
+ where(condition: WhereCondition): this;
82
+ /**
83
+ * Add ORDER BY clause
84
+ */
85
+ orderBy(field: string, direction?: OrderByDirection): this;
86
+ /**
87
+ * Add LIMIT clause
88
+ */
89
+ limit(value: number): this;
90
+ /**
91
+ * Add OFFSET clause
92
+ */
93
+ offset(value: number): this;
94
+ /**
95
+ * Execute the query
96
+ */
97
+ execute(): Promise<T[]>;
98
+ }
99
+ /**
100
+ * Insert Query Builder
101
+ */
102
+ declare class InsertBuilder<T = any> {
103
+ private db;
104
+ private tableName;
105
+ private insertValues;
106
+ private shouldReturn;
107
+ constructor(db: Connection, tableName: string);
108
+ /**
109
+ * Specify values to insert
110
+ */
111
+ values(data: Record<string, any>): this;
112
+ /**
113
+ * Return inserted row
114
+ */
115
+ returning(): this;
116
+ /**
117
+ * Execute the query
118
+ */
119
+ execute(): Promise<T[]>;
120
+ }
121
+ /**
122
+ * Update Query Builder
123
+ */
124
+ declare class UpdateBuilder<T = any> {
125
+ private db;
126
+ private tableName;
127
+ private updateValues;
128
+ private whereConditions;
129
+ private shouldReturn;
130
+ constructor(db: Connection, tableName: string);
131
+ /**
132
+ * Specify values to update
133
+ */
134
+ set(data: Record<string, any>): this;
135
+ /**
136
+ * Add WHERE clause (can be called multiple times, will be combined with AND)
137
+ */
138
+ where(condition: WhereCondition): this;
139
+ /**
140
+ * Return updated row
141
+ */
142
+ returning(): this;
143
+ /**
144
+ * Execute the query
145
+ */
146
+ execute(): Promise<T[]>;
147
+ }
148
+ /**
149
+ * Delete Query Builder
150
+ */
151
+ declare class DeleteBuilder {
152
+ private db;
153
+ private tableName;
154
+ private whereConditions;
155
+ constructor(db: Connection, tableName: string);
156
+ /**
157
+ * Add WHERE clause (can be called multiple times, will be combined with AND)
158
+ */
159
+ where(condition: WhereCondition): this;
160
+ /**
161
+ * Execute the query
162
+ */
163
+ execute(): Promise<void>;
164
+ }
165
+ /**
166
+ * Table Query Builder
167
+ */
168
+ declare class TableQueryBuilder {
169
+ private db;
170
+ private tableName;
171
+ constructor(db: Connection, tableName: string);
172
+ /**
173
+ * Start a SELECT query
174
+ */
175
+ select(fields?: Record<string, any>): SelectBuilder;
176
+ /**
177
+ * Start an INSERT query
178
+ */
179
+ insert(): InsertBuilder;
180
+ /**
181
+ * Start an UPDATE query
182
+ */
183
+ update(): UpdateBuilder;
184
+ /**
185
+ * Start a DELETE query
186
+ */
187
+ delete(): DeleteBuilder;
188
+ }
189
+ /**
190
+ * ORM Wrapper for Connection
191
+ * Provides Drizzle-like syntax for database operations
192
+ */
193
+ export declare class ORM {
194
+ private db;
195
+ constructor(db: Connection);
196
+ /**
197
+ * Access a table for querying
198
+ */
199
+ table(tableName: string): TableQueryBuilder;
200
+ /**
201
+ * Select from table (shorthand)
202
+ */
203
+ select(fields?: Record<string, any>): {
204
+ from: (tableName: string) => SelectBuilder<any>;
205
+ };
206
+ /**
207
+ * Insert into table (shorthand)
208
+ */
209
+ insert(tableName: string): InsertBuilder<any>;
210
+ /**
211
+ * Update table (shorthand)
212
+ */
213
+ update(tableName: string): UpdateBuilder<any>;
214
+ /**
215
+ * Delete from table (shorthand)
216
+ */
217
+ delete(tableName: string): DeleteBuilder;
218
+ /**
219
+ * Raw query access
220
+ */
221
+ execute(sql: string, params?: any[]): Promise<import("../index.ts").DatabaseQueryResult<any>>;
222
+ }
223
+ /**
224
+ * Create ORM instance from Connection
225
+ */
226
+ export declare function createORM(db: Connection): ORM;
227
+ export type { WhereCondition, OrderByDirection };
228
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orm/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -8,6 +8,7 @@ export interface ODBLiteConfig {
8
8
  export interface QueryResult<T = any> {
9
9
  rows: T[];
10
10
  rowsAffected: number;
11
+ lastInsertRowid?: number | bigint;
11
12
  executionTime: number;
12
13
  databaseName?: string;
13
14
  }
@@ -16,6 +17,7 @@ export interface ODBLiteResponse<T = any> {
16
17
  data?: T[];
17
18
  rows?: T[];
18
19
  rowsAffected?: number;
20
+ lastInsertRowid?: number | bigint;
19
21
  executionTime?: number;
20
22
  dbId?: string;
21
23
  databaseName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pineliner/odb-client",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Isomorphic client for ODB-Lite with postgres.js-like template string SQL support",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -63,6 +63,7 @@ export class HTTPClient {
63
63
  return {
64
64
  rows: rows,
65
65
  rowsAffected: data.rowsAffected || (data.data as any)?.rowsAffected || 0,
66
+ lastInsertRowid: data.lastInsertRowid || (data.data as any)?.lastInsertRowid,
66
67
  executionTime: data.executionTime || (data.data as any)?.executionTime || 0,
67
68
  databaseName: data.databaseName || (data.data as any)?.databaseName
68
69
  }
@@ -6,6 +6,16 @@ import type {
6
6
  PreparedStatement,
7
7
  BunSQLiteConfig,
8
8
  } from '../types'
9
+ import {
10
+ convertTemplateToQuery,
11
+ sql as sqlHelper,
12
+ empty,
13
+ raw,
14
+ fragment,
15
+ join,
16
+ set,
17
+ where
18
+ } from '../sql-template'
9
19
 
10
20
  /**
11
21
  * Bun SQLite adapter for DatabaseManager
@@ -55,23 +65,53 @@ class BunSQLiteConnection implements Connection {
55
65
  private db: Database
56
66
  private inTransaction = false
57
67
 
68
+ // Dual-purpose sql method (postgres.js-compatible)
69
+ public sql: any
70
+
58
71
  constructor(db: Database) {
59
72
  this.db = db
60
- }
61
73
 
62
- /**
63
- * Template tag query (postgres.js-like)
64
- */
65
- async sql<T = any>(
66
- strings: TemplateStringsArray,
67
- ...values: any[]
68
- ): Promise<QueryResult<T>> {
69
- // Build SQL from template
70
- const sqlStr = strings.reduce((acc, str, i) => {
71
- return acc + str + (i < values.length ? '?' : '')
72
- }, '')
73
-
74
- return this.execute(sqlStr, values) as Promise<QueryResult<T>>
74
+ // Create dual-purpose sql method (postgres.js lazy evaluation pattern)
75
+ // Handles both template tag calls AND helper function calls
76
+ const self = this
77
+ this.sql = function(stringsOrValue: any, ...values: any[]): any {
78
+ // Check if called as template tag (has 'raw' property)
79
+ if (stringsOrValue && typeof stringsOrValue === 'object' && 'raw' in stringsOrValue) {
80
+ // Template literal call: sql`SELECT...`
81
+ // Return a thenable SqlFragment (lazy evaluation):
82
+ // - Can be embedded in other queries as SqlFragment
83
+ // - Can be awaited to execute and return rows
84
+ const query = convertTemplateToQuery(stringsOrValue, values)
85
+
86
+ // Create thenable fragment
87
+ const thenableFragment: any = {
88
+ _isSqlFragment: true,
89
+ sql: query.sql,
90
+ args: query.args
91
+ }
92
+
93
+ // Make it awaitable by adding then method (using bracket notation to avoid linter error)
94
+ thenableFragment['then'] = function(onFulfilled: any, onRejected: any) {
95
+ return self.execute(query)
96
+ .then(result => result.rows)
97
+ .then(onFulfilled, onRejected)
98
+ }
99
+
100
+ return thenableFragment
101
+ } else {
102
+ // Regular function call: sql(['col1', 'col2']) or sql(obj, 'key')
103
+ // Return SqlFragment for use in template literals
104
+ return sqlHelper(stringsOrValue, ...values)
105
+ }
106
+ }
107
+
108
+ // Attach helper methods as properties (postgres.js style)
109
+ this.sql.empty = empty
110
+ this.sql.raw = raw
111
+ this.sql.fragment = fragment
112
+ this.sql.join = join
113
+ this.sql.set = set
114
+ this.sql.where = where
75
115
  }
76
116
 
77
117
  /**
@@ -91,9 +131,18 @@ class BunSQLiteConnection implements Connection {
91
131
  let sqlParams: any[]
92
132
 
93
133
  if (typeof sql === 'object') {
134
+ // Debug logging for SQL errors
135
+ if (process.env.DEBUG_SQL) {
136
+ console.log('[BunSQLite] Executing SQL:', sql.sql)
137
+ console.log('[BunSQLite] With args:', sql.args)
138
+ }
94
139
  sqlStr = sql.sql
95
140
  sqlParams = sql.args || []
96
141
  } else {
142
+ if (process.env.DEBUG_SQL) {
143
+ console.log('[BunSQLite] Executing SQL:', sql)
144
+ console.log('[BunSQLite] With params:', params)
145
+ }
97
146
  sqlStr = sql
98
147
  sqlParams = params
99
148
  }
@@ -117,7 +166,8 @@ class BunSQLiteConnection implements Connection {
117
166
  }
118
167
  }
119
168
  } catch (error: any) {
120
- throw new Error(`SQL execution failed: ${error.message}`)
169
+ // Re-throw the original error to let the application handle it
170
+ throw error
121
171
  }
122
172
  }
123
173
 
@@ -194,4 +244,12 @@ class BunSQLiteConnection implements Connection {
194
244
  async close(): Promise<void> {
195
245
  this.db.close()
196
246
  }
247
+
248
+ /**
249
+ * Create ORM instance for this connection
250
+ */
251
+ createORM(): any {
252
+ const { createORM } = require('../../orm/index.ts')
253
+ return createORM(this)
254
+ }
197
255
  }
@@ -6,6 +6,16 @@ import type {
6
6
  PreparedStatement,
7
7
  LibSQLConfig,
8
8
  } from '../types'
9
+ import {
10
+ convertTemplateToQuery,
11
+ sql as sqlHelper,
12
+ empty,
13
+ raw,
14
+ fragment,
15
+ join,
16
+ set,
17
+ where
18
+ } from '../sql-template'
9
19
 
10
20
  /**
11
21
  * LibSQL adapter for DatabaseManager
@@ -55,23 +65,53 @@ class LibSQLConnection implements Connection {
55
65
  private client: Client
56
66
  private txClient?: LibSQLTransaction
57
67
 
68
+ // Dual-purpose sql method (postgres.js-compatible)
69
+ public sql: any
70
+
58
71
  constructor(client: Client) {
59
72
  this.client = client
60
- }
61
73
 
62
- /**
63
- * Template tag query (postgres.js-like)
64
- */
65
- async sql<T = any>(
66
- strings: TemplateStringsArray,
67
- ...values: any[]
68
- ): Promise<QueryResult<T>> {
69
- // Build SQL from template
70
- const sqlStr = strings.reduce((acc, str, i) => {
71
- return acc + str + (i < values.length ? '?' : '')
72
- }, '')
73
-
74
- return this.execute(sqlStr, values) as Promise<QueryResult<T>>
74
+ // Create dual-purpose sql method (postgres.js lazy evaluation pattern)
75
+ // Handles both template tag calls AND helper function calls
76
+ const self = this
77
+ this.sql = function(stringsOrValue: any, ...values: any[]): any {
78
+ // Check if called as template tag (has 'raw' property)
79
+ if (stringsOrValue && typeof stringsOrValue === 'object' && 'raw' in stringsOrValue) {
80
+ // Template literal call: sql`SELECT...`
81
+ // Return a thenable SqlFragment (lazy evaluation):
82
+ // - Can be embedded in other queries as SqlFragment
83
+ // - Can be awaited to execute and return rows
84
+ const query = convertTemplateToQuery(stringsOrValue, values)
85
+
86
+ // Create thenable fragment
87
+ const thenableFragment: any = {
88
+ _isSqlFragment: true,
89
+ sql: query.sql,
90
+ args: query.args
91
+ }
92
+
93
+ // Make it awaitable by adding then method (using bracket notation to avoid linter error)
94
+ thenableFragment['then'] = function(onFulfilled: any, onRejected: any) {
95
+ return self.execute(query)
96
+ .then(result => result.rows)
97
+ .then(onFulfilled, onRejected)
98
+ }
99
+
100
+ return thenableFragment
101
+ } else {
102
+ // Regular function call: sql(['col1', 'col2']) or sql(obj, 'key')
103
+ // Return SqlFragment for use in template literals
104
+ return sqlHelper(stringsOrValue, ...values)
105
+ }
106
+ }
107
+
108
+ // Attach helper methods as properties (postgres.js style)
109
+ this.sql.empty = empty
110
+ this.sql.raw = raw
111
+ this.sql.fragment = fragment
112
+ this.sql.join = join
113
+ this.sql.set = set
114
+ this.sql.where = where
75
115
  }
76
116
 
77
117
  /**
@@ -92,8 +132,17 @@ class LibSQLConnection implements Connection {
92
132
  // Support both execute(sql, params) and execute({sql, args}) formats
93
133
  let query: { sql: string; args: any[] }
94
134
  if (typeof sql === 'string') {
135
+ // Debug logging for SQL errors
136
+ if (process.env.DEBUG_SQL) {
137
+ console.log('[LibSQL] Executing SQL:', sql)
138
+ console.log('[LibSQL] With params:', params)
139
+ }
95
140
  query = { sql, args: params }
96
141
  } else {
142
+ if (process.env.DEBUG_SQL) {
143
+ console.log('[LibSQL] Executing SQL:', sql.sql)
144
+ console.log('[LibSQL] With args:', sql.args)
145
+ }
97
146
  query = { sql: sql.sql, args: sql.args || [] }
98
147
  }
99
148
 
@@ -107,7 +156,8 @@ class LibSQLConnection implements Connection {
107
156
  : undefined,
108
157
  }
109
158
  } catch (error: any) {
110
- throw new Error(`SQL execution failed: ${error.message}`)
159
+ // Re-throw the original error to let the application handle it
160
+ throw error
111
161
  }
112
162
  }
113
163
 
@@ -167,4 +217,12 @@ class LibSQLConnection implements Connection {
167
217
  // LibSQL client.close() if available in future versions
168
218
  // For now, connections are managed by the client pool
169
219
  }
220
+
221
+ /**
222
+ * Create ORM instance for this connection
223
+ */
224
+ createORM(): any {
225
+ const { createORM } = require('../../orm/index.ts')
226
+ return createORM(this)
227
+ }
170
228
  }