From e37c3fd9089d13c7ee34109ad779b50c77f1b761 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Tue, 16 Nov 2021 13:45:33 +0800 Subject: [PATCH] feat(napi): add pipe flag to pipe the generated files into custom command --- cli/src/build.ts | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/cli/src/build.ts b/cli/src/build.ts index 151dfe6a..0fe8ee3b 100644 --- a/cli/src/build.ts +++ b/cli/src/build.ts @@ -80,6 +80,12 @@ export class BuildCommand extends Command { )} file`, }) + pipe?: string = Option.String('--pipe', { + description: `Pipe [${chalk.green( + '.js/.ts', + )}] files to this command, eg ${chalk.green('prettier -w')}`, + }) + destDir = Option.String({ required: false, }) @@ -234,18 +240,45 @@ export class BuildCommand extends Command { debug(`Write binary content to [${chalk.yellowBright(distModulePath)}]`) await copyFileAsync(sourcePath, distModulePath) + const dtsFilePath = join( + process.cwd(), + this.destDir ?? '.', + this.dts ?? 'index.d.ts', + ) + const idents = await processIntermediateTypeFile( intermediateTypeFile, - join(this.destDir ?? '.', this.dts ?? 'index.d.ts'), + dtsFilePath, ) - await writeJsBinding( - binaryName, - packageName, + if (this.pipe) { + const pipeCommand = `${this.pipe} ${dtsFilePath}` + console.info(`Run ${chalk.green(pipeCommand)}`) + try { + execSync(pipeCommand, { stdio: 'inherit', env: process.env }) + } catch (e) { + console.warn( + chalk.bgYellowBright('Pipe the dts file to command failed'), + e, + ) + } + } + const jsBindingFilePath = this.jsBinding && this.jsBinding !== 'false' ? join(process.cwd(), this.jsBinding) - : null, - idents, - ) + : null + await writeJsBinding(binaryName, packageName, jsBindingFilePath, idents) + if (this.pipe && jsBindingFilePath) { + const pipeCommand = `${this.pipe} ${jsBindingFilePath}` + console.info(`Run ${chalk.green(pipeCommand)}`) + try { + execSync(pipeCommand, { stdio: 'inherit', env: process.env }) + } catch (e) { + console.warn( + chalk.bgYellowBright('Pipe the js binding file to command failed'), + e, + ) + } + } } }