dependabot-npm_and_yarn 0.106.11 → 0.106.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85d8a45c296270dfd6a16c4a14fe5a09cd376756de47e9152ba47d0522af0127
4
- data.tar.gz: 2c20c23fc98f9f35370858e64c4d580b4c045d4f19778120ebfb5fe7729e46d6
3
+ metadata.gz: 55ec3e50f880e9fd8418ee0c28227cbbaac30f284b2bb9419bc93d43b0311c28
4
+ data.tar.gz: 99b56d17d46b68e6720d41872ff9644b05cd283e211e00564ebfed9892642d27
5
5
  SHA512:
6
- metadata.gz: 570efb140c89d16a4e8cc61d34a47d9928ca834476879798ccc959cf4550f6cc9471ddfa7ebfe736a0ba1b1ba837a1b87dec6ee65f59f0d0b298140dba736491
7
- data.tar.gz: e19d3a945a48a975587edd837a94e994b4691991fd51e71dd67a8d64efa384a9594e3b3a10bb1cc62a776b2527e1526932bb0081eeb54e059776cd486c44d394
6
+ metadata.gz: 7e251ae8b92c566859c05e6f17f9f43ca0c3cb4db9126c83aa83c023fb88e17f349b59a6ba066e831c230967d262bc42ad15cdf0e0b7f3d5a8137bd8f95f69f0
7
+ data.tar.gz: '0881387d0b65214d87ad2b335a5c3aa164777741c59cd6957427cf432a116bd24e8b599ecb7a02c47cde3a23c69ab15c23bf7f36207c1dbfe7f96fd149cb05e7'
@@ -0,0 +1,22 @@
1
+ // Recursively removes all dependencies matching on name
2
+ function removeDependenciesFromLockfile(lockfile, dependencyNames) {
3
+ if (!lockfile.dependencies) return lockfile;
4
+
5
+ const dependencies = Object.entries(lockfile.dependencies).reduce(
6
+ (acc, [depName, packageValue]) => {
7
+ if (!dependencyNames.includes(depName)) {
8
+ acc[depName] = removeDependenciesFromLockfile(
9
+ packageValue,
10
+ dependencyNames
11
+ );
12
+ }
13
+
14
+ return acc;
15
+ },
16
+ {}
17
+ );
18
+
19
+ return Object.assign({}, lockfile, { dependencies });
20
+ }
21
+
22
+ module.exports = removeDependenciesFromLockfile;
@@ -2,13 +2,29 @@ const fs = require("fs");
2
2
  const path = require("path");
3
3
  const npm = require("npm");
4
4
  const installer = require("npm/lib/install");
5
+ const detectIndent = require("detect-indent");
6
+ const removeDependenciesFromLockfile = require("./remove-dependencies-from-lockfile");
5
7
 
6
8
  const { muteStderr, runAsync } = require("./helpers.js");
7
9
 
