(overrides: Partial<VisDeps> = {})
| 125 | } |
| 126 | |
| 127 | function createDefaultVisDeps(overrides: Partial<VisDeps> = {}): VisDeps { |
| 128 | return { |
| 129 | getHomeDir: overrides.getHomeDir ?? (() => createCliTelemetryBootstrap().homeDir), |
| 130 | startVisServer: |
| 131 | overrides.startVisServer ?? |
| 132 | (async (opts) => { |
| 133 | // Dynamic import keeps the vis server (and Hono) out of the hot path. |
| 134 | const { startVisServer } = await import('@moonshot-ai/vis-server/start'); |
| 135 | return startVisServer(opts); |
| 136 | }), |
| 137 | // `openUrl` is a synchronous fire-and-forget; adapt it to the async dep. |
| 138 | openUrl: |
| 139 | overrides.openUrl ?? |
| 140 | (async (url: string) => { |
| 141 | openUrl(url); |
| 142 | }), |
| 143 | waitForShutdown: overrides.waitForShutdown ?? waitForSigint, |
| 144 | stdout: overrides.stdout ?? process.stdout, |
| 145 | stderr: overrides.stderr ?? process.stderr, |
| 146 | exit: overrides.exit ?? ((code: number) => process.exit(code)), |
| 147 | }; |
| 148 | } |
| 149 | |
| 150 | function waitForSigint(): Promise<void> { |
| 151 | return new Promise<void>((resolve) => { |
no test coverage detected