UNPKG

17.8 kBTypeScriptView Raw
1// Type definitions for Knex.js
2// Project: https://github.com/tgriesser/knex
3// Definitions by: Qubo <https://github.com/tkQubo>
4// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5
6/// <reference types="bluebird" />
7/// <reference types="node" />
8
9import * as events from "events";
10
11type Callback = Function;
12type Client = Function;
13type Value = string | number | boolean | Date | Array<string> | Array<number> | Array<Date> | Array<boolean>;
14type ColumnName = string | Knex.Raw | Knex.QueryBuilder;
15type TableName = string | Knex.Raw | Knex.QueryBuilder;
16
17interface Knex extends Knex.QueryInterface {
18 (tableName?: string): Knex.QueryBuilder;
19 VERSION: string;
20 __knex__: string;
21
22 raw: Knex.RawBuilder;
23 transaction: <R>(transactionScope: ((trx: Knex.Transaction) => void)) => Promise<any>;
24 destroy(callback: Function): void;
25 destroy(): Promise<void>;
26
27 schema: Knex.SchemaBuilder;
28
29 client: any;
30 migrate: Knex.Migrator;
31 seed: any;
32 fn: any;
33 on(eventName: string, callback: Function): Knex.QueryBuilder;
34}
35
36declare function Knex(config: Knex.Config): Knex;
37
38declare namespace Knex {
39 //
40 // QueryInterface
41 //
42
43 interface QueryInterface {
44 select: Select;
45 as: As;
46 columns: Select;
47 column: Select;
48 from: Table;
49 into: Table;
50 table: Table;
51 distinct: Distinct;
52
53 // Joins
54 join: Join;
55 joinRaw: JoinRaw;
56 innerJoin: Join;
57 leftJoin: Join;
58 leftOuterJoin: Join;
59 rightJoin: Join;
60 rightOuterJoin: Join;
61 outerJoin: Join;
62 fullOuterJoin: Join;
63 crossJoin: Join;
64
65 // Wheres
66 where: Where;
67 andWhere: Where;
68 orWhere: Where;
69 whereNot: Where;
70 andWhereNot: Where;
71 orWhereNot: Where;
72 whereRaw: WhereRaw;
73 orWhereRaw: WhereRaw;
74 andWhereRaw: WhereRaw;
75 whereWrapped: WhereWrapped;
76 havingWrapped: WhereWrapped;
77 whereExists: WhereExists;
78 orWhereExists: WhereExists;
79 whereNotExists: WhereExists;
80 orWhereNotExists: WhereExists;
81 whereIn: WhereIn;
82 orWhereIn: WhereIn;
83 whereNotIn: WhereIn;
84 orWhereNotIn: WhereIn;
85 whereNull: WhereNull;
86 orWhereNull: WhereNull;
87 whereNotNull: WhereNull;
88 orWhereNotNull: WhereNull;
89 whereBetween: WhereBetween;
90 orWhereBetween: WhereBetween;
91 andWhereBetween: WhereBetween;
92 whereNotBetween: WhereBetween;
93 orWhereNotBetween: WhereBetween;
94 andWhereNotBetween: WhereBetween;
95
96 // Group by
97 groupBy: GroupBy;
98 groupByRaw: RawQueryBuilder;
99
100 // Order by
101 orderBy: OrderBy;
102 orderByRaw: RawQueryBuilder;
103
104 // Union
105 union: Union;
106 unionAll(callback: Function): QueryBuilder;
107
108 // Having
109 having: Having;
110 andHaving: Having;
111 havingRaw: RawQueryBuilder;
112 orHaving: Having;
113 orHavingRaw: RawQueryBuilder;
114
115 // Paging
116 offset(offset: number): QueryBuilder;
117 limit(limit: number): QueryBuilder;
118
119 // Aggregation
120 count(columnName?: string): QueryBuilder;
121 min(columnName: string): QueryBuilder;
122 max(columnName: string): QueryBuilder;
123 sum(columnName: string): QueryBuilder;
124 avg(columnName: string): QueryBuilder;
125 increment(columnName: string, amount?: number): QueryBuilder;
126 decrement(columnName: string, amount?: number): QueryBuilder;
127
128 // Others
129 first(...columns: string[]): QueryBuilder;
130
131 debug(enabled?: boolean): QueryBuilder;
132 pluck(column: string): QueryBuilder;
133
134 insert(data: any, returning?: string | string[]): QueryBuilder;
135 update(data: any, returning?: string | string[]): QueryBuilder;
136 update(columnName: string, value: Value, returning?: string | string[]): QueryBuilder;
137 returning(column: string | string[]): QueryBuilder;
138
139 del(returning?: string | string[]): QueryBuilder;
140 delete(returning?: string | string[]): QueryBuilder;
141 truncate(): QueryBuilder;
142
143 transacting(trx: Transaction): QueryBuilder;
144 connection(connection: any): QueryBuilder;
145
146 clone(): QueryBuilder;
147 }
148
149 interface As {
150 (columnName: string): QueryBuilder;
151 }
152
153 interface Select extends ColumnNameQueryBuilder {
154 }
155
156 interface Table {
157 (tableName: string): QueryBuilder;
158 (callback: Function): QueryBuilder;
159 }
160
161 interface Distinct extends ColumnNameQueryBuilder {
162 }
163
164 interface Join {
165 (raw: Raw): QueryBuilder;
166 (tableName: string, columns: { [key: string]: string | Raw }): QueryBuilder;
167 (tableName: string, callback: Function): QueryBuilder;
168 (tableName: TableName, raw: Raw): QueryBuilder;
169 (tableName: TableName, column1: string, column2: string): QueryBuilder;
170 (tableName: TableName, column1: string, raw: Raw): QueryBuilder;
171 (tableName: TableName, column1: string, operator: string, column2: string): QueryBuilder;
172 }
173
174 interface JoinClause {
175 on(raw: Raw): JoinClause;
176 on(callback: Function): JoinClause;
177 on(columns: { [key: string]: string | Raw }): JoinClause;
178 on(column1: string, column2: string): JoinClause;
179 on(column1: string, raw: Raw): JoinClause;
180 on(column1: string, operator: string, column2: string): JoinClause;
181 andOn(raw: Raw): JoinClause;
182 andOn(callback: Function): JoinClause;
183 andOn(columns: { [key: string]: string | Raw }): JoinClause;
184 andOn(column1: string, column2: string): JoinClause;
185 andOn(column1: string, raw: Raw): JoinClause;
186 andOn(column1: string, operator: string, column2: string): JoinClause;
187 orOn(raw: Raw): JoinClause;
188 orOn(callback: Function): JoinClause;
189 orOn(columns: { [key: string]: string | Raw }): JoinClause;
190 orOn(column1: string, column2: string): JoinClause;
191 orOn(column1: string, raw: Raw): JoinClause;
192 orOn(column1: string, operator: string, column2: string): JoinClause;
193 using(column: string | string[] | Raw | { [key: string]: string | Raw }): JoinClause;
194 type(type: string): JoinClause;
195 }
196
197 interface JoinRaw {
198 (tableName: string, binding?: Value): QueryBuilder;
199 }
200
201 interface Where extends WhereRaw, WhereWrapped, WhereNull {
202 (raw: Raw): QueryBuilder;
203 (callback: (queryBuilder: QueryBuilder) => any): QueryBuilder;
204 (object: Object): QueryBuilder;
205 (columnName: string, value: Value): QueryBuilder;
206 (columnName: string, operator: string, value: Value): QueryBuilder;
207 (columnName: string, operator: string, query: QueryBuilder): QueryBuilder;
208 }
209
210 interface WhereRaw extends RawQueryBuilder {
211 (condition: boolean): QueryBuilder;
212 }
213
214 interface WhereWrapped {
215 (callback: Function): QueryBuilder;
216 }
217
218 interface WhereNull {
219 (columnName: string): QueryBuilder;
220 }
221
222 interface WhereIn {
223 (columnName: string, values: Value[]): QueryBuilder;
224 (columnName: string, callback: Function): QueryBuilder;
225 (columnName: string, query: QueryBuilder): QueryBuilder;
226 }
227
228 interface WhereBetween {
229 (columnName: string, range: [Value, Value]): QueryBuilder;
230 }
231
232 interface WhereExists {
233 (callback: Function): QueryBuilder;
234 (query: QueryBuilder): QueryBuilder;
235 }
236
237 interface WhereNull {
238 (columnName: string): QueryBuilder;
239 }
240
241 interface WhereIn {
242 (columnName: string, values: Value[]): QueryBuilder;
243 }
244
245 interface GroupBy extends RawQueryBuilder, ColumnNameQueryBuilder {
246 }
247
248 interface OrderBy {
249 (columnName: string, direction?: string): QueryBuilder;
250 }
251
252 interface Union {
253 (callback: Function, wrap?: boolean): QueryBuilder;
254 (callbacks: Function[], wrap?: boolean): QueryBuilder;
255 (...callbacks: Function[]): QueryBuilder;
256 // (...callbacks: Function[], wrap?: boolean): QueryInterface;
257 }
258
259 interface Having extends RawQueryBuilder, WhereWrapped {
260 (tableName: string, column1: string, operator: string, column2: string): QueryBuilder;
261 }
262
263 // commons
264
265 interface ColumnNameQueryBuilder {
266 (...columnNames: ColumnName[]): QueryBuilder;
267 (columnNames: ColumnName[]): QueryBuilder;
268 }
269
270 interface RawQueryBuilder {
271 (sql: string, ...bindings: Value[]): QueryBuilder;
272 (sql: string, bindings: Value[]): QueryBuilder;
273 (raw: Raw): QueryBuilder;
274 }
275
276 // Raw
277
278 interface Raw extends events.EventEmitter, ChainableInterface {
279 wrap(before: string, after: string): Raw;
280 }
281
282 interface RawBuilder {
283 (value: Value): Raw;
284 (sql: string, ...bindings: Value[]): Raw;
285 (sql: string, bindings: Value[]): Raw;
286 (sql: string, bindings: Object): Raw;
287 }
288
289 //
290 // QueryBuilder
291 //
292
293 interface QueryBuilder extends QueryInterface, ChainableInterface {
294 or: QueryBuilder;
295 and: QueryBuilder;
296
297 //TODO: Promise?
298 columnInfo(column?: string): Promise<ColumnInfo>;
299
300 forUpdate(): QueryBuilder;
301 forShare(): QueryBuilder;
302
303 toSQL(): Sql;
304
305 on(event: string, callback: Function): QueryBuilder;
306 }
307
308 interface Sql {
309 method: string;
310 options: any;
311 bindings: Value[];
312 sql: string;
313 }
314
315 //
316 // Chainable interface
317 //
318
319 interface ChainableInterface extends Promise<any> {
320 toQuery(): string;
321 options(options: any): QueryBuilder;
322 stream(options?: any, callback?: (builder: QueryBuilder) => any): QueryBuilder;
323 stream(callback?: (builder: QueryBuilder) => any): QueryBuilder;
324 pipe(writable: any): QueryBuilder;
325 exec(callback: Function): QueryBuilder;
326 }
327
328 interface Transaction extends QueryBuilder {
329 commit: any;
330 rollback: any;
331 }
332
333 //
334 // Schema builder
335 //
336
337 interface SchemaBuilder extends Promise<any> {
338 createTable(tableName: string, callback: (tableBuilder: CreateTableBuilder) => any): SchemaBuilder;
339 createTableIfNotExists(tableName: string, callback: (tableBuilder: CreateTableBuilder) => any): SchemaBuilder;
340 renameTable(oldTableName: string, newTableName: string): Promise<void>;
341 dropTable(tableName: string): SchemaBuilder;
342 hasTable(tableName: string): Promise<boolean>;
343 hasColumn(tableName: string, columnName: string): Promise<boolean>;
344 table(tableName: string, callback: (tableBuilder: AlterTableBuilder) => any): Promise<void>;
345 dropTableIfExists(tableName: string): Promise<void>;
346 raw(statement: string): SchemaBuilder;
347 }
348
349 interface TableBuilder {
350 increments(columnName?: string): ColumnBuilder;
351 bigIncrements(columnName?: string): ColumnBuilder;
352 dropColumn(columnName: string): TableBuilder;
353 dropColumns(...columnNames: string[]): TableBuilder;
354 renameColumn(from: string, to: string): ColumnBuilder;
355 integer(columnName: string): ColumnBuilder;
356 bigInteger(columnName: string): ColumnBuilder;
357 text(columnName: string, textType?: string): ColumnBuilder;
358 string(columnName: string, length?: number): ColumnBuilder;
359 float(columnName: string, precision?: number, scale?: number): ColumnBuilder;
360 decimal(columnName: string, precision?: number, scale?: number): ColumnBuilder;
361 boolean(columnName: string): ColumnBuilder;
362 date(columnName: string): ColumnBuilder;
363 dateTime(columnName: string): ColumnBuilder;
364 time(columnName: string): ColumnBuilder;
365 timestamp(columnName: string): ColumnBuilder;
366 timestamps(): ColumnBuilder;
367 binary(columnName: string): ColumnBuilder;
368 enum(columnName: string, values: Value[]): ColumnBuilder;
369 enu(columnName: string, values: Value[]): ColumnBuilder;
370 json(columnName: string): ColumnBuilder;
371 uuid(columnName: string): ColumnBuilder;
372 comment(val: string): TableBuilder;
373 specificType(columnName: string, type: string): ColumnBuilder;
374 primary(columnNames: string[]): TableBuilder;
375 index(columnNames: string[], indexName?: string, indexType?: string): TableBuilder;
376 unique(columnNames: string[], indexName?: string): TableBuilder;
377 foreign(column: string): ForeignConstraintBuilder;
378 foreign(columns: string[]): MultikeyForeignConstraintBuilder;
379 dropForeign(columnNames: string[], foreignKeyName?: string): TableBuilder;
380 }
381
382 interface CreateTableBuilder extends TableBuilder {
383 }
384
385 interface MySqlTableBuilder extends CreateTableBuilder {
386 engine(val: string): CreateTableBuilder;
387 charset(val: string): CreateTableBuilder;
388 collate(val: string): CreateTableBuilder;
389 }
390
391 interface AlterTableBuilder extends TableBuilder {
392 }
393
394 interface MySqlAlterTableBuilder extends AlterTableBuilder {
395 }
396
397 interface ColumnBuilder {
398 index(indexName?: string): ColumnBuilder;
399 primary(): ColumnBuilder;
400 unique(): ColumnBuilder;
401 references(columnName: string): ReferencingColumnBuilder;
402 onDelete(command: string): ColumnBuilder;
403 onUpdate(command: string): ColumnBuilder;
404 defaultTo(value: Value): ColumnBuilder;
405 unsigned(): ColumnBuilder;
406 notNullable(): ColumnBuilder;
407 nullable(): ColumnBuilder;
408 comment(value: string): ColumnBuilder;
409 }
410
411 interface ForeignConstraintBuilder {
412 references(columnName: string): ReferencingColumnBuilder;
413 }
414
415 interface MultikeyForeignConstraintBuilder {
416 references(columnNames: string[]): ReferencingColumnBuilder;
417 }
418
419 interface PostgreSqlColumnBuilder extends ColumnBuilder {
420 index(indexName?: string, indexType?: string): ColumnBuilder;
421 }
422
423 interface ReferencingColumnBuilder {
424 inTable(tableName: string): ColumnBuilder;
425 }
426
427 interface AlterColumnBuilder extends ColumnBuilder {
428 }
429
430 interface MySqlAlterColumnBuilder extends AlterColumnBuilder {
431 first(): AlterColumnBuilder;
432 after(columnName: string): AlterColumnBuilder;
433 }
434
435 //
436 // Configurations
437 //
438
439 interface ColumnInfo {
440 defaultValue: Value;
441 type: string;
442 maxLength: number;
443 nullable: boolean;
444 }
445
446 interface Config {
447 debug?: boolean;
448 client?: string;
449 dialect?: string;
450 connection?: string | ConnectionConfig | MariaSqlConnectionConfig |
451 Sqlite3ConnectionConfig | SocketConnectionConfig;
452 pool?: PoolConfig;
453 migrations?: MigratorConfig;
454 acquireConnectionTimeout?: number;
455 }
456
457 interface ConnectionConfig {
458 host: string;
459 user: string;
460 password: string;
461 database: string;
462 debug?: boolean;
463 }
464
465 // Config object for mariasql: https://github.com/mscdex/node-mariasql#client-methods
466 interface MariaSqlConnectionConfig {
467 user?: string;
468 password?: string;
469 host?: string;
470 port?: number;
471 unixSocket?: string;
472 protocol?: string;
473 db?: string;
474 keepQueries?: boolean;
475 multiStatements?: boolean;
476 connTimeout?: number;
477 pingInterval?: number;
478 secureAuth?: boolean;
479 compress?: boolean;
480 ssl?: boolean | MariaSslConfiguration;
481 local_infile?: boolean;
482 read_default_file?: string;
483 read_default_group?: string;
484 charset?: string;
485 streamHWM?: number;
486 }
487
488 interface MariaSslConfiguration {
489 key?: string;
490 cert?: string;
491 ca?: string;
492 capath?: string;
493 cipher?: string;
494 rejectUnauthorized?: boolean;
495 }
496
497 /** Used with SQLite3 adapter */
498 interface Sqlite3ConnectionConfig {
499 filename: string;
500 debug?: boolean;
501 }
502
503 interface SocketConnectionConfig {
504 socketPath: string;
505 user: string;
506 password: string;
507 database: string;
508 debug?: boolean;
509 }
510
511 interface PoolConfig {
512 name?: string;
513 create?: Function;
514 afterCreate?: Function;
515 destroy?: Function;
516 beforeDestroy?: Function;
517 min?: number;
518 max?: number;
519 refreshIdle?: boolean;
520 idleTimeoutMillis?: number;
521 reapIntervalMillis?: number;
522 returnToHead?: boolean;
523 priorityRange?: number;
524 validate?: Function;
525 log?: boolean;
526 }
527
528 interface MigratorConfig {
529 database?: string;
530 directory?: string;
531 extension?: string;
532 tableName?: string;
533 }
534
535 interface Migrator {
536 make(name: string, config?: MigratorConfig): Promise<string>;
537 latest(config?: MigratorConfig): Promise<any>;
538 rollback(config?: MigratorConfig): Promise<any>;
539 status(config?: MigratorConfig): Promise<number>;
540 currentVersion(config?: MigratorConfig): Promise<string>;
541 }
542}
543
544export = Knex;