@@ -3,22 +3,38 @@ import type { DependencyInfo, PackageManifestInfo, WorkspaceCatalogInfo } from '
33import type { CacheOptions } from 'ocache'
44import type { WorkspaceFolder } from 'vscode'
55import { getPackageInfo } from '#api/package'
6+ import { PNPM_WORKSPACE_BASENAME , YARN_WORKSPACE_BASENAME } from '#constants'
67import { logger } from '#state'
78import { isOffsetInRange } from '#utils/ast'
89import { resolveDependencySpec } from '#utils/dependency'
910import { getDocumentText , isPackageManifestPath , isWorkspaceFilePath } from '#utils/file'
1011import { resolveExactVersion } from '#utils/package'
11- import { detectPackageManager , workspaceFileMapping } from '#utils/package-manager'
1212import { lazyInit } from '#utils/shared'
1313import { defineCachedFunction } from 'ocache'
14- import { Uri , workspace } from 'vscode'
14+ import { commands , Uri , window , workspace } from 'vscode'
1515import { accessOk } from 'vscode-find-up'
1616import { getExtractor } from './extractors'
1717
1818type WithResolvedDependencyInfo < T > = Omit < T , 'dependencies' > & {
1919 dependencies : ResolvedDependencyInfo [ ]
2020}
2121
22+ export const workspaceFileMapping : Record < Exclude < PackageManager , 'npm' > , string > = {
23+ pnpm : PNPM_WORKSPACE_BASENAME ,
24+ yarn : YARN_WORKSPACE_BASENAME ,
25+ }
26+
27+ async function getPackageManager ( uri : Uri ) : Promise < PackageManager > {
28+ try {
29+ const result = await commands . executeCommand < PackageManager > ( 'npm.packageManager' , uri )
30+ return result || 'npm'
31+ } catch ( error ) {
32+ console . error ( 'Error getting package manager:' , error )
33+ window . showErrorMessage ( 'Failed to detect package manager. Defaulting to npm.' )
34+ return 'npm'
35+ }
36+ }
37+
2238class WorkspaceContext {
2339 folder : WorkspaceFolder
2440 packageManager : PackageManager = 'npm'
@@ -38,7 +54,7 @@ class WorkspaceContext {
3854
3955 async loadWorkspace ( ) {
4056 this . #catalogs = undefined
41- this . packageManager = await detectPackageManager ( this . folder )
57+ this . packageManager = await getPackageManager ( this . folder . uri )
4258
4359 logger . info ( `[workspace-context] detect package manager: ${ this . packageManager } ` )
4460
0 commit comments