@theia/cli 1.29.0-next.9 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ interface CheckDependenciesOptions {
2
+ workspaces: string[] | undefined;
3
+ include: string[];
4
+ exclude: string[];
5
+ skipHoisted: boolean;
6
+ skipUniqueness: boolean;
7
+ skipSingleTheiaVersion: boolean;
8
+ suppress: boolean;
9
+ }
10
+ export default function checkDependencies(options: CheckDependenciesOptions): void;
11
+ export {};
12
+ //# sourceMappingURL=check-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-dependencies.d.ts","sourceRoot":"","sources":["../src/check-dependencies.ts"],"names":[],"mappings":"AA2BA,UAAU,wBAAwB;IAC9B,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAA;CACpB;AA4BD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAmBjF"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2022 STMicroelectronics and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const fs = require("fs");
19
+ const path = require("path");
20
+ const glob_1 = require("glob");
21
+ const log_update_1 = require("log-update");
22
+ const chalk = require("chalk");
23
+ const NODE_MODULES = 'node_modules';
24
+ const PACKAGE_JSON = 'package.json';
25
+ const logUpdate = (0, log_update_1.create)(process.stdout);
26
+ function checkDependencies(options) {
27
+ const workspaces = deriveWorkspaces(options);
28
+ logUpdate(`✅ Found ${workspaces.length} workspaces`);
29
+ console.log('🔍 Collecting dependencies...');
30
+ const dependencies = findAllDependencies(workspaces, options);
31
+ logUpdate(`✅ Found ${dependencies.length} dependencies`);
32
+ console.log('🔍 Analyzing dependencies...');
33
+ const issues = analyzeDependencies(dependencies, options);
34
+ if (issues.length <= 0) {
35
+ logUpdate('✅ No issues were found');
36
+ process.exit(0);
37
+ }
38
+ logUpdate('🟠 Found ' + issues.length + ' issues');
39
+ printIssues(issues);
40
+ printHints(issues);
41
+ process.exit(options.suppress ? 0 : 1);
42
+ }
43
+ exports.default = checkDependencies;
44
+ function deriveWorkspaces(options) {
45
+ var _a;
46
+ const wsGlobs = (_a = options.workspaces) !== null && _a !== void 0 ? _a : readWorkspaceGlobsFromPackageJson();
47
+ const workspaces = [];
48
+ for (const wsGlob of wsGlobs) {
49
+ workspaces.push(...glob_1.glob.sync(wsGlob + '/'));
50
+ }
51
+ return workspaces;
52
+ }
53
+ function readWorkspaceGlobsFromPackageJson() {
54
+ var _a;
55
+ const rootPackageJson = path.join(process.cwd(), PACKAGE_JSON);
56
+ if (!fs.existsSync(rootPackageJson)) {
57
+ console.error('Directory does not contain a package.json with defined workspaces');
58
+ console.info('Run in the root of a Theia project or specify them via --workspaces');
59
+ process.exit(1);
60
+ }
61
+ return (_a = require(rootPackageJson).workspaces) !== null && _a !== void 0 ? _a : [];
62
+ }
63
+ function findAllDependencies(workspaces, options) {
64
+ const dependencies = [];
65
+ dependencies.push(...findDependencies('.', options));
66
+ for (const workspace of workspaces) {
67
+ dependencies.push(...findDependencies(workspace, options));
68
+ }
69
+ return dependencies;
70
+ }
71
+ function findDependencies(workspace, options) {
72
+ const dependent = getPackageName(path.join(process.cwd(), workspace, PACKAGE_JSON));
73
+ const nodeModulesDir = path.join(workspace, NODE_MODULES);
74
+ const matchingPackageJsons = [];
75
+ options.include.forEach(include => glob_1.glob.sync(`${include}/${PACKAGE_JSON}`, {
76
+ cwd: nodeModulesDir,
77
+ ignore: [
78
+ `**/${NODE_MODULES}/**`,
79
+ `[^@]*/*/**/${PACKAGE_JSON}`,
80
+ `@*/*/*/**/${PACKAGE_JSON}`,
81
+ ...options.exclude
82
+ ] // user-specified exclude patterns
83
+ }).forEach(packageJson => matchingPackageJsons.push(toDependency(packageJson, nodeModulesDir, dependent))));
84
+ return matchingPackageJsons;
85
+ }
86
+ function toDependency(packageJsonPath, nodeModulesDir, dependent) {
87
+ const fullPackageJsonPath = path.join(process.cwd(), nodeModulesDir, packageJsonPath);
88
+ const name = getPackageName(fullPackageJsonPath);
89
+ const version = getPackageVersion(fullPackageJsonPath);
90
+ return {
91
+ name: name !== null && name !== void 0 ? name : packageJsonPath.replace('/' + PACKAGE_JSON, ''),
92
+ version: version !== null && version !== void 0 ? version : 'unknown',
93
+ path: path.relative(process.cwd(), fullPackageJsonPath),
94
+ hoisted: nodeModulesDir === NODE_MODULES,
95
+ dependent: dependent
96
+ };
97
+ }
98
+ function getPackageVersion(fullPackageJsonPath) {
99
+ try {
100
+ return require(fullPackageJsonPath).version;
101
+ }
102
+ catch (error) {
103
+ return undefined;
104
+ }
105
+ }
106
+ function getPackageName(fullPackageJsonPath) {
107
+ try {
108
+ return require(fullPackageJsonPath).name;
109
+ }
110
+ catch (error) {
111
+ return undefined;
112
+ }
113
+ }
114
+ function analyzeDependencies(packages, options) {
115
+ const issues = [];
116
+ if (!options.skipHoisted) {
117
+ issues.push(...findNotHoistedDependencies(packages, options));
118
+ }
119
+ if (!options.skipUniqueness) {
120
+ issues.push(...findDuplicateDependencies(packages, options));
121
+ }
122
+ if (!options.skipSingleTheiaVersion) {
123
+ issues.push(...findTheiaVersionMix(packages, options));
124
+ }
125
+ return issues;
126
+ }
127
+ function findNotHoistedDependencies(packages, options) {
128
+ const issues = [];
129
+ const nonHoistedPackages = packages.filter(p => p.hoisted === false);
130
+ for (const nonHoistedPackage of nonHoistedPackages) {
131
+ issues.push(createNonHoistedPackageIssue(nonHoistedPackage, options));
132
+ }
133
+ return issues;
134
+ }
135
+ function createNonHoistedPackageIssue(nonHoistedPackage, options) {
136
+ return {
137
+ issueType: 'not-hoisted',
138
+ package: nonHoistedPackage,
139
+ relatedPackages: [getHoistedPackageByName(nonHoistedPackage.name)],
140
+ severity: options.suppress ? 'warning' : 'error'
141
+ };
142
+ }
143
+ function getHoistedPackageByName(name) {
144
+ return toDependency(path.join(name, PACKAGE_JSON), NODE_MODULES);
145
+ }
146
+ function findDuplicateDependencies(packages, options) {
147
+ const duplicates = [];
148
+ const packagesGroupedByName = new Map();
149
+ for (const currentPackage of packages) {
150
+ const name = currentPackage.name;
151
+ if (!packagesGroupedByName.has(name)) {
152
+ packagesGroupedByName.set(name, []);
153
+ }
154
+ const currentPackages = packagesGroupedByName.get(name);
155
+ currentPackages.push(currentPackage);
156
+ if (currentPackages.length > 1 && duplicates.indexOf(name) === -1) {
157
+ duplicates.push(name);
158
+ }
159
+ }
160
+ duplicates.sort();
161
+ const issues = [];
162
+ for (const duplicate of duplicates) {
163
+ const duplicatePackages = packagesGroupedByName.get(duplicate);
164
+ if (duplicatePackages && duplicatePackages.length > 0) {
165
+ issues.push({
166
+ issueType: 'multiple-versions',
167
+ package: duplicatePackages.pop(),
168
+ relatedPackages: duplicatePackages,
169
+ severity: options.suppress ? 'warning' : 'error'
170
+ });
171
+ }
172
+ }
173
+ return issues;
174
+ }
175
+ function findTheiaVersionMix(packages, options) {
176
+ // @theia/monaco-editor-core is following the versions of Monaco so it can't be part of this check
177
+ const theiaPackages = packages.filter(p => p.name.startsWith('@theia/') && !p.name.startsWith('@theia/monaco-editor-core'));
178
+ let theiaVersion = undefined;
179
+ let referenceTheiaPackage = undefined;
180
+ const packagesWithOtherVersion = [];
181
+ for (const theiaPackage of theiaPackages) {
182
+ if (!theiaVersion && theiaPackage.version) {
183
+ theiaVersion = theiaPackage.version;
184
+ referenceTheiaPackage = theiaPackage;
185
+ }
186
+ else if (theiaVersion !== theiaPackage.version) {
187
+ packagesWithOtherVersion.push(theiaPackage);
188
+ }
189
+ }
190
+ if (referenceTheiaPackage && packagesWithOtherVersion.length > 0) {
191
+ return [{
192
+ issueType: 'theia-version-mix',
193
+ package: referenceTheiaPackage,
194
+ relatedPackages: packagesWithOtherVersion,
195
+ severity: 'error'
196
+ }];
197
+ }
198
+ return [];
199
+ }
200
+ function printIssues(issues) {
201
+ console.log();
202
+ const indent = issues.length.toString().length;
203
+ issues.forEach((issue, index) => {
204
+ printIssue(issue, index + 1, indent);
205
+ });
206
+ }
207
+ function printIssue(issue, issueNumber, indent) {
208
+ const remainingIndent = indent - issueNumber.toString().length;
209
+ const indentString = ' '.repeat(remainingIndent + 1);
210
+ console.log(issueTitle(issue, issueNumber, indentString));
211
+ console.log(issueDetails(issue, ' ' + ' '.repeat(indent)));
212
+ console.log();
213
+ }
214
+ function issueTitle(issue, issueNumber, indent) {
215
+ var _a;
216
+ const dependent = issue.package.dependent ? ` in ${chalk.blueBright((_a = issue.package.dependent) !== null && _a !== void 0 ? _a : 'unknown')}` : '';
217
+ return chalk.bgWhiteBright.bold.black(`#${issueNumber}${indent}`) + ' ' + chalk.cyanBright(issue.package.name)
218
+ + dependent + chalk.dim(` [${issue.issueType}]`);
219
+ }
220
+ function issueDetails(issue, indent) {
221
+ return indent + severity(issue) + ' ' + issueMessage(issue) + '\n'
222
+ + indent + versionLine(issue.package) + '\n'
223
+ + issue.relatedPackages.map(p => indent + versionLine(p)).join('\n');
224
+ }
225
+ function issueMessage(issue) {
226
+ if (issue.issueType === 'multiple-versions') {
227
+ return `Multiple versions of dependency ${chalk.bold(issue.package.name)} found.`;
228
+ }
229
+ else if (issue.issueType === 'theia-version-mix') {
230
+ return `Mix of ${chalk.bold('@theia/*')} versions found.`;
231
+ }
232
+ else {
233
+ return `Dependency ${chalk.bold(issue.package.name)} is not hoisted.`;
234
+ }
235
+ }
236
+ function severity(issue) {
237
+ return issue.severity === 'error' ? chalk.red('error') : chalk.yellow('warning');
238
+ }
239
+ function versionLine(pckg) {
240
+ return chalk.bold(pckg.version) + ' in ' + pckg.path;
241
+ }
242
+ function printHints(issues) {
243
+ console.log();
244
+ if (issues.find(i => i.issueType === 'theia-version-mix')) {
245
+ console.log('⛔ A mix of Theia versions is very likely leading to a broken application.');
246
+ }
247
+ console.log(`ℹ️ Use ${chalk.bold('yarn why <package-name>')} to find out why those multiple versions of a package are pulled.`);
248
+ console.log('ℹ️ Try to resolve those issues by finding package versions along the dependency chain that depend on compatible versions.');
249
+ console.log(`ℹ️ Use ${chalk.bold('resolutions')} in your root package.json to force specific versions as a last resort.`);
250
+ console.log();
251
+ }
252
+ //# sourceMappingURL=check-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-dependencies.js","sourceRoot":"","sources":["../src/check-dependencies.ts"],"names":[],"mappings":"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"}
package/lib/theia.js CHANGED
@@ -23,7 +23,7 @@ const yargsFactory = require("yargs/yargs");
23
23
  const application_manager_1 = require("@theia/application-manager");
