-
Notifications
You must be signed in to change notification settings - Fork 201
/
Copy pathcheck-leafygreen-dep-usage.js
48 lines (43 loc) · 1.71 KB
/
check-leafygreen-dep-usage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'use strict';
const {
collectWorkspacesMeta,
collectWorkspacesDependencies,
} = require('./workspace-dependencies');
const compassComponentsWorkspaceName = '@mongodb-js/compass-components';
// Checks if any package except "compass-components" try to require
// a `leafygreen-ui` or `emotion` dependency.
async function main() {
const workspaces = await collectWorkspacesMeta();
const dependencies = collectWorkspacesDependencies(workspaces);
const leafyGreenDependencies = [...dependencies].filter(
([depName]) =>
depName.includes('@leafygreen') || depName.includes('@emotion')
);
for (const [depName, versionsInUse] of leafyGreenDependencies) {
for (const dependencyEntry of versionsInUse)
if (
[
compassComponentsWorkspaceName,
// TODO: compass-shell requires @leafygreen-ui/code to be installed as
// a dependency until we change how browser-repl is bundled
// https://jira.mongodb.org/browse/COMPASS-5535
'@mongodb-js/compass-shell',
].includes(dependencyEntry.workspace) === false
) {
process.exitCode = 1;
console.error(
`The package "${dependencyEntry.workspace}" has the dependency "${depName}" in its ${dependencyEntry.type} dependencies.`
);
console.error(
`LeafyGreen and Emotion dependencies should be limited to the "${compassComponentsWorkspaceName}" workspace so that they can be more easily deduped and versions can be shared.`
);
console.error(`"${depName}": "${dependencyEntry.version}"`);
}
}
}
process.on('unhandledRejection', (err) => {
console.error();
console.error(err.stack || err.message || err);
process.exitCode = 1;
});
main();