mount-observer 0.1.38 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Synthesizer.js CHANGED
@@ -216,19 +216,30 @@ export class Synthesizer extends HTMLElement {
216
216
  try {
217
217
  // Check if export property exists
218
218
  let exportValue = scriptElement.export;
219
- if (!exportValue) {
220
- // Determine which event to wait for based on script type
221
- const scriptType = scriptElement.getAttribute('type');
222
- const eventName = scriptType === 'emc-parser' ? 'parser-registered' : 'resolved';
223
- // Wait for appropriate event with timeout
224
- const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout waiting for ${eventName} event`)), 5000));
225
- const eventPromise = waitForEvent(scriptElement, eventName);
226
- const event = await Promise.race([eventPromise, timeoutPromise]);
227
- // For parser scripts, we don't need an export value
228
- // For other scripts, get the export from the event
229
- if (scriptType !== 'emc-parser') {
230
- exportValue = event.export;
231
- }
219
+ const scriptType = scriptElement.getAttribute('type');
220
+ if (!exportValue && scriptType !== 'emc-parser') {
221
+ // Wait for the export to become available via the 'resolved' event.
222
+ // Use a polling check as a fallback in case the event already fired.
223
+ exportValue = await new Promise((resolve) => {
224
+ // Check immediately in case it was set between our first check and now
225
+ if (scriptElement.export) {
226
+ resolve(scriptElement.export);
227
+ return;
228
+ }
229
+ const onResolved = (e) => {
230
+ clearInterval(poll);
231
+ resolve(e.export || scriptElement.export);
232
+ };
233
+ scriptElement.addEventListener('resolved', onResolved, {once: true});
234
+ // Poll as safety net in case event already fired
235
+ const poll = setInterval(() => {
236
+ if (scriptElement.export) {
237
+ scriptElement.removeEventListener('resolved', onResolved);
238
+ clearInterval(poll);
239
+ resolve(scriptElement.export);
240
+ }
241
+ }, 50);
242
+ });
232
243
  }
233
244
  // Clone the script element
234
245
  const clonedScript = scriptElement.cloneNode(true);
package/Synthesizer.ts CHANGED
@@ -244,25 +244,31 @@ export abstract class Synthesizer extends HTMLElement {
244
244
  // Check if export property exists
245
245
  let exportValue = (scriptElement as any).export;
246
246
 
247
- if (!exportValue) {
248
- // Determine which event to wait for based on script type
249
- const scriptType = scriptElement.getAttribute('type');
250
- const eventName = scriptType === 'emc-parser' ? 'parser-registered' : 'resolved';
251
-
252
- // Wait for appropriate event with timeout
253
- const timeoutPromise = new Promise((_, reject) =>
254
- setTimeout(() => reject(new Error(`Timeout waiting for ${eventName} event`)), 5000)
255
- );
256
-
257
- const eventPromise = waitForEvent(scriptElement, eventName);
258
-
259
- const event = await Promise.race([eventPromise, timeoutPromise]);
260
-
261
- // For parser scripts, we don't need an export value
262
- // For other scripts, get the export from the event
263
- if (scriptType !== 'emc-parser') {
264
- exportValue = (event as any).export;
265
- }
247
+ const scriptType = scriptElement.getAttribute('type');
248
+
249
+ if (!exportValue && scriptType !== 'emc-parser') {
250
+ // Wait for the export to become available via the 'resolved' event.
251
+ // Use a polling check as a fallback in case the event already fired.
252
+ exportValue = await new Promise<any>((resolve) => {
253
+ // Check immediately in case it was set between our first check and now
254
+ if ((scriptElement as any).export) {
255
+ resolve((scriptElement as any).export);
256
+ return;
257
+ }
258
+ const onResolved = (e: any) => {
259
+ clearInterval(poll);
260
+ resolve(e.export || (scriptElement as any).export);
261
+ };
262
+ scriptElement.addEventListener('resolved', onResolved, {once: true});
263
+ // Poll as safety net in case event already fired
264
+ const poll = setInterval(() => {
265
+ if ((scriptElement as any).export) {
266
+ scriptElement.removeEventListener('resolved', onResolved);
267
+ clearInterval(poll);
268
+ resolve((scriptElement as any).export);
269
+ }
270
+ }, 50);
271
+ });
266
272
  }
267
273
 
268
274
  // Clone the script element
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mount-observer",
3
- "version": "0.1.38",
3
+ "version": "0.1.39",
4
4
  "description": "Observe and act on css matches.",
5
5
  "main": "MountObserver.js",
6
6
  "module": "MountObserver.js",