Skip to content

Commit

Permalink
fix: using npm 9 with lockfileVersion 3
Browse files Browse the repository at this point in the history
Fix for issue #99
  • Loading branch information
mtrefzer committed May 31, 2023
1 parent 4dc7a53 commit eddbbbb
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 3 deletions.
21 changes: 21 additions & 0 deletions __tests__/get-package-file-deps.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { getPackageFileDeps } from '@ic/helpers/get-package-file-deps';

describe(`get package.json file deps`, () => {
const packageFileContent = {
name: 'name',
version: '1.2.3',
dependencies: {
'dep-a': '0.0.1',
'dep-b': '^1.0.5',
},
devDependencies: {
'@dev/dep-a': '~2.0.0',
'@dev/dep-b': '8.1.0',
},
};

it('should return deps and devDeps', () => {
const expectedDeps = ['@dev/dep-a', '@dev/dep-b', 'dep-a', 'dep-b'];
expect(getPackageFileDeps(packageFileContent)).toEqual(expectedDeps);
});
});
38 changes: 38 additions & 0 deletions __tests__/get-package-lock-file-deps.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { getLockFileVersion } from '@ic/helpers/get-lock-file-version';
import { getPackageLockFileDeps } from '@ic/helpers/get-package-lock-file-deps';

describe(`get package-lock.json file deps`, () => {
it('should return deps with lockfileVersion < 3', () => {
const packageLockFileContentVersion2 = JSON.parse(`{
"name": "lockfile version 2",
"version": "1.2.3",
"lockfileVersion": 2,
"dependencies": {
"dep-a": "0.0.1",
"dep-b": "^1.0.5"
}
}`);
const expectedDeps = ['dep-a', 'dep-b'];
expect(getLockFileVersion(packageLockFileContentVersion2)).toBe(2);
expect(getPackageLockFileDeps(packageLockFileContentVersion2)).toEqual(expectedDeps);
});

it('should return deps with lockfileVersion = 3', () => {
const packageLockFileContentVersion3 = JSON.parse(`{
"name": "lockfile version 3",
"version": "1.2.3",
"lockfileVersion": 3,
"packages": {
"": {
"dependencies": {
"dep-a": "0.0.1",
"dep-b": "^1.0.5"
}
}
}
}`);
const expectedDeps = ['dep-a', 'dep-b'];
expect(getLockFileVersion(packageLockFileContentVersion3)).toBe(3);
expect(getPackageLockFileDeps(packageLockFileContentVersion3)).toEqual(expectedDeps);
});
});
7 changes: 4 additions & 3 deletions src/conductor/get-third-party.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import fs from 'fs';
import pkgUp from 'pkg-up';

import { getPackageFileDeps } from '../helpers/get-package-file-deps';
import { getPackageLockFileDeps } from '../helpers/get-package-lock-file-deps';
import { parseJsonFile } from '../helpers/parse-json-file';

export function getThirdParty(): Set<string> {
Expand All @@ -9,10 +11,9 @@ export function getThirdParty(): Set<string> {
let deps: string[];

if (fs.existsSync(lockPath)) {
deps = Object.keys(parseJsonFile(lockPath).dependencies);
deps = getPackageLockFileDeps(parseJsonFile(lockPath));
} else {
const { dependencies, devDependencies } = parseJsonFile(packagePath);
deps = Object.keys(devDependencies).concat(dependencies);
deps = getPackageFileDeps(parseJsonFile(packagePath));
}

return new Set(deps);
Expand Down
3 changes: 3 additions & 0 deletions src/helpers/get-lock-file-version.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function getLockFileVersion(packageLockContent: any) {
return packageLockContent?.lockfileVersion ?? -1;
}
4 changes: 4 additions & 0 deletions src/helpers/get-package-file-deps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export function getPackageFileDeps(packageContent: any): string[] {
const { dependencies, devDependencies } = packageContent;
return Object.keys(devDependencies).concat(Object.keys(dependencies));
}
9 changes: 9 additions & 0 deletions src/helpers/get-package-lock-file-deps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { getLockFileVersion } from './get-lock-file-version';

export function getPackageLockFileDeps(packageLockContent: any): string[] {
const lockFileVersion = getLockFileVersion(packageLockContent);
if (lockFileVersion < 3) {
return Object.keys(packageLockContent.dependencies);
}
return Object.keys(packageLockContent.packages[''].dependencies);
}

0 comments on commit eddbbbb

Please sign in to comment.