check-peer-dependencies 4.1.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.
@@ -22,9 +22,7 @@
22
22
  <select />
23
23
  </component>
24
24
  <component name="ChangeListManager">
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" />
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">
28
26
  <change beforePath="$PROJECT_DIR$/src/packageUtils.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/packageUtils.ts" afterDir="false" />
29
27
  </list>
30
28
  <option name="SHOW_DIALOG" value="false" />
@@ -33,9 +31,22 @@
33
31
  <option name="LAST_RESOLUTION" value="IGNORE" />
34
32
  </component>
35
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>
36
39
  <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
37
40
  <option name="UPDATE_TYPE" value="REBASE" />
38
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>
39
50
  <component name="GitToolBoxStore">
40
51
  <option name="projectConfigVersion" value="2" />
41
52
  <option name="recentBranches">
@@ -58,6 +69,9 @@
58
69
  </RecentBranches>
59
70
  </option>
60
71
  </component>
72
+ <component name="MarkdownSettingsMigration">
73
+ <option name="stateVersion" value="1" />
74
+ </component>
61
75
  <component name="ProjectId" id="1SkfJRmHXPtjMGY19cBVwFevkIM" />
62
76
  <component name="ProjectLevelVcsManager">
63
77
  <OptionsSetting value="false" id="Update" />
@@ -68,22 +82,16 @@
68
82
  <option name="hideEmptyMiddlePackages" value="true" />
69
83
  <option name="showLibraryContents" value="true" />
70
84
  </component>
71
- <component name="PropertiesComponent">
72
- <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
73
- <property name="last_opened_file_path" value="$PROJECT_DIR$" />
74
- <property name="node.js.detected.package.eslint" value="true" />
75
- <property name="node.js.detected.package.tslint" value="true" />
76
- <property name="node.js.path.for.package.eslint" value="project" />
77
- <property name="node.js.path.for.package.tslint" value="project" />
78
- <property name="node.js.selected.package.eslint" value="(autodetect)" />
79
- <property name="node.js.selected.package.tslint" value="(autodetect)" />
80
- <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
81
- <property name="nodejs_npm_path_reset_for_default_project" value="true" />
82
- <property name="nodejs_package_manager_path" value="yarn" />
83
- <property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
84
- <property name="ts.external.directory.path" value="$PROJECT_DIR$/node_modules/typescript/lib" />
85
- <property name="vue.rearranger.settings.migration" value="true" />
86
- </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>
87
95
  <component name="RecentsManager">
88
96
  <key name="es6.move.members.recent.items">
89
97
  <recent name="$PROJECT_DIR$/src/packageUtils.ts" />
@@ -306,13 +314,8 @@
306
314
  </entry>
307
315
  </map>
308
316
  </option>
309
- <option name="oldMeFiltersMigrated" value="true" />
310
317
  </component>
311
318
  <component name="VcsManagerConfiguration">
312
- <MESSAGE value="chore: add shelljs dependency" />
313
- <MESSAGE value="chore: add yargs and shelljs dependency" />
314
- <MESSAGE value="chore: add yargs and shelljs and semver dependencies" />
315
- <MESSAGE value="refactor: extract cli.ts" />
316
319
  <MESSAGE value="fix(packageManager): remove console.log, switch to boolean parameters" />
317
320
  <MESSAGE value="fix(checkPeerDependencies): check for yalc'd packages using installedVersion, not dependerVersion" />
318
321
  <MESSAGE value="chore: Add README.md and CHANGELOG.md" />
@@ -334,6 +337,10 @@
334
337
  <MESSAGE value="feat(peerDependencyMeta): support peerDependencyMeta in package.json to ignore optional peer dependencies" />
335
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" />
336
339
  <MESSAGE value="chore: update all dependencies" />
337
- <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" />
338
345
  </component>
339
346
  </project>
package/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
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
+
1
12
  # 4.1.0 (2021-11-28)
2
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)
3
14
 
package/README.md CHANGED
@@ -27,6 +27,8 @@ Options:
27
27
  [boolean] [default: false]
28
28
  --verbose Prints every peer dependency, even those that
29
29
  are met [boolean] [default: false]
30
+ --ignore package name to ignore (may specify multiple)
31
+ [array] [default: []]
30
32
  --runOnlyOnRootDependencies Run tool only on package root dependencies
31
33
  [boolean] [default: false]
32
34
  --findSolutions Search for solutions and print package
package/dist/cli.js CHANGED
File without changes
@@ -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.1.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;