8
- async function updateDependencyFile(directory, lockfileName) {
10
+ async function updateDependencyFile(directory, lockfileName, dependencies) {
9
11
  const readFile = fileName =>
10
12
  fs.readFileSync(path.join(directory, fileName)).toString();
11
13
 
14
+ const lockfile = readFile(lockfileName);
15
+ const indent = detectIndent(lockfile).indent || " ";
16
+ const lockfileObject = JSON.parse(lockfile);
17
+ // Remove the dependency we want to update from the lockfile and let
18
+ // npm find the latest resolvable version and fix the lockfile
19
+ const updatedLockfileObject = removeDependenciesFromLockfile(
20
+ lockfileObject,
21
+ dependencies.map(dep => dep.name)
22
+ );
23
+ fs.writeFileSync(
24
+ path.join(directory, lockfileName),
25
+ JSON.stringify(updatedLockfileObject, null, indent)
26
+ );
27
+
12
28
  // `force: true` ignores checks for platform (os, cpu) and engines
13
29
  // in npm/lib/install/validate-args.js
14
30
  // Platform is checked and raised from (EBADPLATFORM):
@@ -18,9 +18,10 @@ const fs = require("fs");
18
18
  const path = require("path");
19
19
  const npm = require("npm");
20
20
  const installer = require("npm/lib/install");
21
+ const detectIndent = require("detect-indent");
21
22
  const { muteStderr, runAsync } = require("./helpers.js");
22
23
 
23
- async function updateDependencyFiles(directory, dependencies, lockfileName) {
24
+ async function updateDependencyFiles(directory, lockfileName, dependencies) {
24
25
  const readFile = fileName =>
25
26
  fs.readFileSync(path.join(directory, fileName)).toString();
26
27
 
@@ -76,9 +77,23 @@ async function updateDependencyFiles(directory, dependencies, lockfileName) {
76
77
  try {
77
78
  // Fix already present git sub-dependency with invalid "from" and "requires"
78
79
  updateLockfileWithValidGitUrls(path.join(directory, lockfileName));
80
+
79
81
  await runAsync(initialInstaller, initialInstaller.run, []);
82
+
80
83
  // Fix npm5 lockfiles where invalid "from" is introduced after first install
81
84
  updateLockfileWithValidGitUrls(path.join(directory, lockfileName));
85
+
86
+ const lockfile = readFile(lockfileName);
87
+ const indent = detectIndent(lockfile).indent || " ";
88
+ const intermediaryLockfile = JSON.parse(lockfile);
89
+ const updatedIntermediaryLockfile = removeInvalidGitUrls(
90
+ intermediaryLockfile
91
+ );
92
+ fs.writeFileSync(
93
+ path.join(directory, lockfileName),
94
+ JSON.stringify(updatedIntermediaryLockfile, null, indent)
95
+ );
96
+
82
97
  await runAsync(cleanupInstaller, cleanupInstaller.run, []);
83
98
  } finally {
84
99
  unmute();
@@ -91,10 +106,11 @@ async function updateDependencyFiles(directory, dependencies, lockfileName) {
91
106
 
92
107
  function updateLockfileWithValidGitUrls(lockfilePath) {
93
108
  const lockfile = fs.readFileSync(lockfilePath).toString();
109
+ const indent = detectIndent(lockfile).indent || " ";
94
110
  const updatedLockfileObject = removeInvalidGitUrls(JSON.parse(lockfile));
95
111
  fs.writeFileSync(
96
112
  lockfilePath,
97
- JSON.stringify(updatedLockfileObject, null, 2)
113
+ JSON.stringify(updatedLockfileObject, null, indent)
98
114
  );
99
115
  }
100
116
 
data/helpers/package.json CHANGED
@@ -10,6 +10,7 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@dependabot/yarn-lib": "^1.15.2",
13
+ "detect-indent": "^5.0.0",
13
14
  "npm": "^6.9.0",
14
15
  "semver": "^6.0.0"
15
16
  },
@@ -36,17 +36,13 @@ describe("updater", () => {
36
36
  it("generates an updated package-lock.json", async () => {
37
37
  await copyDependencies("original", tempDir);
38
38
 
39
- const result = await updateDependencyFiles(
40
- tempDir,
41
- [
42
- {
43
- name: "left-pad",
44
- version: "1.1.3",
45
- requirements: [{ file: "package.json", groups: ["dependencies"] }]
46
- }
47
- ],
48
- "package-lock.json"
49
- );
39
+ const result = await updateDependencyFiles(tempDir, "package-lock.json", [
40
+ {
41
+ name: "left-pad",
42
+ version: "1.1.3",
43
+ requirements: [{ file: "package.json", groups: ["dependencies"] }]
44
+ }
45
+ ]);
50
46
  expect(result).toEqual({
51
47
  "package-lock.json": helpers.loadFixture(
52
48
  "updater/updated/package-lock.json"
@@ -153,8 +153,8 @@ module Dependabot
153
153
  function: "npm:update",
154
154
  args: [
155
155
  Dir.pwd,
156
- top_level_dependency_updates,
157
- lockfile_name
156
+ lockfile_name,
157
+ top_level_dependency_updates
158
158
  ]
159
159
  )
160
160
  end
@@ -163,7 +163,7 @@ module Dependabot
163
163
  SharedHelpers.run_helper_subprocess(
164
164
  command: NativeHelpers.helper_path,
165
165
  function: "npm:updateSubdependency",
166
- args: [Dir.pwd, lockfile_name]
166
+ args: [Dir.pwd, lockfile_name, sub_dependencies.map(&:to_h)]
167
167
  )
168
168
  end
169
169
 
@@ -396,7 +396,7 @@ module Dependabot
396
396
 
397
397
  FileUtils.mkdir_p(Pathname.new(f.name).dirname)
398
398
 
399
- File.write(f.name, prepared_npm_lockfile_content(f.content))
399
+ File.write(f.name, f.content)
400
400
  end
401
401
  end
402
402
 
@@ -471,25 +471,6 @@ module Dependabot
471
471
  @git_ssh_requirements_to_swap
472
472
  end
473
473
 
474
- def prepared_npm_lockfile_content(content)
475
- JSON.dump(remove_dependency_from_npm_lockfile(JSON.parse(content)))
476
- end
477
-
478
- # Duplicated in SubdependencyVersionResolver
479
- # Remove the dependency we want to update from the lockfile and let
480
- # npm find the latest resolvable version and fix the lockfile
481
- def remove_dependency_from_npm_lockfile(npm_lockfile)
482
- return npm_lockfile unless npm_lockfile.key?("dependencies")
483
-
484
- sub_dependency_names = sub_dependencies.map(&:name)
485
- dependencies =
486
- npm_lockfile["dependencies"].
487
- reject { |key, _| sub_dependency_names.include?(key) }.
488
- map { |k, v| [k, remove_dependency_from_npm_lockfile(v)] }.
489
- to_h
490
- npm_lockfile.merge("dependencies" => dependencies)
491
- end
492
-
493
474
  def post_process_npm_lockfile(original_content, updated_content)
494
475
  updated_content =
495
476
  replace_project_metadata(updated_content, original_content)
@@ -115,7 +115,7 @@ module Dependabot
115
115
  SharedHelpers.run_helper_subprocess(
116
116
  command: NativeHelpers.helper_path,
117
117
  function: "npm:updateSubdependency",
118
- args: [Dir.pwd, lockfile_name]
118
+ args: [Dir.pwd, lockfile_name, [dependency.to_h]]
119
119
  )
120
120
  end
121
121
  end
@@ -141,7 +141,7 @@ module Dependabot
141
141
 
142
142
  [*package_locks, *shrinkwraps].each do |f|
143
143
  FileUtils.mkdir_p(Pathname.new(f.name).dirname)
144
- File.write(f.name, prepared_npm_lockfile_content(f.content))
144
+ File.write(f.name, f.content)
145
145
  end
146
146
  end
147
147
 
@@ -152,26 +152,6 @@ module Dependabot
152
152
  content.gsub(/^#{Regexp.quote(dependency.name)}\@.*?\n\n/m, "")
153
153
  end
154
154
 
155
- def prepared_npm_lockfile_content(content)
156
- JSON.dump(
157
- remove_dependency_from_npm_lockfile(JSON.parse(content))
158
- )
159
- end
160
-
161
- # Duplicated in NpmLockfileUpdater
162
- # Remove the dependency we want to update from the lockfile and let
163
- # npm find the latest resolvable version and fix the lockfile
164
- def remove_dependency_from_npm_lockfile(npm_lockfile)
165
- return npm_lockfile unless npm_lockfile.key?("dependencies")
166
-
167
- dependencies =
168
- npm_lockfile["dependencies"].
169
- reject { |key, _| key == dependency.name }.
170
- map { |k, v| [k, remove_dependency_from_npm_lockfile(v)] }.
171
- to_h
172
- npm_lockfile.merge("dependencies" => dependencies)
173
- end
174
-
175
155
  def prepared_package_json_content(file)
176
156
  NpmAndYarn::FileUpdater::PackageJsonPreparer.new(
177
157
  package_json_content: file.content
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-npm_and_yarn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.106.11
4
+ version: 0.106.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.106.11
19
+ version: 0.106.12
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.106.11
26
+ version: 0.106.12
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -148,6 +148,7 @@ files:
148
148
  - helpers/lib/npm/helpers.js
149
149
  - helpers/lib/npm/index.js
150
150
  - helpers/lib/npm/peer-dependency-checker.js
151
+ - helpers/lib/npm/remove-dependencies-from-lockfile.js
151
152
  - helpers/lib/npm/subdependency-updater.js
152
153
  - helpers/lib/npm/updater.js
153
154
  - helpers/lib/yarn/fix-duplicates.js