// Type definitions for node-mysql-wrapper // Project: https://github.com/kataras/node-mysql-wrapper // Definitions by: Makis Maropoulos // Definitions: https://github.com/borisyankov/DefinitelyTyped /// /// declare module "node-mysql-wrapper" { import Mysql = require("mysql"); function MySQLWrapperBuilder(connection: string | Mysql.IConnection, ...useOnlyTables: string[]): MySQLWrapper; enum EVENT_TYPES { INSERT, UPDATE, DELETE, SAVE } interface MySQLConnection { constructor(connection: string | Mysql.IConnection); create(connectionUri: string); create(connection: Mysql.IConnection); attach(connection: Mysql.IConnection): void; end(callback: () => void): void; destroy(): void; link(callback?: () => void): Promise; connect(callback?: () => void): Promise; useOnly(...useOnlyTables: string[]): void; fetchDatabaseInfornation(): Promise; escape(val: string): string; notice(tableWhichCalled: string, queryStr: string, parsedResults: Object[]); fireEvent(tableWhichCalled: string, queryStr: string, parsedResults: Object[]); watch(tableName: string, evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void; on(tableName: string, evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void; unwatch(tableName: string, evtType: EVENT_TYPES | string, callbackToRemove: () => void): void; off(tableName: string, evtType: EVENT_TYPES | string, callbackToRemove: () => void): void; query(mysqlQuery: Mysql.IQueryFunction): void; table(tableName: string): MySQLTable; } interface MySQLTable { constructor(tableName: string, connection: MySQLConnection); setColumns(columns: string[]); setPrimaryKey(primaryKeyColumnName: string); toString(): string; model(jsObject: Object): MySQLModel; watch(evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void); on(evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void); unwatch(evtType: EVENT_TYPES|string, callbackToRemove: () => void); off(evtType: EVENT_TYPES|string, callbackToRemove: () => void); ///START DYNAMIC METHODS FOR TABLES CANNOT BE PRE-DEFINED WITH DYNAMIC WAY, YET, SO: find(jsObject: Object, callback?: (results: Object[]) => void): Promise; save(jsObject: Object, callback?: (results: Object[]) => void): Promise; remove(jsObject: Object, callback?: (results: Object[]) => void): Promise; delete(jsObject: Object, callback?: (results: Object[]) => void): Promise; safeDelete(jsObject: Object, callback?: (results: Object[]) => void): Promise; ///END findAll(callback?: (results: Object[]) => void): Promise; extend(functionName: string, functionToBeSupported: () => any); has(extendedFunctionName: string); } interface MySQLModel { EQUAL_TO_PROPERTY_SYMBOL: string; constructor(table: MySQLTable, jsObject: Object); toObjectProperty(columnKey: string): string; toRowProperty(objectKey: string): string; create(jsObject: Object): MySQLModel; reUse(jsObject: Object): MySQLModel; toRow(): void; getRawObject(): Object; parseTable(mysqlTableToSearch: String, parentObject: Object); parseResult(result: Object, tablesToSearch: string[]); find(parentObj?: Object): Promise; findAll(): Promise; save(): Promise; safeDelete(): Promise; remove(): Promise; delete(): Promise; } interface MySQLWrapper { constructor(connection?: MySQLConnection); setConnection(connection: MySQLConnection): void; useOnly(...useOnlyTables: string[]): void; has(tableName: string): boolean; has(tableName: string, methodName: string): boolean; ready(callback: () => void): void; noticeReady(): void; removeReadyListener(callback: () => any): void; query: Mysql.IQueryFunction; destroy(): void; end(callback?: () => void): void; when(): Promise; ///START: WE CANNOT PRE-DEFINE THE DYNAMIC TABLES INTO PROPERTIES, SO WE USE INDEX(STRING-TABLENAME) TO GET A TABLE table(tableName: string): MySQLTable; ///END } export = MySQLWrapperBuilder; }