diff --git a/fs-extra-promise/fs-extra-promise-tests.ts b/fs-extra-promise/fs-extra-promise-tests.ts
new file mode 100644
index 0000000000..893585d312
--- /dev/null
+++ b/fs-extra-promise/fs-extra-promise-tests.ts
@@ -0,0 +1,229 @@
+///
+///
+
+import fs = require('fs-extra-promise');
+import stream = require('stream');
+
+var stats: fs.Stats;
+var str: string;
+var strArr: string[];
+var bool: boolean;
+var num: number;
+var src: string;
+var dest: string;
+var file: string;
+var filename: string;
+var dir: string;
+var path: string;
+var data: any;
+var object: Object;
+var buffer: NodeBuffer;
+var modeNum: number;
+var modeStr: string;
+var encoding: string;
+var type: string;
+var flags: string;
+var srcpath: string;
+var dstpath: string;
+var oldPath: string;
+var newPath: string;
+var cache: string;
+var offset: number;
+var length: number;
+var position: number;
+var cacheBool: boolean;
+var cacheStr: string;
+var fd: number;
+var len: number;
+var uid: number;
+var gid: number;
+var atime: number;
+var mtime: number;
+var statsCallback: (err: Error, stats: fs.Stats) => void;
+var errorCallback: (err: Error) => void;
+var openOpts: fs.OpenOptions;
+var watcher: fs.FSWatcher;
+var readStreeam: stream.Readable;
+var writeStream: stream.Writable;
+
+fs.copy(src, dest, errorCallback);
+fs.copy(src, dest, (src: string) => {
+ return false;
+}, errorCallback);
+fs.copySync(src, dest);
+fs.copySync(src, dest, (src: string) => {
+ return false;
+});
+fs.createFile(file, errorCallback);
+fs.createFileSync(file);
+
+fs.mkdirs(dir, errorCallback);
+fs.mkdirsSync(dir);
+fs.mkdirp(dir, errorCallback);
+fs.mkdirpSync(dir);
+
+fs.outputFile(file, data, errorCallback);
+fs.outputFileSync(file, data);
+fs.outputJson(file, data, errorCallback);
+fs.outputJSON(file, data, errorCallback);
+
+fs.outputJsonSync(file, data);
+fs.outputJSONSync(file, data);
+
+fs.readJson(file, errorCallback);
+fs.readJson(file, openOpts, errorCallback);
+fs.readJSON(file, errorCallback);
+fs.readJSON(file, openOpts, errorCallback);
+
+fs.readJsonSync(file, openOpts);
+fs.readJSONSync(file, openOpts);
+
+fs.remove(dir, errorCallback);
+fs.removeSync(dir);
+
+fs.writeJson(file, object, errorCallback);
+fs.writeJson(file, object, openOpts, errorCallback);
+fs.writeJSON(file, object, errorCallback);
+fs.writeJSON(file, object, openOpts, errorCallback);
+
+fs.writeJsonSync(file, object, openOpts);
+fs.writeJSONSync(file, object, openOpts);
+
+fs.rename(oldPath, newPath, errorCallback);
+fs.renameSync(oldPath, newPath);
+fs.truncate(fd, len, errorCallback);
+fs.truncateSync(fd, len);
+fs.chown(path, uid, gid, errorCallback);
+fs.chownSync(path, uid, gid);
+fs.fchown(fd, uid, gid, errorCallback);
+fs.fchownSync(fd, uid, gid);
+fs.lchown(path, uid, gid, errorCallback);
+fs.lchownSync(path, uid, gid);
+fs.chmod(path, modeNum, errorCallback);
+fs.chmod(path, modeStr, errorCallback);
+fs.chmodSync(path, modeNum);
+fs.chmodSync(path, modeStr);
+fs.fchmod(fd, modeNum, errorCallback);
+fs.fchmod(fd, modeStr, errorCallback);
+fs.fchmodSync(fd, modeNum);
+fs.fchmodSync(fd, modeStr);
+fs.lchmod(path, modeStr, errorCallback);
+fs.lchmod(path, modeNum, errorCallback);
+fs.lchmodSync(path, modeNum);
+fs.lchmodSync(path, modeStr);
+fs.stat(path, statsCallback);
+fs.lstat(path, statsCallback);
+fs.fstat(fd, statsCallback);
+stats = fs.statSync(path);
+stats = fs.lstatSync(path);
+stats = fs.fstatSync(fd);
+fs.link(srcpath, dstpath, errorCallback);
+fs.linkSync(srcpath, dstpath);
+fs.symlink(srcpath, dstpath, type, errorCallback);
+fs.symlinkSync(srcpath, dstpath, type);
+fs.readlink(path, (err: Error, linkString: string) => {
+
+});
+fs.realpath(path, (err: Error, resolvedPath: string) => {
+
+});
+fs.realpath(path, cache, (err: Error, resolvedPath: string) => {
+
+});
+str = fs.realpathSync(path, cacheBool);
+fs.unlink(path, errorCallback);
+fs.unlinkSync(path);
+fs.rmdir(path, errorCallback);
+fs.rmdirSync(path);
+fs.mkdir(path, modeNum, errorCallback);
+fs.mkdir(path, modeStr, errorCallback);
+fs.mkdirSync(path, modeNum);
+fs.mkdirSync(path, modeStr);
+fs.readdir(path, (err: Error, files: string[]) => {
+
+});
+strArr = fs.readdirSync(path);
+fs.close(fd, errorCallback);
+fs.closeSync(fd);
+fs.open(path, flags, modeStr, (err: Error, fd: number) => {
+
+});
+num = fs.openSync(path, flags, modeStr);
+fs.utimes(path, atime, mtime, errorCallback);
+fs.utimesSync(path, atime, mtime);
+fs.futimes(fd, atime, mtime, errorCallback);
+fs.futimesSync(fd, atime, mtime);
+fs.fsync(fd, errorCallback);
+fs.fsyncSync(fd);
+fs.write(fd, buffer, offset, length, position, (err: Error, written: number, buffer: NodeBuffer) => {
+
+});
+num = fs.writeSync(fd, buffer, offset, length, position);
+fs.read(fd, buffer, offset, length, position, (err: Error, bytesRead: number, buffer: NodeBuffer) => {
+
+});
+num = fs.readSync(fd, buffer, offset, length, position);
+fs.readFile(filename, (err: Error, data: NodeBuffer) => {
+
+});
+fs.readFile(filename, encoding, (err: Error, data: string) => {
+
+});
+fs.readFile(filename, openOpts, (err: Error, data: string) => {
+
+});
+fs.readFile(filename, (err: Error, data: NodeBuffer) => {
+
+});
+buffer = fs.readFileSync(filename);
+str = fs.readFileSync(filename, encoding);
+str = fs.readFileSync(filename, openOpts);
+
+fs.writeFile(filename, data, errorCallback);
+fs.writeFile(filename, data, encoding, errorCallback);
+fs.writeFile(filename, data, openOpts, errorCallback);
+fs.writeFileSync(filename, data);
+fs.writeFileSync(filename, data, encoding);
+fs.writeFileSync(filename, data, openOpts);
+
+fs.appendFile(filename, data, errorCallback);
+fs.appendFile(filename, data, encoding, errorCallback);
+fs.appendFile(filename, data, openOpts, errorCallback);
+fs.appendFileSync(filename, data);
+fs.appendFileSync(filename, data, encoding);
+fs.appendFileSync(filename, data, openOpts);
+
+fs.watchFile(filename, {
+ curr: stats,
+ prev: stats
+});
+fs.watchFile(filename, {
+ persistent: bool,
+ interval: num
+}, {
+ curr: stats,
+ prev: stats
+});
+fs.unwatchFile(filename);
+watcher = fs.watch(filename, { persistent: bool }, (event: string, filename: string) => {
+
+});
+fs.exists(path, (exists: boolean) => {
+
+});
+bool = fs.existsSync(path);
+
+readStreeam = fs.createReadStream(path);
+readStreeam = fs.createReadStream(path, {
+ flags: str,
+ encoding: str,
+ fd: num,
+ mode: num,
+ bufferSize: num
+});
+writeStream = fs.createWriteStream(path);
+writeStream = fs.createWriteStream(path, {
+ flags: str,
+ encoding: str,
+ string: str
+});
diff --git a/fs-extra-promise/fs-extra-promise.d.ts b/fs-extra-promise/fs-extra-promise.d.ts
new file mode 100644
index 0000000000..ee7e43b26d
--- /dev/null
+++ b/fs-extra-promise/fs-extra-promise.d.ts
@@ -0,0 +1,263 @@
+// Type definitions for fs-extra-promise
+// Project: https://github.com/overlookmotel/fs-extra-promise
+// Definitions by: midknight41 , Jason Swearingen
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+// Imported from: https://github.com/soywiz/typescript-node-definitions/fs-extra.d.ts via TSD fs-extra definition
+
+///
+///
+
+declare module "fs-extra-promise" {
+ import stream = require("stream");
+ import Promise = require("bluebird");
+
+ export interface Stats {
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isBlockDevice(): boolean;
+ isCharacterDevice(): boolean;
+ isSymbolicLink(): boolean;
+ isFIFO(): boolean;
+ isSocket(): boolean;
+ dev: number;
+ ino: number;
+ mode: number;
+ nlink: number;
+ uid: number;
+ gid: number;
+ rdev: number;
+ size: number;
+ blksize: number;
+ blocks: number;
+ atime: Date;
+ mtime: Date;
+ ctime: Date;
+ }
+
+ export interface FSWatcher {
+ close(): void;
+ }
+
+ export class ReadStream extends stream.Readable { }
+ export class WriteStream extends stream.Writable { }
+
+ //extended methods
+ export function copy(src: string, dest: string, callback?: (err: Error) => void): void;
+ export function copy(src: string, dest: string, filter: (src: string) => boolean, callback?: (err: Error) => void): void;
+
+ export function copySync(src: string, dest: string): void;
+ export function copySync(src: string, dest: string, filter: (src: string) => boolean): void;
+
+ export function createFile(file: string, callback?: (err: Error) => void): void;
+ export function createFileSync(file: string): void;
+
+ export function mkdirs(dir: string, callback?: (err: Error) => void): void;
+ export function mkdirp(dir: string, callback?: (err: Error) => void): void;
+ export function mkdirsSync(dir: string): void;
+ export function mkdirpSync(dir: string): void;
+
+ export function outputFile(file: string, data: any, callback?: (err: Error) => void): void;
+ export function outputFileSync(file: string, data: any): void;
+
+ export function outputJson(file: string, data: any, callback?: (err: Error) => void): void;
+ export function outputJSON(file: string, data: any, callback?: (err: Error) => void): void;
+ export function outputJsonSync(file: string, data: any): void;
+ export function outputJSONSync(file: string, data: any): void;
+
+ export function readJson(file: string, callback?: (err: Error) => void): void;
+ export function readJson(file: string, options?: OpenOptions, callback?: (err: Error) => void): void;
+ export function readJSON(file: string, callback?: (err: Error) => void): void;
+ export function readJSON(file: string, options?: OpenOptions, callback?: (err: Error) => void): void;
+
+ export function readJsonSync(file: string, options?: OpenOptions): void;
+ export function readJSONSync(file: string, options?: OpenOptions): void;
+
+ export function remove(dir: string, callback?: (err: Error) => void): void;
+ export function removeSync(dir: string): void;
+ // export function delete(dir: string, callback?: (err: Error) => void): void;
+ // export function deleteSync(dir: string): void;
+
+ export function writeJson(file: string, object: any, callback?: (err: Error) => void): void;
+ export function writeJson(file: string, object: any, options?: OpenOptions, callback?: (err: Error) => void): void;
+ export function writeJSON(file: string, object: any, callback?: (err: Error) => void): void;
+ export function writeJSON(file: string, object: any, options?: OpenOptions, callback?: (err: Error) => void): void;
+
+ export function writeJsonSync(file: string, object: any, options?: OpenOptions): void;
+ export function writeJSONSync(file: string, object: any, options?: OpenOptions): void;
+
+ export function rename(oldPath: string, newPath: string, callback?: (err: Error) => void): void;
+ export function renameSync(oldPath: string, newPath: string): void;
+ export function truncate(fd: number, len: number, callback?: (err: Error) => void): void;
+ export function truncateSync(fd: number, len: number): void;
+ export function chown(path: string, uid: number, gid: number, callback?: (err: Error) => void): void;
+ export function chownSync(path: string, uid: number, gid: number): void;
+ export function fchown(fd: number, uid: number, gid: number, callback?: (err: Error) => void): void;
+ export function fchownSync(fd: number, uid: number, gid: number): void;
+ export function lchown(path: string, uid: number, gid: number, callback?: (err: Error) => void): void;
+ export function lchownSync(path: string, uid: number, gid: number): void;
+ export function chmod(path: string, mode: number, callback?: (err: Error) => void): void;
+ export function chmod(path: string, mode: string, callback?: (err: Error) => void): void;
+ export function chmodSync(path: string, mode: number): void;
+ export function chmodSync(path: string, mode: string): void;
+ export function fchmod(fd: number, mode: number, callback?: (err: Error) => void): void;
+ export function fchmod(fd: number, mode: string, callback?: (err: Error) => void): void;
+ export function fchmodSync(fd: number, mode: number): void;
+ export function fchmodSync(fd: number, mode: string): void;
+ export function lchmod(path: string, mode: string, callback?: (err: Error) => void): void;
+ export function lchmod(path: string, mode: number, callback?: (err: Error) => void): void;
+ export function lchmodSync(path: string, mode: number): void;
+ export function lchmodSync(path: string, mode: string): void;
+ export function stat(path: string, callback?: (err: Error, stats: Stats) => void): void;
+ export function lstat(path: string, callback?: (err: Error, stats: Stats) => void): void;
+ export function fstat(fd: number, callback?: (err: Error, stats: Stats) => void): void;
+ export function statSync(path: string): Stats;
+ export function lstatSync(path: string): Stats;
+ export function fstatSync(fd: number): Stats;
+ export function link(srcpath: string, dstpath: string, callback?: (err: Error) => void): void;
+ export function linkSync(srcpath: string, dstpath: string): void;
+ export function symlink(srcpath: string, dstpath: string, type?: string, callback?: (err: Error) => void): void;
+ export function symlinkSync(srcpath: string, dstpath: string, type?: string): void;
+ export function readlink(path: string, callback?: (err: Error, linkString: string) => void): void;
+ export function realpath(path: string, callback?: (err: Error, resolvedPath: string) => void): void;
+ export function realpath(path: string, cache: string, callback: (err: Error, resolvedPath: string) => void): void;
+ export function realpathSync(path: string, cache?: boolean): string;
+ export function unlink(path: string, callback?: (err: Error) => void): void;
+ export function unlinkSync(path: string): void;
+ export function rmdir(path: string, callback?: (err: Error) => void): void;
+ export function rmdirSync(path: string): void;
+ export function mkdir(path: string, mode?: number, callback?: (err: Error) => void): void;
+ export function mkdir(path: string, mode?: string, callback?: (err: Error) => void): void;
+ export function mkdirSync(path: string, mode?: number): void;
+ export function mkdirSync(path: string, mode?: string): void;
+ export function readdir(path: string, callback?: (err: Error, files: string[]) => void): void;
+ export function readdirSync(path: string): string[];
+ export function close(fd: number, callback?: (err: Error) => void): void;
+ export function closeSync(fd: number): void;
+ export function open(path: string, flags: string, mode?: string, callback?: (err: Error, fs: number) => void): void;
+ export function openSync(path: string, flags: string, mode?: string): number;
+ export function utimes(path: string, atime: number, mtime: number, callback?: (err: Error) => void): void;
+ export function utimesSync(path: string, atime: number, mtime: number): void;
+ export function futimes(fd: number, atime: number, mtime: number, callback?: (err: Error) => void): void;
+ export function futimesSync(fd: number, atime: number, mtime: number): void;
+ export function fsync(fd: number, callback?: (err: Error) => void): void;
+ export function fsyncSync(fd: number): void;
+ export function write(fd: number, buffer: NodeBuffer, offset: number, length: number, position: number, callback?: (err: Error, written: number, buffer: NodeBuffer) => void): void;
+ export function writeSync(fd: number, buffer: NodeBuffer, offset: number, length: number, position: number): number;
+ export function read(fd: number, buffer: NodeBuffer, offset: number, length: number, position: number, callback?: (err: Error, bytesRead: number, buffer: NodeBuffer) => void): void;
+ export function readSync(fd: number, buffer: NodeBuffer, offset: number, length: number, position: number): number;
+ export function readFile(filename: string, encoding: string, callback: (err: Error, data: string) => void): void;
+ export function readFile(filename: string, options: OpenOptions, callback: (err: Error, data: string) => void): void;
+ export function readFile(filename: string, callback: (err: Error, data: NodeBuffer) => void): void;
+ export function readFileSync(filename: string): NodeBuffer;
+ export function readFileSync(filename: string, encoding: string): string;
+ export function readFileSync(filename: string, options: OpenOptions): string;
+ export function writeFile(filename: string, data: any, encoding?: string, callback?: (err: Error) => void): void;
+ export function writeFile(filename: string, data: any, options?: OpenOptions, callback?: (err: Error) => void): void;
+ export function writeFileSync(filename: string, data: any, encoding?: string): void;
+ export function writeFileSync(filename: string, data: any, option?: OpenOptions): void;
+ export function appendFile(filename: string, data: any, encoding?: string, callback?: (err: Error) => void): void;
+ export function appendFile(filename: string, data: any, option?: OpenOptions, callback?: (err: Error) => void): void;
+ export function appendFileSync(filename: string, data: any, encoding?: string): void;
+ export function appendFileSync(filename: string, data: any, option?: OpenOptions): void;
+ export function watchFile(filename: string, listener: { curr: Stats; prev: Stats; }): void;
+ export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: { curr: Stats; prev: Stats; }): void;
+ export function unwatchFile(filename: string, listener?: Stats): void;
+ export function watch(filename: string, options?: { persistent?: boolean; }, listener?: (event: string, filename: string) => any): FSWatcher;
+ export function exists(path: string, callback?: (exists: boolean) => void): void;
+ export function existsSync(path: string): boolean;
+ export function ensureDir(path: string, cb: (err: Error) => void): void;
+
+ export interface OpenOptions {
+ encoding?: string;
+ flag?: string;
+ }
+
+ export interface ReadStreamOptions {
+ flags?: string;
+ encoding?: string;
+ fd?: number;
+ mode?: number;
+ bufferSize?: number;
+ }
+ export interface WriteStreamOptions {
+ flags?: string;
+ encoding?: string;
+ string?: string;
+ }
+ export function createReadStream(path: string, options?: ReadStreamOptions): ReadStream;
+ export function createWriteStream(path: string, options?: WriteStreamOptions): WriteStream;
+
+
+
+ //promisified versions
+ export function copyAsync(src: string, dest: string): Promise;
+ export function copyAsync(src: string, dest: string, filter: (src: string) => boolean): Promise;
+
+ export function createFileAsync(file: string): Promise;
+
+ export function mkdirsAsync(dir: string): Promise;
+ export function mkdirpAsync(dir: string): Promise;
+
+ export function outputFileAsync(file: string, data: any): Promise;
+
+ export function outputJsonAsync(file: string, data: any): Promise;
+ export function outputJSONAsync(file: string, data: any): Promise;
+
+ export function readJsonAsync(file: string): Promise;
+ export function readJsonAsync(file: string, options?: OpenOptions): Promise;
+ export function readJSONAsync(file: string): Promise;
+ export function readJSONAsync(file: string, options?: OpenOptions): Promise;
+
+
+ export function removeAsync(dir: string): Promise;
+ // export function deleteAsync(dir: string):Promise;
+
+ export function writeJsonAsync(file: string, object: any): Promise;
+ export function writeJsonAsync(file: string, object: any, options?: OpenOptions): Promise;
+ export function writeJSONAsync(file: string, object: any): Promise;
+ export function writeJSONAsync(file: string, object: any, options?: OpenOptions): Promise;
+
+ export function renameAsync(oldPath: string, newPath: string): Promise;
+ export function truncateAsync(fd: number, len: number): Promise;
+ export function chownAsync(path: string, uid: number, gid: number): Promise;
+ export function fchownAsync(fd: number, uid: number, gid: number): Promise;
+ export function lchownAsync(path: string, uid: number, gid: number): Promise;
+ export function chmodAsync(path: string, mode: number): Promise;
+ export function chmodAsync(path: string, mode: string): Promise;
+ export function fchmodAsync(fd: number, mode: number): Promise;
+ export function fchmodAsync(fd: number, mode: string): Promise;
+ export function lchmodAsync(path: string, mode: string): Promise;
+ export function lchmodAsync(path: string, mode: number): Promise;
+ export function statAsync(path: string): Promise;
+ export function lstatAsync(path: string): Promise;
+ export function fstatAsync(fd: number): Promise;
+ export function linkAsync(srcpath: string, dstpath: string): Promise;
+ export function symlinkAsync(srcpath: string, dstpath: string, type?: string): Promise;
+ export function readlinkAsync(path: string): Promise;
+ export function realpathAsync(path: string): Promise;
+ export function realpathAsync(path: string, cache: string): Promise;
+ export function unlinkAsync(path: string): Promise;
+ export function rmdirAsync(path: string): Promise;
+ export function mkdirAsync(path: string, mode?: number): Promise;
+ export function mkdirAsync(path: string, mode?: string): Promise;
+ export function readdirAsync(path: string): Promise;
+ export function closeAsync(fd: number): Promise;
+ export function openAsync(path: string, flags: string, mode?: string): Promise;
+ export function utimesAsync(path: string, atime: number, mtime: number): Promise;
+ export function futimesAsync(fd: number, atime: number, mtime: number): Promise;
+ export function fsyncAsync(fd: number): Promise;
+ export function writeAsync(fd: number, buffer: NodeBuffer, offset: number, length: number, position: number): Promise<[number, NodeBuffer]>;
+ export function readAsync(fd: number, buffer: NodeBuffer, offset: number, length: number, position: number): Promise<[number, NodeBuffer]>;
+ export function readFileAsync(filename: string, encoding: string): Promise;
+ export function readFileAsync(filename: string, options: OpenOptions): Promise;
+ export function readFileAsync(filename: string): Promise;
+ export function writeFileAsync(filename: string, data: any, encoding?: string): Promise;
+ export function writeFileAsync(filename: string, data: any, options?: OpenOptions): Promise;
+ export function appendFileAsync(filename: string, data: any, encoding?: string): Promise;
+ export function appendFileAsync(filename: string, data: any, option?: OpenOptions): Promise;
+
+ export function existsAsync(path: string): Promise;
+ export function ensureDirAsync(path: string): Promise;
+}
+