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 };