Compare commits

...

3 Commits

Author SHA1 Message Date
Andrea Giammarchi
a41b3328aa Merge branch 'main' into better-donkey 2024-10-11 10:14:49 +02:00
pre-commit-ci[bot]
3e55024351 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2024-10-10 17:37:09 +00:00
Andrea Giammarchi
5f526496f4 Provide an xworker to PyEditors (#2216) 2024-10-10 19:36:12 +02:00
2 changed files with 46 additions and 12 deletions

View File

@@ -2,7 +2,7 @@ import { assign, dedent } from "polyscript/exports";
const invoke = (name, args) => `${name}(code, ${args.join(", ")})`;
export default (options = {}) => {
const donkey = (options = {}) => {
const type = options.type || "py";
const args = options.persistent
? ["globals()", "__locals__"]
@@ -44,21 +44,55 @@ export default (options = {}) => {
script.addEventListener(`${type}:done`, (event) => {
event.stopPropagation();
URL.revokeObjectURL(src);
let executed = true;
let evaluated = true;
const { xworker, process, terminal } = script;
const { execute, evaluate } = xworker.sync;
script.remove();
resolve({
const kill = () => {
xworker.terminate();
terminal.dispose();
};
const farmer = {
process,
execute: (code) => execute(dedent(code)),
evaluate: (code) => evaluate(dedent(code)),
execute: async (code) => {
if (!executed) {
kill();
assign(farmer, await donkey(options));
return farmer.execute(code);
}
executed = false;
try {
const result = await execute(dedent(code));
executed = true;
return result;
} catch (e) {
console.error(e);
}
},
evaluate: async (code) => {
if (!evaluated) {
kill();
assign(farmer, await donkey(options));
return farmer.evaluate(code);
}
evaluated = false;
try {
const result = await evaluate(dedent(code));
evaluated = true;
return result;
} catch (e) {
console.error(e);
}
},
clear: () => terminal.clear(),
reset: () => terminal.reset(),
kill: () => {
xworker.terminate();
terminal.dispose();
},
});
kill,
};
resolve(farmer);
script.remove();
});
document.body.append(script);
});
};
export default donkey;

View File

@@ -1,2 +1,2 @@
declare function _default(options?: {}): Promise<any>;
export default _default;
export default donkey;
declare function donkey(options?: {}): Promise<any>;