Skip to content

Commit 200db55

Browse files
Update react-email plugin for react-email@6 (#1694)
1 parent af83d68 commit 200db55

5 files changed

Lines changed: 46 additions & 2 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const Welcome = () => 'Welcome!';
2+
export default Welcome;

packages/knip/fixtures/plugins/react-email-v6/node_modules/react-email/package.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "@plugins/react-email-v6",
3+
"dependencies": {
4+
"react-email": "^6.0.0"
5+
},
6+
"devDependencies": {
7+
"@react-email/ui": "^6.0.0"
8+
},
9+
"scripts": {
10+
"dev": "email dev --dir ./dev-dir"
11+
}
12+
}

packages/knip/src/plugins/react-email/index.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
import { readFileSync } from 'node:fs';
12
import type { Args } from '../../types/args.ts';
23
import type { IsPluginEnabled, Plugin } from '../../types/config.ts';
4+
import type { PackageJson } from '../../types/package-json.ts';
35
import { toDependency, toEntry } from '../../util/input.ts';
6+
import { join } from '../../util/path.ts';
47
import { hasDependency } from '../../util/plugin.ts';
58

69
// https://react.email/docs/cli
@@ -15,11 +18,21 @@ const entry = ['emails/**/*.tsx'];
1518

1619
const previewCommands = new Set(['build', 'dev', 'start']);
1720

21+
const getPreviewDependency = (cwd: string): string => {
22+
try {
23+
const manifest: PackageJson = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
24+
const range = manifest.dependencies?.['react-email'] ?? manifest.devDependencies?.['react-email'];
25+
const major = range?.match(/\d+/)?.[0];
26+
if (major && Number.parseInt(major, 10) >= 6) return '@react-email/ui';
27+
} catch {}
28+
return '@react-email/preview-server';
29+
};
30+
1831
const args: Args = {
1932
binaries: ['email'],
20-
resolveInputs: parsed => {
33+
resolveInputs: (parsed, { cwd }) => {
2134
const inputs = [];
22-
if (previewCommands.has(parsed._[0])) inputs.push(toDependency('@react-email/preview-server'));
35+
if (previewCommands.has(parsed._[0])) inputs.push(toDependency(getPreviewDependency(cwd)));
2336
if (parsed.dir) inputs.push(toEntry(`${parsed.dir}/**/*.tsx`));
2437
return inputs;
2538
},

packages/knip/test/plugins/react-email.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,14 @@ test('Find dependencies with the react-email plugin', async () => {
1717
total: 4,
1818
});
1919
});
20+
21+
test('Find dependencies with the react-email plugin (v6)', async () => {
22+
const options = await createOptions({ cwd: resolve('fixtures/plugins/react-email-v6') });
23+
const { counters } = await main(options);
24+
25+
assert.deepEqual(counters, {
26+
...baseCounters,
27+
processed: 1,
28+
total: 1,
29+
});
30+
});

0 commit comments

Comments
 (0)