Skip to content

Commit

Permalink
chore: remove empty properties in blockPackageJson (#1801)
Browse files Browse the repository at this point in the history
## PR Checklist

- [x] Addresses an existing open issue: fixes #1802
- [x] That issue was marked as [`status: accepting
prs`](https://github.com/JoshuaKGoldberg/create-typescript-app/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22)
- [x] Steps in
[CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/.github/CONTRIBUTING.md)
were taken

## Overview

Uses the convenient
[`remove-undefined-objects`](https://www.npmjs.com/package/remove-undefined-objects).

💖
  • Loading branch information
JoshuaKGoldberg authored Dec 24, 2024
1 parent 3b082a9 commit 6e43554
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 45 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
"parse-package-name": "^1.0.0",
"populate-all-contributors-for-repository": "^0.1.2",
"prettier": "^3.4.2",
"remove-undefined-objects": "^5.0.0",
"replace-in-file": "^8.3.0",
"rimraf": "^6.0.1",
"set-github-repository-labels": "^0.1.0",
Expand Down
9 changes: 9 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 39 additions & 4 deletions src/next/blocks/blockPackageJson.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ describe("blockPackageJson", () => {
expect(creation).toMatchInlineSnapshot(`
{
"files": {
"package.json": "{"name":"test-repository","version":"0.0.0","description":"Test description","repository":{"type":"git","url":"https://github.com/test-owner/test-repository"},"license":"MIT","author":{"email":"[email protected]"},"type":"module","main":"./lib/index.js","files":["README.md","package.json"],"scripts":{},"dependencies":{},"devDependencies":{}}",
"package.json": "{"name":"test-repository","version":"0.0.0","description":"Test description","repository":{"type":"git","url":"https://github.com/test-owner/test-repository"},"license":"MIT","author":{"email":"[email protected]"},"type":"module","main":"./lib/index.js","files":["README.md","package.json"]}",
},
"scripts": [
{
Expand All @@ -36,7 +36,7 @@ describe("blockPackageJson", () => {
expect(creation).toMatchInlineSnapshot(`
{
"files": {
"package.json": "{"name":"test-repository","version":"0.0.0","description":"Test description","repository":{"type":"git","url":"https://github.com/test-owner/test-repository"},"license":"MIT","author":{"email":"[email protected]"},"type":"module","main":"./lib/index.js","files":["README.md","package.json"],"scripts":{},"dependencies":{},"devDependencies":{}}",
"package.json": "{"name":"test-repository","version":"0.0.0","description":"Test description","repository":{"type":"git","url":"https://github.com/test-owner/test-repository"},"license":"MIT","author":{"email":"[email protected]"},"type":"module","main":"./lib/index.js","files":["README.md","package.json"]}",
},
"scripts": [
{
Expand All @@ -62,7 +62,7 @@ describe("blockPackageJson", () => {
cleanupCommands: ["pnpm dedupe"],
properties: {
dependencies: {
"is-odd": "3.0.1",
"is-odd": "1.2.3",
},
other: true,
},
Expand All @@ -73,7 +73,42 @@ describe("blockPackageJson", () => {
expect(creation).toMatchInlineSnapshot(`
{
"files": {
"package.json": "{"name":"test-repository","version":"0.0.0","description":"Test description","repository":{"type":"git","url":"https://github.com/test-owner/test-repository"},"license":"MIT","author":{"email":"[email protected]"},"type":"module","main":"./lib/index.js","files":["README.md","package.json"],"scripts":{},"dependencies":{"is-odd":"3.0.1"},"devDependencies":{},"other":true}",
"package.json": "{"name":"test-repository","version":"0.0.0","description":"Test description","repository":{"type":"git","url":"https://github.com/test-owner/test-repository"},"license":"MIT","author":{"email":"[email protected]"},"type":"module","main":"./lib/index.js","files":["README.md","package.json"],"dependencies":{"is-odd":"1.2.3"},"other":true}",
},
"scripts": [
{
"commands": [
"pnpm install",
"pnpm dedupe",
],
"phase": 1,
},
],
}
`);
});

test("with addons adding devDependencies", () => {
const creation = testBlock(blockPackageJson, {
addons: {
cleanupCommands: ["pnpm dedupe"],
properties: {
dependencies: {
"is-odd": "1.2.3",
},
devDependencies: {
"is-even": "4.5.6",
},
other: true,
},
},
options: optionsBase,
});

expect(creation).toMatchInlineSnapshot(`
{
"files": {
"package.json": "{"name":"test-repository","version":"0.0.0","description":"Test description","repository":{"type":"git","url":"https://github.com/test-owner/test-repository"},"license":"MIT","author":{"email":"[email protected]"},"type":"module","main":"./lib/index.js","files":["README.md","package.json"],"dependencies":{"is-odd":"1.2.3"},"devDependencies":{"is-even":"4.5.6"},"other":true}",
},
"scripts": [
{
Expand Down
92 changes: 51 additions & 41 deletions src/next/blocks/blockPackageJson.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import removeUndefinedObjects from "remove-undefined-objects";
import sortPackageJson from "sort-package-json";
import { z } from "zod";

Expand Down Expand Up @@ -35,52 +36,61 @@ export const blockPackageJson = base.createBlock({
};
},
produce({ addons, options }) {
const dependencies = {
...options.packageData?.dependencies,
...addons.properties.dependencies,
};
const devDependencies = {
...options.packageData?.devDependencies,
...addons.properties.devDependencies,
};

return {
files: {
"package.json": sortPackageJson(
JSON.stringify({
...addons.properties,
author: { email: options.email.npm, name: options.author },
bin: options.bin,
dependencies: {
...options.packageData?.dependencies,
...addons.properties.dependencies,
},
description: options.description,
devDependencies: {
...options.packageData?.devDependencies,
...addons.properties.devDependencies,
},
...(options.node && {
engines: {
node: `>=${options.node.minimum}`,
JSON.stringify(
removeUndefinedObjects({
...addons.properties,
author: { email: options.email.npm, name: options.author },
bin: options.bin,
dependencies: Object.keys(dependencies).length
? dependencies
: undefined,
description: options.description,
devDependencies: Object.keys(devDependencies).length
? devDependencies
: undefined,
...(options.node && {
engines: {
node: `>=${options.node.minimum}`,
},
}),
files: [
options.bin?.replace(/^\.\//, ""),
...(addons.properties.files ?? []),
"package.json",
"README.md",
]
.filter(Boolean)
.sort(),
keywords: options.keywords?.flatMap((keyword) =>
keyword.split(/ /),
),
license: "MIT",
main: "./lib/index.js",
name: options.repository,
repository: {
type: "git",
url: `https://github.com/${options.owner}/${options.repository}`,
},
scripts: {
...options.packageData?.scripts,
...addons.properties.scripts,
},
type: "module",
version: options.version ?? "0.0.0",
}),
files: [
options.bin?.replace(/^\.\//, ""),
...(addons.properties.files ?? []),
"package.json",
"README.md",
]
.filter(Boolean)
.sort(),
keywords: options.keywords?.flatMap((keyword) =>
keyword.split(/ /),
),
license: "MIT",
main: "./lib/index.js",
name: options.repository,
repository: {
type: "git",
url: `https://github.com/${options.owner}/${options.repository}`,
},
scripts: {
...options.packageData?.scripts,
...addons.properties.scripts,
},
type: "module",
version: options.version ?? "0.0.0",
}),
),
),
},
scripts: [
Expand Down
1 change: 1 addition & 0 deletions src/steps/uninstallPackages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export async function uninstallPackages(offline: boolean | undefined) {
"parse-package-name",
"populate-all-contributors-for-repository",
"prettier",
"remove-undefined-objects",
"replace-in-file",
"rimraf",
"set-github-repository-labels",
Expand Down
1 change: 1 addition & 0 deletions src/steps/writing/creation/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ describe("createStructure", () => {
"parse-package-name",
"populate-all-contributors-for-repository",
"prettier",
"remove-undefined-objects",
"replace-in-file",
"rimraf",
"set-github-repository-labels",
Expand Down

0 comments on commit 6e43554

Please sign in to comment.