UNPKG

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