From 99eb500d4597c3a398d715aad411e92602adedb0 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Mon, 8 May 2023 10:09:07 +0200 Subject: [PATCH] Refactor package manager's runPackageCommand method to include an optional stdio parameter for better control over child process I/O --- .../src/builders/utils/run-compodoc.spec.ts | 15 ++++++++++----- .../angular/src/builders/utils/run-compodoc.ts | 3 ++- .../src/js-package-manager/JsPackageManager.ts | 14 ++++++++++++-- code/lib/cli/src/js-package-manager/NPMProxy.ts | 8 +++++++- code/lib/cli/src/js-package-manager/PNPMProxy.ts | 8 +++++++- code/lib/cli/src/js-package-manager/Yarn1Proxy.ts | 9 +++++++-- code/lib/cli/src/js-package-manager/Yarn2Proxy.ts | 9 +++++++-- 7 files changed, 52 insertions(+), 14 deletions(-) diff --git a/code/frameworks/angular/src/builders/utils/run-compodoc.spec.ts b/code/frameworks/angular/src/builders/utils/run-compodoc.spec.ts index 449d211fe05b..c8cbbf2133f6 100644 --- a/code/frameworks/angular/src/builders/utils/run-compodoc.spec.ts +++ b/code/frameworks/angular/src/builders/utils/run-compodoc.spec.ts @@ -45,7 +45,8 @@ describe('runCompodoc', () => { expect(mockRunScript).toHaveBeenCalledWith( 'compodoc', ['-p', 'path/to/tsconfig.json', '-d', 'path/to/project'], - 'path/to/project' + 'path/to/project', + 'inherit' ); }); @@ -66,7 +67,8 @@ describe('runCompodoc', () => { expect(mockRunScript).toHaveBeenCalledWith( 'compodoc', ['-d', 'path/to/project', '-p', 'path/to/tsconfig.stories.json'], - 'path/to/project' + 'path/to/project', + 'inherit' ); }); @@ -87,7 +89,8 @@ describe('runCompodoc', () => { expect(mockRunScript).toHaveBeenCalledWith( 'compodoc', ['-p', 'path/to/tsconfig.json', '-d', 'path/to/project'], - 'path/to/project' + 'path/to/project', + 'inherit' ); }); @@ -108,7 +111,8 @@ describe('runCompodoc', () => { expect(mockRunScript).toHaveBeenCalledWith( 'compodoc', ['-p', 'path/to/tsconfig.json', '--output', 'path/to/customFolder'], - 'path/to/project' + 'path/to/project', + 'inherit' ); }); @@ -129,7 +133,8 @@ describe('runCompodoc', () => { expect(mockRunScript).toHaveBeenCalledWith( 'compodoc', ['-p', 'path/to/tsconfig.json', '-d', 'path/to/customFolder'], - 'path/to/project' + 'path/to/project', + 'inherit' ); }); }); diff --git a/code/frameworks/angular/src/builders/utils/run-compodoc.ts b/code/frameworks/angular/src/builders/utils/run-compodoc.ts index ebec682ba2e1..9a86fde5f6c7 100644 --- a/code/frameworks/angular/src/builders/utils/run-compodoc.ts +++ b/code/frameworks/angular/src/builders/utils/run-compodoc.ts @@ -31,7 +31,8 @@ export const runCompodoc = ( const stdout = packageManager.runPackageCommandSync( 'compodoc', finalCompodocArgs, - context.workspaceRoot + context.workspaceRoot, + 'inherit' ); context.logger.info(stdout); diff --git a/code/lib/cli/src/js-package-manager/JsPackageManager.ts b/code/lib/cli/src/js-package-manager/JsPackageManager.ts index 8e8ae0b2ce1c..3e0b16a1b25c 100644 --- a/code/lib/cli/src/js-package-manager/JsPackageManager.ts +++ b/code/lib/cli/src/js-package-manager/JsPackageManager.ts @@ -427,8 +427,18 @@ export abstract class JsPackageManager { ): // Use generic and conditional type to force `string[]` if fetchAllVersions is true and `string` if false Promise; - public abstract runPackageCommand(command: string, args: string[], cwd?: string): Promise; - public abstract runPackageCommandSync(command: string, args: string[], cwd?: string): string; + public abstract runPackageCommand( + command: string, + args: string[], + cwd?: string, + stdio?: string + ): Promise; + public abstract runPackageCommandSync( + command: string, + args: string[], + cwd?: string, + stdio?: 'inherit' | 'pipe' + ): string; public abstract findInstallations(pattern?: string[]): Promise; public executeCommandSync({ diff --git a/code/lib/cli/src/js-package-manager/NPMProxy.ts b/code/lib/cli/src/js-package-manager/NPMProxy.ts index 090bc93fed16..5dd0d63bd262 100644 --- a/code/lib/cli/src/js-package-manager/NPMProxy.ts +++ b/code/lib/cli/src/js-package-manager/NPMProxy.ts @@ -47,11 +47,17 @@ export class NPMProxy extends JsPackageManager { return this.installArgs; } - public runPackageCommandSync(command: string, args: string[], cwd?: string): string { + public runPackageCommandSync( + command: string, + args: string[], + cwd?: string, + stdio?: 'pipe' | 'inherit' + ): string { return this.executeCommandSync({ command: 'npm', args: ['exec', '--', command, ...args], cwd, + stdio, }); } diff --git a/code/lib/cli/src/js-package-manager/PNPMProxy.ts b/code/lib/cli/src/js-package-manager/PNPMProxy.ts index 1c644cdb387c..8e8a4dce793e 100644 --- a/code/lib/cli/src/js-package-manager/PNPMProxy.ts +++ b/code/lib/cli/src/js-package-manager/PNPMProxy.ts @@ -67,11 +67,17 @@ export class PNPMProxy extends JsPackageManager { return this.installArgs; } - public runPackageCommandSync(command: string, args: string[], cwd?: string): string { + public runPackageCommandSync( + command: string, + args: string[], + cwd?: string, + stdio?: 'pipe' | 'inherit' + ): string { return this.executeCommandSync({ command: 'pnpm', args: ['exec', command, ...args], cwd, + stdio, }); } diff --git a/code/lib/cli/src/js-package-manager/Yarn1Proxy.ts b/code/lib/cli/src/js-package-manager/Yarn1Proxy.ts index ad85c1f5452b..00de17ded091 100644 --- a/code/lib/cli/src/js-package-manager/Yarn1Proxy.ts +++ b/code/lib/cli/src/js-package-manager/Yarn1Proxy.ts @@ -42,8 +42,13 @@ export class Yarn1Proxy extends JsPackageManager { return `yarn ${command}`; } - public runPackageCommandSync(command: string, args: string[], cwd?: string): string { - return this.executeCommandSync({ command: `yarn`, args: [command, ...args], cwd }); + public runPackageCommandSync( + command: string, + args: string[], + cwd?: string, + stdio?: 'pipe' | 'inherit' + ): string { + return this.executeCommandSync({ command: `yarn`, args: [command, ...args], cwd, stdio }); } async runPackageCommand(command: string, args: string[], cwd?: string): Promise { diff --git a/code/lib/cli/src/js-package-manager/Yarn2Proxy.ts b/code/lib/cli/src/js-package-manager/Yarn2Proxy.ts index e565e7f12ee2..7005052b0d0a 100644 --- a/code/lib/cli/src/js-package-manager/Yarn2Proxy.ts +++ b/code/lib/cli/src/js-package-manager/Yarn2Proxy.ts @@ -28,8 +28,13 @@ export class Yarn2Proxy extends JsPackageManager { return `yarn ${command}`; } - public runPackageCommandSync(command: string, args: string[], cwd?: string) { - return this.executeCommandSync({ command: 'yarn', args: [command, ...args], cwd }); + public runPackageCommandSync( + command: string, + args: string[], + cwd?: string, + stdio?: 'pipe' | 'inherit' + ) { + return this.executeCommandSync({ command: 'yarn', args: [command, ...args], cwd, stdio }); } async runPackageCommand(command: string, args: string[], cwd?: string) {