From d8a23914e2c75e6da67706d6e3b52fd8b7583f80 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Mon, 22 Apr 2024 14:31:32 +0200 Subject: [PATCH] feat: Move `@types/react-dom` to peer dependencies Type dependencies need to match their runtime counterpart. If `foo` is a dependency, `@types/foo` needs to be one as well. If `foo` is a peer dependency, `@types/foo` needs to be one as well. This is especially apparent if the constraint on `foo` spans multiple major versions. If we'd make `@types/foo` a direct dependency, users couldn't control which major version they get. Package managers would pick the highest. By moving `@types/foo` to peer dependencies, users can control which version of `foo` and `@types/foo` they have. --- package.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9483256a..94a76fbc 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,10 @@ "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^10.0.0", - "@types/react-dom": "^18.0.0" + "@testing-library/dom": "^10.0.0" }, "devDependencies": { + "@types/react-dom": "^18.2.25", "@testing-library/jest-dom": "^5.11.6", "chalk": "^4.1.2", "dotenv-cli": "^4.0.0", @@ -62,9 +62,15 @@ "typescript": "^4.1.2" }, "peerDependencies": { + "@types/react-dom": "^18.0.0", "react": "^18.0.0", "react-dom": "^18.0.0" }, + "peerDependenciesMeta": { + "@types/react-dom": { + "optional": true + } + }, "eslintConfig": { "extends": "./node_modules/kcd-scripts/eslint.js", "parserOptions": {