Skip to content

Commit 842d522

Browse files
authored
Merge pull request #22 from faissaloux/bun-support
`Bun` support
2 parents 79f30d2 + bef501b commit 842d522

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

package.json

+5
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@
9696
"default": true,
9797
"description": "Enable pnpm package manager."
9898
},
99+
"package-manager-intellisense.bun.enable": {
100+
"type": "boolean",
101+
"default": true,
102+
"description": "Enable bun package manager."
103+
},
99104
"package-manager-intellisense.composer.enable": {
100105
"type": "boolean",
101106
"default": true,

src/package_manager/package_managers/javascript.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,27 @@ import { PackageManager } from '../../interfaces/package_manager';
44
import { LanguagePackageManager } from '../language_package_manager';
55
import { pathJoin } from '../../util/globals';
66

7-
type JavascriptPackageManager = 'npm' | 'yarn' | 'pnpm';
8-
type JavascriptDependenciesLockFile = 'package-lock.json' | 'yarn.lock' | 'pnpm-lock.yaml';
7+
type JavascriptPackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';
8+
type JavascriptDependenciesLockFile = 'package-lock.json' | 'yarn.lock' | 'pnpm-lock.yaml' | 'bun.lock';
99

1010
export class Javascript extends LanguagePackageManager implements PackageManager {
1111
packageManager: JavascriptPackageManager = 'npm';
1212
locks: {[key in JavascriptPackageManager]: JavascriptDependenciesLockFile} = {
1313
'npm': 'package-lock.json',
1414
'yarn': 'yarn.lock',
1515
'pnpm': 'pnpm-lock.yaml',
16+
'bun': 'bun.lock',
1617
};
1718
startsWith: {[key in JavascriptPackageManager]: string} = {
1819
'npm': 'packageName',
1920
'yarn': 'packageName@',
2021
'pnpm': '/packageName/',
22+
'bun': 'packageName',
2123
};
2224

2325
async getInstalled(packageName: string): Promise<any> {
2426
this.packageManager = await this.getPackageManager();
27+
2528
const installedPackages = new Parser(this.packageManager).parse(await this.lockFileContent());
2629

2730
if (!vscode.workspace.getConfiguration().get(`package-manager-intellisense.${this.packageManager}.enable`)) {

src/parser/BunLock.ts

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { LockParser } from "../interfaces/lock_parser";
2+
3+
export class BunLock implements LockParser {
4+
private content: {[key: string]: any};
5+
6+
constructor(content: string) {
7+
content = this.removeTrailingCommas(content);
8+
this.content = JSON.parse(content);
9+
this.appendVersions();
10+
11+
return this;
12+
}
13+
14+
dependencies(): {[key: string]: any} {
15+
return this.content.packages;
16+
}
17+
18+
removeTrailingCommas(content: string): string {
19+
const regex = /\,(?!\s*?[\{\[\"\'\w])/g;
20+
21+
return content.replace(regex, '');
22+
}
23+
24+
appendVersions(): void {
25+
Object.keys(this.content.packages).map(pkg => {
26+
const version = this.content.packages[pkg][0].split('@').at(-1);
27+
this.content.packages[pkg]['version'] = version;
28+
});
29+
}
30+
}

src/parser/parser.ts

+2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ import { ComposerLock } from './composerLock';
33
import { PnpmLock } from './pnpmLock';
44
import { GemfileLock } from './gemfileLock';
55
import { NpmLock } from './npmLock';
6+
import { BunLock } from './BunLock';
67

78
export class Parser {
89
private readonly parsers = {
910
"npm": NpmLock,
1011
"yarn": YarnLock,
1112
"pnpm": PnpmLock,
13+
'bun': BunLock,
1214
"composer": ComposerLock,
1315
"rubygems": GemfileLock,
1416
};

0 commit comments

Comments
 (0)