add linting for peer deps

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
This commit is contained in:
aramissennyeydd
2024-06-19 00:11:02 -04:00
parent 6bc061b0ff
commit 264f537977
51 changed files with 774 additions and 109 deletions
+3
View File
@@ -90,6 +90,9 @@ jobs:
- name: verify local dependency ranges
run: node scripts/verify-local-dependencies.js
- name: verify peer dependency ranges
run: yarn lint:peer-deps
- name: check for missing repo fixes
run: yarn fix --check
+1
View File
@@ -31,6 +31,7 @@
"lint": "backstage-cli repo lint --since origin/master",
"lint:all": "backstage-cli repo lint",
"lint:docs": "node ./scripts/check-docs-quality",
"lint:peer-deps": "backstage-repo-tools peer-deps",
"lint:type-deps": "backstage-repo-tools type-deps",
"new": "backstage-cli new --scope backstage --baseVersion 0.0.0 --no-private",
"prepare": "husky",
+2 -1
View File
@@ -51,7 +51,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+11 -1
View File
@@ -47,12 +47,22 @@
},
"devDependencies": {
"@backstage/cli": "workspace:^",
"@types/react": "^18.0.0",
"cross-fetch": "^4.0.0",
"msw": "^1.0.0"
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"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
}
}
}
+4 -3
View File
@@ -51,13 +51,10 @@
"@backstage/types": "workspace:^",
"@backstage/version-bridge": "workspace:^",
"@types/prop-types": "^15.7.3",
"@types/react": "^18.0.0",
"history": "^5.0.0",
"i18next": "^22.4.15",
"lodash": "^4.17.21",
"prop-types": "^15.7.2",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-use": "^17.2.4",
"zen-observable": "^0.10.0",
"zod": "^3.22.4"
@@ -70,9 +67,13 @@
"@testing-library/react": "^16.0.0",
"@testing-library/react-hooks": "^8.0.0",
"@testing-library/user-event": "^14.0.0",
"@types/react": "^18.0.0",
"@types/zen-observable": "^0.8.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-beta": "npm:react-router@6.0.0-beta.0",
"react-router-dom": "^6.3.0",
"react-router-dom-beta": "npm:react-router-dom@6.0.0-beta.0",
"react-router-dom-stable": "npm:react-router-dom@^6.3.0",
"react-router-stable": "npm:react-router@^6.3.0"
+4 -2
View File
@@ -48,14 +48,16 @@
"@oriflame/backstage-plugin-score-card": "^0.8.0",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^16.0.0",
"zod": "^3.22.4",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0",
"zod": "^3.22.4"
},
"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": {
+2 -1
View File
@@ -117,7 +117,8 @@
"history": "^5.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -65,7 +65,8 @@
"@testing-library/user-event": "^14.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+1
View File
@@ -58,6 +58,7 @@
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0",
"zen-observable": "^0.10.0"
},
"peerDependencies": {
+5 -4
View File
@@ -40,11 +40,11 @@
"@backstage/frontend-plugin-api": "workspace:^",
"@backstage/types": "workspace:^",
"@backstage/version-bridge": "workspace:^",
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"zod": "^3.22.4",
"@material-ui/core": "^4.12.4",
"@material-ui/icons": "^4.11.3",
"lodash": "^4.17.21"
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"lodash": "^4.17.21",
"zod": "^3.22.4"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
@@ -53,7 +53,8 @@
"@testing-library/react": "^15.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+3 -1
View File
@@ -50,11 +50,13 @@
"@types/react": "^18.0.0",
"history": "^5.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"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": {
+3 -1
View File
@@ -45,12 +45,14 @@
"@testing-library/jest-dom": "^6.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"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",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
},
"peerDependenciesMeta": {
+2 -1
View File
@@ -49,7 +49,8 @@
"@types/react": "^18.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
@@ -224,6 +224,14 @@ export function registerCommands(program: Command) {
.description('Find inconsistencies in types of all packages and plugins')
.action(lazy(() => import('./type-deps/type-deps').then(m => m.default)));
program
.command('peer-deps')
.description(
'Ensure your packages are using the correct peer dependency format.',
)
.option('--fix', 'Fix the issues found')
.action(lazy(() => import('./peer-deps/peer-deps').then(m => m.default)));
program
.command('generate-catalog-info')
.option(
@@ -0,0 +1,203 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { resolve as resolvePath } from 'path';
import { getPackages, Package } from '@manypkg/get-packages';
import { writeFileSync } from 'fs';
type ExtendedPackageJSON = Package['packageJson'] & {
peerDependenciesMeta?: Record<string, { optional?: boolean }>;
backstage?: {
role: string;
};
};
const desiredLocalVersionsOfDependencies = {
'@types/react': '^18.0.0',
react: '^18.0.0',
'react-dom': '^18.0.0',
'react-router-dom': '^6.3.0',
};
const 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',
};
const groupsOfPeerDependencies = [['@types/react', 'react', 'react-dom']];
const optionalPeerDependencies = new Set(['@types/react']);
const isOptional = (dep: string) => {
return optionalPeerDependencies.has(dep);
};
const isMarkedAsOptional = (dep: string, packageJson: ExtendedPackageJSON) => {
return packageJson.peerDependenciesMeta?.[dep]?.optional;
};
const isDevDependency = (dep: string, packageJson: ExtendedPackageJSON) => {
return !!packageJson.devDependencies?.[dep];
};
const isPeerDependency = (dep: string, packageJson: ExtendedPackageJSON) => {
return !!packageJson.peerDependencies?.[dep];
};
const isStandaloneApplication = (packageJson: ExtendedPackageJSON) => {
return ['cli', 'frontend', 'backend'].includes(
packageJson.backstage?.role || '',
);
};
const matchesPeerDependency = (
dep: string,
packageJson: ExtendedPackageJSON,
) => {
return (
packageJson.peerDependencies &&
packageJson.peerDependencies[dep] ===
peerDependencies[dep as keyof typeof peerDependencies]
);
};
export default async ({ fix }: { fix: boolean }) => {
let failed = false;
const attemptToApplyFix = (fn: () => void) => {
if (fix) {
fn();
} else {
failed = true;
}
};
const { packages } = await getPackages(resolvePath('.'));
const packagesWithRelevantDependencies = [];
for (const pkg of packages) {
if (isStandaloneApplication(pkg.packageJson as ExtendedPackageJSON)) {
// Standalone applications are not expected to have peer dependencies.
continue;
}
const dependencies = {
...pkg.packageJson.dependencies,
...pkg.packageJson.devDependencies,
...pkg.packageJson.peerDependencies,
};
for (const dep in peerDependencies) {
// Check against all packages that use dependencies that are in the peerDependencies list.
if (dependencies?.[dep]) {
packagesWithRelevantDependencies.push(pkg);
break;
}
}
}
for (const pkg of packagesWithRelevantDependencies) {
const packageJson = pkg.packageJson as ExtendedPackageJSON;
for (const dep of Object.keys(peerDependencies)) {
// Validate that the peer dependencies are present.
if (isPeerDependency(dep, packageJson)) {
if (isOptional(dep) && !isMarkedAsOptional(dep, packageJson)) {
console.error(
`Optional peer dependency ${dep} in ${pkg.packageJson.name} is not marked as optional`,
);
attemptToApplyFix(() => {
packageJson.peerDependenciesMeta =
packageJson.peerDependenciesMeta || {};
packageJson.peerDependenciesMeta[dep] = { optional: true };
});
} else if (!isOptional(dep) && isMarkedAsOptional(dep, packageJson)) {
console.error(
`Peer dependency ${dep} in ${pkg.packageJson.name} is marked as optional but should not be`,
);
attemptToApplyFix(() => {
packageJson.peerDependenciesMeta =
packageJson.peerDependenciesMeta || {};
delete packageJson.peerDependenciesMeta[dep];
});
}
if (!isDevDependency(dep, packageJson)) {
console.error(
`Peer dependency ${dep} in ${pkg.packageJson.name} is not listed as a devDependency`,
);
attemptToApplyFix(() => {
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies[dep] =
desiredLocalVersionsOfDependencies[
dep as keyof typeof desiredLocalVersionsOfDependencies
];
});
}
const groups = groupsOfPeerDependencies.filter(group =>
group.includes(dep),
);
if (groups.length) {
for (const group of groups) {
for (const groupDep of group) {
if (!isPeerDependency(groupDep, packageJson)) {
console.error(
`Peer dependency ${groupDep} in ${pkg.packageJson.name} is missing`,
);
attemptToApplyFix(() => {
packageJson.peerDependencies =
packageJson.peerDependencies || {};
packageJson.peerDependencies[groupDep] =
peerDependencies[groupDep as keyof typeof peerDependencies];
});
}
}
}
}
if (!matchesPeerDependency(dep, packageJson)) {
console.error(
`Incorrect peer dependency ${dep} in ${pkg.packageJson.name}`,
);
attemptToApplyFix(() => {
packageJson.peerDependencies = packageJson.peerDependencies || {};
packageJson.peerDependencies[dep] =
peerDependencies[dep as keyof typeof peerDependencies];
});
}
} else {
console.error(
`Missing peer dependency ${dep} in ${pkg.packageJson.name}`,
);
attemptToApplyFix(() => {
packageJson.peerDependencies = packageJson.peerDependencies || {};
packageJson.peerDependencies[dep] =
peerDependencies[dep as keyof typeof peerDependencies];
});
}
}
if (fix) {
writeFileSync(
resolvePath(pkg.dir, 'package.json'),
JSON.stringify(packageJson, null, 4),
);
}
}
if (failed) {
console.error('Some packages have incorrect peer dependencies');
process.exit(1);
}
};
+2 -1
View File
@@ -68,7 +68,8 @@
"@types/react": "^18.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@testing-library/react": "^16.0.0",
+4 -2
View File
@@ -47,13 +47,15 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@material-ui/core": "^4.12.2",
"@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-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -1
View File
@@ -41,7 +41,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
@@ -44,7 +44,8 @@
"@testing-library/jest-dom": "^6.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -87,7 +87,8 @@
"@types/react": "^18.0.0",
"@types/swagger-ui-react": "^4.18.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -44,7 +44,8 @@
"@backstage/cli": "workspace:^",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+5 -2
View File
@@ -53,11 +53,14 @@
"@types/react": "^18.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"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": "^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": {
+2 -1
View File
@@ -78,7 +78,8 @@
"@testing-library/user-event": "^14.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -90,7 +90,8 @@
"@types/react": "^18.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+1
View File
@@ -97,6 +97,7 @@
"@types/zen-observable": "^0.8.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0",
"react-test-renderer": "^16.13.1"
},
"peerDependencies": {
@@ -54,7 +54,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+1
View File
@@ -100,6 +100,7 @@
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0",
"swr": "^2.2.5"
},
"peerDependencies": {
+2 -1
View File
@@ -56,7 +56,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -70,7 +70,8 @@
"@testing-library/jest-dom": "^6.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -52,7 +52,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -53,7 +53,8 @@
"@types/react": "^18.0.0",
"@types/react-grid-layout": "^1.3.2",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -92,7 +92,8 @@
"@types/react": "^18.0.0",
"@types/react-grid-layout": "^1.3.2",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -67,7 +67,8 @@
"@types/node": "^16.11.26",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+5 -2
View File
@@ -73,11 +73,14 @@
"jest-websocket-mock": "^2.5.0",
"msw": "^1.3.1",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"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": "^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": {
+4 -3
View File
@@ -88,14 +88,15 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"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",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0",
"@testing-library/react": "^16.0.0",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
},
"peerDependenciesMeta": {
"@types/react": {
+4 -2
View File
@@ -66,11 +66,13 @@
"@types/react": "^18.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"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",
"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": {
+2 -1
View File
@@ -60,7 +60,8 @@
"@testing-library/user-event": "^14.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -83,7 +83,8 @@
"@testing-library/user-event": "^14.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -54,7 +54,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+1
View File
@@ -109,6 +109,7 @@
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0",
"swr": "^2.0.0"
},
"peerDependencies": {
+2 -1
View File
@@ -117,12 +117,13 @@
"@testing-library/user-event": "^14.0.0",
"@types/humanize-duration": "^3.18.1",
"@types/json-schema": "^7.0.9",
"@types/react": "^18.0.0",
"@types/react-resizable": "^3.0.8",
"@types/react-window": "^1.8.8",
"@types/react": "^18.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0",
"swr": "^2.0.0"
},
"peerDependencies": {
+2 -1
View File
@@ -82,7 +82,8 @@
"@testing-library/user-event": "^14.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -85,7 +85,8 @@
"@types/react": "^18.0.0",
"history": "^5.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+14 -2
View File
@@ -47,9 +47,21 @@
"@backstage/cli": "workspace:^",
"@backstage/test-utils": "workspace:^",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^16.0.0"
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"react": "^16.13.1 || ^17.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",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
}
+14 -2
View File
@@ -57,10 +57,22 @@
"@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",
"jest-websocket-mock": "^2.5.0",
"msw": "^1.0.0"
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"react": "^16.13.1 || ^17.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",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
}
@@ -57,7 +57,8 @@
"@testing-library/jest-dom": "^6.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@testing-library/react": "^16.0.0",
@@ -59,7 +59,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -65,7 +65,8 @@
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -102,7 +102,8 @@
"@types/react": "^18.0.0",
"canvas": "^2.10.2",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+2 -1
View File
@@ -84,7 +84,8 @@
"@types/react": "^18.0.0",
"msw": "^1.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
"react-dom": "^18.0.0",
"react-router-dom": "^6.3.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
+417 -53
View File
File diff suppressed because it is too large Load Diff