Skip to content

Commit 1285ea2

Browse files
Merge pull request #46 from pyscript/drop-core-interpreters
Allow embedders to avoid default interpreters
2 parents 2e56f31 + ac0d02b commit 1285ea2

File tree

5 files changed

+18
-12
lines changed

5 files changed

+18
-12
lines changed

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.

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/index.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ export { env } from './listeners.js';
1212
export * from './errors.js';
1313
export const XWorker = xworker();
1414

15-
const INTERPRETER_SELECTORS = selectors.join(',');
16-
1715
const mo = new MutationObserver((records) => {
16+
const selector = selectors.join(',');
1817
for (const { type, target, attributeName, addedNodes } of records) {
1918
// attributes are tested via integration / e2e
2019
/* c8 ignore start */
@@ -40,9 +39,9 @@ const mo = new MutationObserver((records) => {
4039
for (const node of addedNodes) {
4140
if (node.nodeType === 1) {
4241
addAllListeners(node);
43-
if (node.matches(INTERPRETER_SELECTORS)) handle(node);
42+
if (selector && node.matches(selector)) handle(node);
4443
else {
45-
$$(INTERPRETER_SELECTORS, node).forEach(handle);
44+
if (selector) $$(selector, node).forEach(handle);
4645
if (!CUSTOM_SELECTORS.length) continue;
4746
handleCustomType(node);
4847
$$(CUSTOM_SELECTORS.join(','), node).forEach(
@@ -67,5 +66,9 @@ assign(Element.prototype, {
6766
},
6867
});
6968

70-
addAllListeners(observe(document));
71-
$$(INTERPRETER_SELECTORS, document).forEach(handle);
69+
// give 3rd party a chance to apply changes before this happens
70+
queueMicrotask(() => {
71+
addAllListeners(observe(document));
72+
const selector = selectors.join(',');
73+
if (selector) $$(selector, document).forEach(handle);
74+
});

esm/listeners.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import { all, create } from './utils.js';
55
import { registry, prefixes } from './interpreters.js';
66

77
export const env = new Proxy(create(null), {
8-
get: (_, name) => awaitInterpreter(name),
8+
get: (_, name) => new Promise(queueMicrotask).then(
9+
() => awaitInterpreter(name)
10+
),
911
});
1012

1113
/* c8 ignore start */ // attributes are tested via integration / e2e
@@ -27,6 +29,7 @@ const awaitInterpreter = async (key) => {
2729

2830
export const listener = async (event) => {
2931
const { type, currentTarget } = event;
32+
if (!prefixes.length) return;
3033
for (let { name, value, ownerElement: el } of $x(
3134
`./@*[${prefixes.map((p) => `name()="${p}${type}"`).join(' or ')}]`,
3235
currentTarget,
@@ -45,6 +48,7 @@ export const listener = async (event) => {
4548
* @param {Document | Element} root
4649
*/
4750
export const addAllListeners = (root) => {
51+
if (!prefixes.length) return;
4852
for (let { name, ownerElement: el } of $x(
4953
`.//@*[${prefixes
5054
.map((p) => `starts-with(name(),"${p}")`)
@@ -59,8 +63,7 @@ export const addAllListeners = (root) => {
5963
if ('disabled' in el && !el.disabled) {
6064
el.disabled = true;
6165
// set these to enable once the interpreter is known (registered + loaded)
62-
queueMicrotask(async () => {
63-
await awaitInterpreter(name.slice(0, i));
66+
env[name.slice(0, i)].then(() => {
6467
el.disabled = false;
6568
});
6669
}

0 commit comments

Comments
 (0)