@pma-network/sql 1.0.9 → 1.2.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/MySQL.d.ts +119 -16
- package/dist/MySQL.d.ts.map +1 -1
- package/dist/MySQL.js +560 -130
- package/dist/MySQL.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/type-casting.d.ts +4 -0
- package/dist/type-casting.d.ts.map +1 -0
- package/dist/type-casting.js +46 -0
- package/dist/type-casting.js.map +1 -0
- package/dist/types.d.ts +74 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/MySQL.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Pool, PoolConnection, RowDataPacket } from
|
|
2
|
-
import type { BatchQuery, ConnectionConfig, QueryParameters, TransactionCallback, TransactionResult } from
|
|
1
|
+
import type { Pool, PoolConnection, RowDataPacket } from "mysql2/promise";
|
|
2
|
+
import type { BatchQuery, ConnectionConfig, QueryOptions, QueryParameters, TableSchema, TransactionCallback, TransactionResult } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* MySQL database wrapper with connection pooling and named parameter support.
|
|
5
5
|
* Automatically reads connection configuration from environment variables.
|
|
@@ -14,14 +14,106 @@ export declare class MySQL {
|
|
|
14
14
|
private versionPrefix;
|
|
15
15
|
private metricsExportResource;
|
|
16
16
|
private metricsExportFunction;
|
|
17
|
+
private defaultQueryOptions;
|
|
18
|
+
private sshProcess;
|
|
19
|
+
private initializationPromise;
|
|
20
|
+
private schemas;
|
|
21
|
+
private autoSync;
|
|
22
|
+
private syncComplete;
|
|
17
23
|
/**
|
|
18
24
|
* Creates a new MySQL instance with connection pooling.
|
|
19
25
|
* If no config is provided, it will automatically look for connection strings in environment variables.
|
|
20
26
|
*
|
|
27
|
+
* SSH tunnel connections (mysql-ssh://) are supported and initialized automatically.
|
|
28
|
+
*
|
|
21
29
|
* @param config - Optional database configuration. If omitted, uses environment variables.
|
|
22
30
|
* @throws {Error} If no connection string is found or if connection string validation fails
|
|
23
31
|
*/
|
|
24
32
|
constructor(config?: ConnectionConfig);
|
|
33
|
+
private initializeSSH;
|
|
34
|
+
private ensureInitialized;
|
|
35
|
+
/**
|
|
36
|
+
* Defines a table schema that can be synced to the database.
|
|
37
|
+
*
|
|
38
|
+
* @param tableName - Name of the table
|
|
39
|
+
* @param schema - Table schema definition
|
|
40
|
+
* @example
|
|
41
|
+
* db.defineSchema('users', {
|
|
42
|
+
* columns: {
|
|
43
|
+
* id: { type: 'INT', primaryKey: true, autoIncrement: true },
|
|
44
|
+
* name: { type: 'VARCHAR(255)', nullable: false },
|
|
45
|
+
* email: { type: 'VARCHAR(255)', unique: true },
|
|
46
|
+
* created_at: { type: 'TIMESTAMP', default: 'CURRENT_TIMESTAMP' }
|
|
47
|
+
* },
|
|
48
|
+
* indexes: ['INDEX idx_email (email)']
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* // Or use shorthand string syntax
|
|
52
|
+
* db.defineSchema('logs', {
|
|
53
|
+
* columns: {
|
|
54
|
+
* id: 'INT AUTO_INCREMENT PRIMARY KEY',
|
|
55
|
+
* message: 'TEXT NOT NULL',
|
|
56
|
+
* level: 'VARCHAR(20) DEFAULT "info"'
|
|
57
|
+
* }
|
|
58
|
+
* });
|
|
59
|
+
*/
|
|
60
|
+
defineSchema(tableName: string, schema: TableSchema): this;
|
|
61
|
+
/**
|
|
62
|
+
* Syncs all defined schemas to the database, creating tables if they don't exist.
|
|
63
|
+
*
|
|
64
|
+
* @returns Promise that resolves when sync is complete
|
|
65
|
+
* @example
|
|
66
|
+
* db.defineSchema('users', { ... });
|
|
67
|
+
* db.defineSchema('posts', { ... });
|
|
68
|
+
* await db.sync();
|
|
69
|
+
*/
|
|
70
|
+
sync(): Promise<void>;
|
|
71
|
+
private buildColumnDefinition;
|
|
72
|
+
private createTableIfNotExists;
|
|
73
|
+
/**
|
|
74
|
+
* Creates a new MySQL instance with SSH tunnel support.
|
|
75
|
+
* Use this factory method when connecting through an SSH bastion/jump host.
|
|
76
|
+
*
|
|
77
|
+
* Supports two formats:
|
|
78
|
+
* 1. Separate SSH config object
|
|
79
|
+
* 2. mysql-ssh:// connection string (uses SSH_AUTH_SOCK for auth by default)
|
|
80
|
+
*
|
|
81
|
+
* @param config - Database configuration with SSH tunnel settings
|
|
82
|
+
* @returns Promise resolving to a MySQL instance connected through SSH tunnel
|
|
83
|
+
* @throws {Error} If SSH connection fails
|
|
84
|
+
* @throws {Error} If no connection string is found
|
|
85
|
+
* @example
|
|
86
|
+
* // Using mysql-ssh:// URL (recommended for 1Password/ssh-agent)
|
|
87
|
+
* const db = await MySQL.createWithSSH({
|
|
88
|
+
* connectionString: 'mysql-ssh://deploy@bastion.example.com/mydb?user=admin&password=secret'
|
|
89
|
+
* });
|
|
90
|
+
*
|
|
91
|
+
* // Using separate SSH config
|
|
92
|
+
* const db = await MySQL.createWithSSH({
|
|
93
|
+
* connectionString: 'mysql://user:pass@localhost:3306/database',
|
|
94
|
+
* ssh: {
|
|
95
|
+
* host: 'bastion.example.com',
|
|
96
|
+
* username: 'ssh-user',
|
|
97
|
+
* }
|
|
98
|
+
* });
|
|
99
|
+
*/
|
|
100
|
+
static createWithSSH(config?: ConnectionConfig): Promise<MySQL>;
|
|
101
|
+
private isSSHConnectionString;
|
|
102
|
+
/**
|
|
103
|
+
* Parses a mysql-ssh:// connection string into SSH and MySQL configs.
|
|
104
|
+
*
|
|
105
|
+
* Format: mysql-ssh://sshuser@sshhost[:sshport]/database?user=dbuser&password=dbpass[&host=dbhost][&port=dbport]
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* mysql-ssh://deploy@bastion.example.com/mydb?user=admin&password=secret
|
|
109
|
+
* mysql-ssh://deploy@bastion.example.com:2222/mydb?user=admin&password=secret&host=internal-db&port=3307
|
|
110
|
+
*/
|
|
111
|
+
private parseSSHConnectionString;
|
|
112
|
+
private initializePool;
|
|
113
|
+
private initializeWithSSH;
|
|
114
|
+
private initializeFromSSHConnectionString;
|
|
115
|
+
private createSSHTunnel;
|
|
116
|
+
private getQueryOption;
|
|
25
117
|
private fetchServerVersion;
|
|
26
118
|
private getConvar;
|
|
27
119
|
private getConvarInt;
|
|
@@ -58,7 +150,8 @@ export declare class MySQL {
|
|
|
58
150
|
private normalizeParameters;
|
|
59
151
|
private setupConvarListeners;
|
|
60
152
|
private scheduleResourceTick;
|
|
61
|
-
private
|
|
153
|
+
private isTimeoutError;
|
|
154
|
+
private executePoolMethod;
|
|
62
155
|
private exportMetric;
|
|
63
156
|
private replaceAtSymbols;
|
|
64
157
|
/**
|
|
@@ -86,7 +179,7 @@ export declare class MySQL {
|
|
|
86
179
|
* @example
|
|
87
180
|
* const result = await db.rawExecute('SELECT * FROM users WHERE uid = ?', [1]);
|
|
88
181
|
*/
|
|
89
|
-
rawExecute<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
|
|
182
|
+
rawExecute<T = unknown>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
|
|
90
183
|
/**
|
|
91
184
|
* Executes a SQL query and returns the raw results.
|
|
92
185
|
* Supports SELECT, INSERT, UPDATE, DELETE, and other SQL statements.
|
|
@@ -94,11 +187,12 @@ export declare class MySQL {
|
|
|
94
187
|
*
|
|
95
188
|
* @param query - SQL query with :name or ? placeholders
|
|
96
189
|
* @param parameters - Parameter values as object or array
|
|
190
|
+
* @param queryOptions - Query options to use for this query
|
|
97
191
|
* @returns Query result
|
|
98
192
|
* @example
|
|
99
193
|
* const result = await db.execute('SELECT * FROM users WHERE uid = :uid', { uid: 1 });
|
|
100
194
|
*/
|
|
101
|
-
execute<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
|
|
195
|
+
execute<T = unknown>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
|
|
102
196
|
/**
|
|
103
197
|
* Executes a SELECT query with raw positional parameters.
|
|
104
198
|
* This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
|
|
@@ -106,11 +200,12 @@ export declare class MySQL {
|
|
|
106
200
|
*
|
|
107
201
|
* @param query - SELECT query with ? placeholders only
|
|
108
202
|
* @param parameters - Array of values (undefined values are NOT converted to null)
|
|
203
|
+
* @param queryOptions - Query options to use for this query
|
|
109
204
|
* @returns Array of rows
|
|
110
205
|
* @example
|
|
111
206
|
* const users = await db.rawQuery('SELECT * FROM users WHERE job_name = ?', ['police']);
|
|
112
207
|
*/
|
|
113
|
-
rawQuery<T = RowDataPacket[]>(query: string, parameters?: unknown[]): Promise<T | null>;
|
|
208
|
+
rawQuery<T = RowDataPacket[]>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
|
|
114
209
|
/**
|
|
115
210
|
* Executes a SELECT query and returns rows.
|
|
116
211
|
* Use for queries returning multiple rows.
|
|
@@ -122,7 +217,7 @@ export declare class MySQL {
|
|
|
122
217
|
* @example
|
|
123
218
|
* const users = await db.query('SELECT * FROM users WHERE job_name = :job', { job: 'police' });
|
|
124
219
|
*/
|
|
125
|
-
query<T = RowDataPacket[]>(query: string, parameters?: QueryParameters): Promise<T | null>;
|
|
220
|
+
query<T = RowDataPacket[]>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
|
|
126
221
|
/**
|
|
127
222
|
* Inserts a row with raw positional parameters.
|
|
128
223
|
* This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
|
|
@@ -130,11 +225,12 @@ export declare class MySQL {
|
|
|
130
225
|
*
|
|
131
226
|
* @param query - INSERT query with ? placeholders only
|
|
132
227
|
* @param parameters - Array of values (undefined values are NOT converted to null)
|
|
228
|
+
* @param queryOptions - Query options to use for this query
|
|
133
229
|
* @returns Insert ID or null on error
|
|
134
230
|
* @example
|
|
135
231
|
* const insertId = await db.rawInsert('INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (?, ?, ?, ?, ?)', [1, 1, 'John', 'Doe', 1]);
|
|
136
232
|
*/
|
|
137
|
-
rawInsert(query: string, parameters?: unknown[]): Promise<number | null>;
|
|
233
|
+
rawInsert(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<number | null>;
|
|
138
234
|
/**
|
|
139
235
|
* Inserts a row into the database.
|
|
140
236
|
* Returns the auto-generated ID.
|
|
@@ -142,6 +238,7 @@ export declare class MySQL {
|
|
|
142
238
|
*
|
|
143
239
|
* @param query - INSERT query with :name or ? placeholders
|
|
144
240
|
* @param parameters - Values to insert
|
|
241
|
+
* @param queryOptions - Query options to use for this query
|
|
145
242
|
* @returns Insert ID or null on error
|
|
146
243
|
* @example
|
|
147
244
|
* const insertId = await db.insert(
|
|
@@ -149,7 +246,7 @@ export declare class MySQL {
|
|
|
149
246
|
* { identifier_id: 1, char_data_id: 1, first_name: 'John', last_name: 'Doe', inventory_id: 1 }
|
|
150
247
|
* );
|
|
151
248
|
*/
|
|
152
|
-
insert(query: string, parameters?: QueryParameters): Promise<number | null>;
|
|
249
|
+
insert(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<number | null>;
|
|
153
250
|
/**
|
|
154
251
|
* Updates rows with raw positional parameters.
|
|
155
252
|
* This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
|
|
@@ -157,11 +254,12 @@ export declare class MySQL {
|
|
|
157
254
|
*
|
|
158
255
|
* @param query - UPDATE query with ? placeholders only
|
|
159
256
|
* @param parameters - Array of values (undefined values are NOT converted to null)
|
|
257
|
+
* @param queryOptions - Query options to use for this query
|
|
160
258
|
* @returns Number of affected rows or null on error
|
|
161
259
|
* @example
|
|
162
260
|
* const affectedRows = await db.rawUpdate('UPDATE users SET job_name = ?, job_rank = ? WHERE uid = ?', ['police', 1, 123]);
|
|
163
261
|
*/
|
|
164
|
-
rawUpdate(query: string, parameters?: unknown[]): Promise<number | null>;
|
|
262
|
+
rawUpdate(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<number | null>;
|
|
165
263
|
/**
|
|
166
264
|
* Updates rows in the database.
|
|
167
265
|
* Returns the number of affected rows.
|
|
@@ -169,6 +267,7 @@ export declare class MySQL {
|
|
|
169
267
|
*
|
|
170
268
|
* @param query - UPDATE query with :name or ? placeholders
|
|
171
269
|
* @param parameters - Values to update
|
|
270
|
+
* @param queryOptions - Query options to use for this query
|
|
172
271
|
* @returns Number of affected rows or null on error
|
|
173
272
|
* @example
|
|
174
273
|
* const affectedRows = await db.update(
|
|
@@ -176,7 +275,7 @@ export declare class MySQL {
|
|
|
176
275
|
* { job: 'police', rank: 1, uid: 123 }
|
|
177
276
|
* );
|
|
178
277
|
*/
|
|
179
|
-
update(query: string, parameters?: QueryParameters): Promise<number | null>;
|
|
278
|
+
update(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<number | null>;
|
|
180
279
|
/**
|
|
181
280
|
* Returns a single value with raw positional parameters.
|
|
182
281
|
* This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
|
|
@@ -184,11 +283,12 @@ export declare class MySQL {
|
|
|
184
283
|
*
|
|
185
284
|
* @param query - SELECT query with ? placeholders only, returning one column
|
|
186
285
|
* @param parameters - Array of values (undefined values are NOT converted to null)
|
|
286
|
+
* @param queryOptions - Query options to use for this query
|
|
187
287
|
* @returns Value from first column of first row, or null
|
|
188
288
|
* @example
|
|
189
289
|
* const count = await db.rawScalar('SELECT COUNT(*) FROM users WHERE age > ?', [18]);
|
|
190
290
|
*/
|
|
191
|
-
rawScalar<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
|
|
291
|
+
rawScalar<T = unknown>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
|
|
192
292
|
/**
|
|
193
293
|
* Returns a single value from the database.
|
|
194
294
|
* Use for COUNT, SUM, or single column queries.
|
|
@@ -196,12 +296,13 @@ export declare class MySQL {
|
|
|
196
296
|
*
|
|
197
297
|
* @param query - SELECT query returning one column
|
|
198
298
|
* @param parameters - Parameter values
|
|
299
|
+
* @param queryOptions - Query options to use for this query
|
|
199
300
|
* @returns Value from first column of first row, or null
|
|
200
301
|
* @example
|
|
201
302
|
* const count = await db.scalar('SELECT COUNT(*) FROM users');
|
|
202
303
|
* const name = await db.scalar('SELECT name FROM users WHERE id = :id', { id: 1 });
|
|
203
304
|
*/
|
|
204
|
-
scalar<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
|
|
305
|
+
scalar<T = unknown>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
|
|
205
306
|
/**
|
|
206
307
|
* Returns a single row with raw positional parameters.
|
|
207
308
|
* This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
|
|
@@ -209,11 +310,12 @@ export declare class MySQL {
|
|
|
209
310
|
*
|
|
210
311
|
* @param query - SELECT query with ? placeholders only
|
|
211
312
|
* @param parameters - Array of values (undefined values are NOT converted to null)
|
|
313
|
+
* @param queryOptions - Query options to use for this query
|
|
212
314
|
* @returns Single row or null
|
|
213
315
|
* @example
|
|
214
316
|
* const user = await db.rawSingle('SELECT * FROM users WHERE id = ?', [1]);
|
|
215
317
|
*/
|
|
216
|
-
rawSingle<T = RowDataPacket>(query: string, parameters?: unknown[]): Promise<T | null>;
|
|
318
|
+
rawSingle<T = RowDataPacket>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
|
|
217
319
|
/**
|
|
218
320
|
* Returns a single row from the database.
|
|
219
321
|
* Returns null if no rows match.
|
|
@@ -221,6 +323,7 @@ export declare class MySQL {
|
|
|
221
323
|
*
|
|
222
324
|
* @param query - SELECT query with :name or ? placeholders
|
|
223
325
|
* @param parameters - Parameter values
|
|
326
|
+
* @param queryOptions - Query options to use for this query
|
|
224
327
|
* @returns Single row or null
|
|
225
328
|
* @example
|
|
226
329
|
* const user = await db.single('SELECT * FROM users WHERE id = :id', { id: 1 });
|
|
@@ -228,7 +331,7 @@ export declare class MySQL {
|
|
|
228
331
|
* console.log(user.name);
|
|
229
332
|
* }
|
|
230
333
|
*/
|
|
231
|
-
single<T = RowDataPacket>(query: string, parameters?: QueryParameters): Promise<T | null>;
|
|
334
|
+
single<T = RowDataPacket>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
|
|
232
335
|
/**
|
|
233
336
|
* Executes multiple queries as an atomic transaction.
|
|
234
337
|
* All changes are rolled back if any query fails.
|
|
@@ -277,7 +380,7 @@ export declare class MySQL {
|
|
|
277
380
|
*/
|
|
278
381
|
getConnection(): Promise<PoolConnection>;
|
|
279
382
|
/**
|
|
280
|
-
* Closes all connections in the pool.
|
|
383
|
+
* Closes all connections in the pool and SSH tunnel if active.
|
|
281
384
|
* Call when shutting down the application.
|
|
282
385
|
*
|
|
283
386
|
* @throws {Error} If pool fails to close connections
|
package/dist/MySQL.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"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"}
|