24
24
  const application_package_1 = require("@theia/application-package");
25
25
  const ffmpeg = require("@theia/ffmpeg");
26
- const check_hoisting_1 = require("./check-hoisting");
26
+ const check_dependencies_1 = require("./check-dependencies");
27
27
  const download_plugins_1 = require("./download-plugins");
28
28
  const run_test_1 = require("./run-test");
29
29
  const localization_manager_1 = require("@theia/localization-manager");
@@ -167,7 +167,99 @@ async function theiaCli() {
167
167
  }
168
168
  },
169
169
  handler: ({ suppress }) => {
170
- (0, check_hoisting_1.default)({ suppress });
170
+ (0, check_dependencies_1.default)({
171
+ workspaces: ['packages/*'],
172
+ include: ['**'],
173
+ exclude: ['.bin/**', '.cache/**'],
174
+ skipHoisted: false,
175
+ skipUniqueness: true,
176
+ skipSingleTheiaVersion: true,
177
+ suppress
178
+ });
179
+ }
180
+ })
181
+ .command({
182
+ command: 'check:theia-version',
183
+ describe: 'Check that all dependencies have been resolved to the same Theia version',
184
+ builder: {
185
+ 'suppress': {
186
+ alias: 's',
187
+ describe: 'Suppress exiting with failure code',
188
+ boolean: true,
189
+ default: false
190
+ }
191
+ },
192
+ handler: ({ suppress }) => {
193
+ (0, check_dependencies_1.default)({
194
+ workspaces: undefined,
195
+ include: ['@theia/**'],
196
+ exclude: [],
197
+ skipHoisted: true,
198
+ skipUniqueness: false,
199
+ skipSingleTheiaVersion: false,
200
+ suppress
201
+ });
202
+ }
203
+ })
204
+ .command({
205
+ command: 'check:dependencies',
206
+ describe: 'Check uniqueness of dependency versions or whether they are hoisted',
207
+ builder: {
208
+ 'workspaces': {
209
+ alias: 'w',
210
+ describe: 'Glob patterns of workspaces to analyze, relative to `cwd`',
211
+ array: true,
212
+ defaultDescription: 'All glob patterns listed in the package.json\'s workspaces',
213
+ demandOption: false
214
+ },
215
+ 'include': {
216
+ alias: 'i',
217
+ describe: 'Glob pattern of dependencies\' package names to be included, e.g. -i "@theia/**"',
218
+ array: true,
219
+ default: ['**']
220
+ },
221
+ 'exclude': {
222
+ alias: 'e',
223
+ describe: 'Glob pattern of dependencies\' package names to be excluded',
224
+ array: true,
225
+ defaultDescription: 'None',
226
+ default: []
227
+ },
228
+ 'skip-hoisted': {
229
+ alias: 'h',
230
+ describe: 'Skip checking whether dependencies are hoisted',
231
+ boolean: true,
232
+ default: false
233
+ },
234
+ 'skip-uniqueness': {
235
+ alias: 'u',
236
+ describe: 'Skip checking whether all dependencies are resolved to a unique version',
237
+ boolean: true,
238
+ default: false
239
+ },
240
+ 'skip-single-theia-version': {
241
+ alias: 't',
242
+ describe: 'Skip checking whether all @theia/* dependencies are resolved to a single version',
243
+ boolean: true,
244
+ default: false
245
+ },
246
+ 'suppress': {
247
+ alias: 's',
248
+ describe: 'Suppress exiting with failure code',
249
+ boolean: true,
250
+ default: false
251
+ }
252
+ },
253
+ handler: ({ workspaces, include, exclude, skipHoisted, skipUniqueness, skipSingleTheiaVersion, suppress }) => {
254
+ (0, check_dependencies_1.default)({
255
+ workspaces,
256
+ include,
257
+ exclude,
258
+ skipHoisted,
259
+ skipUniqueness,
260
+ skipSingleTheiaVersion,
261
+ suppress
262
+ });
171
263
  }
172
264
  })
173
265
  .command({
package/lib/theia.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"theia.js","sourceRoot":"","sources":["../src/theia.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theia.js","sourceRoot":"","sources":["../src/theia.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theia/cli",
3
- "version": "1.29.0-next.9+7b29ac6f2d1",
3
+ "version": "1.29.0",
4
4
  "description": "Theia CLI.",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -30,12 +30,12 @@
30
30
  "clean": "theiaext clean"
31
31
  },
32
32
  "dependencies": {
33
- "@theia/application-manager": "1.29.0-next.9+7b29ac6f2d1",
34
- "@theia/application-package": "1.29.0-next.9+7b29ac6f2d1",
35
- "@theia/ffmpeg": "1.29.0-next.9+7b29ac6f2d1",
36
- "@theia/localization-manager": "1.29.0-next.9+7b29ac6f2d1",
37
- "@theia/ovsx-client": "1.29.0-next.9+7b29ac6f2d1",
38
- "@theia/request": "1.29.0-next.9+7b29ac6f2d1",
33
+ "@theia/application-manager": "1.29.0",
34
+ "@theia/application-package": "1.29.0",
35
+ "@theia/ffmpeg": "1.29.0",
36
+ "@theia/localization-manager": "1.29.0",
37
+ "@theia/ovsx-client": "1.29.0",
38
+ "@theia/request": "1.29.0",
39
39
  "@types/chai": "^4.2.7",
40
40
  "@types/mocha": "^5.2.7",
41
41
  "@types/node-fetch": "^2.5.7",
@@ -43,6 +43,8 @@
43
43
  "chai": "^4.2.0",
44
44
  "chalk": "4.0.0",
45
45
  "decompress": "^4.2.1",
46
+ "glob": "^8.0.3",
47
+ "log-update": "^4.0.0",
46
48
  "mocha": "^7.0.0",
47
49
  "puppeteer": "^2.0.0",
48
50
  "puppeteer-to-istanbul": "^1.2.2",
@@ -56,5 +58,5 @@
56
58
  "@types/proxy-from-env": "^1.0.1",
57
59
  "@types/puppeteer": "^2.0.0"
58
60
  },
59
- "gitHead": "7b29ac6f2d1a75b44b5c5d37ec7ae0200e0c3e99"
61
+ "gitHead": "054a575b92bd689505dcb74c1573b96483cc687c"
60
62
  }
@@ -0,0 +1,310 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2022 STMicroelectronics and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import * as fs from 'fs';
18
+ import * as path from 'path';
19
+ import { glob } from 'glob';
20
+ import { create as logUpdater } from 'log-update';
21
+ import * as chalk from 'chalk';
22
+
23
+ const NODE_MODULES = 'node_modules';
24
+ const PACKAGE_JSON = 'package.json';
25
+
26
+ const logUpdate = logUpdater(process.stdout);
27
+
28
+ interface CheckDependenciesOptions {
29
+ workspaces: string[] | undefined,
30
+ include: string[],
31
+ exclude: string[],
32
+ skipHoisted: boolean,
33
+ skipUniqueness: boolean,
34
+ skipSingleTheiaVersion: boolean,
35
+ suppress: boolean
36
+ }
37
+
38
+ /** NPM package */
39
+ interface Package {
40
+ /** Name of the package, e.g. `@theia/core`. */
41
+ name: string,
42
+ /** Actual resolved version of the package, e.g. `1.27.0`. */
43
+ version: string,
44
+ /** Path of the package relative to the workspace, e.g. `node_modules/@theia/core`. */
45
+ path: string,
46
+ /** Whether the package is hoisted or not, i.e., whether it is contained in the root `node_modules`. */
47
+ hoisted: boolean,
48
+ /** Workspace location in which the package was found. */
49
+ dependent: string | undefined
50
+ }
51
+
52
+ /** Issue found with a specific package. */
53
+ interface DependencyIssue {
54
+ /** Type of the issue. */
55
+ issueType: 'not-hoisted' | 'multiple-versions' | 'theia-version-mix',
56
+ /** Package with issue. */
57
+ package: Package,
58
+ /** Packages related to this issue. */
59
+ relatedPackages: Package[],
60
+ /** Severity */
61
+ severity: 'warning' | 'error'
62
+ }
63
+
64
+ export default function checkDependencies(options: CheckDependenciesOptions): void {
65
+ const workspaces = deriveWorkspaces(options);
66
+ logUpdate(`✅ Found ${workspaces.length} workspaces`);
67
+
68
+ console.log('🔍 Collecting dependencies...');
69
+ const dependencies = findAllDependencies(workspaces, options);
70
+ logUpdate(`✅ Found ${dependencies.length} dependencies`);
71
+
72
+ console.log('🔍 Analyzing dependencies...');
73
+ const issues = analyzeDependencies(dependencies, options);
74
+ if (issues.length <= 0) {
75
+ logUpdate('✅ No issues were found');
76
+ process.exit(0);
77
+ }
78
+
79
+ logUpdate('🟠 Found ' + issues.length + ' issues');
80
+ printIssues(issues);
81
+ printHints(issues);
82
+ process.exit(options.suppress ? 0 : 1);
83
+ }
84
+
85
+ function deriveWorkspaces(options: CheckDependenciesOptions): string[] {
86
+ const wsGlobs = options.workspaces ?? readWorkspaceGlobsFromPackageJson();
87
+ const workspaces: string[] = [];
88
+ for (const wsGlob of wsGlobs) {
89
+ workspaces.push(...glob.sync(wsGlob + '/'));
90
+ }
91
+ return workspaces;
92
+ }
93
+
94
+ function readWorkspaceGlobsFromPackageJson(): string[] {
95
+ const rootPackageJson = path.join(process.cwd(), PACKAGE_JSON);
96
+ if (!fs.existsSync(rootPackageJson)) {
97
+ console.error('Directory does not contain a package.json with defined workspaces');
98
+ console.info('Run in the root of a Theia project or specify them via --workspaces');
99
+ process.exit(1);
100
+ }
101
+ return require(rootPackageJson).workspaces ?? [];
102
+ }
103
+
104
+ function findAllDependencies(workspaces: string[], options: CheckDependenciesOptions): Package[] {
105
+ const dependencies: Package[] = [];
106
+ dependencies.push(...findDependencies('.', options));
107
+ for (const workspace of workspaces) {
108
+ dependencies.push(...findDependencies(workspace, options));
109
+ }
110
+ return dependencies;
111
+ }
112
+
113
+ function findDependencies(workspace: string, options: CheckDependenciesOptions): Package[] {
114
+ const dependent = getPackageName(path.join(process.cwd(), workspace, PACKAGE_JSON));
115
+ const nodeModulesDir = path.join(workspace, NODE_MODULES);
116
+ const matchingPackageJsons: Package[] = [];
117
+ options.include.forEach(include =>
118
+ glob.sync(`${include}/${PACKAGE_JSON}`, {
119
+ cwd: nodeModulesDir,
120
+ ignore: [
121
+ `**/${NODE_MODULES}/**`, // node_modules folders within dependencies
122
+ `[^@]*/*/**/${PACKAGE_JSON}`, // package.json that isn't at the package root (and not in an @org)
123
+ `@*/*/*/**/${PACKAGE_JSON}`, // package.json that isn't at the package root (and in an @org)
124
+ ...options.exclude] // user-specified exclude patterns
125
+ }).forEach(packageJson =>
126
+ matchingPackageJsons.push(toDependency(packageJson, nodeModulesDir, dependent))
127
+ )
128
+ );
129
+ return matchingPackageJsons;
130
+ }
131
+
132
+ function toDependency(packageJsonPath: string, nodeModulesDir: string, dependent?: string): Package {
133
+ const fullPackageJsonPath = path.join(process.cwd(), nodeModulesDir, packageJsonPath);
134
+ const name = getPackageName(fullPackageJsonPath);
135
+ const version = getPackageVersion(fullPackageJsonPath);
136
+ return {
137
+ name: name ?? packageJsonPath.replace('/' + PACKAGE_JSON, ''),
138
+ version: version ?? 'unknown',
139
+ path: path.relative(process.cwd(), fullPackageJsonPath),
140
+ hoisted: nodeModulesDir === NODE_MODULES,
141
+ dependent: dependent
142
+ };
143
+ }
144
+
145
+ function getPackageVersion(fullPackageJsonPath: string): string | undefined {
146
+ try {
147
+ return require(fullPackageJsonPath).version;
148
+ } catch (error) {
149
+ return undefined;
150
+ }
151
+ }
152
+
153
+ function getPackageName(fullPackageJsonPath: string): string | undefined {
154
+ try {
155
+ return require(fullPackageJsonPath).name;
156
+ } catch (error) {
157
+ return undefined;
158
+ }
159
+ }
160
+
161
+ function analyzeDependencies(packages: Package[], options: CheckDependenciesOptions): DependencyIssue[] {
162
+ const issues: DependencyIssue[] = [];
163
+ if (!options.skipHoisted) {
164
+ issues.push(...findNotHoistedDependencies(packages, options));
165
+ }
166
+ if (!options.skipUniqueness) {
167
+ issues.push(...findDuplicateDependencies(packages, options));
168
+ }
169
+ if (!options.skipSingleTheiaVersion) {
170
+ issues.push(...findTheiaVersionMix(packages, options));
171
+ }
172
+ return issues;
173
+ }
174
+
175
+ function findNotHoistedDependencies(packages: Package[], options: CheckDependenciesOptions): DependencyIssue[] {
176
+ const issues: DependencyIssue[] = [];
177
+ const nonHoistedPackages = packages.filter(p => p.hoisted === false);
178
+ for (const nonHoistedPackage of nonHoistedPackages) {
179
+ issues.push(createNonHoistedPackageIssue(nonHoistedPackage, options));
180
+ }
181
+ return issues;
182
+ }
183
+
184
+ function createNonHoistedPackageIssue(nonHoistedPackage: Package, options: CheckDependenciesOptions): DependencyIssue {
185
+ return {
186
+ issueType: 'not-hoisted',
187
+ package: nonHoistedPackage,
188
+ relatedPackages: [getHoistedPackageByName(nonHoistedPackage.name)],
189
+ severity: options.suppress ? 'warning' : 'error'
190
+ };
191
+ }
192
+
193
+ function getHoistedPackageByName(name: string): Package {
194
+ return toDependency(path.join(name, PACKAGE_JSON), NODE_MODULES);
195
+ }
196
+
197
+ function findDuplicateDependencies(packages: Package[], options: CheckDependenciesOptions): DependencyIssue[] {
198
+ const duplicates: string[] = [];
199
+ const packagesGroupedByName = new Map<string, Package[]>();
200
+ for (const currentPackage of packages) {
201
+ const name = currentPackage.name;
202
+ if (!packagesGroupedByName.has(name)) {
203
+ packagesGroupedByName.set(name, []);
204
+ }
205
+ const currentPackages = packagesGroupedByName.get(name)!;
206
+ currentPackages.push(currentPackage);
207
+ if (currentPackages.length > 1 && duplicates.indexOf(name) === -1) {
208
+ duplicates.push(name);
209
+ }
210
+ }
211
+
212
+ duplicates.sort();
213
+ const issues: DependencyIssue[] = [];
214
+ for (const duplicate of duplicates) {
215
+ const duplicatePackages = packagesGroupedByName.get(duplicate);
216
+ if (duplicatePackages && duplicatePackages.length > 0) {
217
+ issues.push({
218
+ issueType: 'multiple-versions',
219
+ package: duplicatePackages.pop()!,
220
+ relatedPackages: duplicatePackages,
221
+ severity: options.suppress ? 'warning' : 'error'
222
+ });
223
+ }
224
+ }
225
+
226
+ return issues;
227
+ }
228
+
229
+ function findTheiaVersionMix(packages: Package[], options: CheckDependenciesOptions): DependencyIssue[] {
230
+ // @theia/monaco-editor-core is following the versions of Monaco so it can't be part of this check
231
+ const theiaPackages = packages.filter(p => p.name.startsWith('@theia/') && !p.name.startsWith('@theia/monaco-editor-core'));
232
+ let theiaVersion = undefined;
233
+ let referenceTheiaPackage = undefined;
234
+ const packagesWithOtherVersion: Package[] = [];
235
+ for (const theiaPackage of theiaPackages) {
236
+ if (!theiaVersion && theiaPackage.version) {
237
+ theiaVersion = theiaPackage.version;
238
+ referenceTheiaPackage = theiaPackage;
239
+ } else if (theiaVersion !== theiaPackage.version) {
240
+ packagesWithOtherVersion.push(theiaPackage);
241
+ }
242
+ }
243
+
244
+ if (referenceTheiaPackage && packagesWithOtherVersion.length > 0) {
245
+ return [{
246
+ issueType: 'theia-version-mix',
247
+ package: referenceTheiaPackage,
248
+ relatedPackages: packagesWithOtherVersion,
249
+ severity: 'error'
250
+ }];
251
+ }
252
+ return [];
253
+ }
254
+
255
+ function printIssues(issues: DependencyIssue[]): void {
256
+ console.log();
257
+ const indent = issues.length.toString().length;
258
+ issues.forEach((issue, index) => {
259
+ printIssue(issue, index + 1, indent);
260
+ });
261
+ }
262
+
263
+ function printIssue(issue: DependencyIssue, issueNumber: number, indent: number): void {
264
+ const remainingIndent = indent - issueNumber.toString().length;
265
+ const indentString = ' '.repeat(remainingIndent + 1);
266
+ console.log(issueTitle(issue, issueNumber, indentString));
267
+ console.log(issueDetails(issue, ' ' + ' '.repeat(indent)));
268
+ console.log();
269
+ }
270
+
271
+ function issueTitle(issue: DependencyIssue, issueNumber: number, indent: string): string {
272
+ const dependent = issue.package.dependent ? ` in ${chalk.blueBright(issue.package.dependent ?? 'unknown')}` : '';
273
+ return chalk.bgWhiteBright.bold.black(`#${issueNumber}${indent}`) + ' ' + chalk.cyanBright(issue.package.name)
274
+ + dependent + chalk.dim(` [${issue.issueType}]`);
275
+ }
276
+
277
+ function issueDetails(issue: DependencyIssue, indent: string): string {
278
+ return indent + severity(issue) + ' ' + issueMessage(issue) + '\n'
279
+ + indent + versionLine(issue.package) + '\n'
280
+ + issue.relatedPackages.map(p => indent + versionLine(p)).join('\n');
281
+ }
282
+
283
+ function issueMessage(issue: DependencyIssue): string {
284
+ if (issue.issueType === 'multiple-versions') {
285
+ return `Multiple versions of dependency ${chalk.bold(issue.package.name)} found.`;
286
+ } else if (issue.issueType === 'theia-version-mix') {
287
+ return `Mix of ${chalk.bold('@theia/*')} versions found.`;
288
+ } else {
289
+ return `Dependency ${chalk.bold(issue.package.name)} is not hoisted.`;
290
+ }
291
+ }
292
+
293
+ function severity(issue: DependencyIssue): string {
294
+ return issue.severity === 'error' ? chalk.red('error') : chalk.yellow('warning');
295
+ }
296
+
297
+ function versionLine(pckg: Package): string {
298
+ return chalk.bold(pckg.version) + ' in ' + pckg.path;
299
+ }
300
+
301
+ function printHints(issues: DependencyIssue[]): void {
302
+ console.log();
303
+ if (issues.find(i => i.issueType === 'theia-version-mix')) {
304
+ console.log('⛔ A mix of Theia versions is very likely leading to a broken application.');
305
+ }
306
+ console.log(`ℹ️ Use ${chalk.bold('yarn why <package-name>')} to find out why those multiple versions of a package are pulled.`);
307
+ console.log('ℹ️ Try to resolve those issues by finding package versions along the dependency chain that depend on compatible versions.');
308
+ console.log(`ℹ️ Use ${chalk.bold('resolutions')} in your root package.json to force specific versions as a last resort.`);
309
+ console.log();
310
+ }
package/src/theia.ts CHANGED
@@ -22,7 +22,7 @@ import yargsFactory = require('yargs/yargs');
22
22
  import { ApplicationPackageManager, rebuild } from '@theia/application-manager';
23
23
  import { ApplicationProps, DEFAULT_SUPPORTED_API_VERSION } from '@theia/application-package';
24
24
  import * as ffmpeg from '@theia/ffmpeg';
25
- import checkHoisted from './check-hoisting';
25
+ import checkDependencies from './check-dependencies';
26
26
  import downloadPlugins from './download-plugins';
27
27
  import runTest from './run-test';
28
28
  import { LocalizationManager, extract } from '@theia/localization-manager';
@@ -193,7 +193,117 @@ async function theiaCli(): Promise<void> {
193
193
  }
194
194
  },
195
195
  handler: ({ suppress }) => {
196
- checkHoisted({ suppress });
196
+ checkDependencies({
197
+ workspaces: ['packages/*'],
198
+ include: ['**'],
199
+ exclude: ['.bin/**', '.cache/**'],
200
+ skipHoisted: false,
201
+ skipUniqueness: true,
202
+ skipSingleTheiaVersion: true,
203
+ suppress
204
+ });
205
+ }
206
+ })
207
+ .command<{
208
+ suppress: boolean
209
+ }>({
210
+ command: 'check:theia-version',
211
+ describe: 'Check that all dependencies have been resolved to the same Theia version',
212
+ builder: {
213
+ 'suppress': {
214
+ alias: 's',
215
+ describe: 'Suppress exiting with failure code',
216
+ boolean: true,
217
+ default: false
218
+ }
219
+ },
220
+ handler: ({ suppress }) => {
221
+ checkDependencies({
222
+ workspaces: undefined,
223
+ include: ['@theia/**'],
224
+ exclude: [],
225
+ skipHoisted: true,
226
+ skipUniqueness: false,
227
+ skipSingleTheiaVersion: false,
228
+ suppress
229
+ });
230
+ }
231
+ })
232
+ .command<{
233
+ workspaces: string[] | undefined,
234
+ include: string[],
235
+ exclude: string[],
236
+ skipHoisted: boolean,
237
+ skipUniqueness: boolean,
238
+ skipSingleTheiaVersion: boolean,
239
+ suppress: boolean
240
+ }>({
241
+ command: 'check:dependencies',
242
+ describe: 'Check uniqueness of dependency versions or whether they are hoisted',
243
+ builder: {
244
+ 'workspaces': {
245
+ alias: 'w',
246
+ describe: 'Glob patterns of workspaces to analyze, relative to `cwd`',
247
+ array: true,
248
+ defaultDescription: 'All glob patterns listed in the package.json\'s workspaces',
249
+ demandOption: false
250
+ },
251
+ 'include': {
252
+ alias: 'i',
253
+ describe: 'Glob pattern of dependencies\' package names to be included, e.g. -i "@theia/**"',
254
+ array: true,
255
+ default: ['**']
256
+ },
257
+ 'exclude': {
258
+ alias: 'e',
259
+ describe: 'Glob pattern of dependencies\' package names to be excluded',
260
+ array: true,
261
+ defaultDescription: 'None',
262
+ default: []
263
+ },
264
+ 'skip-hoisted': {
265
+ alias: 'h',
266
+ describe: 'Skip checking whether dependencies are hoisted',
267
+ boolean: true,
268
+ default: false
269
+ },
270
+ 'skip-uniqueness': {
271
+ alias: 'u',
272
+ describe: 'Skip checking whether all dependencies are resolved to a unique version',
273
+ boolean: true,
274
+ default: false
275
+ },
276
+ 'skip-single-theia-version': {
277
+ alias: 't',
278
+ describe: 'Skip checking whether all @theia/* dependencies are resolved to a single version',
279
+ boolean: true,
280
+ default: false
281
+ },
282
+ 'suppress': {
283
+ alias: 's',
284
+ describe: 'Suppress exiting with failure code',
285
+ boolean: true,
286
+ default: false
287
+ }
288
+ },
289
+ handler: ({
290
+ workspaces,
291
+ include,
292
+ exclude,
293
+ skipHoisted,
294
+ skipUniqueness,
295
+ skipSingleTheiaVersion,
296
+ suppress
297
+ }) => {
298
+ checkDependencies({
299
+ workspaces,
300
+ include,
301
+ exclude,
302
+ skipHoisted,
303
+ skipUniqueness,
304
+ skipSingleTheiaVersion,
305
+ suppress
306
+ });
197
307
  }
198
308
  })
199
309
  .command<{
@@ -1,4 +0,0 @@
1
- export default function assert({ suppress }: {
2
- suppress: boolean;
3
- }): void;
4
- //# sourceMappingURL=check-hoisting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-hoisting.d.ts","sourceRoot":"","sources":["../src/check-hoisting.ts"],"names":[],"mappings":"AAiHA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA0BxE"}
@@ -1,118 +0,0 @@
1
- "use strict";
2
- // *****************************************************************************
3
- // Copyright (C) 2018-2019 TypeFox and others
4
- //
5
- // This program and the accompanying materials are made available under the
6
- // terms of the Eclipse Public License v. 2.0 which is available at
7
- // http://www.eclipse.org/legal/epl-2.0.
8
- //
9
- // This Source Code may also be made available under the following Secondary
10
- // Licenses when the conditions for such availability set forth in the Eclipse
11
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
- // with the GNU Classpath Exception which is available at
13
- // https://www.gnu.org/software/classpath/license.html.
14
- //
15
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
- // *****************************************************************************
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- const fs = require("fs");
19
- const path = require("path");
20
- /**
21
- * Folders to skip inside the `node_modules` when checking the hoisted dependencies. Such as the `.bin` and `.cache` folders.
22
- */
23
- const toSkip = ['.bin', '.cache'];
24
- function collectIssues() {
25
- console.log('🔍 Analyzing hoisted dependencies in the Theia extensions...');
26
- const root = process.cwd();
27
- const rootNodeModules = path.join(root, 'node_modules');
28
- const packages = path.join(root, 'packages');
29
- const issues = new Map();
30
- for (const extension of fs.readdirSync(packages)) {
31
- const extensionPath = path.join(packages, extension);
32
- const nodeModulesPath = path.join(extensionPath, 'node_modules');
33
- if (fs.existsSync(nodeModulesPath)) {
34
- for (const dependency of fs.readdirSync(nodeModulesPath).filter(name => toSkip.indexOf(name) === -1)) {
35
- const dependencyPath = path.join(nodeModulesPath, dependency);
36
- const version = versionOf(dependencyPath);
37
- let message = `Dependency '${dependency}' ${version ? `[${version}] ` : ''}was not hoisted to the root 'node_modules' folder.`;
38
- const existingDependency = path.join(rootNodeModules, dependency);
39
- if (fs.existsSync(existingDependency)) {
40
- const otherVersion = versionOf(existingDependency);
41
- if (otherVersion) {
42
- message += ` The same dependency already exists with version ${otherVersion} at '${existingDependency}'.`;
43
- }
44
- }
45
- error(issues, extension, message);
46
- }
47
- }
48
- else {
49
- warn(issues, extension, "Does not have 'node_modules' folder.");
50
- }
51
- }
52
- return issues;
53
- }
54
- function versionOf(npmPackagePath) {
55
- const packageJsonPath = path.join(npmPackagePath, 'package.json');
56
- if (fs.existsSync(packageJsonPath)) {
57
- return require(packageJsonPath).version || '';
58
- }
59
- return '';
60
- }
61
- function warn(issues, extension, message) {
62
- log(issues, extension, message, 'warn');
63
- }
64
- function error(issues, extension, message) {
65
- log(issues, extension, message, 'error');
66
- }
67
- function log(issues, extension, message, type) {
68
- const key = `@theia/${extension}`;
69
- if (!issues.has(key)) {
70
- issues.set(key, []);
71
- }
72
- const severity = toSeverity(type);
73
- issues.get(key).push({ severity, message });
74
- }
75
- function toSeverity(type) {
76
- switch (type) {
77
- case 'error': return 0;
78
- case 'warn': return 1;
79
- default: throw new Error(`Unexpected type: ${type}.`);
80
- }
81
- }
82
- function toType(severity) {
83
- switch (severity) {
84
- case 0: return 'error';
85
- case 1: return 'warn';
86
- default: throw new Error(`Unexpected severity: ${severity}.`);
87
- }
88
- }
89
- function assert({ suppress }) {
90
- const issues = collectIssues();
91
- console.log('📖 Summary:');
92
- let code = 0;
93
- if (issues.size > 0) {
94
- for (const [extension, issuesPerExtension] of issues.entries()) {
95
- issuesPerExtension.sort((left, right) => left.severity - right.severity);
96
- if (issuesPerExtension) {
97
- console.log(`The following dependency issues were detected in '${extension}':`);
98
- for (const { severity, message } of issuesPerExtension) {
99
- const type = toType(severity);
100
- console.log(` - ${type}: ${message}`);
101
- if (type === 'error') {
102
- code = 1;
103
- }
104
- }
105
- }
106
- }
107
- }
108
- else {
109
- console.log('🎉 No dependency issues were detected.');
110
- }
111
- if (code !== 0 && suppress) {
112
- console.log('⚠️ This is a reminder to fix the dependency issues.');
113
- process.exit(0);
114
- }
115
- process.exit(code);
116
- }
117
- exports.default = assert;
118
- //# sourceMappingURL=check-hoisting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-hoisting.js","sourceRoot":"","sources":["../src/check-hoisting.ts"],"names":[],"mappings":"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"}
@@ -1,140 +0,0 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2018-2019 TypeFox and others
3
- //
4
- // This program and the accompanying materials are made available under the
5
- // terms of the Eclipse Public License v. 2.0 which is available at
6
- // http://www.eclipse.org/legal/epl-2.0.
7
- //
8
- // This Source Code may also be made available under the following Secondary
9
- // Licenses when the conditions for such availability set forth in the Eclipse
10
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- // with the GNU Classpath Exception which is available at
12
- // https://www.gnu.org/software/classpath/license.html.
13
- //
14
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import * as fs from 'fs';
18
- import * as path from 'path';
19
-
20
- /**
21
- * This script makes sure all the dependencies are hoisted into the root `node_modules` after running `yarn`.
22
- * - https://github.com/eclipse-theia/theia/pull/2994#issuecomment-425447650
23
- * - https://github.com/eclipse-theia/theia/pull/2994#issuecomment-425649817
24
- *
25
- * If you do not want to bail the execution: `theia check:hoisted -s`
26
- */
27
-
28
- type DiagnosticType = 'error' | 'warn';
29
-
30
- interface Diagnostic {
31
- severity: number,
32
- message: string,
33
- }
34
-
35
- type DiagnosticMap = Map<string, Diagnostic[]>;
36
-
37
- /**
38
- * Folders to skip inside the `node_modules` when checking the hoisted dependencies. Such as the `.bin` and `.cache` folders.
39
- */
40
- const toSkip = ['.bin', '.cache'];
41
-
42
- function collectIssues(): DiagnosticMap {
43
- console.log('🔍 Analyzing hoisted dependencies in the Theia extensions...');
44
- const root = process.cwd();
45
- const rootNodeModules = path.join(root, 'node_modules');
46
- const packages = path.join(root, 'packages');
47
-
48
- const issues = new Map<string, Diagnostic[]>();
49
- for (const extension of fs.readdirSync(packages)) {
50
- const extensionPath = path.join(packages, extension);
51
- const nodeModulesPath = path.join(extensionPath, 'node_modules');
52
- if (fs.existsSync(nodeModulesPath)) {
53
- for (const dependency of fs.readdirSync(nodeModulesPath).filter(name => toSkip.indexOf(name) === -1)) {
54
- const dependencyPath = path.join(nodeModulesPath, dependency);
55
- const version = versionOf(dependencyPath);
56
- let message = `Dependency '${dependency}' ${version ? `[${version}] ` : ''}was not hoisted to the root 'node_modules' folder.`;
57
- const existingDependency = path.join(rootNodeModules, dependency);
58
- if (fs.existsSync(existingDependency)) {
59
- const otherVersion = versionOf(existingDependency);
60
- if (otherVersion) {
61
- message += ` The same dependency already exists with version ${otherVersion} at '${existingDependency}'.`;
62
- }
63
- }
64
- error(issues, extension, message);
65
- }
66
- } else {
67
- warn(issues, extension, "Does not have 'node_modules' folder.");
68
- }
69
- }
70
- return issues;
71
- }
72
-
73
- function versionOf(npmPackagePath: string): string {
74
- const packageJsonPath = path.join(npmPackagePath, 'package.json');
75
- if (fs.existsSync(packageJsonPath)) {
76
- return require(packageJsonPath).version || '';
77
- }
78
- return '';
79
- }
80
-
81
- function warn(issues: DiagnosticMap, extension: string, message: string): void {
82
- log(issues, extension, message, 'warn');
83
- }
84
-
85
- function error(issues: DiagnosticMap, extension: string, message: string): void {
86
- log(issues, extension, message, 'error');
87
- }
88
-
89
- function log(issues: DiagnosticMap, extension: string, message: string, type: DiagnosticType): void {
90
- const key = `@theia/${extension}`;
91
- if (!issues.has(key)) {
92
- issues.set(key, []);
93
- }
94
- const severity = toSeverity(type);
95
- issues.get(key)!.push({ severity, message });
96
- }
97
-
98
- function toSeverity(type: DiagnosticType): number {
99
- switch (type) {
100
- case 'error': return 0;
101
- case 'warn': return 1;
102
- default: throw new Error(`Unexpected type: ${type}.`);
103
- }
104
- }
105
-
106
- function toType(severity: number): DiagnosticType {
107
- switch (severity) {
108
- case 0: return 'error';
109
- case 1: return 'warn';
110
- default: throw new Error(`Unexpected severity: ${severity}.`);
111
- }
112
- }
113
-
114
- export default function assert({ suppress }: { suppress: boolean }): void {
115
- const issues = collectIssues();
116
- console.log('📖 Summary:');
117
- let code = 0;
118
- if (issues.size > 0) {
119
- for (const [extension, issuesPerExtension] of issues.entries()) {
120
- issuesPerExtension.sort((left, right) => left.severity - right.severity);
121
- if (issuesPerExtension) {
122
- console.log(`The following dependency issues were detected in '${extension}':`);
123
- for (const { severity, message } of issuesPerExtension) {
124
- const type = toType(severity);
125
- console.log(` - ${type}: ${message}`);
126
- if (type === 'error') {
127
- code = 1;
128
- }
129
- }
130
- }
131
- }
132
- } else {
133
- console.log('🎉 No dependency issues were detected.');
134
- }
135
- if (code !== 0 && suppress) {
136
- console.log('⚠️ This is a reminder to fix the dependency issues.');
137
- process.exit(0);
138
- }
139
- process.exit(code);
140
- }