distriprob
Version:
A library for calculating the PDF, CDFs, and quantile function values of common probability distributions
63 lines (62 loc) • 2.05 kB
JavaScript
;
function asyncGen(functionDependencies, script, scriptArgs) {
let worker;
if (isNode()) {
const scriptString = createScriptStr(functionDependencies, script, scriptArgs, true);
const Worker = require("webworker-threads").Worker;
const functionArg = new Function(scriptString);
worker = new Worker(functionArg);
}
else {
const scriptString = createScriptStr(functionDependencies, script, scriptArgs, false);
const blobURL = URL.createObjectURL(new Blob([scriptString], { type: "application/javascript" }));
worker = new Worker(blobURL);
URL.revokeObjectURL(blobURL);
}
return new Promise((resolve, reject) => {
worker.onmessage = function (event) {
worker.terminate();
resolve(event.data);
};
worker.postMessage("get to work!");
});
}
exports.asyncGen = asyncGen;
function createScriptStr(functionDependencies, script, scriptArgs, node) {
let argString = "";
for (let i = 0; i < scriptArgs.length; i++) {
let arg = scriptArgs[i];
if (Array.isArray(arg)) {
argString += "[" + arg.toString() + "]";
}
else if (arg === null) {
argString += "null";
}
else if (typeof arg === "string") {
argString += `"${arg}"`;
}
else {
argString += arg.toString();
}
if (i < (scriptArgs.length - 1)) {
argString += ", ";
}
}
let result = "";
for (let funct of functionDependencies) {
result += funct.toString() + "\n";
}
result += "let result = (" + script.toString() + ")(" + argString + ");\n";
if (node) {
result += "self.onmessage = function(event) {\n";
}
else {
result += "self.onmessage = function(event) {\n";
}
result += "postMessage(result);\n";
result += "};\n";
return result;
}
function isNode() {
return typeof process === "object" && process + "" === "[object process]";
}