'use strict'; const { dedent } = require('../utils.js'); const { io } = require('./_io.js'); const loader = new WeakMap(); exports.loader = loader; // REQUIRES INTEGRATION TEST /* c8 ignore start */ const registerJSModule = (interpreter, name, value) => { if (name === 'polyscript') { value.lazy_py_modules = async (...packages) => { await loader.get(interpreter)(packages); return packages.map(name => interpreter.pyimport(name)); }; } interpreter.registerJsModule(name, value); }; exports.registerJSModule = registerJSModule; const getFormat = (path, url) => { if (path.endsWith('/*')) { if (/\.(zip|tar(?:\.gz)?)$/.test(url)) return RegExp.$1; throw new Error(`Unsupported archive ${url}`); } return ''; }; exports.getFormat = getFormat; const run = (interpreter, code, ...args) => { try { return interpreter.runPython(dedent(code), ...args); } catch (error) { io.get(interpreter).stderr(error); } }; exports.run = run; const runAsync = async (interpreter, code, ...args) => { try { return await interpreter.runPythonAsync(dedent(code), ...args); } catch (error) { io.get(interpreter).stderr(error); } }; exports.runAsync = runAsync; const runEvent = async (interpreter, code, event) => { // allows method(event) as well as namespace.method(event) // it does not allow fancy brackets names for now const [name, ...keys] = code.split('.'); let target = interpreter.globals.get(name); let context; for (const key of keys) [context, target] = [target, target[key]]; try { await target.call(context, event); } catch (error) { io.get(interpreter).stderr(error); } }; exports.runEvent = runEvent; /* c8 ignore stop */