19 lines
675 B
JavaScript
19 lines
675 B
JavaScript
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
const vm = require("node:vm");
|
|
|
|
// The same calculation code used by the browser, isolated from server globals.
|
|
const engine = vm.createContext({ structuredClone });
|
|
for (const name of ["native-math.js", "native-formula.js", "native-text.js", "native-quantity.cjs"])
|
|
vm.runInContext(fs.readFileSync(path.join(__dirname, name), "utf8"), engine, { filename: name });
|
|
|
|
function calculateQuantity(sheet) {
|
|
engine.sheet = sheet;
|
|
try {
|
|
return vm.runInContext("EstQuantity.calculate(sheet)", engine, { timeout: 20000 });
|
|
} finally {
|
|
delete engine.sheet;
|
|
}
|
|
}
|
|
module.exports = { calculateQuantity };
|