Previously, the examples in the `cli-builder` guide were hard-coded. This made it impossible to test them and verify they are correct. This commit fixes this by converting them into a proper mini-app. In a subsequent commit, tests will be added to verify that the source code works as expected (and guard against regressions). Fixes #34314 PR Close #34362
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| // #docplaster
 | |
| // #docregion builder, builder-skeleton, handling-output, progress-reporting
 | |
| import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect';
 | |
| import { JsonObject } from '@angular-devkit/core';
 | |
| // #enddocregion builder-skeleton
 | |
| import * as childProcess from 'child_process';
 | |
| // #docregion builder-skeleton
 | |
| 
 | |
| interface Options extends JsonObject {
 | |
|   command: string;
 | |
|   args: string[];
 | |
| }
 | |
| 
 | |
| export default createBuilder(commandBuilder);
 | |
| 
 | |
| function commandBuilder(
 | |
|   options: Options,
 | |
|   context: BuilderContext,
 | |
|   ): Promise<BuilderOutput> {
 | |
|     // #enddocregion builder, builder-skeleton, handling-output
 | |
|     // #docregion report-status
 | |
|     context.reportStatus(`Executing "${options.command}"...`);
 | |
|     // #docregion builder, handling-output
 | |
|     const child = childProcess.spawn(options.command, options.args);
 | |
|     // #enddocregion builder, report-status
 | |
| 
 | |
|     child.stdout.on('data', data => {
 | |
|       context.logger.info(data.toString());
 | |
|     });
 | |
|     child.stderr.on('data', data => {
 | |
|       context.logger.error(data.toString());
 | |
|     });
 | |
| 
 | |
|     // #docregion builder
 | |
|     return new Promise(resolve => {
 | |
|       // #enddocregion builder, handling-output
 | |
|       context.reportStatus(`Done.`);
 | |
|       // #docregion builder, handling-output
 | |
|       child.on('close', code => {
 | |
|         resolve({ success: code === 0 });
 | |
|       });
 | |
|     });
 | |
|     // #docregion builder-skeleton
 | |
| }
 | |
| 
 | |
| // #enddocregion builder, builder-skeleton, handling-output, progress-reporting
 |