#!/usr/bin/env node /** * Source `pnpm dsh` entry: overlay a checkout-local HTTP proxy, respawn this * Node process so `fetch` binds it at start, then dispatch the CLI. The * calling shell is unchanged. * @module */ /* v8 ignore file -- overlay behavior is tested in apply-source-dsh-http-proxy.spec.ts. */ import { spawn } from 'node:child_process' import { applySourceDshHttpProxy, readSourceDshHttpProxyFile, shouldReexecSourceDshForFetchProxy, SOURCE_DSH_PROXY_REEXEC_MARKER, sourceDshAppliedHttpProxyUrl, sourceDshHttpProxyOverlayPresent, } from './apply-source-dsh-http-proxy.ts' const fileText = readSourceDshHttpProxyFile() const overlayUrl = process.env.DSH_HTTP_PROXY try { applySourceDshHttpProxy({ env: process.env, fileText, overlayUrl, }) } catch (error) { const message = error instanceof Error ? error.message : String(error) process.stderr.write(`dsh: ${message}\n`) process.exit(1) } const appliedProxy = sourceDshAppliedHttpProxyUrl(process.env) if ( appliedProxy !== undefined && process.env[SOURCE_DSH_PROXY_REEXEC_MARKER] !== '1' ) { process.stderr.write(`dsh: HTTP proxy overlay ${appliedProxy} (this Node process only)\n`) } if (shouldReexecSourceDshForFetchProxy( process.env, sourceDshHttpProxyOverlayPresent(overlayUrl, fileText), )) { process.env[SOURCE_DSH_PROXY_REEXEC_MARKER] = '1' const child = spawn(process.execPath, [...process.execArgv, ...process.argv.slice(1)], { env: { ...process.env }, stdio: 'inherit', }) child.on('error', error => { process.stderr.write(`dsh: ${error instanceof Error ? error.message : String(error)}\n`) process.exit(1) }) child.on('exit', (code, signal) => { if (signal) { process.kill(process.pid, signal) return } process.exit(code ?? 1) }) } else { await import('../apps/cli/src/bin.ts') }