diff --git a/anydb-sql-migrations/anydb-sql-migrations-tests.ts b/anydb-sql-migrations/anydb-sql-migrations-tests.ts
new file mode 100644
index 000000000..f9c3da03a
--- /dev/null
+++ b/anydb-sql-migrations/anydb-sql-migrations-tests.ts
@@ -0,0 +1,17 @@
+///
+///
+import anydbsql = require('anydb-sql');
+import { Table, Column } from 'anydb-sql'
+import migrator = require('anydb-sql-migrations');
+
+function do_not_run() {
+
+ var db = anydbsql({
+ url: 'postgres://user:pass@host:port/database',
+ connections: { min: 2, max: 20 }
+ });
+
+ migrator
+ .create(db, '/path/to/migrations/dir')
+ .run();
+}
diff --git a/anydb-sql-migrations/anydb-sql-migrations.d.ts b/anydb-sql-migrations/anydb-sql-migrations.d.ts
new file mode 100644
index 000000000..9ab421c3a
--- /dev/null
+++ b/anydb-sql-migrations/anydb-sql-migrations.d.ts
@@ -0,0 +1,34 @@
+// Type definitions for anydb-sql-migrations
+// Project: https://github.com/spion/anydb-sql-migrations
+// Definitions by: Gorgi Kosev
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+///
+
+declare module "anydb-sql-migrations" {
+ import Promise = require('bluebird');
+ import { Column, Table, Transaction, AnydbSql } from 'anydb-sql';
+ export interface Migration {
+ version: string;
+ }
+ export interface MigrationsTable extends Table {
+ version: Column;
+ }
+ export interface MigFn {
+ (tx: Transaction): Promise;
+ }
+ export interface MigrationTask {
+ up: MigFn;
+ down: MigFn;
+ name: string;
+ }
+ export function create(db: AnydbSql, tasks: any): {
+ run: () => Promise;
+ migrateTo: (target?: string) => Promise;
+ check: (f: (m: {
+ type: string;
+ items: MigrationTask[];
+ }) => any) => Promise;
+ };
+}
\ No newline at end of file
diff --git a/anydb-sql/anydb-sql-tests.ts b/anydb-sql/anydb-sql-tests.ts
new file mode 100644
index 000000000..9e0264f7b
--- /dev/null
+++ b/anydb-sql/anydb-sql-tests.ts
@@ -0,0 +1,70 @@
+///
+import anydbsql = require('anydb-sql');
+import { Table, Column } from 'anydb-sql'
+
+function do_not_run() {
+
+ var db = anydbsql({
+ url: 'postgres://user:pass@host:port/database',
+ connections: { min: 2, max: 20 }
+ });
+
+ // Table Post
+
+ interface Post {
+ content: string;
+ userId: string;
+ date: string;
+ }
+
+ interface PostTable extends Table {
+ content: Column;
+ userId: Column;
+ date: Column;
+ }
+
+ var post = db.define({
+ name: 'posts',
+ columns: {
+ content: {},
+ userId: {},
+ date: {}
+ }
+ });
+
+ // Table User
+
+ interface User {
+ id: string;
+ email: string;
+ password: string;
+ name: string;
+ }
+
+ interface UserTable extends Table {
+ id: Column;
+ email: Column;
+ password: Column;
+ name: Column;
+ }
+
+ var user = db.define({
+ name: 'users',
+ columns: {
+ id: { primaryKey: true },
+ email: {},
+ password: {},
+ name: {},
+ date: {}
+ },
+ has: {
+ posts: { from: 'posts', many: true },
+ group: { from: 'groups'}
+ }
+ });
+
+ user.select(user.name, post.content)
+ .from(user.join(post).on(user.id.equals(post.userId)))
+ .where(post.date.gt('123'))
+ .all()
+}
\ No newline at end of file
diff --git a/anydb-sql/anydb-sql.d.ts b/anydb-sql/anydb-sql.d.ts
new file mode 100644
index 000000000..d8bce402b
--- /dev/null
+++ b/anydb-sql/anydb-sql.d.ts
@@ -0,0 +1,194 @@
+// Type definitions for anydb-sql
+// Project: https://github.com/doxout/anydb-sql
+// Definitions by: Gorgi Kosev
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare module "anydb-sql" {
+ import Promise = require('bluebird');
+
+ interface AnyDBPool extends anydbSQL.DatabaseConnection {
+ query:(text:string, values:any[], callback:(err:Error, result:any)=>void)=>void
+ begin:()=>anydbSQL.Transaction
+ close:(err:Error)=>void
+ }
+
+ interface Dictionary { [key:string]:T; }
+
+ module anydbSQL {
+ export interface OrderByValueNode {}
+ export interface ColumnDefinition {
+ primaryKey?:boolean;
+ dataType?:string;
+ references?: {table:string; column: string}
+ notNull?:boolean
+ }
+
+ export interface TableDefinition {
+ name:string
+ columns:Dictionary
+ has?:Dictionary<{from:string; many?:boolean}>
+ }
+
+
+ export interface QueryLike {
+ query:string;
+ values: any[]
+ text:string
+ }
+ export interface DatabaseConnection {
+ queryAsync(query:string, ...params:any[]):Promise<{rowCount:number;rows:T[]}>
+ queryAsync(query:QueryLike):Promise<{rowCount:number;rows:T[]}>
+ }
+
+ export interface Transaction extends DatabaseConnection {
+ rollback():void
+ commitAsync():Promise
+ }
+
+ export interface SubQuery {
+ select(node:Column):SubQuery
+ where(...nodes:any[]):SubQuery
+ from(table:TableNode):SubQuery
+ group(...nodes:any[]):SubQuery
+ order(criteria:OrderByValueNode):SubQuery
+ notExists(subQuery:SubQuery):SubQuery
+ }
+
+ interface Executable {
+ get():Promise
+ getWithin(tx:DatabaseConnection):Promise
+ exec():Promise
+ all():Promise
+ execWithin(tx:DatabaseConnection):Promise
+ allWithin(tx:DatabaseConnection):Promise
+ toQuery():QueryLike;
+ }
+
+ interface Queryable {
+ where(...nodes:any[]):Query
+ delete():ModifyingQuery
+ select(...nodes:any[]):Query
+ selectDeep(table: Table): Query
+ selectDeep(...nodesOrTables:any[]):Query
+ }
+
+ export interface Query extends Executable, Queryable {
+ from(table:TableNode):Query
+ update(o:Dictionary):ModifyingQuery
+ update(o:{}):ModifyingQuery
+ group(...nodes:any[]):Query
+ order(...criteria:OrderByValueNode[]):Query
+ limit(l:number):Query
+ offset(o:number):Query
+ }
+
+ export interface ModifyingQuery extends Executable {
+ returning(...nodes:any[]):Query
+ where(...nodes:any[]):ModifyingQuery
+ }
+
+ export interface TableNode {
+ join(table:TableNode):JoinTableNode
+ leftJoin(table:TableNode):JoinTableNode
+ }
+
+ export interface JoinTableNode extends TableNode {
+ on(filter:BinaryNode):TableNode
+ on(filter:string):TableNode
+ }
+
+ interface CreateQuery extends Executable {
+ ifNotExists():Executable
+ }
+ interface DropQuery extends Executable {
+ ifExists():Executable
+ }
+ export interface Table extends TableNode, Queryable {
+ create():CreateQuery
+ drop():DropQuery
+ as(name:string):Table
+ update(o:any):ModifyingQuery
+ insert(row:T):ModifyingQuery
+ insert(rows:T[]):ModifyingQuery
+ select():Query
+ select(...nodes:any[]):Query
+ from(table:TableNode):Query
+ star():Column
+ subQuery():SubQuery
+ eventEmitter:{emit:(type:string, ...args:any[])=>void
+ on:(eventName:string, handler:Function)=>void}
+ columns:Column[]
+ sql: SQL;
+ alter():AlterQuery
+ }
+ export interface AlterQuery extends Executable {
+ addColumn(column:Column): AlterQuery;
+ addColumn(name: string, options:string): AlterQuery;
+ dropColumn(column: Column): AlterQuery;
+ renameColumn(column: Column, newColumn: Column):AlterQuery;
+ renameColumn(column: Column, newName: string):AlterQuery;
+ renameColumn(name: string, newName: string):AlterQuery;
+ rename(newName: string): AlterQuery
+ }
+
+ export interface SQL {
+ functions: {
+ LOWER(c:Column):Column
+ }
+ }
+
+ export interface BinaryNode {
+ and(node:BinaryNode):BinaryNode
+ or(node:BinaryNode):BinaryNode
+ }
+
+ export interface Column {
+ in(arr:T[]):BinaryNode
+ in(subQuery:SubQuery):BinaryNode
+ notIn(arr:T[]):BinaryNode
+ equals(node:any):BinaryNode
+ notEquals(node:any):BinaryNode
+ gte(node:any):BinaryNode
+ lte(node:any):BinaryNode
+ gt(node:any):BinaryNode
+ lt(node:any):BinaryNode
+ like(str:string):BinaryNode
+ multiply:{
+ (node:Column):Column
+ (n:number):Column
+ }
+ isNull():BinaryNode
+ isNotNull():BinaryNode
+ sum():Column
+ count():Column
+ count(name:string):Column
+ distinct():Column
+ as(name:string):Column
+ ascending:OrderByValueNode
+ descending:OrderByValueNode
+ asc:OrderByValueNode
+ desc:OrderByValueNode
+ }
+
+ export interface AnydbSql extends DatabaseConnection {
+ define(map:TableDefinition):Table;
+ transaction(fn:(tx:Transaction)=>Promise):Promise
+ allOf(...tables:Table[]):any
+ models:Dictionary>
+ functions:{LOWER:(name:Column)=>Column
+ RTRIM:(name:Column)=>Column}
+ makeFunction(name:string):Function
+ begin():Transaction
+ open():void;
+ close():void;
+ getPool():AnyDBPool;
+ dialect():string;
+ }
+ }
+
+ function anydbSQL(config:Object):anydbSQL.AnydbSql;
+
+ export = anydbSQL;
+}
\ No newline at end of file