Skip to content

Commit 4b3587e

Browse files
Merge pull request #64 from pyscript/issue-1804
Ensure custom types run queued like it is for non custom types
2 parents 1ca470c + 1096634 commit 4b3587e

File tree

7 files changed

+41
-8
lines changed

7 files changed

+41
-8
lines changed

docs/core.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/core.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/custom.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ export const handleCustomType = (node) => {
3434
for (const selector of CUSTOM_SELECTORS) {
3535
if (node.matches(selector)) {
3636
const type = types.get(selector);
37+
const details = registry.get(type);
3738
const { resolve } = waitList.get(type);
38-
const { options, known } = registry.get(type);
39+
const { options, known } = details;
3940
if (!known.has(node)) {
4041
known.add(node);
4142
const {
@@ -143,11 +144,11 @@ export const handleCustomType = (node) => {
143144
runEvent: module.runEvent.bind(module, interpreter),
144145
};
145146

146-
resolve(resolved);
147-
148-
if (error) onerror?.(error, node);
149-
150-
onInterpreterReady?.(resolved, node);
147+
details.queue = details.queue.then(() => {
148+
resolve(resolved);
149+
if (error) onerror?.(error, node);
150+
return onInterpreterReady?.(resolved, node);
151+
});
151152
});
152153
}
153154
}
@@ -225,6 +226,7 @@ export const define = (type, options) => {
225226
registry.set(type, {
226227
options: assign({ env: type }, options),
227228
known: new WeakSet(),
229+
queue: Promise.resolve(),
228230
});
229231

230232
if (!dontBother) addAllListeners(document);

test/queue/index.html

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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>Polyscript queue</title>
7+
<script type="module">
8+
import { define } from "../../core.js";
9+
define("mpy", {
10+
interpreter: "micropython",
11+
async onInterpreterReady({ run }, element) {
12+
let code = element.textContent;
13+
if (element.src)
14+
code = await fetch(element.src).then(b => b.text());
15+
run(code);
16+
}
17+
});
18+
</script>
19+
</head>
20+
<body>
21+
<script type="mpy" src="one.py"></script>
22+
<script type="mpy">print('inline one')</script>
23+
<script type="mpy" src="two.py"></script>
24+
<script type="mpy">print('inline two')</script>
25+
<script type="mpy" src="three.py"></script>
26+
<script type="mpy">print('inline three')</script>
27+
</body>
28+
</html>

test/queue/one.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
print('src one')

test/queue/three.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
print('src three')

test/queue/two.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
print('src two')

0 commit comments

Comments
 (0)