diff --git a/packages/nx/src/plugins/js/project-graph/affected/npm-packages.spec.ts b/packages/nx/src/plugins/js/project-graph/affected/npm-packages.spec.ts index b5c7992a4ed857..a5ea8032ff64d6 100644 --- a/packages/nx/src/plugins/js/project-graph/affected/npm-packages.spec.ts +++ b/packages/nx/src/plugins/js/project-graph/affected/npm-packages.spec.ts @@ -296,7 +296,7 @@ describe('getTouchedNpmPackages', () => { }); it('should handle and log workspace package.json changes when the changes are not in `npmPackages` (projectGraph.externalNodes)', () => { - jest.spyOn(logger, 'warn'); + jest.spyOn(logger, 'warn').mockImplementation(() => {}); expect(() => { getTouchedNpmPackages( [ diff --git a/packages/nx/src/project-graph/plugins/isolation/plugin-pool.ts b/packages/nx/src/project-graph/plugins/isolation/plugin-pool.ts index 232fe0b63d10a4..c2058b6dfeebaa 100644 --- a/packages/nx/src/project-graph/plugins/isolation/plugin-pool.ts +++ b/packages/nx/src/project-graph/plugins/isolation/plugin-pool.ts @@ -37,19 +37,12 @@ export async function loadRemoteNxPlugin( plugin: PluginConfiguration, root: string ): Promise<[Promise, () => void]> { - const cacheKey = JSON.stringify(plugin); + const cacheKey = JSON.stringify({ plugin, root }); if (nxPluginWorkerCache.has(cacheKey)) { return [nxPluginWorkerCache.get(cacheKey), () => {}]; } - const { ipcPath, worker } = await startPluginWorker(); - - const socket = await new Promise((res, rej) => { - const socket = connect(ipcPath, () => { - res(socket); - }); - socket.on('error', rej); - }); + const { worker, socket } = await startPluginWorker(); const pendingPromises = new Map(); @@ -317,14 +310,16 @@ async function startPluginWorker() { let attempts = 0; return new Promise<{ worker: ChildProcess; - ipcPath: string; + socket: Socket; }>((resolve, reject) => { const id = setInterval(async () => { - if (await isServerAvailable(ipcPath)) { + const socket = await isServerAvailable(ipcPath); + if (socket) { + socket.unref(); clearInterval(id); resolve({ worker, - ipcPath, + socket, }); } else if (attempts > 1000) { // daemon fails to start, the process probably exited @@ -337,12 +332,11 @@ async function startPluginWorker() { }); } -function isServerAvailable(ipcPath: string): Promise { +function isServerAvailable(ipcPath: string): Promise { return new Promise((resolve) => { try { const socket = connect(ipcPath, () => { - socket.destroy(); - resolve(true); + resolve(socket); }); socket.once('error', () => { resolve(false);