UNPKG

distriprob

Version:

A library for calculating the PDF, CDFs, and quantile function values of common probability distributions

63 lines (62 loc) 2.05 kB
"use strict"; 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]"; }