Commit 3cf5dd21 authored by Julien Fontanet's avatar Julien Fontanet Committed by GitHub

feat: methods can return promises (#28)

Async methods return promises if no callbacks is passed.
parent b9e5e632
......@@ -9,6 +9,7 @@ var shareRegExp = /\\\\([^\\]*)\\([^\\]*)\\?/,
/*
* DEPENDENCIES
*/
var autoPromise = require('./tools/auto-promise');
var SMB2Connection = require('./tools/smb2-connection');
/*
......@@ -80,27 +81,52 @@ var proto = (SMB.prototype = {});
proto.disconnect = require('./api/disconnect');
proto.exists = SMB2Connection.requireConnect(require('./api/exists'));
proto.exists = autoPromise(
SMB2Connection.requireConnect(require('./api/exists'))
);
proto.rename = SMB2Connection.requireConnect(require('./api/rename'));
proto.rename = autoPromise(
SMB2Connection.requireConnect(require('./api/rename'))
);
proto.readFile = SMB2Connection.requireConnect(require('./api/readfile'));
proto.createReadStream = SMB2Connection.requireConnect(
require('./api/createReadStream')
proto.readFile = autoPromise(
SMB2Connection.requireConnect(require('./api/readfile'))
);
proto.createReadStream = autoPromise(
SMB2Connection.requireConnect(require('./api/createReadStream'))
);
proto.createWriteStream = SMB2Connection.requireConnect(
require('./api/createWriteStream')
proto.createWriteStream = autoPromise(
SMB2Connection.requireConnect(require('./api/createWriteStream'))
);
proto.writeFile = autoPromise(
SMB2Connection.requireConnect(require('./api/writefile'))
);
proto.unlink = autoPromise(
SMB2Connection.requireConnect(require('./api/unlink'))
);
proto.writeFile = SMB2Connection.requireConnect(require('./api/writefile'));
proto.unlink = SMB2Connection.requireConnect(require('./api/unlink'));
proto.readdir = SMB2Connection.requireConnect(require('./api/readdir'));
proto.rmdir = SMB2Connection.requireConnect(require('./api/rmdir'));
proto.mkdir = SMB2Connection.requireConnect(require('./api/mkdir'));
proto.readdir = autoPromise(
SMB2Connection.requireConnect(require('./api/readdir'))
);
proto.rmdir = autoPromise(
SMB2Connection.requireConnect(require('./api/rmdir'))
);
proto.mkdir = autoPromise(
SMB2Connection.requireConnect(require('./api/mkdir'))
);
proto.ensureDir = SMB2Connection.requireConnect(require('./api/ensureDir'));
proto.getSize = SMB2Connection.requireConnect(require('./api/getSize'));
proto.ensureDir = autoPromise(
SMB2Connection.requireConnect(require('./api/ensureDir'))
);
proto.getSize = autoPromise(
SMB2Connection.requireConnect(require('./api/getSize'))
);
proto.open = SMB2Connection.requireConnect(require('./api/open'));
proto.read = require('./api/read');
proto.close = require('./api/close');
proto.open = autoPromise(SMB2Connection.requireConnect(require('./api/open')));
proto.read = autoPromise(require('./api/read'), function(bytesRead, buffer) {
return {
bytesRead: bytesRead,
buffer: buffer,
};
});
proto.close = autoPromise(require('./api/close'));
var slice = Array.prototype.slice;
// decorate an async function taking a callback to make it return a promise if
// no callback is passed
//
// `makeResult` is optional function
module.exports = function autoPromise(fn, makeResult) {
return function() {
var promise;
var args = arguments;
var n = args.length;
if (n !== 0 && typeof args[n - 1] !== 'function') {
args = slice.call(arguments);
promise = new Promise(function(resolve, reject) {
args.push(function(err, result) {
if (err != null) {
reject(err);
} else {
resolve(
makeResult !== undefined
? makeResult.apply(this, slice.call(arguments, 1))
: result
);
}
});
});
}
fn.apply(this, args);
return promise;
};
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment