check-peer-dependencies 2.0.6 → 4.1.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.
- package/.idea/workspace.xml +79 -16
- package/CHANGELOG.md +54 -0
- package/README.md +17 -5
- package/dist/checkPeerDependencies.js +101 -62
- package/dist/cli.js +14 -1
- package/dist/packageManager.js +1 -0
- package/dist/packageUtils.js +35 -46
- package/dist/readJson.js +1 -0
- package/dist/solution.js +5 -1
- package/package.json +11 -11
package/.idea/workspace.xml
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<project version="4">
|
|
3
|
+
<component name="AutoImportSettings">
|
|
4
|
+
<option name="autoReloadType" value="SELECTIVE" />
|
|
5
|
+
</component>
|
|
3
6
|
<component name="BranchesTreeState">
|
|
4
7
|
<expand>
|
|
5
8
|
<path>
|
|
@@ -19,8 +22,9 @@
|
|
|
19
22
|
<select />
|
|
20
23
|
</component>
|
|
21
24
|
<component name="ChangeListManager">
|
|
22
|
-
<list default="true" id="ebeb713d-6dc4-42d1-a42e-54aad95d9c0a" name="Default Changelist" comment="
|
|
23
|
-
<change beforePath="$PROJECT_DIR$/
|
|
25
|
+
<list default="true" id="ebeb713d-6dc4-42d1-a42e-54aad95d9c0a" name="Default Changelist" comment="chore: update all dependencies">
|
|
26
|
+
<change beforePath="$PROJECT_DIR$/src/checkPeerDependencies.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/checkPeerDependencies.ts" afterDir="false" />
|
|
27
|
+
<change beforePath="$PROJECT_DIR$/src/cli.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/cli.ts" afterDir="false" />
|
|
24
28
|
<change beforePath="$PROJECT_DIR$/src/packageUtils.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/packageUtils.ts" afterDir="false" />
|
|
25
29
|
</list>
|
|
26
30
|
<option name="SHOW_DIALOG" value="false" />
|
|
@@ -32,6 +36,28 @@
|
|
|
32
36
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
|
33
37
|
<option name="UPDATE_TYPE" value="REBASE" />
|
|
34
38
|
</component>
|
|
39
|
+
<component name="GitToolBoxStore">
|
|
40
|
+
<option name="projectConfigVersion" value="2" />
|
|
41
|
+
<option name="recentBranches">
|
|
42
|
+
<RecentBranches>
|
|
43
|
+
<option name="branchesForRepo">
|
|
44
|
+
<list>
|
|
45
|
+
<RecentBranchesForRepo>
|
|
46
|
+
<option name="branches">
|
|
47
|
+
<list>
|
|
48
|
+
<RecentBranch>
|
|
49
|
+
<option name="branchName" value="master" />
|
|
50
|
+
<option name="lastUsedInstant" value="1609100767" />
|
|
51
|
+
</RecentBranch>
|
|
52
|
+
</list>
|
|
53
|
+
</option>
|
|
54
|
+
<option name="repositoryRootUrl" value="file://$PROJECT_DIR$" />
|
|
55
|
+
</RecentBranchesForRepo>
|
|
56
|
+
</list>
|
|
57
|
+
</option>
|
|
58
|
+
</RecentBranches>
|
|
59
|
+
</option>
|
|
60
|
+
</component>
|
|
35
61
|
<component name="ProjectId" id="1SkfJRmHXPtjMGY19cBVwFevkIM" />
|
|
36
62
|
<component name="ProjectLevelVcsManager">
|
|
37
63
|
<OptionsSetting value="false" id="Update" />
|
|
@@ -54,7 +80,7 @@
|
|
|
54
80
|
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
|
55
81
|
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
|
|
56
82
|
<property name="nodejs_package_manager_path" value="yarn" />
|
|
57
|
-
<property name="settings.editor.selected.configurable" value="
|
|
83
|
+
<property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
|
|
58
84
|
<property name="ts.external.directory.path" value="$PROJECT_DIR$/node_modules/typescript/lib" />
|
|
59
85
|
<property name="vue.rearranger.settings.migration" value="true" />
|
|
60
86
|
</component>
|
|
@@ -222,7 +248,49 @@
|
|
|
222
248
|
<option name="project" value="LOCAL" />
|
|
223
249
|
<updated>1590443867678</updated>
|
|
224
250
|
</task>
|
|
225
|
-
<
|
|
251
|
+
<task id="LOCAL-00022" summary="feat(findSolutions): Add a toggle to find solutions and print installation commands. BREAKING CHANGE: no longer prints installation commands by default, instead prints a message about using --install">
|
|
252
|
+
<created>1608670757697</created>
|
|
253
|
+
<option name="number" value="00022" />
|
|
254
|
+
<option name="presentableId" value="LOCAL-00022" />
|
|
255
|
+
<option name="project" value="LOCAL" />
|
|
256
|
+
<updated>1608670757697</updated>
|
|
257
|
+
</task>
|
|
258
|
+
<task id="LOCAL-00023" summary="feat(report): For a given unmet peer dependency, show every related peer dependency, even if currently met">
|
|
259
|
+
<created>1608674747012</created>
|
|
260
|
+
<option name="number" value="00023" />
|
|
261
|
+
<option name="presentableId" value="LOCAL-00023" />
|
|
262
|
+
<option name="project" value="LOCAL" />
|
|
263
|
+
<updated>1608674747012</updated>
|
|
264
|
+
</task>
|
|
265
|
+
<task id="LOCAL-00024" summary="feat(orderBy): Change default orderBy to 'dependee' BREAKING CHANGE: default order changed from 'depender' to 'dependee'">
|
|
266
|
+
<created>1608674774129</created>
|
|
267
|
+
<option name="number" value="00024" />
|
|
268
|
+
<option name="presentableId" value="LOCAL-00024" />
|
|
269
|
+
<option name="project" value="LOCAL" />
|
|
270
|
+
<updated>1608674774129</updated>
|
|
271
|
+
</task>
|
|
272
|
+
<task id="LOCAL-00025" summary="feat(peerDependencyMeta): support peerDependencyMeta in package.json to ignore optional peer dependencies">
|
|
273
|
+
<created>1608689514910</created>
|
|
274
|
+
<option name="number" value="00025" />
|
|
275
|
+
<option name="presentableId" value="LOCAL-00025" />
|
|
276
|
+
<option name="project" value="LOCAL" />
|
|
277
|
+
<updated>1608689514910</updated>
|
|
278
|
+
</task>
|
|
279
|
+
<task id="LOCAL-00026" summary="feat(prerelease): include prerelease when matching ranges, i.e. the range ">=6.0.0" matches "7.0.0-beta.1" BREAKING CHANGE: Matches prerelease versions">
|
|
280
|
+
<created>1609100365568</created>
|
|
281
|
+
<option name="number" value="00026" />
|
|
282
|
+
<option name="presentableId" value="LOCAL-00026" />
|
|
283
|
+
<option name="project" value="LOCAL" />
|
|
284
|
+
<updated>1609100365568</updated>
|
|
285
|
+
</task>
|
|
286
|
+
<task id="LOCAL-00027" summary="chore: update all dependencies">
|
|
287
|
+
<created>1609100430351</created>
|
|
288
|
+
<option name="number" value="00027" />
|
|
289
|
+
<option name="presentableId" value="LOCAL-00027" />
|
|
290
|
+
<option name="project" value="LOCAL" />
|
|
291
|
+
<updated>1609100430351</updated>
|
|
292
|
+
</task>
|
|
293
|
+
<option name="localTasksCounter" value="28" />
|
|
226
294
|
<servers />
|
|
227
295
|
</component>
|
|
228
296
|
<component name="TypeScriptGeneratedFilesManager">
|
|
@@ -241,7 +309,6 @@
|
|
|
241
309
|
<option name="oldMeFiltersMigrated" value="true" />
|
|
242
310
|
</component>
|
|
243
311
|
<component name="VcsManagerConfiguration">
|
|
244
|
-
<MESSAGE value="feat: switch to typescript" />
|
|
245
312
|
<MESSAGE value="chore: add shelljs dependency" />
|
|
246
313
|
<MESSAGE value="chore: add yargs and shelljs dependency" />
|
|
247
314
|
<MESSAGE value="chore: add yargs and shelljs and semver dependencies" />
|
|
@@ -261,16 +328,12 @@
|
|
|
261
328
|
<MESSAGE value="fix(peerDevDependencies): Use an array of package names in 'peerDevDependencies' in conjunction with the standard 'peerDependencies' object to install peer deps as devDependencies. This now acts more as an extension of thstandard node packaging rather than adding completely custom behavior. Also removed check-peer-dependencies-optional-dependency because its postinstall script only gets runs when check-peer-dependencies-optional-dependency package is re-installed. So it was basically a failed experiment." />
|
|
262
329
|
<MESSAGE value="fix(peerDevDependencies): Make peerDevDependency includes check a bit safer" />
|
|
263
330
|
<MESSAGE value="feat(walkPackageDependencyTree): Check devDependencies too" />
|
|
264
|
-
<
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
<
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
<
|
|
271
|
-
<state x="561" y="268" width="670" height="676" key="search.everywhere.popup" timestamp="1600641960318">
|
|
272
|
-
<screen x="0" y="23" width="1792" height="1097" />
|
|
273
|
-
</state>
|
|
274
|
-
<state x="561" y="268" width="670" height="676" key="search.everywhere.popup/0.23.1792.1097@0.23.1792.1097" timestamp="1600641960318" />
|
|
331
|
+
<MESSAGE value="feat(findSolutions): Add a toggle to find solutions and print installation commands. BREAKING CHANGE: no longer prints installation commands by default, instead prints a message about using --install" />
|
|
332
|
+
<MESSAGE value="feat(report): For a given unmet peer dependency, show every related peer dependency, even if currently met" />
|
|
333
|
+
<MESSAGE value="feat(orderBy): Change default orderBy to 'dependee' BREAKING CHANGE: default order changed from 'depender' to 'dependee'" />
|
|
334
|
+
<MESSAGE value="feat(peerDependencyMeta): support peerDependencyMeta in package.json to ignore optional peer dependencies" />
|
|
335
|
+
<MESSAGE value="feat(prerelease): include prerelease when matching ranges, i.e. the range ">=6.0.0" matches "7.0.0-beta.1" BREAKING CHANGE: Matches prerelease versions" />
|
|
336
|
+
<MESSAGE value="chore: update all dependencies" />
|
|
337
|
+
<option name="LAST_COMMIT_MESSAGE" value="chore: update all dependencies" />
|
|
275
338
|
</component>
|
|
276
339
|
</project>
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,57 @@
|
|
|
1
|
+
# 4.1.0 (2021-11-28)
|
|
2
|
+
[Compare `check-peer-dependencies` versions 4.0.0 and 4.1.0](https://github.com/christopherthielen/check-peer-dependencies/compare/4.0.0...4.1.0)
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Add support for ignoring peer dependencies (via cli option or config stored in package.json) ([5994c9c](https://github.com/christopherthielen/check-peer-dependencies/commit/5994c9c))
|
|
7
|
+
* load checkPeerDependencies config from package.json (and merge with CLI options) ([e2f0fee](https://github.com/christopherthielen/check-peer-dependencies/commit/e2f0fee))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# 4.0.0 (2020-12-27)
|
|
13
|
+
[Compare `check-peer-dependencies` versions 3.1.0 and 4.0.0](https://github.com/christopherthielen/check-peer-dependencies/compare/3.1.0...4.0.0)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **prerelease:** include prerelease when matching ranges, i.e. the range ">=6.0.0" matches "7.0.0-beta.1" ([0493379](https://github.com/christopherthielen/check-peer-dependencies/commit/0493379))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### BREAKING CHANGES
|
|
21
|
+
|
|
22
|
+
* **prerelease:** Matches prerelease versions
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# 3.1.0 (2020-12-23)
|
|
28
|
+
[Compare `check-peer-dependencies` versions 3.0.0 and 3.1.0](https://github.com/christopherthielen/check-peer-dependencies/compare/3.0.0...3.1.0)
|
|
29
|
+
|
|
30
|
+
### Features
|
|
31
|
+
|
|
32
|
+
* **peerDependencyMeta:** support peerDependencyMeta in package.json to ignore optional peer dependencies ([4e3b757](https://github.com/christopherthielen/check-peer-dependencies/commit/4e3b757))
|
|
33
|
+
* See: https://github.com/yarnpkg/rfcs/blob/master/accepted/0000-optional-peer-dependencies.md
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# 3.0.0 (2020-12-22)
|
|
38
|
+
[Compare `check-peer-dependencies` versions 2.0.6 and 3.0.0](https://github.com/christopherthielen/check-peer-dependencies/compare/2.0.6...3.0.0)
|
|
39
|
+
|
|
40
|
+
### Features
|
|
41
|
+
|
|
42
|
+
* **findSolutions:** Add a toggle to find solutions and print installation commands. ([c34735a](https://github.com/christopherthielen/check-peer-dependencies/commit/c34735a))
|
|
43
|
+
* **orderBy:** Change default orderBy to 'dependee' ([e77e069](https://github.com/christopherthielen/check-peer-dependencies/commit/e77e069))
|
|
44
|
+
* **report:** For a given unmet peer dependency, show every related peer dependency, even if currently met ([516a259](https://github.com/christopherthielen/check-peer-dependencies/commit/516a259))
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### BREAKING CHANGES
|
|
48
|
+
|
|
49
|
+
* **orderBy:** default order changed from 'depender' to 'dependee'
|
|
50
|
+
* **findSolutions:** no longer prints installation commands by default, instead prints a message about using --install
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
1
55
|
## 2.0.6 (2020-09-20)
|
|
2
56
|
[Compare `check-peer-dependencies` versions 2.0.5 and 2.0.6](https://github.com/christopherthielen/check-peer-dependencies/compare/2.0.5...2.0.6)
|
|
3
57
|
|
package/README.md
CHANGED
|
@@ -17,11 +17,23 @@ npx check-peer-dependencies [--yarn|--npm] [--install] [--help]
|
|
|
17
17
|
|
|
18
18
|
Options:
|
|
19
19
|
```
|
|
20
|
-
--help
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
-h, --help Print usage information [boolean]
|
|
21
|
+
--version Show version number [boolean]
|
|
22
|
+
--yarn Force yarn package manager [boolean]
|
|
23
|
+
--npm Force npm package manager [boolean]
|
|
24
|
+
--orderBy Order the output by depender or dependee
|
|
25
|
+
[choices: "depender", "dependee"] [default: "dependee"]
|
|
26
|
+
--debug Print debugging information
|
|
27
|
+
[boolean] [default: false]
|
|
28
|
+
--verbose Prints every peer dependency, even those that
|
|
29
|
+
are met [boolean] [default: false]
|
|
30
|
+
--runOnlyOnRootDependencies Run tool only on package root dependencies
|
|
31
|
+
[boolean] [default: false]
|
|
32
|
+
--findSolutions Search for solutions and print package
|
|
33
|
+
installation commands
|
|
34
|
+
[boolean] [default: false]
|
|
35
|
+
--install Install missing or incorrect peerDependencies
|
|
36
|
+
[boolean] [default: false]
|
|
25
37
|
```
|
|
26
38
|
|
|
27
39
|
---
|
|
@@ -12,6 +12,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
12
12
|
return __assign.apply(this, arguments);
|
|
13
13
|
};
|
|
14
14
|
exports.__esModule = true;
|
|
15
|
+
exports.checkPeerDependencies = void 0;
|
|
15
16
|
var semver = require("semver");
|
|
16
17
|
var shelljs_1 = require("shelljs");
|
|
17
18
|
var packageManager_1 = require("./packageManager");
|
|
@@ -21,62 +22,55 @@ function getAllNestedPeerDependencies(options) {
|
|
|
21
22
|
var gatheredDependencies = packageUtils_1.gatherPeerDependencies(".", options);
|
|
22
23
|
function applySemverInformation(dep) {
|
|
23
24
|
var installedVersion = packageUtils_1.getInstalledVersion(dep);
|
|
24
|
-
var semverSatisfies = installedVersion ? semver.satisfies(installedVersion, dep.version) : false;
|
|
25
|
+
var semverSatisfies = installedVersion ? semver.satisfies(installedVersion, dep.version, { includePrerelease: true }) : false;
|
|
25
26
|
var isYalc = !!/-[a-f0-9]+-yalc$/.exec(installedVersion);
|
|
26
27
|
return __assign(__assign({}, dep), { installedVersion: installedVersion, semverSatisfies: semverSatisfies, isYalc: isYalc });
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
function applyIgnoreInformation(dep) {
|
|
30
|
+
var isIgnored = options.ignore.includes(dep.name);
|
|
31
|
+
return __assign(__assign({}, dep), { isIgnored: isIgnored });
|
|
32
|
+
}
|
|
33
|
+
return gatheredDependencies.map(applySemverInformation).map(applyIgnoreInformation);
|
|
29
34
|
}
|
|
30
35
|
var recursiveCount = 0;
|
|
31
|
-
var
|
|
36
|
+
var isProblem = function (dep) { return !dep.semverSatisfies && !dep.isIgnored && !dep.isYalc && !dep.isPeerOptionalDependency; };
|
|
37
|
+
var reportPeerDependencyStatus = function (dep, byDepender, showSatisfiedDep, verbose) {
|
|
38
|
+
var message = byDepender ?
|
|
39
|
+
dep.depender.name + "@" + dep.depender.version + " requires " + dep.name + " " + dep.version :
|
|
40
|
+
dep.name + " " + dep.version + " is required by " + dep.depender.name + "@" + dep.depender.version;
|
|
32
41
|
if (dep.semverSatisfies) {
|
|
33
|
-
if (
|
|
34
|
-
console.log(" \u2705 " +
|
|
42
|
+
if (showSatisfiedDep) {
|
|
43
|
+
console.log(" \u2705 " + message + " (" + dep.installedVersion + " is installed)");
|
|
35
44
|
}
|
|
36
45
|
}
|
|
37
46
|
else if (dep.isYalc) {
|
|
38
|
-
console.log(" \u2611\uFE0F " +
|
|
39
|
-
}
|
|
40
|
-
else if (dep.installedVersion) {
|
|
41
|
-
console.log(" \u274C " + dep.depender + "@" + dep.dependerVersion + " requires " + dep.name + " " + dep.version + " (" + dep.installedVersion + " is installed)");
|
|
47
|
+
console.log(" \u2611\uFE0F " + message + " (" + dep.installedVersion + " is installed via yalc)");
|
|
42
48
|
}
|
|
43
|
-
else {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
var reportPeerDependencyStatusByDependee = function (dep, options) {
|
|
48
|
-
if (dep.semverSatisfies) {
|
|
49
|
-
if (options.verbose) {
|
|
50
|
-
console.log(" \u2705 " + dep.name + " " + dep.version + " is required by " + dep.depender + "@" + dep.dependerVersion + " (" + dep.installedVersion + " is installed)");
|
|
49
|
+
else if (dep.installedVersion && dep.isPeerOptionalDependency) {
|
|
50
|
+
if (verbose) {
|
|
51
|
+
console.log(" \u2611\uFE0F " + message + ") OPTIONAL (" + dep.installedVersion + " is installed)");
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
else if (dep.
|
|
54
|
-
|
|
54
|
+
else if (dep.isIgnored) {
|
|
55
|
+
if (verbose) {
|
|
56
|
+
console.log(" \u2611\uFE0F " + message + " IGNORED (" + dep.name + " is not installed)");
|
|
57
|
+
}
|
|
55
58
|
}
|
|
56
59
|
else if (dep.installedVersion) {
|
|
57
|
-
console.log(" \u274C " +
|
|
60
|
+
console.log(" \u274C " + message + ") (" + dep.installedVersion + " is installed)");
|
|
61
|
+
}
|
|
62
|
+
else if (dep.isPeerOptionalDependency) {
|
|
63
|
+
if (verbose) {
|
|
64
|
+
console.log(" \u2611\uFE0F " + message + " OPTIONAL (" + dep.name + " is not installed)");
|
|
65
|
+
}
|
|
58
66
|
}
|
|
59
67
|
else {
|
|
60
|
-
console.log(" \u274C " +
|
|
68
|
+
console.log(" \u274C " + message + " (" + dep.name + " is not installed)");
|
|
61
69
|
}
|
|
62
70
|
};
|
|
63
|
-
function
|
|
64
|
-
var allNestedPeerDependencies = getAllNestedPeerDependencies(options);
|
|
65
|
-
if (options.orderBy === 'depender') {
|
|
66
|
-
allNestedPeerDependencies.sort(function (a, b) { return ("" + a.depender + a.name).localeCompare("" + b.depender + b.name); });
|
|
67
|
-
allNestedPeerDependencies.forEach(function (dep) { return reportPeerDependencyStatusByDepender(dep, options); });
|
|
68
|
-
}
|
|
69
|
-
else if (options.orderBy === 'dependee') {
|
|
70
|
-
allNestedPeerDependencies.sort(function (a, b) { return ("" + a.name + a.depender).localeCompare("" + b.name + b.depender); });
|
|
71
|
-
allNestedPeerDependencies.forEach(function (dep) { return reportPeerDependencyStatusByDependee(dep, options); });
|
|
72
|
-
}
|
|
73
|
-
var problems = allNestedPeerDependencies.filter(function (dep) { return !dep.semverSatisfies && !dep.isYalc; });
|
|
74
|
-
if (!problems.length) {
|
|
75
|
-
console.log(' ✅ All peer dependencies are met');
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
71
|
+
function findSolutions(problems, allNestedPeerDependencies) {
|
|
78
72
|
console.log();
|
|
79
|
-
console.log(
|
|
73
|
+
console.log("Searching for solutions for " + problems.length + " missing dependencies...");
|
|
80
74
|
console.log();
|
|
81
75
|
var resolutions = solution_1.findPossibleResolutions(problems, allNestedPeerDependencies);
|
|
82
76
|
var resolutionsWithSolutions = resolutions.filter(function (r) { return r.resolution; });
|
|
@@ -91,37 +85,82 @@ function checkPeerDependencies(packageManager, options) {
|
|
|
91
85
|
if (nosolution.length > 0) {
|
|
92
86
|
console.error();
|
|
93
87
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
88
|
+
return { resolutionsWithSolutions: resolutionsWithSolutions, nosolution: nosolution };
|
|
89
|
+
}
|
|
90
|
+
function installPeerDependencies(commandLines, options, nosolution, packageManager) {
|
|
91
|
+
console.log('Installing peerDependencies...');
|
|
92
|
+
console.log();
|
|
93
|
+
commandLines.forEach(function (command) {
|
|
94
|
+
console.log("$ " + command);
|
|
95
|
+
shelljs_1.exec(command);
|
|
97
96
|
console.log();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
97
|
+
});
|
|
98
|
+
var newProblems = getAllNestedPeerDependencies(options)
|
|
99
|
+
.filter(function (dep) { return isProblem(dep); })
|
|
100
|
+
.filter(function (dep) { return !nosolution.some(function (x) { return packageUtils_1.isSameDep(x.problem, dep); }); });
|
|
101
|
+
if (nosolution.length === 0 && newProblems.length === 0) {
|
|
102
|
+
console.log('All peer dependencies are met');
|
|
103
|
+
}
|
|
104
|
+
if (newProblems.length > 0) {
|
|
105
|
+
console.log("Found " + newProblems.length + " new unmet peerDependencies...");
|
|
106
|
+
if (++recursiveCount < 5) {
|
|
107
|
+
return checkPeerDependencies(packageManager, options);
|
|
108
108
|
}
|
|
109
|
-
|
|
110
|
-
console.
|
|
111
|
-
|
|
112
|
-
return checkPeerDependencies(packageManager, options);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
console.error('Recursion limit reached (5)');
|
|
116
|
-
process.exit(5);
|
|
117
|
-
}
|
|
109
|
+
else {
|
|
110
|
+
console.error('Recursion limit reached (5)');
|
|
111
|
+
process.exit(5);
|
|
118
112
|
}
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
function report(options, allNestedPeerDependencies) {
|
|
117
|
+
if (options.orderBy === 'depender') {
|
|
118
|
+
allNestedPeerDependencies.sort(function (a, b) { return ("" + a.depender + a.name).localeCompare("" + b.depender + b.name); });
|
|
119
|
+
}
|
|
120
|
+
else if (options.orderBy == 'dependee') {
|
|
121
|
+
allNestedPeerDependencies.sort(function (a, b) { return ("" + a.name + a.depender).localeCompare("" + b.name + b.depender); });
|
|
122
|
+
}
|
|
123
|
+
allNestedPeerDependencies.forEach(function (dep) {
|
|
124
|
+
var relatedPeerDeps = allNestedPeerDependencies.filter(function (other) { return other.name === dep.name && other !== dep; });
|
|
125
|
+
var showIfSatisfied = options.verbose || relatedPeerDeps.some(function (dep) { return isProblem(dep); });
|
|
126
|
+
reportPeerDependencyStatus(dep, options.orderBy === 'depender', showIfSatisfied, options.verbose);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function checkPeerDependencies(packageManager, options) {
|
|
130
|
+
var allNestedPeerDependencies = getAllNestedPeerDependencies(options);
|
|
131
|
+
report(options, allNestedPeerDependencies);
|
|
132
|
+
var problems = allNestedPeerDependencies.filter(function (dep) { return isProblem(dep); });
|
|
133
|
+
if (!problems.length) {
|
|
134
|
+
console.log(' ✅ All peer dependencies are met');
|
|
119
135
|
return;
|
|
120
136
|
}
|
|
121
|
-
|
|
122
|
-
|
|
137
|
+
if (options.install) {
|
|
138
|
+
var _a = findSolutions(problems, allNestedPeerDependencies), nosolution = _a.nosolution, resolutionsWithSolutions = _a.resolutionsWithSolutions;
|
|
139
|
+
var commandLines = packageManager_1.getCommandLines(packageManager, resolutionsWithSolutions);
|
|
140
|
+
if (commandLines.length) {
|
|
141
|
+
return installPeerDependencies(commandLines, options, nosolution, packageManager);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (options.findSolutions) {
|
|
145
|
+
var resolutionsWithSolutions = findSolutions(problems, allNestedPeerDependencies).resolutionsWithSolutions;
|
|
146
|
+
var commandLines = packageManager_1.getCommandLines(packageManager, resolutionsWithSolutions);
|
|
147
|
+
if (commandLines.length) {
|
|
148
|
+
console.log();
|
|
149
|
+
console.log("Install peerDependencies using " + (commandLines.length > 1 ? 'these commands:' : 'this command') + ":");
|
|
150
|
+
console.log();
|
|
151
|
+
commandLines.forEach(function (command) { return console.log(command); });
|
|
152
|
+
console.log();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log();
|
|
157
|
+
console.log("Search for solutions using this command:");
|
|
158
|
+
console.log();
|
|
159
|
+
console.log("npx check-peer-dependencies --findSolutions");
|
|
160
|
+
console.log();
|
|
161
|
+
console.log("Install peerDependencies using this command:");
|
|
123
162
|
console.log();
|
|
124
|
-
|
|
163
|
+
console.log("npx check-peer-dependencies --install");
|
|
125
164
|
console.log();
|
|
126
165
|
}
|
|
127
166
|
process.exit(1);
|
package/dist/cli.js
CHANGED
|
@@ -5,6 +5,8 @@ var yarrrrgs = require("yargs");
|
|
|
5
5
|
var checkPeerDependencies_1 = require("./checkPeerDependencies");
|
|
6
6
|
var packageManager_1 = require("./packageManager");
|
|
7
7
|
var options = yarrrrgs
|
|
8
|
+
.pkgConf('checkPeerDependencies')
|
|
9
|
+
.usage('Options may also be stored in package.json under the "checkPeerDependencies" key')
|
|
8
10
|
.option('help', {
|
|
9
11
|
alias: 'h',
|
|
10
12
|
boolean: true,
|
|
@@ -20,7 +22,7 @@ var options = yarrrrgs
|
|
|
20
22
|
})
|
|
21
23
|
.option('orderBy', {
|
|
22
24
|
choices: ['depender', 'dependee'],
|
|
23
|
-
"default": '
|
|
25
|
+
"default": 'dependee',
|
|
24
26
|
description: 'Order the output by depender or dependee'
|
|
25
27
|
})
|
|
26
28
|
.option('debug', {
|
|
@@ -32,11 +34,22 @@ var options = yarrrrgs
|
|
|
32
34
|
boolean: true,
|
|
33
35
|
"default": false,
|
|
34
36
|
description: 'Prints every peer dependency, even those that are met'
|
|
37
|
+
})
|
|
38
|
+
.option('ignore', {
|
|
39
|
+
string: true,
|
|
40
|
+
array: true,
|
|
41
|
+
"default": [],
|
|
42
|
+
description: 'package name to ignore (may specify multiple)'
|
|
35
43
|
})
|
|
36
44
|
.option('runOnlyOnRootDependencies', {
|
|
37
45
|
boolean: true,
|
|
38
46
|
"default": false,
|
|
39
47
|
description: 'Run tool only on package root dependencies'
|
|
48
|
+
})
|
|
49
|
+
.option('findSolutions', {
|
|
50
|
+
boolean: true,
|
|
51
|
+
"default": false,
|
|
52
|
+
description: 'Search for solutions and print package installation commands'
|
|
40
53
|
})
|
|
41
54
|
.option('install', {
|
|
42
55
|
boolean: true,
|
package/dist/packageManager.js
CHANGED
package/dist/packageUtils.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
exports.__esModule = true;
|
|
3
|
+
exports.isSameDep = exports.getInstalledVersion = exports.resolvePackageDir = exports.getPackageMeta = exports.walkPackageDependencyTree = exports.gatherPeerDependencies = void 0;
|
|
14
4
|
var fs = require("fs");
|
|
15
5
|
var path = require("path");
|
|
16
6
|
var resolve = require("resolve");
|
|
@@ -38,7 +28,7 @@ function walkPackageDependencyTree(packagePath, visitor, visitedPaths, options)
|
|
|
38
28
|
throw new Error("package.json missing at " + packageJsonPath + ".");
|
|
39
29
|
}
|
|
40
30
|
var packageJson = readJson_1.readJson(packageJsonPath);
|
|
41
|
-
var packageDependencies =
|
|
31
|
+
var packageDependencies = getPackageMeta(packagePath, packageJson);
|
|
42
32
|
if (options.debug) {
|
|
43
33
|
console.log(packageJsonPath);
|
|
44
34
|
packageDependencies.peerDependencies.forEach(function (dep) { return console.log(dep); });
|
|
@@ -69,30 +59,36 @@ function walkPackageDependencyTree(packagePath, visitor, visitedPaths, options)
|
|
|
69
59
|
packageDependencies.dependencies.forEach(walkDependency);
|
|
70
60
|
}
|
|
71
61
|
exports.walkPackageDependencyTree = walkPackageDependencyTree;
|
|
72
|
-
function buildDependencyArray(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
62
|
+
function buildDependencyArray(type, pkgJson, depender) {
|
|
63
|
+
var dependenciesObject = pkgJson[type] || {};
|
|
64
|
+
var peerDependenciesMeta = pkgJson.peerDependenciesMeta || {};
|
|
65
|
+
// backwards compat
|
|
66
|
+
var peerDevDependencies = pkgJson.peerDevDependencies || [];
|
|
67
|
+
var packageNames = Object.keys(dependenciesObject);
|
|
68
|
+
return packageNames.map(function (name) {
|
|
69
|
+
var _a, _b;
|
|
70
|
+
var isPeerOptionalDependency = !!((_a = peerDependenciesMeta[name]) === null || _a === void 0 ? void 0 : _a.optional);
|
|
71
|
+
var isPeerDevDependency = !!((_b = peerDependenciesMeta[name]) === null || _b === void 0 ? void 0 : _b.dev) || !!peerDevDependencies.includes(name);
|
|
72
|
+
return {
|
|
73
|
+
name: name,
|
|
74
|
+
type: type,
|
|
75
|
+
version: dependenciesObject[name],
|
|
76
|
+
isPeerDevDependency: isPeerDevDependency,
|
|
77
|
+
isPeerOptionalDependency: isPeerOptionalDependency,
|
|
78
|
+
depender: depender
|
|
79
|
+
};
|
|
80
|
+
});
|
|
80
81
|
}
|
|
81
|
-
function
|
|
82
|
-
var name = packageJson.name,
|
|
83
|
-
var
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
devDependencies: buildDependencyArray(packagePath, packageJson, devDependencies),
|
|
90
|
-
optionalDependencies: buildDependencyArray(packagePath, packageJson, optionalDependencies),
|
|
91
|
-
peerDependencies: buildDependencyArray(packagePath, packageJson, peerDependencies).map(applyPeerDevDependencies),
|
|
92
|
-
peerDevDependencies: peerDevDependencies
|
|
93
|
-
};
|
|
82
|
+
function getPackageMeta(packagePath, packageJson) {
|
|
83
|
+
var name = packageJson.name, version = packageJson.version;
|
|
84
|
+
var packageMeta = { name: name, version: version, packagePath: packagePath };
|
|
85
|
+
packageMeta.dependencies = buildDependencyArray("dependencies", packageJson, packageMeta);
|
|
86
|
+
packageMeta.devDependencies = buildDependencyArray("devDependencies", packageJson, packageMeta);
|
|
87
|
+
packageMeta.optionalDependencies = buildDependencyArray("optionalDependencies", packageJson, packageMeta);
|
|
88
|
+
packageMeta.peerDependencies = buildDependencyArray("peerDependencies", packageJson, packageMeta);
|
|
89
|
+
return packageMeta;
|
|
94
90
|
}
|
|
95
|
-
exports.
|
|
91
|
+
exports.getPackageMeta = getPackageMeta;
|
|
96
92
|
function resolvePackageDir(basedir, packageName) {
|
|
97
93
|
var packagePath;
|
|
98
94
|
// In resolve() v2.x this callback has a different signature
|
|
@@ -124,17 +120,10 @@ function getInstalledVersion(dep) {
|
|
|
124
120
|
}
|
|
125
121
|
exports.getInstalledVersion = getInstalledVersion;
|
|
126
122
|
function isSameDep(a, b) {
|
|
127
|
-
var keys = [
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
"dependerVersion",
|
|
133
|
-
"installedVersion",
|
|
134
|
-
"semverSatisfies",
|
|
135
|
-
"isYalc",
|
|
136
|
-
"isPeerDevDependency",
|
|
137
|
-
];
|
|
138
|
-
return keys.every(function (key) { return a[key] === b[key]; });
|
|
123
|
+
var keys = ["name", "version", "installedVersion", "semverSatisfies", "isYalc", "isPeerDevDependency",];
|
|
124
|
+
return keys.every(function (key) { return a[key] === b[key]; }) &&
|
|
125
|
+
a.depender.name === b.depender.name &&
|
|
126
|
+
a.depender.version === b.depender.version &&
|
|
127
|
+
a.depender.packagePath === b.depender.packagePath;
|
|
139
128
|
}
|
|
140
129
|
exports.isSameDep = isSameDep;
|
package/dist/readJson.js
CHANGED
package/dist/solution.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
exports.__esModule = true;
|
|
3
|
+
exports.findPossibleResolutions = void 0;
|
|
3
4
|
var semver = require("semver");
|
|
4
5
|
var shelljs_1 = require("shelljs");
|
|
5
6
|
function semverReverseSort(a, b) {
|
|
@@ -26,12 +27,15 @@ function findPossibleResolutions(problems, allPeerDependencies) {
|
|
|
26
27
|
exports.findPossibleResolutions = findPossibleResolutions;
|
|
27
28
|
function findPossibleResolution(packageName, allPeerDeps) {
|
|
28
29
|
var requiredPeerVersions = allPeerDeps.filter(function (dep) { return dep.name === packageName; });
|
|
30
|
+
// todo: skip this step if only one required peer version and it's an exact version
|
|
29
31
|
var command = "npm view " + packageName + " versions";
|
|
30
32
|
var rawVersionsInfo;
|
|
31
33
|
try {
|
|
32
34
|
rawVersionsInfo = shelljs_1.exec(command, { silent: true }).stdout;
|
|
33
35
|
var availableVersions = JSON.parse(rawVersionsInfo.replace(/'/g, '"')).sort(semverReverseSort);
|
|
34
|
-
return availableVersions.find(function (ver) { return requiredPeerVersions.every(function (peerVer) {
|
|
36
|
+
return availableVersions.find(function (ver) { return requiredPeerVersions.every(function (peerVer) {
|
|
37
|
+
return semver.satisfies(ver, peerVer.version, { includePrerelease: true });
|
|
38
|
+
}); });
|
|
35
39
|
}
|
|
36
40
|
catch (err) {
|
|
37
41
|
console.error("Error while running command: '" + command + "'");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "check-peer-dependencies",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Checks peer dependencies of the current package. Offers solutions for any that are unmet.",
|
|
5
5
|
"main": "dist/check_peer_dependencies.js",
|
|
6
6
|
"scripts": {
|
|
@@ -29,17 +29,17 @@
|
|
|
29
29
|
},
|
|
30
30
|
"homepage": "https://github.com/christopherthielen/check-peer-dependencies#readme",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"resolve": "^1.
|
|
33
|
-
"semver": "^7.
|
|
34
|
-
"shelljs": "^0.8.
|
|
35
|
-
"yargs": "^
|
|
32
|
+
"resolve": "^1.19.0",
|
|
33
|
+
"semver": "^7.3.4",
|
|
34
|
+
"shelljs": "^0.8.4",
|
|
35
|
+
"yargs": "^16.2.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@types/node": "^
|
|
39
|
-
"@types/semver": "^
|
|
40
|
-
"@types/shelljs": "^0.8.
|
|
41
|
-
"@types/yargs": "^
|
|
42
|
-
"@uirouter/publish-scripts": "^2.
|
|
43
|
-
"typescript": "^
|
|
38
|
+
"@types/node": "^14.14.16",
|
|
39
|
+
"@types/semver": "^7.3.4",
|
|
40
|
+
"@types/shelljs": "^0.8.8",
|
|
41
|
+
"@types/yargs": "^15.0.12",
|
|
42
|
+
"@uirouter/publish-scripts": "^2.5.4",
|
|
43
|
+
"typescript": "^4.1.3"
|
|
44
44
|
}
|
|
45
45
|
}
|