diff --git a/node-mysql-wrapper/node-mysql-wrapper-tests.js b/node-mysql-wrapper/node-mysql-wrapper-tests.js
new file mode 100644
index 0000000000..8198792fb8
--- /dev/null
+++ b/node-mysql-wrapper/node-mysql-wrapper-tests.js
@@ -0,0 +1,14 @@
+///
+var wrapper = require("node-mysql-wrapper");
+var db = wrapper("mysql://kataras:pass@127.0.0.1/taglub?debug=false&charset=utf8");
+db.ready(function () {
+ db.table("users").on("insert", function (parsedResults) {
+ });
+ db.table("users").findAll().then(function (results) {
+ console.dir(results);
+ });
+ db.table("users").find({ userId: 18 }, function (results) {
+ console.dir(results[0]);
+ });
+});
+//# sourceMappingURL=node-mysql-wrapper-tests.js.map
diff --git a/node-mysql-wrapper/node-mysql-wrapper-tests.ts b/node-mysql-wrapper/node-mysql-wrapper-tests.ts
new file mode 100644
index 0000000000..ab28b22af1
--- /dev/null
+++ b/node-mysql-wrapper/node-mysql-wrapper-tests.ts
@@ -0,0 +1,22 @@
+///
+
+import wrapper = require("node-mysql-wrapper");
+var db = wrapper("mysql://kataras:pass@127.0.0.1/taglub?debug=false&charset=utf8");
+
+db.ready(() => {
+
+ db.table("users").on("insert", (parsedResults) => {
+
+ });
+
+ db.table("users").findAll().then((results) => {
+ console.dir(results);
+ });
+
+ db.table("users").find({ userId: 18 }, (results) => {
+ console.dir(results[0]);
+ });
+
+
+
+});
diff --git a/node-mysql-wrapper/node-mysql-wrapper.d.ts b/node-mysql-wrapper/node-mysql-wrapper.d.ts
new file mode 100644
index 0000000000..0a0bd60f21
--- /dev/null
+++ b/node-mysql-wrapper/node-mysql-wrapper.d.ts
@@ -0,0 +1,133 @@
+// 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 {
+ new (connection: string | Mysql.IConnection): MySQLConnection;
+
+ create(connectionUri: string): void;
+ create(connection: Mysql.IConnection): void;
+
+ 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[]): void;
+ fireEvent(tableWhichCalled: string, queryStr: string, parsedResults: Object[]): void;
+
+ 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 {
+ new (tableName: string, connection: MySQLConnection): MySQLTable;
+
+ setColumns(columns: string[]): void;
+
+ setPrimaryKey(primaryKeyColumnName: string): void;
+
+ toString(): string;
+
+ model(jsObject: Object): MySQLModel;
+
+ watch(evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void;
+ on(evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void;
+ unwatch(evtType: EVENT_TYPES|string, callbackToRemove: () => void): void;
+ off(evtType: EVENT_TYPES|string, callbackToRemove: () => void): 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): void;
+
+ has(extendedFunctionName: string): boolean;
+
+ }
+
+ interface MySQLModel {
+
+ new (table: MySQLTable, jsObject: Object): MySQLModel;
+
+ 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): Promise;
+ parseResult(result: Object, tablesToSearch: string[]): Promise;
+
+ find(parentObj?: Object): Promise;
+ findAll(): Promise;
+ save(): Promise;
+ safeDelete(): Promise;
+ remove(): Promise;
+ delete(): Promise;
+
+ }
+
+ interface MySQLWrapper {
+ new (connection?: MySQLConnection): MySQLWrapper;
+
+ 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;
+
+
+}