diff --git a/extensions/npm/src/npmView.ts b/extensions/npm/src/npmView.ts index 97fb9461f29..d55c62f834f 100644 --- a/extensions/npm/src/npmView.ts +++ b/extensions/npm/src/npmView.ts @@ -10,7 +10,7 @@ import { TextDocument, ThemeIcon, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri, WorkspaceFolder, commands, debug, window, workspace } from 'vscode'; -import { NpmTaskDefinition, getPackageJsonUriFromTask, getScripts, isWorkspaceFolder, getPackageManager } from './tasks'; +import { NpmTaskDefinition, getPackageJsonUriFromTask, getScripts, isWorkspaceFolder, getPackageManager, getTaskName } from './tasks'; class Folder extends TreeItem { packages: PackageJSON[] = []; @@ -94,7 +94,6 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider { private _onDidChangeTreeData: EventEmitter = new EventEmitter(); readonly onDidChangeTreeData: Event = this._onDidChangeTreeData.event; - constructor(context: ExtensionContext, taskProvider: TaskProvider, localize: any) { const subscriptions = context.subscriptions; this.taskProvider = taskProvider; @@ -106,9 +105,12 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider { subscriptions.push(commands.registerCommand('npm.refresh', this.refresh, this)); } - private async scriptIsValid(scripts: any, task: Task): Promise { - if (scripts[task.name]) { - return true; + private scriptIsValid(scripts: any, task: Task): boolean { + for (const script in scripts) { + let label = getTaskName(script, task.definition.path); + if (task.name === label) { + return true; + } } return false; } @@ -118,7 +120,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider { let uri = getPackageJsonUriFromTask(task); let scripts = await getScripts(uri!, this.localize); - if (!await this.scriptIsValid(scripts, task)) { + if (!this.scriptIsValid(scripts, task)) { this.scriptNotValid(task); return; } @@ -139,7 +141,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider { let uri = getPackageJsonUriFromTask(task); let scripts = await getScripts(uri!, this.localize); - if (!await this.scriptIsValid(scripts, task)) { + if (!this.scriptIsValid(scripts, task)) { this.scriptNotValid(task); return; } @@ -249,12 +251,13 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider { folders.set(each.scope.name, folder); } let definition: NpmTaskDefinition = each.definition; - let path = definition.path ? definition.path : ''; - packageJson = packages.get(path); + let relativePath = definition.path ? definition.path : ''; + let fullPath = path.join(each.scope.name, relativePath); + packageJson = packages.get(fullPath); if (!packageJson) { - packageJson = new PackageJSON(folder, path); + packageJson = new PackageJSON(folder, relativePath); folder.addPackage(packageJson); - packages.set(path, packageJson); + packages.set(fullPath, packageJson); } let script = new NpmScript(this.extensionContext, packageJson, each); packageJson.addScript(script); diff --git a/extensions/npm/src/tasks.ts b/extensions/npm/src/tasks.ts index 9f10bb91201..01a9bcb3346 100644 --- a/extensions/npm/src/tasks.ts +++ b/extensions/npm/src/tasks.ts @@ -129,14 +129,14 @@ async function provideNpmScriptsForFolder(localize: any, packageJsonUri: Uri): P return result; } -function createTask(script: string, cmd: string, folder: WorkspaceFolder, packageJsonUri: Uri, matcher?: any): Task { - - function getTaskName(script: string, file: string) { - if (file.length) { - return `${script} - ${file.substring(0, file.length - 1)}`; - } - return script; +export function getTaskName(script: string, relativePath: string | undefined) { + if (relativePath && relativePath.length) { + return `${script} - ${relativePath.substring(0, relativePath.length - 1)}`; } + return script; +} + +function createTask(script: string, cmd: string, folder: WorkspaceFolder, packageJsonUri: Uri, matcher?: any): Task { function getCommandLine(folder: WorkspaceFolder, cmd: string): string { let packageManager = getPackageManager(folder); @@ -177,7 +177,7 @@ export function getPackageJsonUriFromTask(task: Task): Uri | null { return null; } -export async function exists(file: string): Promise { +async function exists(file: string): Promise { return new Promise((resolve, _reject) => { fs.exists(file, (value) => { resolve(value); @@ -185,7 +185,7 @@ export async function exists(file: string): Promise { }); } -export async function readFile(file: string): Promise { +async function readFile(file: string): Promise { return new Promise((resolve, reject) => { fs.readFile(file, (err, data) => { if (err) {