Skip to content

Commit ac85402

Browse files
committed
Fix #148 - Use transform from the interpreter
1 parent f4046b8 commit ac85402

File tree

8 files changed

+36
-6
lines changed

8 files changed

+36
-6
lines changed

docs/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

esm/interpreter/micropython.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import fetch from '@webreflection/fetch';
33
import { createProgress, writeFile } from './_utils.js';
44
import { getFormat, loader, loadProgress, registerJSModule, run, runAsync, runEvent } from './_python.js';
55
import { stdio, buffered } from './_io.js';
6-
import { absoluteURL, fixedRelative } from '../utils.js';
6+
import { absoluteURL, fixedRelative, js_modules } from '../utils.js';
77
import mip from '../python/mip.js';
88
import { zip } from '../3rd-party.js';
99

@@ -37,6 +37,7 @@ export default {
3737
url = url.replace(/\.m?js$/, '.wasm');
3838
progress('Loading MicroPython');
3939
const interpreter = await get(loadMicroPython({ linebuffer: false, stderr, stdout, url }));
40+
globalThis[js_modules].set('-T-', this.transform.bind(this, interpreter));
4041
const py_imports = importPackages.bind(this, interpreter, baseURL);
4142
loader.set(interpreter, py_imports);
4243
await loadProgress(this, progress, interpreter, config, baseURL);

esm/interpreter/pyodide.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createProgress, writeFile } from './_utils.js';
22
import { getFormat, loader, loadProgress, registerJSModule, run, runAsync, runEvent } from './_python.js';
33
import { stdio } from './_io.js';
4-
import { IDBMapSync, isArray, fixedRelative } from '../utils.js';
4+
import { IDBMapSync, isArray, fixedRelative, js_modules } from '../utils.js';
55

66
const type = 'pyodide';
77
const toJsOptions = { dict_converter: Object.fromEntries };
@@ -124,6 +124,7 @@ export default {
124124
const interpreter = await get(
125125
loadPyodide({ stderr, stdout, ...options }),
126126
);
127+
globalThis[js_modules].set('-T-', this.transform.bind(this, interpreter));
127128
if (config.debug) interpreter.setDebug(true);
128129
const py_imports = importPackages.bind(interpreter);
129130
if (index_urls) indexURLs.set(interpreter, index_urls);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,6 @@
9595
"to-json-callback": "^0.1.1"
9696
},
9797
"worker": {
98-
"blob": "sha256-9Jm1+L4Uur4gkfKpJGU+YQkR+/qFKhZtxE3UMQEjUbw="
98+
"blob": "sha256-793NDYXZ46XOi7y/2zZMFwpOtxJESk/tvuGnDaYZotI="
9999
}
100100
}

rollup/build_xworker.cjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ const PACKAGE_JSON = resolve(join(__dirname, "..", "package.json"));
1414

1515
const coincident = [
1616
"import coincident from 'coincident/window/main';",
17-
'const { Worker } = coincident({ transfer: false });',
17+
"const js_modules = Symbol.for('polyscript.js_modules');",
18+
"let transform;",
19+
'const { Worker } = coincident({ transfer: false, transform: value => (transform || (transform = globalThis[js_modules]?.get("-T-")))?.(value) ?? value });',
1820
];
1921

2022
for (const file of readdirSync(DIST_DIR)) {

test/worker/sync.html

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
6+
<title>python workers</title>
7+
<script type="module">
8+
import "/dist/index.js";
9+
</script>
10+
</head>
11+
<body>
12+
<script type="micropython">
13+
from polyscript import XWorker
14+
15+
def handle_data(data):
16+
print("main", data)
17+
return (1, 2, 3)
18+
19+
w = XWorker('./sync.py', type='pyodide')
20+
w.sync.data = handle_data
21+
</script>
22+
</body>
23+
</html>

test/worker/sync.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from polyscript import xworker
2+
3+
print("worker", xworker.sync.data(memoryview(b"hello")))

0 commit comments

Comments
 (0)