From 95480dc3ac3ad2e756311105ebc100a2b7e5e362 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 17 Nov 2023 13:12:35 -0800 Subject: [PATCH 1/6] FIX Fix node global scope again Seems that #121 removed some stuff that we needed. --- pytest_pyodide/node_test_driver.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pytest_pyodide/node_test_driver.js b/pytest_pyodide/node_test_driver.js index 09d56eb..2c0f35b 100644 --- a/pytest_pyodide/node_test_driver.js +++ b/pytest_pyodide/node_test_driver.js @@ -16,8 +16,11 @@ function _fetch(path) { } const context = { - loadPyodide, ...globalThis, + loadPyodide, + fetch: _fetch, + TextDecoder: util.TextDecoder, + TextEncoder: util.TextEncoder, }; context.self = context; vm.createContext(context); From e1a5ffd9a765c9c1edce4cf07d8ac1da54ddcc58 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 17 Nov 2023 14:24:12 -0800 Subject: [PATCH 2/6] More work on node_test_driver --- pytest_pyodide/node_test_driver.js | 41 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/pytest_pyodide/node_test_driver.js b/pytest_pyodide/node_test_driver.js index 2c0f35b..d6b0a83 100644 --- a/pytest_pyodide/node_test_driver.js +++ b/pytest_pyodide/node_test_driver.js @@ -1,27 +1,27 @@ const vm = require("vm"); const readline = require("readline"); -const path = require("path"); const util = require("util"); -let nodeFetch = globalThis.fetch; -let baseUrl = process.argv[2]; -let distDir = process.argv[3]; +const baseUrl = process.argv[2]; +const distDir = process.argv[3]; -let { loadPyodide } = require(`${distDir}/pyodide`); +const { loadPyodide } = require(`${distDir}/pyodide`); process.chdir(distDir); // node requires full paths. function _fetch(path) { - return nodeFetch(new URL(path, baseUrl).toString()); + return fetch(new URL(path, baseUrl).toString()); } -const context = { - ...globalThis, - loadPyodide, - fetch: _fetch, - TextDecoder: util.TextDecoder, - TextEncoder: util.TextEncoder, -}; +const context = Object.assign( + Object.create(Object.prototype, Object.getOwnPropertyDescriptors(globalThis)), + { + loadPyodide, + fetch: _fetch, + TextDecoder: util.TextDecoder, + TextEncoder: util.TextEncoder, + } +); context.self = context; vm.createContext(context); @@ -53,16 +53,16 @@ rl.on("line", async function (line) { }); async function evalCode(uuid, code, eval_context) { - let p = new Promise((resolve, reject) => { + const p = new Promise((resolve, reject) => { eval_context.___outer_resolve = resolve; eval_context.___outer_reject = reject; }); - let wrapped_code = ` - (async function(){ - ${code} - })().then(___outer_resolve).catch(___outer_reject); - `; - let delim = uuid + ":UUID"; + const wrapped_code = ` + (async function(){ + ${code} + })().then(___outer_resolve).catch(___outer_reject); + `; + const delim = uuid + ":UUID"; console.log(delim); try { vm.runInContext(wrapped_code, eval_context); @@ -73,4 +73,3 @@ async function evalCode(uuid, code, eval_context) { } } console.log("READY!!"); -// evalCode("xxx", "let pyodide = await loadPyodide(); pyodide.runPython(`print([x*x+1 for x in range(10)])`);", context); From 19dba6eb28f17c0eebb8278cb71dcc8cf11294d7 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 17 Nov 2023 14:38:44 -0800 Subject: [PATCH 3/6] Fix more --- pytest_pyodide/node_test_driver.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pytest_pyodide/node_test_driver.js b/pytest_pyodide/node_test_driver.js index d6b0a83..a8585c7 100644 --- a/pytest_pyodide/node_test_driver.js +++ b/pytest_pyodide/node_test_driver.js @@ -24,6 +24,7 @@ const context = Object.assign( ); context.self = context; vm.createContext(context); +vm.runInContext("globalThis.self = globalThis;", context); // Get rid of all colors in output of console.log, they mess us up. for (let key of Object.keys(util.inspect.styles)) { From 1ba2d722346cc0af8b09fd6b0c8c022ae79f9b4c Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 17 Nov 2023 15:29:28 -0800 Subject: [PATCH 4/6] Fix --- pytest_pyodide/node_test_driver.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pytest_pyodide/node_test_driver.js b/pytest_pyodide/node_test_driver.js index a8585c7..56d83e7 100644 --- a/pytest_pyodide/node_test_driver.js +++ b/pytest_pyodide/node_test_driver.js @@ -22,6 +22,8 @@ const context = Object.assign( TextEncoder: util.TextEncoder, } ); +context.globalThis = context; +context.global = context; context.self = context; vm.createContext(context); vm.runInContext("globalThis.self = globalThis;", context); From 06e3ef20d863f743db91ebdfc235307447660036 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 17 Nov 2023 16:20:20 -0800 Subject: [PATCH 5/6] Back to main --- pytest_pyodide/node_test_driver.js | 41 +++++++++++++----------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/pytest_pyodide/node_test_driver.js b/pytest_pyodide/node_test_driver.js index 56d83e7..09d56eb 100644 --- a/pytest_pyodide/node_test_driver.js +++ b/pytest_pyodide/node_test_driver.js @@ -1,32 +1,26 @@ const vm = require("vm"); const readline = require("readline"); +const path = require("path"); const util = require("util"); -const baseUrl = process.argv[2]; -const distDir = process.argv[3]; +let nodeFetch = globalThis.fetch; +let baseUrl = process.argv[2]; +let distDir = process.argv[3]; -const { loadPyodide } = require(`${distDir}/pyodide`); +let { loadPyodide } = require(`${distDir}/pyodide`); process.chdir(distDir); // node requires full paths. function _fetch(path) { - return fetch(new URL(path, baseUrl).toString()); + return nodeFetch(new URL(path, baseUrl).toString()); } -const context = Object.assign( - Object.create(Object.prototype, Object.getOwnPropertyDescriptors(globalThis)), - { - loadPyodide, - fetch: _fetch, - TextDecoder: util.TextDecoder, - TextEncoder: util.TextEncoder, - } -); -context.globalThis = context; -context.global = context; +const context = { + loadPyodide, + ...globalThis, +}; context.self = context; vm.createContext(context); -vm.runInContext("globalThis.self = globalThis;", context); // Get rid of all colors in output of console.log, they mess us up. for (let key of Object.keys(util.inspect.styles)) { @@ -56,16 +50,16 @@ rl.on("line", async function (line) { }); async function evalCode(uuid, code, eval_context) { - const p = new Promise((resolve, reject) => { + let p = new Promise((resolve, reject) => { eval_context.___outer_resolve = resolve; eval_context.___outer_reject = reject; }); - const wrapped_code = ` - (async function(){ - ${code} - })().then(___outer_resolve).catch(___outer_reject); - `; - const delim = uuid + ":UUID"; + let wrapped_code = ` + (async function(){ + ${code} + })().then(___outer_resolve).catch(___outer_reject); + `; + let delim = uuid + ":UUID"; console.log(delim); try { vm.runInContext(wrapped_code, eval_context); @@ -76,3 +70,4 @@ async function evalCode(uuid, code, eval_context) { } } console.log("READY!!"); +// evalCode("xxx", "let pyodide = await loadPyodide(); pyodide.runPython(`print([x*x+1 for x in range(10)])`);", context); From 069cfa53b4e05115b73c3559ca7111262f1b8c73 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 17 Nov 2023 16:20:21 -0800 Subject: [PATCH 6/6] Revert "Include entire node global scope in node runner (#121)" This reverts commit 4b08451f3fbe37b698d3e85b175584f99851a9f6. --- pytest_pyodide/node_test_driver.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pytest_pyodide/node_test_driver.js b/pytest_pyodide/node_test_driver.js index 09d56eb..812e50b 100644 --- a/pytest_pyodide/node_test_driver.js +++ b/pytest_pyodide/node_test_driver.js @@ -17,10 +17,22 @@ function _fetch(path) { const context = { loadPyodide, - ...globalThis, + path, + process, + require, + setTimeout, + fetch: _fetch, + TextDecoder: util.TextDecoder, + TextEncoder: util.TextEncoder, + URL, + clearInterval, + clearTimeout, + setInterval, + setTimeout, + Headers }; -context.self = context; vm.createContext(context); +vm.runInContext("globalThis.self = globalThis;", context); // Get rid of all colors in output of console.log, they mess us up. for (let key of Object.keys(util.inspect.styles)) {