Skip to content

Commit 9d39c5c

Browse files
authored
chore(preview-server): use unformatted markup for sending and preview (#2394)
1 parent 00aa805 commit 9d39c5c

File tree

4 files changed

+26
-18
lines changed

4 files changed

+26
-18
lines changed

packages/preview-server/src/actions/render-email-by-path.tsx

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { registerSpinnerAutostopping } from '../utils/register-spinner-autostopp
1717
import type { ErrorObject } from '../utils/types/error-object';
1818

1919
export interface RenderedEmailMetadata {
20+
prettyMarkup: string;
2021
markup: string;
2122
/**
2223
* HTML markup with `data-source-file` and `data-source-line` attributes pointing to the original
@@ -85,15 +86,21 @@ export const renderEmailByPath = async (
8586
const EmailComponent = Email as React.FC;
8687
try {
8788
const element = createElement(EmailComponent, previewProps);
88-
const markupWithReferences = await renderWithReferences(element, {
89-
pretty: true,
90-
});
91-
const markup = await render(element, {
92-
pretty: true,
93-
});
94-
const plainText = await render(element, {
95-
plainText: true,
96-
});
89+
const [markupWithReferences, prettyMarkup, markup, plainText] =
90+
await Promise.all([
91+
renderWithReferences(element, {
92+
pretty: true,
93+
}),
94+
render(element, {
95+
pretty: true,
96+
}),
97+
render(element, {
98+
pretty: false,
99+
}),
100+
render(element, {
101+
plainText: true,
102+
}),
103+
]);
97104

98105
const reactMarkup = await fs.promises.readFile(emailPath, 'utf-8');
99106

@@ -112,6 +119,7 @@ export const renderEmailByPath = async (
112119
});
113120

114121
const renderingResult: RenderedEmailMetadata = {
122+
prettyMarkup,
115123
// This ensures that no null byte character ends up in the rendered
116124
// markup making users suspect of any issues. These null byte characters
117125
// only seem to happen with React 18, as it has no similar incident with React 19.

packages/preview-server/src/app/preview/[...slug]/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ This is most likely not an issue with the preview server. Maybe there was a typo
7171
});
7272
}
7373
const lintingSources = getLintingSources(
74-
serverEmailRenderingResult.markup,
74+
serverEmailRenderingResult.prettyMarkup,
7575
'',
7676
);
7777
lintingRows = [];
@@ -103,7 +103,7 @@ This is most likely not an issue with the preview server. Maybe there was a typo
103103
method: 'POST',
104104
headers: { 'Content-Type': 'application/json' },
105105
body: JSON.stringify({
106-
html: serverEmailRenderingResult.markup,
106+
html: serverEmailRenderingResult.prettyMarkup,
107107
plainText: serverEmailRenderingResult.plainText,
108108
}),
109109
});

packages/preview-server/src/app/preview/[...slug]/preview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ const Preview = ({ emailTitle, className, ...props }: PreviewProps) => {
191191
},
192192
{
193193
language: 'markup',
194-
content: renderedEmailMetadata.markup,
194+
content: renderedEmailMetadata.prettyMarkup,
195195
},
196196
{
197197
language: 'markdown',

packages/preview-server/src/components/toolbar.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ const ToolbarInner = ({
4141
serverSpamCheckingResult,
4242
serverCompatibilityResults,
4343

44-
markup,
44+
prettyMarkup,
4545
reactMarkup,
4646
plainText,
4747
emailPath,
4848
emailSlug,
4949
}: ToolbarProps & {
50-
markup: string;
50+
prettyMarkup: string;
5151
reactMarkup: string;
5252
plainText: string;
5353
emailSlug: string;
@@ -75,7 +75,7 @@ const ToolbarInner = ({
7575
);
7676
const [spamCheckingResult, { load: loadSpamChecking, loading: spamLoading }] =
7777
useSpamAssassin({
78-
markup,
78+
markup: prettyMarkup,
7979
plainText,
8080

8181
initialResult: serverSpamCheckingResult ?? cachedSpamCheckingResult,
@@ -85,7 +85,7 @@ const ToolbarInner = ({
8585
LintingRow[]
8686
>(`linter-${emailSlug.replaceAll('/', '-')}`);
8787
const [lintingRows, { load: loadLinting, loading: lintLoading }] = useLinter({
88-
markup,
88+
markup: prettyMarkup,
8989

9090
initialRows: serverLintingRows ?? cachedLintingRows,
9191
});
@@ -336,13 +336,13 @@ export const Toolbar = ({
336336
React.use(PreviewContext)!;
337337

338338
if (renderedEmailMetadata === undefined) return null;
339-
const { markup, plainText, reactMarkup } = renderedEmailMetadata;
339+
const { prettyMarkup, plainText, reactMarkup } = renderedEmailMetadata;
340340

341341
return (
342342
<ToolbarInner
343343
emailPath={emailPath}
344344
emailSlug={emailSlug}
345-
markup={markup}
345+
prettyMarkup={prettyMarkup}
346346
reactMarkup={reactMarkup}
347347
plainText={plainText}
348348
serverLintingRows={serverLintingRows}

0 commit comments

Comments
 (0)