Skip to content

Commit 630ee57

Browse files
committed
feat(render): edge & cf worker support
1 parent b6a1941 commit 630ee57

File tree

3 files changed

+51
-12
lines changed

3 files changed

+51
-12
lines changed

packages/render/src/browser/index.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type { Options } from '../shared/options';
2-
import { render } from './render';
1+
import type { Options } from "../shared/options";
2+
import "../shared/utils/edge-polyfill";
3+
import { render } from "./render";
34

45
/**
56
* @deprecated use {@link render}
@@ -8,7 +9,7 @@ export const renderAsync = (element: React.ReactElement, options?: Options) => {
89
return render(element, options);
910
};
1011

11-
export * from '../shared/options';
12-
export * from '../shared/plain-text-selectors';
13-
export * from '../shared/utils/pretty';
14-
export * from './render';
12+
export * from "../shared/options";
13+
export * from "../shared/plain-text-selectors";
14+
export * from "../shared/utils/pretty";
15+
export * from "./render";

packages/render/src/node/index.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type { Options } from '../shared/options';
2-
import { render } from './render';
1+
import type { Options } from "../shared/options";
2+
import "../shared/utils/edge-polyfill";
3+
import { render } from "./render";
34

45
/**
56
* @deprecated use {@link render}
@@ -8,7 +9,7 @@ export const renderAsync = (element: React.ReactElement, options?: Options) => {
89
return render(element, options);
910
};
1011

11-
export * from '../shared/options';
12-
export * from '../shared/plain-text-selectors';
13-
export * from '../shared/utils/pretty';
14-
export * from './render';
12+
export * from "../shared/options";
13+
export * from "../shared/plain-text-selectors";
14+
export * from "../shared/utils/pretty";
15+
export * from "./render";
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* MessageChannel is not supported in Edge, but it's not needed to successfully render.
3+
* This polyfill is used to avoid errors when importing the package in an vercel edge and cf worker runtimes.
4+
*
5+
* @see https://github.com/resend/react-email/issues/1630#issuecomment-2773421899
6+
*
7+
* We can remove this once MessageChannel is supported on all runtimes.
8+
*/
9+
10+
if (typeof MessageChannel === "undefined") {
11+
class MockMessagePort {
12+
onmessage: ((ev: MessageEvent) => void) | undefined;
13+
onmessageerror: ((ev: MessageEvent) => void) | undefined;
14+
15+
close() {}
16+
postMessage(_message: unknown, _transfer: Transferable[] = []) {}
17+
start() {}
18+
addEventListener() {}
19+
removeEventListener() {}
20+
dispatchEvent(_event: Event): boolean {
21+
return false;
22+
}
23+
}
24+
25+
class MockMessageChannel {
26+
port1: MockMessagePort;
27+
port2: MockMessagePort;
28+
29+
constructor() {
30+
this.port1 = new MockMessagePort();
31+
this.port2 = new MockMessagePort();
32+
}
33+
}
34+
35+
globalThis.MessageChannel =
36+
MockMessageChannel as unknown as typeof MessageChannel;
37+
}

0 commit comments

Comments
 (0)