Fully remove when.js dependency

This commit is contained in:
Nick O'Leary
2020-11-30 14:38:48 +00:00
parent beccdac717
commit 5992ed1fab
49 changed files with 299 additions and 357 deletions

View File

@@ -14,7 +14,6 @@
* limitations under the License.
**/
var when = require('when');
var Path = require('path');
var crypto = require('crypto');
@@ -50,15 +49,13 @@ function is_malicious(path) {
}
var storageModuleInterface = {
init: function(_runtime) {
init: async function(_runtime) {
runtime = _runtime;
try {
storageModule = moduleSelector(runtime.settings);
settingsAvailable = storageModule.hasOwnProperty("getSettings") && storageModule.hasOwnProperty("saveSettings");
sessionsAvailable = storageModule.hasOwnProperty("getSessions") && storageModule.hasOwnProperty("saveSessions");
} catch (e) {
return when.reject(e);
}
// Any errors thrown by the module will get passed up to the called
// as a rejected promise
storageModule = moduleSelector(runtime.settings);
settingsAvailable = storageModule.hasOwnProperty("getSettings") && storageModule.hasOwnProperty("saveSettings");
sessionsAvailable = storageModule.hasOwnProperty("getSessions") && storageModule.hasOwnProperty("saveSessions");
if (!!storageModule.projects) {
var projectsEnabled = false;
if (runtime.settings.hasOwnProperty("editorTheme") && runtime.settings.editorTheme.hasOwnProperty("projects")) {
@@ -73,7 +70,7 @@ var storageModuleInterface = {
}
return storageModule.init(runtime.settings,runtime);
},
getFlows: function() {
getFlows: async function() {
return storageModule.getFlows().then(function(flows) {
return storageModule.getCredentials().then(function(creds) {
var result = {
@@ -85,14 +82,14 @@ var storageModuleInterface = {
})
});
},
saveFlows: function(config, user) {
saveFlows: async function(config, user) {
var flows = config.flows;
var credentials = config.credentials;
var credentialSavePromise;
if (config.credentialsDirty) {
credentialSavePromise = storageModule.saveCredentials(credentials);
} else {
credentialSavePromise = when.resolve();
credentialSavePromise = Promise.resolve();
}
delete config.credentialsDirty;
@@ -105,64 +102,60 @@ var storageModuleInterface = {
// getCredentials: function() {
// return storageModule.getCredentials();
// },
saveCredentials: function(credentials) {
saveCredentials: async function(credentials) {
return storageModule.saveCredentials(credentials);
},
getSettings: function() {
getSettings: async function() {
if (settingsAvailable) {
return storageModule.getSettings();
} else {
return when.resolve(null);
return null
}
},
saveSettings: function(settings) {
saveSettings: async function(settings) {
if (settingsAvailable) {
return settingsSaveMutex.runExclusive(() => storageModule.saveSettings(settings))
} else {
return when.resolve();
}
},
getSessions: function() {
getSessions: async function() {
if (sessionsAvailable) {
return storageModule.getSessions();
} else {
return when.resolve(null);
return null
}
},
saveSessions: function(sessions) {
saveSessions: async function(sessions) {
if (sessionsAvailable) {
return storageModule.saveSessions(sessions);
} else {
return when.resolve();
}
},
/* Library Functions */
getLibraryEntry: function(type, path) {
getLibraryEntry: async function(type, path) {
if (is_malicious(path)) {
var err = new Error();
err.code = "forbidden";
return when.reject(err);
throw err;
}
return storageModule.getLibraryEntry(type, path);
},
saveLibraryEntry: function(type, path, meta, body) {
saveLibraryEntry: async function(type, path, meta, body) {
if (is_malicious(path)) {
var err = new Error();
err.code = "forbidden";
return when.reject(err);
throw err;
}
return storageModule.saveLibraryEntry(type, path, meta, body);
},
/* Deprecated functions */
getAllFlows: function() {
getAllFlows: async function() {
if (storageModule.hasOwnProperty("getAllFlows")) {
return storageModule.getAllFlows();
} else {
if (libraryFlowsCachedResult) {
return Promise.resolve(libraryFlowsCachedResult);
return libraryFlowsCachedResult;
} else {
return listFlows("/").then(function(result) {
libraryFlowsCachedResult = result;
@@ -175,7 +168,7 @@ var storageModuleInterface = {
if (is_malicious(fn)) {
var err = new Error();
err.code = "forbidden";
return when.reject(err);
throw err;
}
if (storageModule.hasOwnProperty("getFlow")) {
return storageModule.getFlow(fn);
@@ -188,7 +181,7 @@ var storageModuleInterface = {
if (is_malicious(fn)) {
var err = new Error();
err.code = "forbidden";
return when.reject(err);
throw err;
}
libraryFlowsCachedResult = null;
if (storageModule.hasOwnProperty("saveFlow")) {
@@ -204,40 +197,36 @@ var storageModuleInterface = {
function listFlows(path) {
return storageModule.getLibraryEntry("flows",path).then(function(res) {
return when.promise(function(resolve) {
var promises = [];
res.forEach(function(r) {
if (typeof r === "string") {
promises.push(listFlows(Path.join(path,r)));
} else {
promises.push(when.resolve(r));
}
});
var i=0;
when.settle(promises).then(function(res2) {
var result = {};
res2.forEach(function(r) {
// TODO: name||fn
if (r.value.fn) {
var name = r.value.name;
if (!name) {
name = r.value.fn.replace(/\.json$/, "");
}
result.f = result.f || [];
result.f.push(name);
} else {
result.d = result.d || {};
result.d[res[i]] = r.value;
//console.log(">",r.value);
const promises = [];
res.forEach(function(r) {
if (typeof r === "string") {
promises.push(listFlows(Path.join(path,r)));
} else {
promises.push(Promise.resolve(r));
}
});
return Promise.all(promises).then(res2 => {
let i = 0;
const result = {};
res2.forEach(function(r) {
// TODO: name||fn
if (r.fn) {
var name = r.name;
if (!name) {
name = r.fn.replace(/\.json$/, "");
}
i++;
});
resolve(result);
result.f = result.f || [];
result.f.push(name);
} else {
result.d = result.d || {};
result.d[res[i]] = r;
//console.log(">",r.value);
}
i++;
});
return result;
});
});
}
module.exports = storageModuleInterface;