Skip to content

Commit f31d162

Browse files
fix: make react-diff-viewer-continued optional in benchmark app
1 parent dbb5d55 commit f31d162

2 files changed

Lines changed: 36 additions & 2 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ pnpm benchmark
107107

108108
> If Playwright Chromium is missing, the script will auto-run `pnpm exec playwright install chromium` once.
109109
110+
> `react-diff-viewer-continued` is optional in the benchmark app. If missing locally, benchmark falls back to `react-diff-viewer` for that case.
111+
110112
Output files:
111113

112114
- `benchmark-results/results.json`

apps/benchmark/src/main.tsx

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom/client';
33
import ReactDiffViewer from 'react-diff-viewer';
4-
import ReactDiffViewerContinued from 'react-diff-viewer-continued';
54
import { Diff, Hunk, parseDiff } from 'react-diff-view';
65
import 'react-diff-view/style/index.css';
76
import { DiffViewer } from 'react-virtualized-diff';
@@ -23,13 +22,24 @@ type BenchmarkResult = {
2322
userAgent: string;
2423
};
2524

25+
type DiffViewerLikeProps = {
26+
oldValue: string;
27+
newValue: string;
28+
splitView: boolean;
29+
showDiffOnly: boolean;
30+
};
31+
32+
type DiffViewerLikeComponent = React.ComponentType<DiffViewerLikeProps>;
33+
2634
declare global {
2735
interface Window {
2836
__BENCHMARK_DONE__?: boolean;
2937
__BENCHMARK_RESULT__?: BenchmarkResult;
3038
}
3139
}
3240

41+
const CONTINUED_PKG = 'react-diff-viewer-continued';
42+
3343
const defaultParams: BenchmarkParams = {
3444
lib: 'virtualized-diff-viewer',
3545
lines: 1000,
@@ -97,6 +107,27 @@ function App() {
97107
const params = React.useMemo(parseParams, []);
98108
const containerRef = React.useRef<HTMLDivElement>(null);
99109
const [payload] = React.useState(() => generateTexts(params.lines));
110+
const [continuedViewer, setContinuedViewer] = React.useState<DiffViewerLikeComponent>(() => ReactDiffViewer);
111+
112+
React.useEffect(() => {
113+
let mounted = true;
114+
115+
import(/* @vite-ignore */ CONTINUED_PKG)
116+
.then((mod: unknown) => {
117+
if (!mounted) return;
118+
const loaded = ((mod as { default?: DiffViewerLikeComponent }).default ?? mod) as DiffViewerLikeComponent;
119+
if (loaded) {
120+
setContinuedViewer(() => loaded);
121+
}
122+
})
123+
.catch(() => {
124+
console.warn(`[benchmark] Optional dependency not found: ${CONTINUED_PKG}. Falling back to react-diff-viewer.`);
125+
});
126+
127+
return () => {
128+
mounted = false;
129+
};
130+
}, []);
100131

101132
React.useEffect(() => {
102133
const markDone = async () => {
@@ -158,8 +189,9 @@ function App() {
158189
/>
159190
);
160191
} else if (params.lib === 'react-diff-viewer-continued') {
192+
const ContinuedViewer = continuedViewer;
161193
viewer = (
162-
<ReactDiffViewerContinued
194+
<ContinuedViewer
163195
oldValue={payload.oldText}
164196
newValue={payload.newText}
165197
splitView

0 commit comments

Comments
 (0)