exisjs 0.5.10 → 0.5.11

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 (157) hide show
  1. package/dist/auth/index.d.ts +3 -1
  2. package/dist/auth/index.d.ts.map +1 -1
  3. package/dist/auth/index.js +4 -1
  4. package/dist/auth/index.js.map +1 -1
  5. package/dist/auth/oauth/core.d.ts +96 -0
  6. package/dist/auth/oauth/core.d.ts.map +1 -0
  7. package/dist/auth/oauth/core.js +203 -0
  8. package/dist/auth/oauth/core.js.map +1 -0
  9. package/dist/auth/oauth/index.d.ts +45 -0
  10. package/dist/auth/oauth/index.d.ts.map +1 -0
  11. package/dist/auth/oauth/index.js +64 -0
  12. package/dist/auth/oauth/index.js.map +1 -0
  13. package/dist/auth/oauth/middleware.d.ts +63 -0
  14. package/dist/auth/oauth/middleware.d.ts.map +1 -0
  15. package/dist/auth/oauth/middleware.js +164 -0
  16. package/dist/auth/oauth/middleware.js.map +1 -0
  17. package/dist/auth/oauth/providers/custom.d.ts +41 -0
  18. package/dist/auth/oauth/providers/custom.d.ts.map +1 -0
  19. package/dist/auth/oauth/providers/custom.js +204 -0
  20. package/dist/auth/oauth/providers/custom.js.map +1 -0
  21. package/dist/auth/oauth/providers/discord.d.ts +23 -0
  22. package/dist/auth/oauth/providers/discord.d.ts.map +1 -0
  23. package/dist/auth/oauth/providers/discord.js +130 -0
  24. package/dist/auth/oauth/providers/discord.js.map +1 -0
  25. package/dist/auth/oauth/providers/facebook.d.ts +28 -0
  26. package/dist/auth/oauth/providers/facebook.d.ts.map +1 -0
  27. package/dist/auth/oauth/providers/facebook.js +124 -0
  28. package/dist/auth/oauth/providers/facebook.js.map +1 -0
  29. package/dist/auth/oauth/providers/github.d.ts +25 -0
  30. package/dist/auth/oauth/providers/github.d.ts.map +1 -0
  31. package/dist/auth/oauth/providers/github.js +132 -0
  32. package/dist/auth/oauth/providers/github.js.map +1 -0
  33. package/dist/auth/oauth/providers/google.d.ts +23 -0
  34. package/dist/auth/oauth/providers/google.d.ts.map +1 -0
  35. package/dist/auth/oauth/providers/google.js +134 -0
  36. package/dist/auth/oauth/providers/google.js.map +1 -0
  37. package/dist/auth/oauth/providers/microsoft.d.ts +28 -0
  38. package/dist/auth/oauth/providers/microsoft.d.ts.map +1 -0
  39. package/dist/auth/oauth/providers/microsoft.js +136 -0
  40. package/dist/auth/oauth/providers/microsoft.js.map +1 -0
  41. package/dist/auth/oauth/types.d.ts +158 -0
  42. package/dist/auth/oauth/types.d.ts.map +1 -0
  43. package/dist/auth/oauth/types.js +4 -0
  44. package/dist/auth/oauth/types.js.map +1 -0
  45. package/dist/cli/commands/dev.d.ts.map +1 -1
  46. package/dist/cli/commands/dev.js +0 -1
  47. package/dist/cli/commands/dev.js.map +1 -1
  48. package/dist/database/adapters/mongodb.d.ts +58 -0
  49. package/dist/database/adapters/mongodb.d.ts.map +1 -0
  50. package/dist/database/adapters/mongodb.js +264 -0
  51. package/dist/database/adapters/mongodb.js.map +1 -0
  52. package/dist/database/adapters/mysql.d.ts +27 -0
  53. package/dist/database/adapters/mysql.d.ts.map +1 -0
  54. package/dist/database/adapters/mysql.js +188 -0
  55. package/dist/database/adapters/mysql.js.map +1 -0
  56. package/dist/database/adapters/postgres.d.ts +28 -0
  57. package/dist/database/adapters/postgres.d.ts.map +1 -0
  58. package/dist/database/adapters/postgres.js +174 -0
  59. package/dist/database/adapters/postgres.js.map +1 -0
  60. package/dist/database/adapters/sqlite.d.ts +27 -0
  61. package/dist/database/adapters/sqlite.d.ts.map +1 -0
  62. package/dist/database/adapters/sqlite.js +149 -0
  63. package/dist/database/adapters/sqlite.js.map +1 -0
  64. package/dist/database/index.d.ts +42 -0
  65. package/dist/database/index.d.ts.map +1 -0
  66. package/dist/database/index.js +58 -0
  67. package/dist/database/index.js.map +1 -0
  68. package/dist/database/manager.d.ts +114 -0
  69. package/dist/database/manager.d.ts.map +1 -0
  70. package/dist/database/manager.js +269 -0
  71. package/dist/database/manager.js.map +1 -0
  72. package/dist/database/migration.d.ts +57 -0
  73. package/dist/database/migration.d.ts.map +1 -0
  74. package/dist/database/migration.js +329 -0
  75. package/dist/database/migration.js.map +1 -0
  76. package/dist/database/query-builder.d.ts +89 -0
  77. package/dist/database/query-builder.d.ts.map +1 -0
  78. package/dist/database/query-builder.js +353 -0
  79. package/dist/database/query-builder.js.map +1 -0
  80. package/dist/database/types.d.ts +184 -0
  81. package/dist/database/types.d.ts.map +1 -0
  82. package/dist/database/types.js +4 -0
  83. package/dist/database/types.js.map +1 -0
  84. package/dist/docs/ARCHITECTURE.md +349 -0
  85. package/dist/docs/BENCHMARKS.md +36 -0
  86. package/dist/docs/README.md +34 -0
  87. package/dist/docs/content/README.md +44 -0
  88. package/dist/docs/content/adapters.mdx +199 -0
  89. package/dist/docs/content/cache.mdx +239 -0
  90. package/dist/docs/content/circuit-breaker.mdx +130 -0
  91. package/dist/docs/content/cli/commands.mdx +214 -0
  92. package/dist/docs/content/cli/overview.mdx +92 -0
  93. package/dist/docs/content/cli/usage.mdx +61 -0
  94. package/dist/docs/content/config.mdx +214 -0
  95. package/dist/docs/content/controllers.mdx +241 -0
  96. package/dist/docs/content/cron.mdx +109 -0
  97. package/dist/docs/content/database.mdx +209 -0
  98. package/dist/docs/content/dataloader.mdx +170 -0
  99. package/dist/docs/content/decorators.mdx +204 -0
  100. package/dist/docs/content/errors.mdx +344 -0
  101. package/dist/docs/content/gateways.mdx +376 -0
  102. package/dist/docs/content/installation.mdx +210 -0
  103. package/dist/docs/content/introduction.mdx +96 -0
  104. package/dist/docs/content/middleware.mdx +441 -0
  105. package/dist/docs/content/modules.mdx +144 -0
  106. package/dist/docs/content/oauth.mdx +179 -0
  107. package/dist/docs/content/providers.mdx +147 -0
  108. package/dist/docs/content/queues.mdx +177 -0
  109. package/dist/docs/content/requests.mdx +293 -0
  110. package/dist/docs/content/responses.mdx +271 -0
  111. package/dist/docs/content/routing.mdx +541 -0
  112. package/dist/docs/content/rpc.mdx +146 -0
  113. package/dist/docs/content/security.mdx +294 -0
  114. package/dist/docs/content/sse.mdx +159 -0
  115. package/dist/docs/content/structure.mdx +116 -0
  116. package/dist/docs/content/testing.mdx +139 -0
  117. package/dist/docs/content/validation.mdx +249 -0
  118. package/dist/docs/content/websockets.mdx +289 -0
  119. package/dist/docs/integrations/README.md +23 -0
  120. package/dist/docs/integrations/jwt.mdx +151 -0
  121. package/dist/docs/integrations/mongo.mdx +183 -0
  122. package/dist/docs/integrations/observability.mdx +125 -0
  123. package/dist/docs/integrations/openai.mdx +108 -0
  124. package/dist/docs/integrations/postgres.mdx +190 -0
  125. package/dist/docs/integrations/posthog.mdx +122 -0
  126. package/dist/docs/integrations/redis.mdx +141 -0
  127. package/dist/docs/integrations/resend.mdx +117 -0
  128. package/dist/docs/integrations/s3.mdx +122 -0
  129. package/dist/docs/integrations/swagger.mdx +113 -0
  130. package/dist/docs/reference/README.md +3 -0
  131. package/dist/docs/reference/adapters.mdx +130 -0
  132. package/dist/docs/reference/auth.mdx +183 -0
  133. package/dist/docs/reference/cache.mdx +132 -0
  134. package/dist/docs/reference/circuit-breaker.mdx +71 -0
  135. package/dist/docs/reference/config.mdx +118 -0
  136. package/dist/docs/reference/context.mdx +168 -0
  137. package/dist/docs/reference/dataloader.mdx +91 -0
  138. package/dist/docs/reference/decorators.mdx +293 -0
  139. package/dist/docs/reference/di.mdx +123 -0
  140. package/dist/docs/reference/error.mdx +170 -0
  141. package/dist/docs/reference/exis.mdx +124 -0
  142. package/dist/docs/reference/middleware.mdx +304 -0
  143. package/dist/docs/reference/plugin.mdx +113 -0
  144. package/dist/docs/reference/queue.mdx +155 -0
  145. package/dist/docs/reference/router.mdx +248 -0
  146. package/dist/docs/reference/sanitize.mdx +130 -0
  147. package/dist/docs/reference/storage.mdx +116 -0
  148. package/dist/docs/reference/swagger.mdx +132 -0
  149. package/dist/docs/reference/testing.mdx +145 -0
  150. package/dist/docs/reference/validator.mdx +186 -0
  151. package/dist/index.d.ts +4 -0
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +10 -1
  154. package/dist/index.js.map +1 -1
  155. package/dist/server/bootstrapper.js +1 -1
  156. package/dist/server/bootstrapper.js.map +1 -1
  157. package/package.json +8 -1
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+ /**
3
+ * Chainable SQL Query Builder.
4
+ *
5
+ * Generates dialect-specific SQL with parameterized queries.
6
+ * Supports select, insert, update, delete, joins, where, orderBy, limit, offset,
7
+ * groupBy, and having.
8
+ *
9
+ * Uses PostgreSQL-style $1, $2 placeholders by default.
10
+ * MySQL mode uses ? placeholders.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.QueryBuilder = void 0;
14
+ class QueryBuilder {
15
+ constructor(adapter, table) {
16
+ this.operation = 'select';
17
+ this.selectColumns = ['*'];
18
+ this.whereClauses = [];
19
+ this.joinClauses = [];
20
+ this.orderByClauses = [];
21
+ this.groupByColumns = [];
22
+ this.havingClauses = [];
23
+ this.distinctFlag = false;
24
+ this.params = [];
25
+ this.adapter = adapter;
26
+ this.dialect = adapter.dialect;
27
+ this.tableName = table;
28
+ }
29
+ // ─── SELECT ────────────────────────────────────────────────────────────────
30
+ select(...columns) {
31
+ this.operation = 'select';
32
+ if (columns.length > 0) {
33
+ this.selectColumns = columns;
34
+ }
35
+ return this;
36
+ }
37
+ distinct() {
38
+ this.distinctFlag = true;
39
+ return this;
40
+ }
41
+ // ─── WHERE ─────────────────────────────────────────────────────────────────
42
+ where(column, operator, value) {
43
+ this.whereClauses.push({ column, operator, value, conjunction: 'AND' });
44
+ return this;
45
+ }
46
+ orWhere(column, operator, value) {
47
+ this.whereClauses.push({ column, operator, value, conjunction: 'OR' });
48
+ return this;
49
+ }
50
+ whereNull(column) {
51
+ this.whereClauses.push({
52
+ column,
53
+ operator: 'IS',
54
+ value: null,
55
+ conjunction: 'AND',
56
+ });
57
+ return this;
58
+ }
59
+ whereNotNull(column) {
60
+ this.whereClauses.push({
61
+ column,
62
+ operator: 'IS NOT',
63
+ value: null,
64
+ conjunction: 'AND',
65
+ });
66
+ return this;
67
+ }
68
+ whereIn(column, values) {
69
+ this.whereClauses.push({
70
+ column,
71
+ operator: 'IN',
72
+ value: values,
73
+ conjunction: 'AND',
74
+ });
75
+ return this;
76
+ }
77
+ whereBetween(column, min, max) {
78
+ this.whereClauses.push({
79
+ column,
80
+ operator: 'BETWEEN',
81
+ value: [min, max],
82
+ conjunction: 'AND',
83
+ });
84
+ return this;
85
+ }
86
+ // ─── JOIN ──────────────────────────────────────────────────────────────────
87
+ join(table, on, type = 'INNER') {
88
+ this.joinClauses.push({ type, table, on });
89
+ return this;
90
+ }
91
+ leftJoin(table, on) {
92
+ return this.join(table, on, 'LEFT');
93
+ }
94
+ rightJoin(table, on) {
95
+ return this.join(table, on, 'RIGHT');
96
+ }
97
+ fullJoin(table, on) {
98
+ return this.join(table, on, 'FULL');
99
+ }
100
+ // ─── ORDER / GROUP / LIMIT ─────────────────────────────────────────────────
101
+ orderBy(column, direction = 'ASC') {
102
+ this.orderByClauses.push({ column, direction });
103
+ return this;
104
+ }
105
+ groupBy(...columns) {
106
+ this.groupByColumns.push(...columns);
107
+ return this;
108
+ }
109
+ having(column, operator, value) {
110
+ this.havingClauses.push({ column, operator, value, conjunction: 'AND' });
111
+ return this;
112
+ }
113
+ limit(count) {
114
+ this.limitValue = count;
115
+ return this;
116
+ }
117
+ offset(count) {
118
+ this.offsetValue = count;
119
+ return this;
120
+ }
121
+ // ─── INSERT ────────────────────────────────────────────────────────────────
122
+ insert(data) {
123
+ this.operation = 'insert';
124
+ this.insertData = data;
125
+ return this;
126
+ }
127
+ // ─── UPDATE ────────────────────────────────────────────────────────────────
128
+ update(data) {
129
+ this.operation = 'update';
130
+ this.updateData = data;
131
+ return this;
132
+ }
133
+ // ─── DELETE ────────────────────────────────────────────────────────────────
134
+ delete() {
135
+ this.operation = 'delete';
136
+ return this;
137
+ }
138
+ // ─── RETURNING ─────────────────────────────────────────────────────────────
139
+ returning(...columns) {
140
+ this.returningColumns = columns.length > 0 ? columns : ['*'];
141
+ return this;
142
+ }
143
+ // ─── EXECUTE ───────────────────────────────────────────────────────────────
144
+ async execute() {
145
+ const { sql, params } = this.toSQL();
146
+ if (this.operation === 'select') {
147
+ return this.adapter.query(sql, params);
148
+ }
149
+ // For insert/update/delete with RETURNING, use query instead of execute
150
+ if (this.returningColumns && this.dialect === 'postgres') {
151
+ return this.adapter.query(sql, params);
152
+ }
153
+ return this.adapter.execute(sql, params);
154
+ }
155
+ /**
156
+ * Execute and return just the rows (convenience method for SELECT).
157
+ */
158
+ async rows() {
159
+ const result = await this.execute();
160
+ return 'rows' in result ? result.rows : [];
161
+ }
162
+ /**
163
+ * Execute and return the first row (convenience method for SELECT ... LIMIT 1).
164
+ */
165
+ async first() {
166
+ this.limitValue = 1;
167
+ const result = await this.execute();
168
+ return 'rows' in result ? (result.rows[0] ?? null) : null;
169
+ }
170
+ /**
171
+ * Execute and return the count of matching rows.
172
+ */
173
+ async count(column = '*') {
174
+ this.selectColumns = [`COUNT(${column}) as count`];
175
+ const result = await this.adapter.query(this.buildSelect(), this.params);
176
+ return Number(result.rows[0]?.count ?? 0);
177
+ }
178
+ // ─── SQL Generation ────────────────────────────────────────────────────────
179
+ /**
180
+ * Build the SQL string and parameters without executing.
181
+ */
182
+ toSQL() {
183
+ this.params = [];
184
+ let sql;
185
+ switch (this.operation) {
186
+ case 'select':
187
+ sql = this.buildSelect();
188
+ break;
189
+ case 'insert':
190
+ sql = this.buildInsert();
191
+ break;
192
+ case 'update':
193
+ sql = this.buildUpdate();
194
+ break;
195
+ case 'delete':
196
+ sql = this.buildDelete();
197
+ break;
198
+ default:
199
+ throw new Error(`Unknown operation: ${this.operation}`);
200
+ }
201
+ return { sql, params: this.params };
202
+ }
203
+ // ─── Private Builders ──────────────────────────────────────────────────────
204
+ buildSelect() {
205
+ const distinct = this.distinctFlag ? 'DISTINCT ' : '';
206
+ let sql = `SELECT ${distinct}${this.selectColumns.join(', ')} FROM ${this.tableName}`;
207
+ sql += this.buildJoins();
208
+ sql += this.buildWhere();
209
+ sql += this.buildGroupBy();
210
+ sql += this.buildHaving();
211
+ sql += this.buildOrderBy();
212
+ sql += this.buildLimit();
213
+ return sql;
214
+ }
215
+ buildInsert() {
216
+ if (!this.insertData) {
217
+ throw new Error('No data provided for INSERT');
218
+ }
219
+ const rows = Array.isArray(this.insertData)
220
+ ? this.insertData
221
+ : [this.insertData];
222
+ if (rows.length === 0) {
223
+ throw new Error('No data provided for INSERT');
224
+ }
225
+ const columns = Object.keys(rows[0]);
226
+ const valueSets = [];
227
+ for (const row of rows) {
228
+ const placeholders = [];
229
+ for (const col of columns) {
230
+ this.params.push(row[col]);
231
+ placeholders.push(this.placeholder());
232
+ }
233
+ valueSets.push(`(${placeholders.join(', ')})`);
234
+ }
235
+ let sql = `INSERT INTO ${this.tableName} (${columns.join(', ')}) VALUES ${valueSets.join(', ')}`;
236
+ if (this.returningColumns && this.dialect === 'postgres') {
237
+ sql += ` RETURNING ${this.returningColumns.join(', ')}`;
238
+ }
239
+ return sql;
240
+ }
241
+ buildUpdate() {
242
+ if (!this.updateData) {
243
+ throw new Error('No data provided for UPDATE');
244
+ }
245
+ const setClauses = [];
246
+ for (const [key, value] of Object.entries(this.updateData)) {
247
+ this.params.push(value);
248
+ setClauses.push(`${key} = ${this.placeholder()}`);
249
+ }
250
+ let sql = `UPDATE ${this.tableName} SET ${setClauses.join(', ')}`;
251
+ sql += this.buildWhere();
252
+ if (this.returningColumns && this.dialect === 'postgres') {
253
+ sql += ` RETURNING ${this.returningColumns.join(', ')}`;
254
+ }
255
+ return sql;
256
+ }
257
+ buildDelete() {
258
+ let sql = `DELETE FROM ${this.tableName}`;
259
+ sql += this.buildWhere();
260
+ if (this.returningColumns && this.dialect === 'postgres') {
261
+ sql += ` RETURNING ${this.returningColumns.join(', ')}`;
262
+ }
263
+ return sql;
264
+ }
265
+ buildJoins() {
266
+ if (this.joinClauses.length === 0)
267
+ return '';
268
+ return this.joinClauses
269
+ .map((j) => ` ${j.type} JOIN ${j.table} ON ${j.on}`)
270
+ .join('');
271
+ }
272
+ buildWhere() {
273
+ if (this.whereClauses.length === 0)
274
+ return '';
275
+ const parts = [];
276
+ for (let i = 0; i < this.whereClauses.length; i++) {
277
+ const clause = this.whereClauses[i];
278
+ const prefix = i === 0 ? '' : ` ${clause.conjunction} `;
279
+ if (clause.operator === 'IS' || clause.operator === 'IS NOT') {
280
+ parts.push(`${prefix}${clause.column} ${clause.operator} NULL`);
281
+ }
282
+ else if (clause.operator === 'IN' || clause.operator === 'NOT IN') {
283
+ const values = clause.value;
284
+ const placeholders = values.map((v) => {
285
+ this.params.push(v);
286
+ return this.placeholder();
287
+ });
288
+ parts.push(`${prefix}${clause.column} ${clause.operator} (${placeholders.join(', ')})`);
289
+ }
290
+ else if (clause.operator === 'BETWEEN') {
291
+ const [min, max] = clause.value;
292
+ this.params.push(min);
293
+ const minPlaceholder = this.placeholder();
294
+ this.params.push(max);
295
+ const maxPlaceholder = this.placeholder();
296
+ parts.push(`${prefix}${clause.column} BETWEEN ${minPlaceholder} AND ${maxPlaceholder}`);
297
+ }
298
+ else {
299
+ this.params.push(clause.value);
300
+ parts.push(`${prefix}${clause.column} ${clause.operator} ${this.placeholder()}`);
301
+ }
302
+ }
303
+ return ` WHERE ${parts.join('')}`;
304
+ }
305
+ buildGroupBy() {
306
+ if (this.groupByColumns.length === 0)
307
+ return '';
308
+ return ` GROUP BY ${this.groupByColumns.join(', ')}`;
309
+ }
310
+ buildHaving() {
311
+ if (this.havingClauses.length === 0)
312
+ return '';
313
+ const parts = [];
314
+ for (let i = 0; i < this.havingClauses.length; i++) {
315
+ const clause = this.havingClauses[i];
316
+ const prefix = i === 0 ? '' : ` ${clause.conjunction} `;
317
+ this.params.push(clause.value);
318
+ parts.push(`${prefix}${clause.column} ${clause.operator} ${this.placeholder()}`);
319
+ }
320
+ return ` HAVING ${parts.join('')}`;
321
+ }
322
+ buildOrderBy() {
323
+ if (this.orderByClauses.length === 0)
324
+ return '';
325
+ const parts = this.orderByClauses.map((o) => `${o.column} ${o.direction.toUpperCase()}`);
326
+ return ` ORDER BY ${parts.join(', ')}`;
327
+ }
328
+ buildLimit() {
329
+ let sql = '';
330
+ if (this.limitValue !== undefined) {
331
+ this.params.push(this.limitValue);
332
+ sql += ` LIMIT ${this.placeholder()}`;
333
+ }
334
+ if (this.offsetValue !== undefined) {
335
+ this.params.push(this.offsetValue);
336
+ sql += ` OFFSET ${this.placeholder()}`;
337
+ }
338
+ return sql;
339
+ }
340
+ /**
341
+ * Generate the next placeholder for the current dialect.
342
+ * PostgreSQL: $1, $2, $3...
343
+ * MySQL/SQLite: ?, ?, ?...
344
+ */
345
+ placeholder() {
346
+ if (this.dialect === 'postgres') {
347
+ return `$${this.params.length}`;
348
+ }
349
+ return '?';
350
+ }
351
+ }
352
+ exports.QueryBuilder = QueryBuilder;
353
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/database/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Supported database dialects.
3
+ */
4
+ export type DatabaseDialect = 'postgres' | 'mysql' | 'sqlite' | 'mongodb';
5
+ /**
6
+ * Connection pool configuration.
7
+ */
8
+ export interface PoolConfig {
9
+ /** Minimum number of connections in the pool. Default: 2 */
10
+ min?: number;
11
+ /** Maximum number of connections in the pool. Default: 10 */
12
+ max?: number;
13
+ /** Time in ms a connection can sit idle before being closed. Default: 30000 */
14
+ idleTimeoutMs?: number;
15
+ /** Time in ms to wait for a connection from the pool. Default: 10000 */
16
+ acquireTimeoutMs?: number;
17
+ }
18
+ /**
19
+ * SSL/TLS configuration for database connections.
20
+ */
21
+ export interface DatabaseSslConfig {
22
+ /** Reject unauthorized certificates. Default: true in production */
23
+ rejectUnauthorized?: boolean;
24
+ /** Path to CA certificate */
25
+ ca?: string | Buffer;
26
+ /** Path to client certificate */
27
+ cert?: string | Buffer;
28
+ /** Path to client private key */
29
+ key?: string | Buffer;
30
+ }
31
+ /**
32
+ * Configuration for a database connection.
33
+ */
34
+ export interface DatabaseConfig {
35
+ /** The database dialect to use */
36
+ dialect: DatabaseDialect;
37
+ /** Connection URL (e.g. postgres://user:pass@host:5432/dbname) */
38
+ url?: string;
39
+ /** Host address. Used if `url` is not provided */
40
+ host?: string;
41
+ /** Port number */
42
+ port?: number;
43
+ /** Database name */
44
+ database?: string;
45
+ /** Username for authentication */
46
+ username?: string;
47
+ /** Password for authentication */
48
+ password?: string;
49
+ /** Connection pool configuration */
50
+ pool?: PoolConfig;
51
+ /** SSL/TLS configuration. Set to true for default SSL, or provide detailed config */
52
+ ssl?: boolean | DatabaseSslConfig;
53
+ /** Enable query logging. Default: false */
54
+ logging?: boolean | ((sql: string, params?: unknown[]) => void);
55
+ /** Connection timeout in milliseconds. Default: 5000 */
56
+ connectTimeoutMs?: number;
57
+ /**
58
+ * Path to the SQLite database file.
59
+ * Use ':memory:' for in-memory databases.
60
+ * Only applicable when dialect is 'sqlite'.
61
+ */
62
+ filename?: string;
63
+ /**
64
+ * MongoDB-specific: the authentication database.
65
+ * Only applicable when dialect is 'mongodb'.
66
+ */
67
+ authSource?: string;
68
+ }
69
+ /**
70
+ * Metadata about a column in a query result.
71
+ */
72
+ export interface FieldInfo {
73
+ name: string;
74
+ dataType?: string;
75
+ tableId?: number;
76
+ }
77
+ /**
78
+ * Result of a SELECT query.
79
+ */
80
+ export interface QueryResult<T = Record<string, unknown>> {
81
+ /** The rows returned by the query */
82
+ rows: T[];
83
+ /** Number of rows returned */
84
+ rowCount: number;
85
+ /** Column metadata */
86
+ fields: FieldInfo[];
87
+ }
88
+ /**
89
+ * Result of an INSERT, UPDATE, or DELETE statement.
90
+ */
91
+ export interface ExecuteResult {
92
+ /** Number of rows affected by the statement */
93
+ affectedRows: number;
94
+ /** The auto-generated ID of the last inserted row (if applicable) */
95
+ insertId?: string | number;
96
+ }
97
+ /**
98
+ * A transaction context for executing multiple queries atomically.
99
+ */
100
+ export interface Transaction {
101
+ /** Execute a SELECT query within this transaction */
102
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
103
+ /** Execute an INSERT, UPDATE, or DELETE within this transaction */
104
+ execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
105
+ /** Create a savepoint within this transaction */
106
+ savepoint(name: string): Promise<void>;
107
+ /** Rollback to a specific savepoint */
108
+ rollbackTo(name: string): Promise<void>;
109
+ /** Explicitly commit this transaction (usually handled automatically) */
110
+ commit(): Promise<void>;
111
+ /** Explicitly rollback this transaction */
112
+ rollback(): Promise<void>;
113
+ }
114
+ /**
115
+ * The contract that every database adapter must implement.
116
+ */
117
+ export interface DatabaseAdapter {
118
+ /** The dialect this adapter handles */
119
+ readonly dialect: DatabaseDialect;
120
+ /** Establish the database connection / pool */
121
+ connect(): Promise<void>;
122
+ /** Gracefully close all connections */
123
+ disconnect(): Promise<void>;
124
+ /** Execute a SELECT query and return typed results */
125
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
126
+ /** Execute an INSERT, UPDATE, or DELETE statement */
127
+ execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
128
+ /**
129
+ * Execute a series of operations within an atomic transaction.
130
+ * The transaction is committed if the callback resolves, rolled back if it rejects.
131
+ */
132
+ transaction<T>(fn: (tx: Transaction) => Promise<T>): Promise<T>;
133
+ /** Check if the database connection is alive and healthy */
134
+ isHealthy(): Promise<boolean>;
135
+ /** Get the underlying raw client (for advanced use cases) */
136
+ getRawClient(): unknown;
137
+ }
138
+ /**
139
+ * Represents a single database migration.
140
+ */
141
+ export interface Migration {
142
+ /** Unique migration name (e.g. '001_create_users_table') */
143
+ name: string;
144
+ /** Apply the migration */
145
+ up(adapter: DatabaseAdapter): Promise<void>;
146
+ /** Revert the migration */
147
+ down(adapter: DatabaseAdapter): Promise<void>;
148
+ }
149
+ /**
150
+ * Configuration for the built-in migration system.
151
+ */
152
+ export interface MigrationConfig {
153
+ /** Directory containing migration files. Default: './migrations' */
154
+ directory?: string;
155
+ /** Name of the migrations tracking table. Default: '_exis_migrations' */
156
+ tableName?: string;
157
+ }
158
+ /**
159
+ * Record of an applied migration, stored in the tracking table.
160
+ */
161
+ export interface MigrationRecord {
162
+ name: string;
163
+ appliedAt: Date;
164
+ batch: number;
165
+ }
166
+ export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'LIKE' | 'ILIKE' | 'IN' | 'NOT IN' | 'IS' | 'IS NOT' | 'BETWEEN';
167
+ export type OrderDirection = 'asc' | 'desc' | 'ASC' | 'DESC';
168
+ export type JoinType = 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
169
+ export interface WhereClause {
170
+ column: string;
171
+ operator: WhereOperator;
172
+ value: unknown;
173
+ conjunction: 'AND' | 'OR';
174
+ }
175
+ export interface JoinClause {
176
+ type: JoinType;
177
+ table: string;
178
+ on: string;
179
+ }
180
+ export interface OrderByClause {
181
+ column: string;
182
+ direction: OrderDirection;
183
+ }
184
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // ─── Database Layer Types ──────────────────────────────────────────────────────
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":";AAAA,kFAAkF"}