Fix: handle missing MessageEvent in React Native (Hermes engine)

Abierto Apto para principiantes
#401 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
react-native, typescript
Área
mobile-dev

Línea de trabajo

Comienza en packages/partysocket/src/ws.ts, en cloneEventNode alrededor de la línea 72, e inspecciona la ruta existente de isReactNative. Ejecuta las pruebas relevantes de partysocket, incluidas las pruebas añadidas por el fork enlazado si están disponibles, y confirma que Hermes funciona sin MessageEvent mientras el comportamiento en el navegador y Node.js permanece sin cambios.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Bug
cloneEventNode in packages/partysocket/src/ws.ts (line 72) calls new MessageEvent(e.type, e) unconditionally. React Native's Hermes engine doesn't provide MessageEvent as a global, causing:
ReferenceError: Property 'MessageEvent' doesn't exist
This makes partysocket unusable on React Native without a user-side polyfill. Libraries that depend on partysocket (like @novu/js) are also affected.

The existing isReactNative detection correctly routes RN to cloneEventNode (since #257), but cloneEventNode itself assumes MessageEvent exists.
Environment
React Native 0.81.5 / Expo 54
Hermes engine (default since RN 0.70+)
partysocket 1.1.16 (same issue in all versions)
Proposed Fix
Check typeof MessageEvent !== "undefined" before using it. When unavailable, fall back to a plain Event with manually copied data, origin, and lastEventId properties:
function cloneEventNode(e: Event) {
if ("data" in e) {
if (typeof MessageEvent !== "undefined") {
return new MessageEvent(e.type, e);
}
// Fallback for React Native (Hermes) where MessageEvent doesn't exist
const evt = new Event(e.type, e) as Event & Record<string, unknown>;
evt.data = (e as MessageEvent).data;
evt.origin = (e as MessageEvent).origin;
evt.lastEventId = (e as MessageEvent).lastEventId;
return evt;
}
// ... rest unchanged
}
Zero behavior change for browsers and Node.js where MessageEvent exists.

Fork with fix + tests: https://github.com/marouanechoukri31/partykit/tree/fix/react-native-messageevent

Related: #516

Lenguaje dominante
TypeScript
Estrellas
1.3k
Forks
84
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de cloudflare/partykit

Todos los issues de cloudflare/partykit

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.