diff --git a/apps/demos/utils/create-bundles/Angular/bundler.ts b/apps/demos/utils/create-bundles/Angular/bundler.ts index ca2d8dbe953e..ba567e31d289 100644 --- a/apps/demos/utils/create-bundles/Angular/bundler.ts +++ b/apps/demos/utils/create-bundles/Angular/bundler.ts @@ -1,4 +1,4 @@ -import { exec } from 'child_process'; +import { spawn } from 'child_process'; import { BuildOptions } from 'esbuild'; import { existsSync, mkdirSync, removeSync } from 'fs-extra'; import { Demo, Framework } from '../helper/types'; @@ -42,8 +42,7 @@ export default class AngularBundler implements Bundler { createDemoLayout(demo, this.framework); - const ngBuildCommand = `npm run build-angular -- ${getProjectNameByDemo(demo)}`; - const ngBuildProcess = exec(ngBuildCommand); + const ngBuildProcess = spawn('npm', ['run', 'build-angular', '--', getProjectNameByDemo(demo)], { shell: process.platform === 'win32' }); ngBuildProcess.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); diff --git a/apps/demos/utils/ts-to-js-converter/converter.ts b/apps/demos/utils/ts-to-js-converter/converter.ts index b56d1bf6ff4a..dc4564bf4f11 100644 --- a/apps/demos/utils/ts-to-js-converter/converter.ts +++ b/apps/demos/utils/ts-to-js-converter/converter.ts @@ -78,12 +78,24 @@ const pipeSource = async ( })); }; -// eslint-disable-next-line require-await -const execTsc = async (directory: string, args: string): Promise => new Promise((resolve, reject) => { - cps.exec(`tsc ${args}`, (error, stdout, stderr) => { - if (error != null) { +const execTsc = (directory: string, args: string[]): Promise => new Promise((resolve, reject) => { + const proc = cps.spawn('tsc', args, { cwd: directory, shell: isWindows() }); + let stdout = ''; + let stderr = ''; + proc.stdout.on('data', (data: Buffer) => { stdout += data.toString(); }); + proc.stderr.on('data', (data: Buffer) => { stderr += data.toString(); }); + proc.on('error', (err: Error) => { + // eslint-disable-next-line prefer-promise-reject-errors + reject(`tsc failed to spawn: ${err.message}`); + }); + proc.on('close', (code: number | null, signal: string | null) => { + if (signal !== null) { + // eslint-disable-next-line prefer-promise-reject-errors + return reject(`tsc killed by signal ${signal}\n${stderr}\n${stdout}`); + } + if (code !== 0) { // eslint-disable-next-line prefer-promise-reject-errors - return reject(`${error}\n${stderr}\n${stdout}`); + return reject(`tsc exited with code ${code}\n${stderr}\n${stdout}`); } return resolve(stdout); }); @@ -110,7 +122,7 @@ const compile = async (resolve: PathResolvers, log: Logger) => { ), ); - await execTsc(resolve.source('./'), `--build ${tsconfigFile}`); + await execTsc(resolve.source('./'), ['--build', tsconfigFile]); }; const copyAssets = async (resolve: PathResolvers, log: Logger) => {