Skip to content

Commit 2651c66

Browse files
feat: remove known unnecessary devDependencies (#562)
## PR Checklist - [x] Addresses an existing open issue: fixes #561 - [x] That issue was marked as [`status: accepting prs`](https://github.com/JoshuaKGoldberg/template-typescript-node-package/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22) - [x] Steps in [CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/template-typescript-node-package/blob/main/.github/CONTRIBUTING.md) were taken ## Overview Adds a little utility to remove any not-allowed ones.
1 parent 5093661 commit 2651c66

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

src/hydrate/steps/writing/creation/writePackageJson.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ describe("writePackageJson", () => {
3232
);
3333
});
3434

35+
it("preserves existing devDependencies that aren't known to be unnecessary when they exist", async () => {
36+
const devDependencies = { abc: "1.2.3", jest: "4.5.6" };
37+
mockReadFileAsJson.mockResolvedValue({ devDependencies });
38+
39+
const packageJson = await writePackageJson(values);
40+
41+
expect(JSON.parse(packageJson)).toEqual(
42+
expect.objectContaining({ devDependencies })
43+
);
44+
});
45+
3546
it("includes a release script when releases is true", async () => {
3647
mockReadFileAsJson.mockResolvedValue({});
3748

src/hydrate/steps/writing/creation/writePackageJson.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,27 @@ import { readFileAsJson } from "../../../../shared/readFileAsJson.js";
22
import { HydrationInputValues } from "../../../values/types.js";
33
import { formatJson } from "./formatters/formatJson.js";
44

5+
const devDependenciesToRemove = [
6+
"@babel/core",
7+
"@babel/preset-env",
8+
"@babel/preset-react",
9+
"@babel/preset-typescript",
10+
"@swc/jest",
11+
"ava",
12+
"babel-jest",
13+
"commitlint",
14+
"cson-parser",
15+
"esbuild",
16+
"eslint-config-prettier",
17+
"eslint-plugin-prettier",
18+
"eslint-plugin-simple-import-sort",
19+
"jasmine",
20+
"jest",
21+
"mocha",
22+
"npm-run-all",
23+
"pretty-quick",
24+
];
25+
526
export async function writePackageJson({
627
author,
728
description,
@@ -20,12 +41,20 @@ export async function writePackageJson({
2041
| "repository"
2142
| "unitTests"
2243
>) {
44+
const existingPackageJson = (await readFileAsJson(
45+
"./package.json"
46+
)) as object;
47+
2348
return formatJson({
2449
// To start, copy over all existing package fields (e.g. "dependencies")
25-
...((await readFileAsJson("./package.json")) as object),
50+
...existingPackageJson,
2651

2752
author: { email, name: author },
2853
description,
54+
55+
// We copy all existing dev dependencies except those we know are not used anymore
56+
devDependencies: copyDevDependencies(existingPackageJson),
57+
2958
engines: {
3059
node: ">=18",
3160
},
@@ -71,3 +100,17 @@ export async function writePackageJson({
71100
types: undefined,
72101
});
73102
}
103+
104+
function copyDevDependencies(existingPackageJson: object) {
105+
const devDependencies =
106+
"devDependencies" in existingPackageJson
107+
? (existingPackageJson.devDependencies as Record<string, string>)
108+
: {};
109+
110+
for (const devDependencyToRemove of devDependenciesToRemove) {
111+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
112+
delete devDependencies[devDependencyToRemove];
113+
}
114+
115+
return devDependencies;
116+
}

0 commit comments

Comments
 (0)