Prevent error swallowing

This commit is contained in:
Simon Schick
2015-11-24 03:21:56 +01:00
parent db5b333085
commit 0b1a165139

View File

@@ -3,6 +3,13 @@
var InternalClient = require("./InternalClient.js"); var InternalClient = require("./InternalClient.js");
var EventEmitter = require("events"); var EventEmitter = require("events");
function errCB(callback) {
return error => {
callback(error);
throw error;
};
}
class Client extends EventEmitter { class Client extends EventEmitter {
/* /*
this class is an interface for the internal this class is an interface for the internal
@@ -52,13 +59,13 @@ class Client extends EventEmitter {
.then((token) => { .then((token) => {
callback(null, token); callback(null, token);
return token; return token;
}, callback); }, errCB(callback));
} }
// def logout // def logout
logout(callback = (/*err*/) => {}) { logout(callback = (/*err*/) => {}) {
return this.internal.logout() return this.internal.logout()
.then(callback, callback); .then(callback, errCB(callback));
} }
// def sendMessage // def sendMessage
sendMessage(where, content, options = {}, callback = (/*e, m*/) => {}) { sendMessage(where, content, options = {}, callback = (/*e, m*/) => {}) {
@@ -71,7 +78,7 @@ class Client extends EventEmitter {
.then(m => { .then(m => {
callback(null, m); callback(null, m);
return m; return m;
}, callback); }, errCB(callback));
} }
// def sendTTSMessage // def sendTTSMessage
@@ -80,7 +87,7 @@ class Client extends EventEmitter {
.then(m => { .then(m => {
callback(null, m); callback(null, m);
return m; return m;
}, callback); }, errCB(callback));
} }
// def reply // def reply
reply(where, content, options = {}, callback = (/*e, m*/) => {}) { reply(where, content, options = {}, callback = (/*e, m*/) => {}) {
@@ -97,7 +104,7 @@ class Client extends EventEmitter {
.then(m => { .then(m => {
callback(null, m); callback(null, m);
return m; return m;
}, callback); }, errCB(callback));
} }
var err = new Error("Destination not resolvable to a message!"); var err = new Error("Destination not resolvable to a message!");
callback(err); callback(err);
@@ -110,7 +117,7 @@ class Client extends EventEmitter {
.then(m => { .then(m => {
callback(null, m); callback(null, m);
return m; return m;
}, callback); }, errCB(callback));
} }
// def deleteMessage // def deleteMessage
deleteMessage(msg, options = {}, callback = (/*e*/) => {}) { deleteMessage(msg, options = {}, callback = (/*e*/) => {}) {
@@ -120,9 +127,7 @@ class Client extends EventEmitter {
} }
return this.internal.deleteMessage(msg, options) return this.internal.deleteMessage(msg, options)
.then(() => { .then(callback, errCB(callback));
callback(null);
}, callback);
} }
//def updateMessage //def updateMessage
updateMessage(msg, content, options = {}, callback = (/*err, msg*/) => {}) { updateMessage(msg, content, options = {}, callback = (/*err, msg*/) => {}) {
@@ -135,7 +140,7 @@ class Client extends EventEmitter {
.then(msg => { .then(msg => {
callback(null, msg); callback(null, msg);
return msg; return msg;
}, callback); }, errCB(callback));
} }
// def getChannelLogs // def getChannelLogs
@@ -149,7 +154,7 @@ class Client extends EventEmitter {
.then(logs => { .then(logs => {
callback(null, logs); callback(null, logs);
return logs; return logs;
}, callback); }, errCB(callback));
} }
// def getBans // def getBans
@@ -158,40 +163,40 @@ class Client extends EventEmitter {
.then(bans => { .then(bans => {
callback(null, bans); callback(null, bans);
return bans; return bans;
}, callback); }, errCB(callback));
} }
// def sendFile // def sendFile
sendFile(where, attachment, name = "image.png", callback = (/*err, m*/) => {}) { sendFile(where, attachment, name = "image.png", callback = (/*err, m*/) => {}) {
this.internal.sendFile(where, attachment, name) return this.internal.sendFile(where, attachment, name)
.then(m => { .then(m => {
callback(null, m); callback(null, m);
return m; return m;
}, callback); }, errCB(callback));
} }
// def joinServer // def joinServer
joinServer(invite, callback = (/*err, srv*/) => {}) { joinServer(invite, callback = (/*err, srv*/) => {}) {
this.internal.joinServer(invite) return this.internal.joinServer(invite)
.then(srv => { .then(srv => {
callback(null, srv); callback(null, srv);
return srv; return srv;
}, callback); }, errCB(callback));
} }
// def createServer // def createServer
createServer(name, region = "london", callback = (/*err, srv*/) => {}) { createServer(name, region = "london", callback = (/*err, srv*/) => {}) {
this.internal.createServer(name, region) return this.internal.createServer(name, region)
.then(srv => { .then(srv => {
callback(null, srv); callback(null, srv);
return srv; return srv;
}, callback); }, errCB(callback));
} }
// def leaveServer // def leaveServer
leaveServer(server, callback = (/*err*/) => {}) { leaveServer(server, callback = (/*err*/) => {}) {
return this.internal.leaveServer(server) return this.internal.leaveServer(server)
.then(callback, callback); .then(callback, errCB(callback));
} }
// def createChannel // def createChannel
@@ -204,13 +209,13 @@ class Client extends EventEmitter {
.then((channel) => { .then((channel) => {
callback(channel); callback(channel);
return channel; return channel;
}, callback); }, errCB(callback));
} }
// def deleteChannel // def deleteChannel
deleteChannel(channel, callback = (/*err*/) => {}) { deleteChannel(channel, callback = (/*err*/) => {}) {
return this.internal.deleteChannel(channel) return this.internal.deleteChannel(channel)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def banMember //def banMember
@@ -221,19 +226,19 @@ class Client extends EventEmitter {
callback = length; callback = length;
} }
return this.internal.banMember(user, server, length) return this.internal.banMember(user, server, length)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def unbanMember //def unbanMember
unbanMember(user, server, callback = (/*err*/) => {}) { unbanMember(user, server, callback = (/*err*/) => {}) {
return this.internal.unbanMember(user, server) return this.internal.unbanMember(user, server)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def kickMember //def kickMember
kickMember(user, server, callback = (/*err*/) => {}) { kickMember(user, server, callback = (/*err*/) => {}) {
return this.internal.kickMember(user, server) return this.internal.kickMember(user, server)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def createRole //def createRole
@@ -246,7 +251,7 @@ class Client extends EventEmitter {
.then((role) => { .then((role) => {
callback(null, role); callback(null, role);
return role; return role;
}, callback); }, errCB(callback));
} }
//def updateRole //def updateRole
@@ -259,35 +264,35 @@ class Client extends EventEmitter {
.then((role) => { .then((role) => {
callback(null, role); callback(null, role);
return role; return role;
}, callback); }, errCB(callback));
} }
//def deleteRole //def deleteRole
deleteRole(role, callback = (/*err*/) => {}) { deleteRole(role, callback = (/*err*/) => {}) {
return this.internal.deleteRole(role) return this.internal.deleteRole(role)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def addMemberToRole //def addMemberToRole
addMemberToRole(member, role, callback = (/*err*/) => {}) { addMemberToRole(member, role, callback = (/*err*/) => {}) {
return this.internal.addMemberToRole(member, role) return this.internal.addMemberToRole(member, role)
.then(callback, callback); .then(callback, errCB(callback));
} }
// def addUserToRole // def addUserToRole
addUserToRole(member, role, callback = (/*err*/) => {}) { addUserToRole(member, role, callback = (/*err*/) => {}) {
return this.addMemberToRole(member, role, callback); return this.addMemberToRole(member, role, errCB(callback));
} }
// def removeMemberFromRole // def removeMemberFromRole
removeMemberFromRole(member, role, callback = (/*err*/) => {}) { removeMemberFromRole(member, role, callback = (/*err*/) => {}) {
return this.internal.removeMemberFromRole(member, role) return this.internal.removeMemberFromRole(member, role)
.then(callback, callback); .then(callback, errCB(callback));
} }
// def removeUserFromRole // def removeUserFromRole
removeUserFromRole(member, role, callback = (/*err*/) => {}) { removeUserFromRole(member, role, callback = (/*err*/) => {}) {
return this.removeUserFromRole(member, role, callback); return this.removeUserFromRole(member, role, errCB(callback));
} }
// def createInvite // def createInvite
@@ -301,19 +306,19 @@ class Client extends EventEmitter {
return this.internal.createInvite(chanServ, options) return this.internal.createInvite(chanServ, options)
.then(invite => { .then(invite => {
callback(null, invite); callback(null, invite);
}, callback); }, errCB(callback));
} }
// def deleteInvite // def deleteInvite
deleteInvite(invite, callback = (/*err*/) => {}) { deleteInvite(invite, callback = (/*err*/) => {}) {
this.internal.deleteInvite(invite) return this.internal.deleteInvite(invite)
.then(callback, callback); .then(callback, errCB(callback));
} }
// def overwritePermissions // def overwritePermissions
overwritePermissions(channel, role, options = {}, callback = (/*err*/) => {}) { overwritePermissions(channel, role, options = {}, callback = (/*err*/) => {}) {
return this.internal.overwritePermissions(channel, role, options) return this.internal.overwritePermissions(channel, role, options)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def setStatus //def setStatus
@@ -328,67 +333,67 @@ class Client extends EventEmitter {
} }
return this.internal.setStatus(idleStatus, gameID) return this.internal.setStatus(idleStatus, gameID)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def sendTyping //def sendTyping
sendTyping(channel, callback = (/*err*/) => {}) { sendTyping(channel, callback = (/*err*/) => {}) {
return this.internal.sendTyping(channel) return this.internal.sendTyping(channel)
.then(callback, callback); .then(callback, errCB(callback));
} }
// def setTopic // def setTopic
setTopic(channel, topic, callback = (/*err*/) => {}) { setTopic(channel, topic, callback = (/*err*/) => {}) {
return this.internal.setTopic(channel, topic) return this.internal.setTopic(channel, topic)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def setChannelName //def setChannelName
setChannelName(channel, name, callback = (/*err*/) => {}) { setChannelName(channel, name, callback = (/*err*/) => {}) {
return this.internal.setChannelName(channel, name) return this.internal.setChannelName(channel, name)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def setChannelNameAndTopic //def setChannelNameAndTopic
setChannelNameAndTopic(channel, name, topic, callback = (/*err*/) => {}) { setChannelNameAndTopic(channel, name, topic, callback = (/*err*/) => {}) {
return this.internal.setChannelNameAndTopic(channel, name, topic) return this.internal.setChannelNameAndTopic(channel, name, topic)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def updateChannel //def updateChannel
updateChannel(channel, data, callback = (/*err*/) => {}) { updateChannel(channel, data, callback = (/*err*/) => {}) {
return this.internal.updateChannel(channel, data) return this.internal.updateChannel(channel, data)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def startTyping //def startTyping
startTyping(channel, callback = (/*err*/) => {}) { startTyping(channel, callback = (/*err*/) => {}) {
return this.internal.startTyping(channel) return this.internal.startTyping(channel)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def stopTyping //def stopTyping
stopTyping(channel, callback = (/*err*/) => {}) { stopTyping(channel, callback = (/*err*/) => {}) {
return this.internal.stopTyping(channel) return this.internal.stopTyping(channel)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def updateDetails //def updateDetails
updateDetails(details, callback = (/*err*/) => {}) { updateDetails(details, callback = (/*err*/) => {}) {
return this.internal.updateDetails(details) return this.internal.updateDetails(details)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def setUsername //def setUsername
setUsername(name, callback = (/*err*/) => {}) { setUsername(name, callback = (/*err*/) => {}) {
return this.internal.setUsername(name) return this.internal.setUsername(name)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def setAvatar //def setAvatar
setAvatar(avatar, callback = (/*err*/) => {}) { setAvatar(avatar, callback = (/*err*/) => {}) {
return this.internal.setAvatar(avatar) return this.internal.setAvatar(avatar)
.then(callback, callback); .then(callback, errCB(callback));
} }
//def joinVoiceChannel //def joinVoiceChannel
@@ -397,24 +402,18 @@ class Client extends EventEmitter {
.then(chan => { .then(chan => {
callback(null, chan); callback(null, chan);
return chan; return chan;
}, callback); }, errCB(callback));
} }
// def leaveVoiceChannel // def leaveVoiceChannel
leaveVoiceChannel(callback = (/*err*/) => {}) { leaveVoiceChannel(callback = (/*err*/) => {}) {
return this.internal.leaveVoiceChannel() return this.internal.leaveVoiceChannel()
.then(callback, callback); .then(callback, errCB(callback));
} }
// def awaitResponse // def awaitResponse
awaitResponse(msg, toSend = null, options = null, callback = (/*e, newMsg*/) => {}) { awaitResponse(msg, toSend = null, options = null, callback = (/*e, newMsg*/) => {}) {
const final = () =>
this.internal.awaitResponse(msg)
.then(newMsg => {
callback(null, newMsg);
});
var ret; var ret;
if (toSend) { if (toSend) {
@@ -443,17 +442,21 @@ class Client extends EventEmitter {
ret = Promise.resolve(); ret = Promise.resolve();
} }
// (msg) promise // (msg) promise
return ret.then(final).catch(callback); return ret.then(() => this.internal.awaitResponse(msg))
.then((newMsg) => {
callback(null, newMsg);
return newMsg;
}, errCB(callback));
} }
setStatusIdle(callback = (/*err*/) => {}) { setStatusIdle(callback = (/*err*/) => {}) {
return this.internal.setStatus("idle") return this.internal.setStatus("idle")
.then(callback, callback); .then(callback, errCB(callback));
} }
setStatusOnline(callback = (/*err*/) => {}) { setStatusOnline(callback = (/*err*/) => {}) {
return this.internal.setStatus("online") return this.internal.setStatus("online")
.then(callback, callback); .then(callback, errCB(callback));
} }
setStatusActive(callback) { setStatusActive(callback) {