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.
@@ -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="chore: update all dependencies" />
25
+ <list default="true" id="ebeb713d-6dc4-42d1-a42e-54aad95d9c0a" name="Default Changelist" comment="feat: detect yarn2 lockfile (and then use 'yarn up')&#10;&#10;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="1609100455" />
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
- <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
70
- <property name="last_opened_file_path" value="$PROJECT_DIR$" />
71
- <property name="node.js.detected.package.eslint" value="true" />
72
- <property name="node.js.detected.package.tslint" value="true" />
73
- <property name="node.js.path.for.package.eslint" value="project" />
74
- <property name="node.js.path.for.package.tslint" value="project" />
75
- <property name="node.js.selected.package.eslint" value="(autodetect)" />
76
- <property name="node.js.selected.package.tslint" value="(autodetect)" />
77
- <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
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 &quot;&gt;=6.0.0&quot; matches &quot;7.0.0-beta.1&quot;&#10;&#10;BREAKING CHANGE: Matches prerelease versions" />
333
339
  <MESSAGE value="chore: update all dependencies" />
334
- <option name="LAST_COMMIT_MESSAGE" value="chore: update all dependencies" />
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&#10;fix: Properly install dev dependencies when using npm as the package manager" />
343
+ <MESSAGE value="feat: detect yarn2 lockfile (and then use 'yarn up')&#10;&#10;Note: yarn2 pnp will likely never be supported" />
344
+ <option name="LAST_COMMIT_MESSAGE" value="feat: detect yarn2 lockfile (and then use 'yarn up')&#10;&#10;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, -h Print usage information [boolean]
21
- --version Show version number [boolean]
22
- --yarn Use yarn package manager [boolean]
23
- --npm Use npm package manager [boolean]
24
- --install Install missing or incorrect peerDependencies [boolean]
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
- return gatheredDependencies.map(applySemverInformation);
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 reportPeerDependencyStatus = function (dep, byDepender, showSatisfiedDep, showOptionalDep) {
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 (showOptionalDep) {
46
- console.log(" \u2611\uFE0F " + message + ") OPTIONAL (" + dep.installedVersion + " is installed)");
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 (showOptionalDep) {
54
- console.log(" \u2611\uFE0F " + message + " OPTIONAL (" + dep.name + " is not installed)");
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 newUnsatisfiedDeps = getAllNestedPeerDependencies(options)
89
- .filter(function (dep) { return !dep.semverSatisfies; })
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 && newUnsatisfiedDeps.length === 0) {
101
+ if (nosolution.length === 0 && newProblems.length === 0) {
92
102
  console.log('All peer dependencies are met');
93
103
  }
94
- if (newUnsatisfiedDeps.length > 0) {
95
- console.log("Found " + newUnsatisfiedDeps.length + " new unmet peerDependencies...");
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(isUnsatisfied);
117
- var showOptionalDep = options.verbose;
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 !dep.semverSatisfies && !dep.isYalc && !dep.isPeerOptionalDependency; });
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,
@@ -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 " + installs.concat(upgrades).join(' '));
37
+ commands.push("npm install -D " + devInstalls);
38
38
  }
39
39
  }
40
40
  return commands;
@@ -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 = pkgdir;
97
+ if (!packagePath || pkg.version) {
98
+ packagePath = pkgdir;
99
+ }
98
100
  return pkg;
99
101
  }
100
102
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "check-peer-dependencies",
3
- "version": "4.0.0",
3
+ "version": "4.2.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": {
@@ -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;