|
|
@@ -0,0 +1,48 @@
|
|
|
+/**
|
|
|
+ * Source-checkout launcher. Successful build output stays out of CLI stdout;
|
|
|
+ * build failures report their captured diagnostics on stderr before exiting.
|
|
|
+ */
|
|
|
+import process from 'node:process'
|
|
|
+import { fileURLToPath } from 'node:url'
|
|
|
+
|
|
|
+import { execa } from 'execa'
|
|
|
+
|
|
|
+const repoRoot = fileURLToPath(new URL('..', import.meta.url))
|
|
|
+const sourceBin = fileURLToPath(new URL('../apps/cli/src/bin.ts', import.meta.url))
|
|
|
+
|
|
|
+function completeFrom(result: { readonly exitCode?: number; readonly signal?: string }): void {
|
|
|
+ if (result.signal !== undefined) {
|
|
|
+ process.kill(process.pid, result.signal)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ process.exitCode = result.exitCode ?? 1
|
|
|
+}
|
|
|
+
|
|
|
+function reportBuildFailure(result: {
|
|
|
+ readonly all: string | undefined
|
|
|
+ readonly shortMessage: string | undefined
|
|
|
+}): void {
|
|
|
+ const diagnostic = result.all === undefined || result.all.length === 0
|
|
|
+ ? result.shortMessage ?? 'Source build failed without diagnostics.'
|
|
|
+ : result.all
|
|
|
+ process.stderr.write(diagnostic.endsWith('\n') ? diagnostic : `${diagnostic}\n`)
|
|
|
+}
|
|
|
+
|
|
|
+const build = await execa('pnpm', ['run', 'build'], {
|
|
|
+ all: true,
|
|
|
+ cwd: repoRoot,
|
|
|
+ reject: false,
|
|
|
+ stripFinalNewline: false,
|
|
|
+})
|
|
|
+if (build.failed) {
|
|
|
+ reportBuildFailure(build)
|
|
|
+ completeFrom(build)
|
|
|
+} else {
|
|
|
+ const cli = await execa(process.execPath, ['--import', 'tsx/esm', sourceBin, ...process.argv.slice(2)], {
|
|
|
+ cwd: repoRoot,
|
|
|
+ env: { ...process.env, NODE_USE_ENV_PROXY: '1' },
|
|
|
+ reject: false,
|
|
|
+ stdio: 'inherit',
|
|
|
+ })
|
|
|
+ completeFrom(cli)
|
|
|
+}
|