type MockFactory = | Partial | ((actual: TModule) => Partial); function resolveMockOverrides( actual: TModule, factory: MockFactory, ): Partial { return typeof factory === "function" ? factory(actual) : factory; } function resolveDefaultBase(actual: object): Record { const defaultExport = (actual as { default?: unknown }).default; if (defaultExport && typeof defaultExport === "object") { return defaultExport as Record; } return actual as Record; } export async function mockNodeBuiltinModule( loadActual: () => Promise, factory: MockFactory, options?: { mirrorToDefault?: boolean }, ): Promise { const actual = await loadActual(); const overrides = resolveMockOverrides(actual, factory); const mocked = { ...actual, ...overrides, } as TModule & { default?: Record }; if (!options?.mirrorToDefault) { return mocked; } return { ...mocked, default: { ...resolveDefaultBase(actual), ...overrides, }, } as TModule; } export async function mockNodeChildProcessSpawnSync( spawnSync: (...args: unknown[]) => unknown, ): Promise { return mockNodeBuiltinModule(() => import("node:child_process"), { spawnSync: (...args: unknown[]) => spawnSync(...args), } as Partial); } export async function mockNodeChildProcessExecFile( execFile: typeof import("node:child_process").execFile, ): Promise { return mockNodeBuiltinModule(() => import("node:child_process"), { execFile, } as Partial); }