check-peer-dependencies 4.0.0 → 4.2.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 +38 -28
- package/CHANGELOG.md +22 -0
- package/README.md +19 -5
- package/dist/checkPeerDependencies.js +24 -16
- package/dist/cli.js +8 -0
- package/dist/packageManager.js +2 -2
- package/dist/packageUtils.js +17 -15
- package/package.json +1 -1
- package/dist/check_peer_dependencies.js +0 -77
- package/dist/resolvePackageDir.js +0 -20
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,16 +22,31 @@
|
|
|
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="
|
|
25
|
+
<list default="true" id="ebeb713d-6dc4-42d1-a42e-54aad95d9c0a" name="Default Changelist" comment="feat: detect yarn2 lockfile (and then use 'yarn up') Note: yarn2 pnp will likely never be supported">
|
|
26
|
+
<change beforePath="$PROJECT_DIR$/src/packageUtils.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/packageUtils.ts" afterDir="false" />
|
|
27
|
+
</list>
|
|
23
28
|
<option name="SHOW_DIALOG" value="false" />
|
|
24
29
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
25
30
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
26
31
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
|
27
32
|
</component>
|
|
28
33
|
<component name="Git.Settings">
|
|
34
|
+
<option name="RECENT_BRANCH_BY_REPOSITORY">
|
|
35
|
+
<map>
|
|
36
|
+
<entry key="$PROJECT_DIR$" value="yarn2-sorta-notreally" />
|
|
37
|
+
</map>
|
|
38
|
+
</option>
|
|
29
39
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
|
30
40
|
<option name="UPDATE_TYPE" value="REBASE" />
|
|
31
41
|
</component>
|
|
42
|
+
<component name="GitSEFilterConfiguration">
|
|
43
|
+
<file-type-list>
|
|
44
|
+
<filtered-out-file-type name="LOCAL_BRANCH" />
|
|
45
|
+
<filtered-out-file-type name="REMOTE_BRANCH" />
|
|
46
|
+
<filtered-out-file-type name="TAG" />
|
|
47
|
+
<filtered-out-file-type name="COMMIT_BY_MESSAGE" />
|
|
48
|
+
</file-type-list>
|
|
49
|
+
</component>
|
|
32
50
|
<component name="GitToolBoxStore">
|
|
33
51
|
<option name="projectConfigVersion" value="2" />
|
|
34
52
|
<option name="recentBranches">
|
|
@@ -38,13 +56,9 @@
|
|
|
38
56
|
<RecentBranchesForRepo>
|
|
39
57
|
<option name="branches">
|
|
40
58
|
<list>
|
|
41
|
-
<RecentBranch>
|
|
42
|
-
<option name="branchName" value="match-prereleases" />
|
|
43
|
-
<option name="lastUsedInstant" value="1609100456" />
|
|
44
|
-
</RecentBranch>
|
|
45
59
|
<RecentBranch>
|
|
46
60
|
<option name="branchName" value="master" />
|
|
47
|
-
<option name="lastUsedInstant" value="
|
|
61
|
+
<option name="lastUsedInstant" value="1609100767" />
|
|
48
62
|
</RecentBranch>
|
|
49
63
|
</list>
|
|
50
64
|
</option>
|
|
@@ -55,6 +69,9 @@
|
|
|
55
69
|
</RecentBranches>
|
|
56
70
|
</option>
|
|
57
71
|
</component>
|
|
72
|
+
<component name="MarkdownSettingsMigration">
|
|
73
|
+
<option name="stateVersion" value="1" />
|
|
74
|
+
</component>
|
|
58
75
|
<component name="ProjectId" id="1SkfJRmHXPtjMGY19cBVwFevkIM" />
|
|
59
76
|
<component name="ProjectLevelVcsManager">
|
|
60
77
|
<OptionsSetting value="false" id="Update" />
|
|
@@ -65,22 +82,16 @@
|
|
|
65
82
|
<option name="hideEmptyMiddlePackages" value="true" />
|
|
66
83
|
<option name="showLibraryContents" value="true" />
|
|
67
84
|
</component>
|
|
68
|
-
<component name="PropertiesComponent"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
|
|
79
|
-
<property name="nodejs_package_manager_path" value="yarn" />
|
|
80
|
-
<property name="settings.editor.selected.configurable" value="configurable.group.appearance" />
|
|
81
|
-
<property name="ts.external.directory.path" value="$PROJECT_DIR$/node_modules/typescript/lib" />
|
|
82
|
-
<property name="vue.rearranger.settings.migration" value="true" />
|
|
83
|
-
</component>
|
|
85
|
+
<component name="PropertiesComponent"><![CDATA[{
|
|
86
|
+
"keyToString": {
|
|
87
|
+
"node.js.detected.package.eslint": "true",
|
|
88
|
+
"node.js.detected.package.tslint": "true",
|
|
89
|
+
"node.js.selected.package.eslint": "(autodetect)",
|
|
90
|
+
"node.js.selected.package.tslint": "(autodetect)",
|
|
91
|
+
"nodejs_package_manager_path": "yarn",
|
|
92
|
+
"ts.external.directory.path": "/Users/chris/projects/check-peer-dependencies/node_modules/typescript/lib"
|
|
93
|
+
}
|
|
94
|
+
}]]></component>
|
|
84
95
|
<component name="RecentsManager">
|
|
85
96
|
<key name="es6.move.members.recent.items">
|
|
86
97
|
<recent name="$PROJECT_DIR$/src/packageUtils.ts" />
|
|
@@ -303,13 +314,8 @@
|
|
|
303
314
|
</entry>
|
|
304
315
|
</map>
|
|
305
316
|
</option>
|
|
306
|
-
<option name="oldMeFiltersMigrated" value="true" />
|
|
307
317
|
</component>
|
|
308
318
|
<component name="VcsManagerConfiguration">
|
|
309
|
-
<MESSAGE value="chore: add shelljs dependency" />
|
|
310
|
-
<MESSAGE value="chore: add yargs and shelljs dependency" />
|
|
311
|
-
<MESSAGE value="chore: add yargs and shelljs and semver dependencies" />
|
|
312
|
-
<MESSAGE value="refactor: extract cli.ts" />
|
|
313
319
|
<MESSAGE value="fix(packageManager): remove console.log, switch to boolean parameters" />
|
|
314
320
|
<MESSAGE value="fix(checkPeerDependencies): check for yalc'd packages using installedVersion, not dependerVersion" />
|
|
315
321
|
<MESSAGE value="chore: Add README.md and CHANGELOG.md" />
|
|
@@ -331,6 +337,10 @@
|
|
|
331
337
|
<MESSAGE value="feat(peerDependencyMeta): support peerDependencyMeta in package.json to ignore optional peer dependencies" />
|
|
332
338
|
<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" />
|
|
333
339
|
<MESSAGE value="chore: update all dependencies" />
|
|
334
|
-
<
|
|
340
|
+
<MESSAGE value="feat: load checkPeerDependencies config from package.json (and merge with CLI options)" />
|
|
341
|
+
<MESSAGE value="feat: Add support for ignoring peer dependencies (via cli option or config stored in package.json)" />
|
|
342
|
+
<MESSAGE value="fix: Install peer deps as devDependencies if the peer dep came from a dev dependency fix: Properly install dev dependencies when using npm as the package manager" />
|
|
343
|
+
<MESSAGE value="feat: detect yarn2 lockfile (and then use 'yarn up') Note: yarn2 pnp will likely never be supported" />
|
|
344
|
+
<option name="LAST_COMMIT_MESSAGE" value="feat: detect yarn2 lockfile (and then use 'yarn up') Note: yarn2 pnp will likely never be supported" />
|
|
335
345
|
</component>
|
|
336
346
|
</project>
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
# 4.2.0 (2023-03-13)
|
|
2
|
+
[Compare `check-peer-dependencies` versions 4.1.0 and 4.2.0](https://github.com/christopherthielen/check-peer-dependencies/compare/4.1.0...4.2.0)
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Install peer deps as devDependencies if the peer dep came from a dev dependency ([6ef3021](https://github.com/christopherthielen/check-peer-dependencies/commit/6ef3021)), closes [#21](https://github.com/christopherthielen/check-peer-dependencies/issues/21)
|
|
7
|
+
* Method for determining the installed version fails [#27](https://github.com/christopherthielen/check-peer-dependencies/issues/27) ([8058585](https://github.com/christopherthielen/check-peer-dependencies/commit/8058585))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# 4.1.0 (2021-11-28)
|
|
13
|
+
[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)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* 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))
|
|
18
|
+
* load checkPeerDependencies config from package.json (and merge with CLI options) ([e2f0fee](https://github.com/christopherthielen/check-peer-dependencies/commit/e2f0fee))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
1
23
|
# 4.0.0 (2020-12-27)
|
|
2
24
|
[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)
|
|
3
25
|
|
package/README.md
CHANGED
|
@@ -17,11 +17,25 @@ 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
|
+
--ignore package name to ignore (may specify multiple)
|
|
31
|
+
[array] [default: []]
|
|
32
|
+
--runOnlyOnRootDependencies Run tool only on package root dependencies
|
|
33
|
+
[boolean] [default: false]
|
|
34
|
+
--findSolutions Search for solutions and print package
|
|
35
|
+
installation commands
|
|
36
|
+
[boolean] [default: false]
|
|
37
|
+
--install Install missing or incorrect peerDependencies
|
|
38
|
+
[boolean] [default: false]
|
|
25
39
|
```
|
|
26
40
|
|
|
27
41
|
---
|
|
@@ -26,10 +26,15 @@ function getAllNestedPeerDependencies(options) {
|
|
|
26
26
|
var isYalc = !!/-[a-f0-9]+-yalc$/.exec(installedVersion);
|
|
27
27
|
return __assign(__assign({}, dep), { installedVersion: installedVersion, semverSatisfies: semverSatisfies, isYalc: isYalc });
|
|
28
28
|
}
|
|
29
|
-
|
|
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);
|
|
30
34
|
}
|
|
31
35
|
var recursiveCount = 0;
|
|
32
|
-
var
|
|
36
|
+
var isProblem = function (dep) { return !dep.semverSatisfies && !dep.isIgnored && !dep.isYalc && !dep.isPeerOptionalDependency; };
|
|
37
|
+
var reportPeerDependencyStatus = function (dep, byDepender, showSatisfiedDep, verbose) {
|
|
33
38
|
var message = byDepender ?
|
|
34
39
|
dep.depender.name + "@" + dep.depender.version + " requires " + dep.name + " " + dep.version :
|
|
35
40
|
dep.name + " " + dep.version + " is required by " + dep.depender.name + "@" + dep.depender.version;
|
|
@@ -42,16 +47,21 @@ var reportPeerDependencyStatus = function (dep, byDepender, showSatisfiedDep, sh
|
|
|
42
47
|
console.log(" \u2611\uFE0F " + message + " (" + dep.installedVersion + " is installed via yalc)");
|
|
43
48
|
}
|
|
44
49
|
else if (dep.installedVersion && dep.isPeerOptionalDependency) {
|
|
45
|
-
if (
|
|
46
|
-
console.log(" \u2611\uFE0F
|
|
50
|
+
if (verbose) {
|
|
51
|
+
console.log(" \u2611\uFE0F " + message + ") OPTIONAL (" + dep.installedVersion + " is installed)");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (dep.isIgnored) {
|
|
55
|
+
if (verbose) {
|
|
56
|
+
console.log(" \u2611\uFE0F " + message + " IGNORED (" + dep.name + " is not installed)");
|
|
47
57
|
}
|
|
48
58
|
}
|
|
49
59
|
else if (dep.installedVersion) {
|
|
50
60
|
console.log(" \u274C " + message + ") (" + dep.installedVersion + " is installed)");
|
|
51
61
|
}
|
|
52
62
|
else if (dep.isPeerOptionalDependency) {
|
|
53
|
-
if (
|
|
54
|
-
console.log(" \u2611\uFE0F
|
|
63
|
+
if (verbose) {
|
|
64
|
+
console.log(" \u2611\uFE0F " + message + " OPTIONAL (" + dep.name + " is not installed)");
|
|
55
65
|
}
|
|
56
66
|
}
|
|
57
67
|
else {
|
|
@@ -85,14 +95,14 @@ function installPeerDependencies(commandLines, options, nosolution, packageManag
|
|
|
85
95
|
shelljs_1.exec(command);
|
|
86
96
|
console.log();
|
|
87
97
|
});
|
|
88
|
-
var
|
|
89
|
-
.filter(function (dep) { return
|
|
98
|
+
var newProblems = getAllNestedPeerDependencies(options)
|
|
99
|
+
.filter(function (dep) { return isProblem(dep); })
|
|
90
100
|
.filter(function (dep) { return !nosolution.some(function (x) { return packageUtils_1.isSameDep(x.problem, dep); }); });
|
|
91
|
-
if (nosolution.length === 0 &&
|
|
101
|
+
if (nosolution.length === 0 && newProblems.length === 0) {
|
|
92
102
|
console.log('All peer dependencies are met');
|
|
93
103
|
}
|
|
94
|
-
if (
|
|
95
|
-
console.log("Found " +
|
|
104
|
+
if (newProblems.length > 0) {
|
|
105
|
+
console.log("Found " + newProblems.length + " new unmet peerDependencies...");
|
|
96
106
|
if (++recursiveCount < 5) {
|
|
97
107
|
return checkPeerDependencies(packageManager, options);
|
|
98
108
|
}
|
|
@@ -111,17 +121,15 @@ function report(options, allNestedPeerDependencies) {
|
|
|
111
121
|
allNestedPeerDependencies.sort(function (a, b) { return ("" + a.name + a.depender).localeCompare("" + b.name + b.depender); });
|
|
112
122
|
}
|
|
113
123
|
allNestedPeerDependencies.forEach(function (dep) {
|
|
114
|
-
var isUnsatisfied = function (dep) { return !dep.semverSatisfies && !dep.isYalc; };
|
|
115
124
|
var relatedPeerDeps = allNestedPeerDependencies.filter(function (other) { return other.name === dep.name && other !== dep; });
|
|
116
|
-
var showIfSatisfied = options.verbose || relatedPeerDeps.some(
|
|
117
|
-
|
|
118
|
-
reportPeerDependencyStatus(dep, options.orderBy === 'depender', showIfSatisfied, showOptionalDep);
|
|
125
|
+
var showIfSatisfied = options.verbose || relatedPeerDeps.some(function (dep) { return isProblem(dep); });
|
|
126
|
+
reportPeerDependencyStatus(dep, options.orderBy === 'depender', showIfSatisfied, options.verbose);
|
|
119
127
|
});
|
|
120
128
|
}
|
|
121
129
|
function checkPeerDependencies(packageManager, options) {
|
|
122
130
|
var allNestedPeerDependencies = getAllNestedPeerDependencies(options);
|
|
123
131
|
report(options, allNestedPeerDependencies);
|
|
124
|
-
var problems = allNestedPeerDependencies.filter(function (dep) { return
|
|
132
|
+
var problems = allNestedPeerDependencies.filter(function (dep) { return isProblem(dep); });
|
|
125
133
|
if (!problems.length) {
|
|
126
134
|
console.log(' ✅ All peer dependencies are met');
|
|
127
135
|
return;
|
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,
|
|
@@ -32,6 +34,12 @@ 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,
|
package/dist/packageManager.js
CHANGED
|
@@ -29,12 +29,12 @@ function getCommandLines(packageManager, resolutions) {
|
|
|
29
29
|
commands.push("yarn upgrade " + upgrades.join(' '));
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
else if (packageManager === 'npm' && (installs.length || upgrades.length)) {
|
|
32
|
+
else if (packageManager === 'npm' && (installs.length || upgrades.length || devInstalls.length)) {
|
|
33
33
|
if (installs.length || upgrades.length) {
|
|
34
34
|
commands.push("npm install " + installs.concat(upgrades).join(' '));
|
|
35
35
|
}
|
|
36
36
|
if (devInstalls.length) {
|
|
37
|
-
commands.push("npm install -D " +
|
|
37
|
+
commands.push("npm install -D " + devInstalls);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
return commands;
|
package/dist/packageUtils.js
CHANGED
|
@@ -10,14 +10,14 @@ function gatherPeerDependencies(packagePath, options) {
|
|
|
10
10
|
var visitor = function (path, json, deps) {
|
|
11
11
|
peerDeps = peerDeps.concat(deps.peerDependencies);
|
|
12
12
|
};
|
|
13
|
-
walkPackageDependencyTree(packagePath, visitor, [], options);
|
|
13
|
+
walkPackageDependencyTree(packagePath, false, visitor, [], options);
|
|
14
14
|
// Eliminate duplicates
|
|
15
15
|
return peerDeps.reduce(function (acc, dep) {
|
|
16
16
|
return acc.some(function (dep2) { return isSameDep(dep, dep2); }) ? acc : acc.concat(dep);
|
|
17
17
|
}, []);
|
|
18
18
|
}
|
|
19
19
|
exports.gatherPeerDependencies = gatherPeerDependencies;
|
|
20
|
-
function walkPackageDependencyTree(packagePath, visitor, visitedPaths, options) {
|
|
20
|
+
function walkPackageDependencyTree(packagePath, isAncestorDevDependency, visitor, visitedPaths, options) {
|
|
21
21
|
var isRootPackage = visitedPaths.length === 0;
|
|
22
22
|
if (visitedPaths.includes(packagePath)) {
|
|
23
23
|
return;
|
|
@@ -28,13 +28,13 @@ function walkPackageDependencyTree(packagePath, visitor, visitedPaths, options)
|
|
|
28
28
|
throw new Error("package.json missing at " + packageJsonPath + ".");
|
|
29
29
|
}
|
|
30
30
|
var packageJson = readJson_1.readJson(packageJsonPath);
|
|
31
|
-
var packageDependencies = getPackageMeta(packagePath, packageJson);
|
|
31
|
+
var packageDependencies = getPackageMeta(packagePath, packageJson, isAncestorDevDependency);
|
|
32
32
|
if (options.debug) {
|
|
33
33
|
console.log(packageJsonPath);
|
|
34
34
|
packageDependencies.peerDependencies.forEach(function (dep) { return console.log(dep); });
|
|
35
35
|
}
|
|
36
36
|
visitor(packagePath, packageJson, packageDependencies);
|
|
37
|
-
function walkDependency(dependency) {
|
|
37
|
+
function walkDependency(dependency, isAncestorDevDependency) {
|
|
38
38
|
if (resolve.isCore(dependency.name)) {
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
@@ -51,15 +51,15 @@ function walkPackageDependencyTree(packagePath, visitor, visitedPaths, options)
|
|
|
51
51
|
throw new Error("WARN: Unable to resolve package " + dependency.name + " from " + packagePath);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
walkPackageDependencyTree(dependencyPath, visitor, visitedPaths, options);
|
|
54
|
+
walkPackageDependencyTree(dependencyPath, isAncestorDevDependency, visitor, visitedPaths, options);
|
|
55
55
|
}
|
|
56
56
|
if (isRootPackage)
|
|
57
|
-
packageDependencies.devDependencies.forEach(walkDependency);
|
|
57
|
+
packageDependencies.devDependencies.forEach(function (dep) { return walkDependency(dep, true); });
|
|
58
58
|
if (isRootPackage || !options.runOnlyOnRootDependencies)
|
|
59
|
-
packageDependencies.dependencies.forEach(walkDependency);
|
|
59
|
+
packageDependencies.dependencies.forEach(function (dep) { return walkDependency(dep, false); });
|
|
60
60
|
}
|
|
61
61
|
exports.walkPackageDependencyTree = walkPackageDependencyTree;
|
|
62
|
-
function buildDependencyArray(type, pkgJson, depender) {
|
|
62
|
+
function buildDependencyArray(type, pkgJson, depender, isAncestorDevDependency) {
|
|
63
63
|
var dependenciesObject = pkgJson[type] || {};
|
|
64
64
|
var peerDependenciesMeta = pkgJson.peerDependenciesMeta || {};
|
|
65
65
|
// backwards compat
|
|
@@ -68,7 +68,7 @@ function buildDependencyArray(type, pkgJson, depender) {
|
|
|
68
68
|
return packageNames.map(function (name) {
|
|
69
69
|
var _a, _b;
|
|
70
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);
|
|
71
|
+
var isPeerDevDependency = isAncestorDevDependency || !!((_b = peerDependenciesMeta[name]) === null || _b === void 0 ? void 0 : _b.dev) || !!peerDevDependencies.includes(name);
|
|
72
72
|
return {
|
|
73
73
|
name: name,
|
|
74
74
|
type: type,
|
|
@@ -79,13 +79,13 @@ function buildDependencyArray(type, pkgJson, depender) {
|
|
|
79
79
|
};
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
|
-
function getPackageMeta(packagePath, packageJson) {
|
|
82
|
+
function getPackageMeta(packagePath, packageJson, isAncestorDevDependency) {
|
|
83
83
|
var name = packageJson.name, version = packageJson.version;
|
|
84
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);
|
|
85
|
+
packageMeta.dependencies = buildDependencyArray("dependencies", packageJson, packageMeta, isAncestorDevDependency);
|
|
86
|
+
packageMeta.devDependencies = buildDependencyArray("devDependencies", packageJson, packageMeta, isAncestorDevDependency);
|
|
87
|
+
packageMeta.optionalDependencies = buildDependencyArray("optionalDependencies", packageJson, packageMeta, isAncestorDevDependency);
|
|
88
|
+
packageMeta.peerDependencies = buildDependencyArray("peerDependencies", packageJson, packageMeta, isAncestorDevDependency);
|
|
89
89
|
return packageMeta;
|
|
90
90
|
}
|
|
91
91
|
exports.getPackageMeta = getPackageMeta;
|
|
@@ -94,7 +94,9 @@ function resolvePackageDir(basedir, packageName) {
|
|
|
94
94
|
// In resolve() v2.x this callback has a different signature
|
|
95
95
|
// function packageFilter(pkg, pkgfile, pkgdir) {
|
|
96
96
|
function packageFilter(pkg, pkgdir) {
|
|
97
|
-
packagePath
|
|
97
|
+
if (!packagePath || pkg.version) {
|
|
98
|
+
packagePath = pkgdir;
|
|
99
|
+
}
|
|
98
100
|
return pkg;
|
|
99
101
|
}
|
|
100
102
|
try {
|
package/package.json
CHANGED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
var __assign = (this && this.__assign) || function () {
|
|
4
|
-
__assign = Object.assign || function(t) {
|
|
5
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
-
s = arguments[i];
|
|
7
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
-
t[p] = s[p];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
return __assign.apply(this, arguments);
|
|
13
|
-
};
|
|
14
|
-
exports.__esModule = true;
|
|
15
|
-
var path = require("path");
|
|
16
|
-
var semver = require("semver");
|
|
17
|
-
var shelljs_1 = require("shelljs");
|
|
18
|
-
var packageManager_1 = require("./packageManager");
|
|
19
|
-
var packageUtils_1 = require("./packageUtils");
|
|
20
|
-
var readJson_1 = require("./readJson");
|
|
21
|
-
var solution_1 = require("./solution");
|
|
22
|
-
function checkPeerDependencies(packageManager, installMissingPeerDependencies) {
|
|
23
|
-
var allNestedPeerDependencies = packageUtils_1.gatherPeerDependencies(".").map(function (dep) {
|
|
24
|
-
var installedVersion = getInstalledVersion(dep);
|
|
25
|
-
var semverSatisfies = installedVersion ? semver.satisfies(installedVersion, dep.version) : false;
|
|
26
|
-
return __assign(__assign({}, dep), { installedVersion: installedVersion, semverSatisfies: semverSatisfies });
|
|
27
|
-
}).sort(function (a, b) { return ("" + a.name + a.depender).localeCompare("" + b.name + b.depender); });
|
|
28
|
-
allNestedPeerDependencies.forEach(function (dep) {
|
|
29
|
-
if (dep.semverSatisfies) {
|
|
30
|
-
console.log("\u2705 " + dep.depender + " requires " + dep.name + " " + dep.version + " and " + dep.installedVersion + " is installed");
|
|
31
|
-
}
|
|
32
|
-
else if (dep.installedVersion) {
|
|
33
|
-
console.log("\u274C " + dep.depender + " requires " + dep.name + " " + dep.version + ", but " + dep.name + " is not installed");
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
console.log("\u274C " + dep.depender + " requires " + dep.name + " " + dep.version + ", but " + dep.installedVersion + " is installed");
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
var problems = allNestedPeerDependencies.filter(function (dep) { return !dep.semverSatisfies && !/file:\.yalc/.exec(dep.dependerVersion); });
|
|
40
|
-
if (!problems.length) {
|
|
41
|
-
console.log('No problems found!');
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
console.log('Searching for solutions:');
|
|
45
|
-
var resolutions = solution_1.findPossibleResolutions(problems, allNestedPeerDependencies);
|
|
46
|
-
var installs = resolutions.filter(function (r) { return r.resolutionType === 'install'; }).map(function (r) { return r.resolution; });
|
|
47
|
-
var upgrades = resolutions.filter(function (r) { return r.resolutionType === 'upgrade'; }).map(function (r) { return r.resolution; });
|
|
48
|
-
var nosolution = resolutions.filter(function (r) { return !r.resolution; });
|
|
49
|
-
nosolution.forEach(function (solution) {
|
|
50
|
-
var name = solution.problem.name;
|
|
51
|
-
var errorPrefix = "Unable to find a version of " + name + " that satisfies the following peerDependencies:";
|
|
52
|
-
var peerDepRanges = allNestedPeerDependencies.filter(function (dep) { return dep.name === name; })
|
|
53
|
-
.reduce(function (acc, dep) { return acc.includes(dep.version) ? acc : acc.concat(dep.version); }, []);
|
|
54
|
-
console.error("\u274C\u274C\u274C " + errorPrefix + " " + peerDepRanges.join(" and ") + " \u274C\u274C\u274C");
|
|
55
|
-
});
|
|
56
|
-
var commandLines = packageManager_1.getCommandLines(packageManager, installs, upgrades);
|
|
57
|
-
if (nosolution.length) {
|
|
58
|
-
console.error();
|
|
59
|
-
}
|
|
60
|
-
if (installMissingPeerDependencies) {
|
|
61
|
-
console.log('Installing peerDependencies...');
|
|
62
|
-
commandLines.forEach(function (command) { return shelljs_1.exec(command); });
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
commandLines.forEach(function (command) { return console.log(command); });
|
|
66
|
-
console.log();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
exports.checkPeerDependencies = checkPeerDependencies;
|
|
70
|
-
function getInstalledVersion(dep) {
|
|
71
|
-
var peerDependencyDir = packageUtils_1.resolvePackageDir(".", dep.name);
|
|
72
|
-
if (!peerDependencyDir) {
|
|
73
|
-
return undefined;
|
|
74
|
-
}
|
|
75
|
-
var packageJson = readJson_1.readJson(path.resolve(peerDependencyDir, 'package.json'));
|
|
76
|
-
return packageJson.version;
|
|
77
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.__esModule = true;
|
|
3
|
-
var resolve = require("resolve");
|
|
4
|
-
function resolvePackageDir(basedir, packageName) {
|
|
5
|
-
var packagePath;
|
|
6
|
-
function packageFilter(pkg, pkgfile) {
|
|
7
|
-
packagePath = pkgfile;
|
|
8
|
-
return pkg;
|
|
9
|
-
}
|
|
10
|
-
try {
|
|
11
|
-
resolve.sync(packageName, { basedir: basedir, packageFilter: packageFilter });
|
|
12
|
-
}
|
|
13
|
-
catch (ignored) {
|
|
14
|
-
// resolve.sync throws if no main: is present
|
|
15
|
-
// Some packages (such as @types/*) do not have a main
|
|
16
|
-
// As long as we have a packagePath, it's fine
|
|
17
|
-
}
|
|
18
|
-
return packagePath;
|
|
19
|
-
}
|
|
20
|
-
exports.resolvePackageDir = resolvePackageDir;
|