diff --git a/microsite/package.json b/microsite/package.json
index 728cef0d96..fc3405c744 100644
--- a/microsite/package.json
+++ b/microsite/package.json
@@ -30,8 +30,8 @@
"docusaurus-pushfeedback": "^1.0.0",
"luxon": "^3.0.0",
"prism-react-renderer": "^2.1.0",
- "react": "^18.0.2",
- "react-dom": "^18.0.2",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0",
"sass": "^1.57.1",
"swc-loader": "^0.2.3"
},
diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json
index cbb8fc3592..6863f65a0c 100644
--- a/packages/core-compat-api/package.json
+++ b/packages/core-compat-api/package.json
@@ -33,7 +33,8 @@
"dependencies": {
"@backstage/core-plugin-api": "workspace:^",
"@backstage/frontend-plugin-api": "workspace:^",
- "@backstage/version-bridge": "workspace:^"
+ "@backstage/version-bridge": "workspace:^",
+ "lodash": "^4.17.21"
},
"devDependencies": {
"@backstage-community/plugin-puppetdb": "^0.1.18",
diff --git a/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.test.tsx b/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.test.tsx
index 8bfb228f53..c96ab67782 100644
--- a/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.test.tsx
+++ b/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.test.tsx
@@ -77,7 +77,8 @@ describe('', () => {
/^The above error occurred in the component:/,
),
expect.stringMatching(/^ErrorBoundary/),
+ expect.stringMatching(/Warning: findDOMNode/), // React warning, unfortunate but currently true
]);
- expect(error.length).toEqual(4);
+ expect(error.length).toEqual(5);
});
});
diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json
index ec5463642b..674556d144 100644
--- a/packages/frontend-app-api/package.json
+++ b/packages/frontend-app-api/package.json
@@ -40,17 +40,15 @@
"@backstage/frontend-plugin-api": "workspace:^",
"@backstage/types": "workspace:^",
"@backstage/version-bridge": "workspace:^",
- "@material-ui/core": "^4.12.4",
- "@material-ui/icons": "^4.11.3",
- "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"lodash": "^4.17.21",
"zod": "^3.22.4"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
+ "@backstage/plugin-app": "workspace:^",
"@backstage/test-utils": "workspace:^",
"@testing-library/jest-dom": "^6.0.0",
- "@testing-library/react": "^15.0.0",
+ "@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
diff --git a/packages/frontend-defaults/package.json b/packages/frontend-defaults/package.json
index 651b04258d..8f8abb0512 100644
--- a/packages/frontend-defaults/package.json
+++ b/packages/frontend-defaults/package.json
@@ -36,8 +36,7 @@
"@backstage/frontend-app-api": "workspace:^",
"@backstage/frontend-plugin-api": "workspace:^",
"@backstage/plugin-app": "workspace:^",
- "@react-hookz/web": "^24.0.0",
- "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0"
+ "@react-hookz/web": "^24.0.0"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
diff --git a/packages/repo-tools/src/commands/peer-deps/peer-deps.ts b/packages/repo-tools/src/commands/peer-deps/peer-deps.ts
index c433dd8581..70e566dd32 100644
--- a/packages/repo-tools/src/commands/peer-deps/peer-deps.ts
+++ b/packages/repo-tools/src/commands/peer-deps/peer-deps.ts
@@ -27,8 +27,8 @@ type ExtendedPackageJSON = Package['packageJson'] & {
const desiredLocalVersionsOfDependencies = {
'@types/react': '^18.0.0',
- react: '^18.0.0',
- 'react-dom': '^18.0.0',
+ react: '^18.0.2',
+ 'react-dom': '^18.0.2',
'react-router-dom': '^6.3.0',
};
@@ -55,6 +55,10 @@ const isDevDependency = (dep: string, packageJson: ExtendedPackageJSON) => {
return !!packageJson.devDependencies?.[dep];
};
+const isProdDependency = (dep: string, packageJson: ExtendedPackageJSON) => {
+ return !!packageJson.dependencies?.[dep];
+};
+
const isPeerDependency = (dep: string, packageJson: ExtendedPackageJSON) => {
return !!packageJson.peerDependencies?.[dep];
};
@@ -65,6 +69,16 @@ const isStandaloneApplication = (packageJson: ExtendedPackageJSON) => {
);
};
+const matchesDependency = (dep: string, packageJson: ExtendedPackageJSON) => {
+ return (
+ packageJson.devDependencies &&
+ packageJson.devDependencies[dep] ===
+ desiredLocalVersionsOfDependencies[
+ dep as keyof typeof desiredLocalVersionsOfDependencies
+ ]
+ );
+};
+
const matchesPeerDependency = (
dep: string,
packageJson: ExtendedPackageJSON,
@@ -138,12 +152,20 @@ export default async ({ fix }: { fix: boolean }) => {
`Peer dependency ${dep} in ${pkg.packageJson.name} is not listed as a devDependency`,
);
attemptToApplyFix(() => {
+ delete packageJson.dependencies?.[dep];
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies[dep] =
desiredLocalVersionsOfDependencies[
dep as keyof typeof desiredLocalVersionsOfDependencies
];
});
+ } else if (isProdDependency(dep, packageJson)) {
+ console.error(
+ `Peer dependency ${dep} in ${pkg.packageJson.name} is listed as a dependency`,
+ );
+ attemptToApplyFix(() => {
+ delete packageJson.dependencies?.[dep];
+ });
}
const groups = groupsOfPeerDependencies.filter(group =>
@@ -167,6 +189,19 @@ export default async ({ fix }: { fix: boolean }) => {
}
}
+ if (!matchesDependency(dep, packageJson)) {
+ console.error(
+ `Incorrect dependency ${dep} in ${pkg.packageJson.name}`,
+ );
+ attemptToApplyFix(() => {
+ packageJson.devDependencies = packageJson.devDependencies || {};
+ packageJson.devDependencies[dep] =
+ desiredLocalVersionsOfDependencies[
+ dep as keyof typeof desiredLocalVersionsOfDependencies
+ ];
+ });
+ }
+
if (!matchesPeerDependency(dep, packageJson)) {
console.error(
`Incorrect peer dependency ${dep} in ${pkg.packageJson.name}`,
diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json
index 00baa817d6..249ec2f062 100644
--- a/packages/techdocs-cli-embedded-app/package.json
+++ b/packages/techdocs-cli-embedded-app/package.json
@@ -59,8 +59,8 @@
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.0.0",
- "@types/react": "^18.0.0",
- "@types/react-dom": "^18.0.0",
+ "@types/react": "*",
+ "@types/react-dom": "*",
"cross-env": "^7.0.0"
},
"bundled": true
diff --git a/packages/version-bridge/package.json b/packages/version-bridge/package.json
index aea9d122bf..b7aaab34f8 100644
--- a/packages/version-bridge/package.json
+++ b/packages/version-bridge/package.json
@@ -35,6 +35,7 @@
"start": "backstage-cli package start",
"test": "backstage-cli package test"
},
+ "dependencies": {},
"devDependencies": {
"@backstage/cli": "workspace:^",
"@testing-library/jest-dom": "^6.0.0",
diff --git a/plugins/app/package.json b/plugins/app/package.json
index 14854539b0..ed33051043 100644
--- a/plugins/app/package.json
+++ b/plugins/app/package.json
@@ -45,7 +45,6 @@
"@material-ui/core": "^4.9.13",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "^4.0.0-alpha.61",
- "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react-use": "^17.2.4"
},
"devDependencies": {
@@ -57,8 +56,8 @@
"@testing-library/user-event": "^14.0.0",
"@types/react": "^18.0.0",
"msw": "^1.0.0",
- "react": "^^18.0.0",
- "react-dom": "^18.0.0",
+ "react": "^18.0.2",
+ "react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json
index f28b4d248a..b8ef59db90 100644
--- a/plugins/kubernetes/package.json
+++ b/plugins/kubernetes/package.json
@@ -92,7 +92,6 @@
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
- "@testing-library/react": "^16.0.0",
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
diff --git a/plugins/scaffolder-node-test-utils/package.json b/plugins/scaffolder-node-test-utils/package.json
index dc71447bd9..a372dbc317 100644
--- a/plugins/scaffolder-node-test-utils/package.json
+++ b/plugins/scaffolder-node-test-utils/package.json
@@ -46,6 +46,21 @@
"@backstage/types": "workspace:^"
},
"devDependencies": {
- "@backstage/cli": "workspace:^"
+ "@backstage/cli": "workspace:^",
+ "@types/react": "^18.0.0",
+ "react": "^18.0.2",
+ "react-dom": "^18.0.2",
+ "react-router-dom": "^6.3.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+ "react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
+ "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
}
diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json
index 86a491ab24..8fe9b71c1c 100644
--- a/plugins/techdocs/package.json
+++ b/plugins/techdocs/package.json
@@ -98,7 +98,6 @@
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.0.0",
"@types/dompurify": "^3.0.0",
- "@types/event-source-polyfill": "^1.0.0",
"@types/react": "^18.0.0",
"canvas": "^2.10.2",
"react": "^18.0.2",