registry-sync 4.0.3 → 5.0.1

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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/package.json +24 -24
  3. package/src/resolve.js +17 -23
package/README.md CHANGED
@@ -8,7 +8,7 @@ The local copy can then be used as a simple private NPM registry without publish
8
8
 
9
9
  ## Pre-requisites
10
10
 
11
- - Node.js v14.0.0 or newer
11
+ - Node.js v16.14.0 or newer
12
12
 
13
13
  ## Installation
14
14
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "registry-sync",
3
- "version": "4.0.3",
3
+ "version": "5.0.1",
4
4
  "description": "synchronize a remote npm registry for private use",
5
5
  "repository": "https://github.com/heikkipora/registry-sync",
6
6
  "bin": {
@@ -20,35 +20,35 @@
20
20
  "license": "MIT",
21
21
  "dependencies": {
22
22
  "@yarnpkg/lockfile": "1.1.0",
23
- "axios": "1.3.4",
24
- "commander": "10.0.0",
25
- "semver": "7.3.8",
26
- "ssri": "10.0.1",
27
- "tar-fs": "2.1.1"
23
+ "axios": "1.6.1",
24
+ "commander": "11.1.0",
25
+ "semver": "7.5.4",
26
+ "ssri": "10.0.5",
27
+ "tar-fs": "3.0.4"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@arkweid/lefthook": "0.7.7",
31
- "@types/chai": "4.3.4",
32
- "@types/lodash": "4.14.192",
33
- "@types/mocha": "10.0.1",
34
- "@types/node": "18.15.10",
35
- "@types/semver": "7.3.13",
36
- "@types/ssri": "7.1.1",
37
- "@types/tar-fs": "2.0.1",
38
- "@types/yarnpkg__lockfile": "1.1.5",
39
- "@typescript-eslint/eslint-plugin": "5.57.0",
40
- "@typescript-eslint/parser": "5.57.0",
41
- "chai": "4.3.7",
42
- "eslint": "8.36.0",
43
- "eslint-config-prettier": "8.8.0",
31
+ "@types/chai": "4.3.10",
32
+ "@types/lodash": "4.14.201",
33
+ "@types/mocha": "10.0.4",
34
+ "@types/node": "20.9.0",
35
+ "@types/semver": "7.5.5",
36
+ "@types/ssri": "7.1.4",
37
+ "@types/tar-fs": "2.0.4",
38
+ "@types/yarnpkg__lockfile": "1.1.9",
39
+ "@typescript-eslint/eslint-plugin": "6.11.0",
40
+ "@typescript-eslint/parser": "6.11.0",
41
+ "chai": "4.3.10",
42
+ "eslint": "8.53.0",
43
+ "eslint-config-prettier": "9.0.0",
44
44
  "eslint-formatter-codeframe": "7.32.1",
45
- "eslint-plugin-mocha": "10.1.0",
45
+ "eslint-plugin-mocha": "10.2.0",
46
46
  "express": "4.18.2",
47
- "lint-staged": "13.2.0",
47
+ "lint-staged": "14.0.1",
48
48
  "mocha": "10.2.0",
49
- "prettier": "2.8.7",
49
+ "prettier": "3.1.0",
50
50
  "ts-node": "10.9.1",
51
- "typescript": "5.0.2"
51
+ "typescript": "5.2.2"
52
52
  },
53
53
  "keywords": [
54
54
  "registry",
@@ -58,6 +58,6 @@
58
58
  "offline"
59
59
  ],
60
60
  "engines": {
61
- "node": ">=14.0.0"
61
+ "node": ">=16.14.0"
62
62
  }
63
63
  }
package/src/resolve.js CHANGED
@@ -128,7 +128,11 @@ function resolveNpmPackagesFromYarnLockDependencies(yarnLockDependencies) {
128
128
  }
129
129
  async function parseDependenciesFromNpmLockFile(lockFilepath, includeDevDependencies) {
130
130
  const packageLock = JSON.parse(await fs.promises.readFile(lockFilepath, 'utf8'));
131
- const dependencies = recurseNpmLockfileDependencies(packageLock, includeDevDependencies);
131
+ const fileVersion = packageLock.lockfileVersion || 1;
132
+ if (![2, 3].includes(packageLock.lockfileVersion)) {
133
+ throw new Error(`Unsupported package-lock.json version ${fileVersion}`);
134
+ }
135
+ const dependencies = collectNpmLockfileDependencies(packageLock, includeDevDependencies);
132
136
  return dependencies.map(({ name, version }) => ({ id: `${name}@${version}`, name, version }));
133
137
  }
134
138
  async function parseDependenciesFromYarnLockFile(lockFilepath) {
@@ -180,28 +184,18 @@ function isNotLocal(dependency) {
180
184
  // that we set up anyway, so don't attempt to synchronize it
181
185
  return !dependency.version.startsWith('file:');
182
186
  }
183
- function recurseNpmLockfileDependencies({ dependencies }, includeDevDependencies) {
184
- if (!dependencies) {
185
- return [];
186
- }
187
- const includeFn = includeDevDependencies ? filterOutBundledDependencies : filterOutBundledAndDevDependencies;
188
- return Object.entries(dependencies)
189
- .filter(includeFn)
190
- .map(([name, props]) => [deAlias(name, props)].concat(recurseNpmLockfileDependencies(props, includeDevDependencies)))
191
- .flat();
192
- }
193
- function deAlias(name, props) {
194
- if (props.version.startsWith('npm:')) {
195
- const [realName, realVersion] = props.version.replace(/^npm:/, '').split('@');
196
- return { name: realName, version: realVersion };
197
- }
198
- return { name, version: props.version };
199
- }
200
- function filterOutBundledDependencies([, props]) {
201
- return !props.bundled;
202
- }
203
- function filterOutBundledAndDevDependencies([, props]) {
204
- return !(props.bundled || props.dev);
187
+ function collectNpmLockfileDependencies({ packages }, includeDevDependencies) {
188
+ return Object.entries(packages)
189
+ .filter(([name, props]) => name.length > 0 && (includeDevDependencies || !props.dev))
190
+ .map(([name, props]) => ({
191
+ name: props.name || pathToName(name),
192
+ version: props.version
193
+ }));
194
+ }
195
+ // "node_modules/lodash" -> "lodash"
196
+ // "node_modules/make-dir/node_modules/semver" -> "semver"
197
+ function pathToName(path) {
198
+ return path.split('node_modules/').pop();
205
199
  }
206
200
  function isDeepEqual(a, b) {
207
201
  try {