mirror of
https://github.com/coder/code-server.git
synced 2025-09-27 01:53:28 +08:00
Update to VS Code 1.52.1
This commit is contained in:
80
lib/vscode/extensions/npm/src/preferred-pm.ts
Normal file
80
lib/vscode/extensions/npm/src/preferred-pm.ts
Normal file
@ -0,0 +1,80 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import findWorkspaceRoot = require('../node_modules/find-yarn-workspace-root');
|
||||
import findUp = require('find-up');
|
||||
import * as path from 'path';
|
||||
import whichPM = require('which-pm');
|
||||
import { Uri, workspace } from 'vscode';
|
||||
|
||||
async function pathExists(filePath: string) {
|
||||
try {
|
||||
await workspace.fs.stat(Uri.file(filePath));
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async function isPNPMPreferred(pkgPath: string) {
|
||||
if (await pathExists(path.join(pkgPath, 'pnpm-lock.yaml'))) {
|
||||
return true;
|
||||
}
|
||||
if (await pathExists(path.join(pkgPath, 'shrinkwrap.yaml'))) {
|
||||
return true;
|
||||
}
|
||||
if (await findUp('pnpm-lock.yaml', { cwd: pkgPath })) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async function isYarnPreferred(pkgPath: string) {
|
||||
if (await pathExists(path.join(pkgPath, 'yarn.lock'))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
if (typeof findWorkspaceRoot(pkgPath) === 'string') {
|
||||
return true;
|
||||
}
|
||||
} catch (err) { }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const isNPMPreferred = (pkgPath: string) => {
|
||||
return pathExists(path.join(pkgPath, 'package-lock.json'));
|
||||
};
|
||||
|
||||
export async function findPreferredPM(pkgPath: string): Promise<{ name: string, multiplePMDetected: boolean }> {
|
||||
const detectedPackageManagers: string[] = [];
|
||||
|
||||
if (await isNPMPreferred(pkgPath)) {
|
||||
detectedPackageManagers.push('npm');
|
||||
}
|
||||
|
||||
if (await isYarnPreferred(pkgPath)) {
|
||||
detectedPackageManagers.push('yarn');
|
||||
}
|
||||
|
||||
if (await isPNPMPreferred(pkgPath)) {
|
||||
detectedPackageManagers.push('pnpm');
|
||||
}
|
||||
|
||||
const pmUsedForInstallation: { name: string } | null = await whichPM(pkgPath);
|
||||
|
||||
if (pmUsedForInstallation && !detectedPackageManagers.includes(pmUsedForInstallation.name)) {
|
||||
detectedPackageManagers.push(pmUsedForInstallation.name);
|
||||
}
|
||||
|
||||
const multiplePMDetected = detectedPackageManagers.length > 1;
|
||||
|
||||
return {
|
||||
name: detectedPackageManagers[0] || 'npm',
|
||||
multiplePMDetected
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user