Skip to content

Commit 5338be9

Browse files
authored
Merge pull request #26 from faissaloux/npmshrinkwrap-support
`npm-shrinkwrap` support
2 parents cf38386 + ea05928 commit 5338be9

File tree

1 file changed

+32
-11
lines changed

1 file changed

+32
-11
lines changed

src/package_manager/package_managers/javascript.ts

+32-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
import * as vscode from 'vscode';
2+
import * as fs from 'fs';
23
import { Parser } from '../../parser/parser';
34
import { PackageManager } from '../../interfaces/package_manager';
45
import { LanguagePackageManager } from '../language_package_manager';
56
import { pathJoin } from '../../util/globals';
67

78
type JavascriptPackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';
8-
type JavascriptDependenciesLockFile = 'package-lock.json' | 'yarn.lock' | 'pnpm-lock.yaml' | 'bun.lock';
9+
type JavascriptDependenciesLockFile = 'package-lock.json' | 'npm-shrinkwrap.json' | 'yarn.lock' | 'pnpm-lock.yaml' | 'bun.lock';
910

1011
export class Javascript extends LanguagePackageManager implements PackageManager {
1112
packageManager: JavascriptPackageManager = 'npm';
1213
lockVersion: number | null = null;
13-
locks: {[key in JavascriptPackageManager]: JavascriptDependenciesLockFile} = {
14-
'npm': 'package-lock.json',
14+
locks: {[key in JavascriptPackageManager]: JavascriptDependenciesLockFile|JavascriptDependenciesLockFile[]} = {
15+
'npm': [
16+
'package-lock.json',
17+
'npm-shrinkwrap.json',
18+
],
1519
'yarn': 'yarn.lock',
1620
'pnpm': 'pnpm-lock.yaml',
1721
'bun': 'bun.lock',
@@ -43,18 +47,35 @@ export class Javascript extends LanguagePackageManager implements PackageManager
4347
}
4448

4549
override getLockPath(): string {
46-
return pathJoin(this.rootPath, this.locks[this.packageManager]);
50+
let lockFiles: JavascriptDependenciesLockFile|JavascriptDependenciesLockFile[] = this.locks[this.packageManager];
51+
52+
if (typeof lockFiles === 'string') {
53+
lockFiles = [lockFiles as JavascriptDependenciesLockFile];
54+
}
55+
56+
for (const lockFile of lockFiles as JavascriptDependenciesLockFile[]) {
57+
const lockPath: string = pathJoin(this.rootPath, lockFile);
58+
59+
if (fs.existsSync(lockPath)) {
60+
return lockPath;
61+
}
62+
};
63+
64+
return '';
4765
}
4866

4967
async getPackageManager(): Promise<JavascriptPackageManager> {
50-
for (const lock in this.locks) {
51-
let lockFile = vscode.Uri.file(pathJoin(this.rootPath, this.locks[lock as JavascriptPackageManager]));
52-
53-
try{
54-
await vscode.workspace.fs.readFile(lockFile);
68+
for (let [packageManager, lockFiles] of Object.entries(this.locks)) {
69+
if (typeof lockFiles === 'string') {
70+
lockFiles = [lockFiles];
71+
}
5572

56-
return lock as JavascriptPackageManager;
57-
} catch (error) {}
73+
for (const lockFile of lockFiles) {
74+
const lockPath: string = pathJoin(this.rootPath, lockFile);
75+
if (fs.existsSync(lockPath)) {
76+
return packageManager as JavascriptPackageManager;
77+
}
78+
};
5879
}
5980

6081
return (Object.keys(this.locks) as JavascriptPackageManager[])[0];

0 commit comments

Comments
 (0)