From f184c13bd7adb4ef098056f6e3eb29862796dc70 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Mon, 19 Oct 2026 00:46:25 -0700 Subject: [PATCH] Align root Node types with the supported Node 24 runtime (#30617) * Align root Node types with the supported Node 24 runtime * Preserve mobile rejection listeners with Node 24 types --- config/e2e-typecheck-baseline.txt | 3 - config/scripts/check-node-runtime-pin.mjs | 16 ++ .../scripts/check-node-runtime-pin.test.mjs | 37 ++- .../mobile-native-chat-page-rejection.test.ts | 3 +- .../rpc-recording/unhandled-recording.ts | 3 +- package.json | 2 +- pnpm-lock.yaml | 213 +++++++++--------- ...ssion-scanner-service-cancellation.test.ts | 2 +- .../scanner-incremental-reader.test.ts | 2 +- .../ipc/parcel-watcher-process-entry.test.ts | 170 ++++++++------ src/main/orcad/orcad-bundled-runtime.test.ts | 12 +- .../orca-runtime-files-mock-registry.ts | 4 +- .../speech/speech-model-download-transport.ts | 2 +- 13 files changed, 269 insertions(+), 200 deletions(-) diff --git a/config/e2e-typecheck-baseline.txt b/config/e2e-typecheck-baseline.txt index c9672106826..b3d3be0879b 100644 --- a/config/e2e-typecheck-baseline.txt +++ b/config/e2e-typecheck-baseline.txt @@ -27,8 +27,6 @@ 1 tests/e2e/cross-version-wire/structured-agent-session-host-fixture.ts 1 tests/e2e/cross-version-wire/submission-positions-downgrade.unit.test.ts 1 tests/e2e/cross-version-wire/versioned-agent-session-wire.ts -1 tests/e2e/daemon-generation-legacy-close-safety.spec.ts -1 tests/e2e/daemon-generation-reconnect-safety.spec.ts 1 tests/e2e/editable-context-paste-ownership.spec.ts 1 tests/e2e/file-explorer-linked-watch-refresh.spec.ts 5 tests/e2e/fixtures/daemon-generation-legacy-close-client.ts @@ -38,7 +36,6 @@ 1 tests/e2e/github-created-issue-start-prefill.spec.ts 1 tests/e2e/headless-paired-remote-terminal-reveal-grid.spec.ts 1 tests/e2e/headless-serve-desktop-activation.spec.ts -1 tests/e2e/helpers/daemon-generation-safety-fixtures.ts 5 tests/e2e/helpers/headless-paired-runtime-host.ts 1 tests/e2e/helpers/native-chat-view.ts 2 tests/e2e/helpers/nested-runtime-ssh-client-route.ts diff --git a/config/scripts/check-node-runtime-pin.mjs b/config/scripts/check-node-runtime-pin.mjs index 6d5205aa525..d606fb3ff59 100644 --- a/config/scripts/check-node-runtime-pin.mjs +++ b/config/scripts/check-node-runtime-pin.mjs @@ -109,6 +109,22 @@ export function findNodeRuntimePinProblems({ `NODE_RUNTIME_PIN.version ${pin.version} is not package.json engines.node major ${engineMajor}` ) } + const runtimeMajor = majorOf(pin.version) + const declaredNodeTypes = + packageJson.devDependencies?.['@types/node'] ?? packageJson.dependencies?.['@types/node'] + if (majorOf(declaredNodeTypes) !== runtimeMajor) { + problems.push( + `package.json @types/node is ${declaredNodeTypes}, but NODE_RUNTIME_PIN.version major is ${runtimeMajor}` + ) + } + const lockedNodeTypes = lockedVersion( + rootImporter.devDependencies?.['@types/node'] ?? rootImporter.dependencies?.['@types/node'] + ) + if (majorOf(lockedNodeTypes) !== runtimeMajor) { + problems.push( + `pnpm-lock.yaml resolves @types/node ${lockedNodeTypes}, but NODE_RUNTIME_PIN.version major is ${runtimeMajor}` + ) + } if (!Number.isInteger(pin.napi) || pin.napi < 1) { problems.push(`NODE_RUNTIME_PIN.napi must be a positive integer, got ${pin.napi}`) } diff --git a/config/scripts/check-node-runtime-pin.test.mjs b/config/scripts/check-node-runtime-pin.test.mjs index 885bbc39776..121c6628229 100644 --- a/config/scripts/check-node-runtime-pin.test.mjs +++ b/config/scripts/check-node-runtime-pin.test.mjs @@ -45,10 +45,14 @@ function validInput() { pin, assets, targets, - packageJson: { devDependencies: { electron: '43.7.5' }, engines: { node: '24' } }, + packageJson: { + devDependencies: { electron: '43.7.5', '@types/node': '^24.19.2' }, + engines: { node: '24' } + }, rootImporter: { devDependencies: { - electron: { specifier: '43.7.5', version: '43.7.5(supports-color@7.2.0)' } + electron: { specifier: '43.7.5', version: '43.7.5(supports-color@7.2.0)' }, + '@types/node': { specifier: '^24.19.2', version: '24.19.2' } } } } @@ -85,6 +89,35 @@ describe('findNodeRuntimePinProblems', () => { ]) }) + it.each(['^25.6.0', '^22.20.0', undefined])( + 'rejects declared Node types %s outside the runtime major', + (nodeTypes) => { + const input = validInput() + input.packageJson.devDependencies['@types/node'] = nodeTypes + expect(findNodeRuntimePinProblems(input)).toEqual([ + `package.json @types/node is ${nodeTypes}, but NODE_RUNTIME_PIN.version major is 24` + ]) + } + ) + + it.each(['25.6.0', '22.20.0', undefined])( + 'rejects locked Node types %s outside the runtime major', + (nodeTypes) => { + const input = validInput() + input.rootImporter.devDependencies['@types/node'].version = nodeTypes + expect(findNodeRuntimePinProblems(input)).toEqual([ + `pnpm-lock.yaml resolves @types/node ${nodeTypes ?? null}, but NODE_RUNTIME_PIN.version major is 24` + ]) + } + ) + + it('accepts Node type versions within the runtime major', () => { + const input = validInput() + input.packageJson.devDependencies['@types/node'] = '^24.18.0' + input.rootImporter.devDependencies['@types/node'].version = '24.19.0' + expect(findNodeRuntimePinProblems(input)).toEqual([]) + }) + it('requires exactly one asset per server target', () => { const input = validInput() delete input.assets['win32-x64'] diff --git a/mobile/src/session/mobile-native-chat-page-rejection.test.ts b/mobile/src/session/mobile-native-chat-page-rejection.test.ts index 2b079b1cdd6..2453742fd7a 100644 --- a/mobile/src/session/mobile-native-chat-page-rejection.test.ts +++ b/mobile/src/session/mobile-native-chat-page-rejection.test.ts @@ -45,7 +45,8 @@ async function unhandledRejectionsWhile(run: () => Promise): Promise undefined function emit(message: AiVaultServiceParentMessage): void { - process.emit('message', message) + process.emit('message', message, undefined) } function scan(id: number): void { diff --git a/src/main/claude-usage/scanner-incremental-reader.test.ts b/src/main/claude-usage/scanner-incremental-reader.test.ts index 52e4ed25de9..cf56d92354b 100644 --- a/src/main/claude-usage/scanner-incremental-reader.test.ts +++ b/src/main/claude-usage/scanner-incremental-reader.test.ts @@ -82,7 +82,7 @@ vi.mock('node:fs/promises', async () => { streaming = true stream.once('end', () => (streaming = false)) stream.once('close', () => (streaming = false)) - stream.on('data', (chunk: Buffer) => { + stream.on('data', (chunk) => { read.bytes += chunk.length }) return stream diff --git a/src/main/ipc/parcel-watcher-process-entry.test.ts b/src/main/ipc/parcel-watcher-process-entry.test.ts index ccc76293af7..e0c2ab98030 100644 --- a/src/main/ipc/parcel-watcher-process-entry.test.ts +++ b/src/main/ipc/parcel-watcher-process-entry.test.ts @@ -23,9 +23,9 @@ vi.mock('./shallow-watch-delivery-probe', () => ({ vi.mock('@parcel/watcher', () => ({ subscribe: subscribeMock })) describe('parcel watcher process canary', () => { - let originalMessageListeners: ReturnType - let originalExitListeners: ReturnType - let originalDisconnectListeners: ReturnType + let originalMessageListeners: NodeJS.MessageListener[] + let originalExitListeners: NodeJS.ExitListener[] + let originalDisconnectListeners: NodeJS.DisconnectListener[] let originalSend: typeof process.send beforeEach(() => { @@ -77,12 +77,16 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { - op: 'subscribe', - id: 7, - dir: '/repo/.git', - opts: { mode: 'shallow', include: ['HEAD'] } - }) + process.emit( + 'message', + { + op: 'subscribe', + id: 7, + dir: '/repo/.git', + opts: { mode: 'shallow', include: ['HEAD'] } + }, + undefined + ) await vi.advanceTimersByTimeAsync(0) expect(sendMock).toHaveBeenCalledWith( @@ -119,12 +123,16 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { - op: 'subscribe', - id: 1, - dir: '/repo/.git', - opts: { mode: 'shallow', include: ['HEAD'] } - }) + process.emit( + 'message', + { + op: 'subscribe', + id: 1, + dir: '/repo/.git', + opts: { mode: 'shallow', include: ['HEAD'] } + }, + undefined + ) await vi.advanceTimersByTimeAsync(0) expect(subscribeMock).toHaveBeenCalledTimes(1) @@ -148,7 +156,7 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/large-repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/large-repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(30_000) @@ -165,12 +173,12 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) await vi.advanceTimersByTimeAsync(10_000) expect(writeFileSyncMock).toHaveBeenCalledTimes(1) - process.emit('message', { op: 'subscribe', id: 2, dir: '/large-repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 2, dir: '/large-repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(20_000) expect(writeFileSyncMock).toHaveBeenCalledTimes(1) @@ -186,12 +194,12 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/repo-a', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/repo-a', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 2, dir: '/repo-b', opts: {} }) + process.emit('message', { op: 'subscribe', id: 2, dir: '/repo-b', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'unsubscribe', id: 1 }) + process.emit('message', { op: 'unsubscribe', id: 1 }, undefined) await vi.advanceTimersByTimeAsync(30_000) expect(writeFileSyncMock).toHaveBeenCalledTimes(3) @@ -215,11 +223,11 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/repo-a', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/repo-a', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 2, dir: '/repo-b', opts: {} }) + process.emit('message', { op: 'subscribe', id: 2, dir: '/repo-b', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'unsubscribe', id: 1 }) + process.emit('message', { op: 'unsubscribe', id: 1 }, undefined) await vi.advanceTimersByTimeAsync(30_000) expect(deadlockedUnsubscribe).not.toHaveBeenCalled() @@ -244,15 +252,15 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/repo-a', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/repo-a', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 2, dir: '/repo-b', opts: {} }) + process.emit('message', { op: 'subscribe', id: 2, dir: '/repo-b', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'unsubscribe', id: 1 }) + process.emit('message', { op: 'unsubscribe', id: 1 }, undefined) await vi.advanceTimersByTimeAsync(0) expect(deadlockedUnsubscribe).toHaveBeenCalledTimes(1) - process.emit('message', { op: 'subscribe', id: 3, dir: '/repo-c', opts: {} }) + process.emit('message', { op: 'subscribe', id: 3, dir: '/repo-c', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(30_000) expect(subscribeMock).toHaveBeenCalledTimes(3) @@ -275,12 +283,12 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/live-repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/live-repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 2, dir: '/crawling-repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 2, dir: '/crawling-repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'unsubscribe', id: 2 }) - process.emit('message', { op: 'subscribe', id: 3, dir: '/later-repo', opts: {} }) + process.emit('message', { op: 'unsubscribe', id: 2 }, undefined) + process.emit('message', { op: 'subscribe', id: 3, dir: '/later-repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(30_000) expect(writeFileSyncMock).not.toHaveBeenCalled() @@ -308,10 +316,10 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/active', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/active', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 2, dir: '/queued', opts: {} }) - process.emit('message', { op: 'cancel-subscribe', id: 2 }) + process.emit('message', { op: 'subscribe', id: 2, dir: '/queued', opts: {} }, undefined) + process.emit('message', { op: 'cancel-subscribe', id: 2 }, undefined) // Why: non-restart cancel reuses async unsubscribe teardown; drain the // exclusive lifecycle queue after the active crawl finishes. @@ -337,11 +345,11 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/finished', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/finished', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) expect(sendMock).toHaveBeenCalledWith({ op: 'subscribed', id: 1 }, expect.any(Function)) - process.emit('message', { op: 'cancel-subscribe', id: 1 }) + process.emit('message', { op: 'cancel-subscribe', id: 1 }, undefined) await vi.advanceTimersByTimeAsync(0) expect(unsubscribe).toHaveBeenCalledTimes(1) @@ -362,9 +370,9 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'unsubscribe', id: 1 }) + process.emit('message', { op: 'unsubscribe', id: 1 }, undefined) await vi.advanceTimersByTimeAsync(0) expect(sendMock).toHaveBeenCalledWith( @@ -390,9 +398,9 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/active', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/active', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'cancel-subscribe', id: 1 }) + process.emit('message', { op: 'cancel-subscribe', id: 1 }, undefined) expect(sendMock).toHaveBeenCalledWith( { op: 'cancel-requires-restart', id: 1 }, @@ -409,7 +417,7 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) await vi.advanceTimersByTimeAsync(30_000) @@ -436,13 +444,17 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { - op: 'subscribe', - id: 1, - dir: '/repo', - opts: {}, - delivery: { includeDirectoryMetadata: true, maxEventsPerBatch: 2 } - }) + process.emit( + 'message', + { + op: 'subscribe', + id: 1, + dir: '/repo', + opts: {}, + delivery: { includeDirectoryMetadata: true, maxEventsPerBatch: 2 } + }, + undefined + ) await vi.advanceTimersByTimeAsync(0) callback?.(null, [ @@ -488,7 +500,7 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir: '/repo', opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) callback?.( @@ -532,7 +544,7 @@ describe('parcel watcher process canary', () => { process.send = sendMock await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'subscribe', id: 1, dir, opts: {} }) + process.emit('message', { op: 'subscribe', id: 1, dir, opts: {} }, undefined) await vi.advanceTimersByTimeAsync(0) sendMock.mockClear() @@ -575,13 +587,17 @@ describe('parcel watcher process canary', () => { process.send = sendMock await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { - op: 'subscribe', - id: 1, - dir: '/repo', - opts: {}, - delivery: { maxEventsPerBatch: 1 } - }) + process.emit( + 'message', + { + op: 'subscribe', + id: 1, + dir: '/repo', + opts: {}, + delivery: { maxEventsPerBatch: 1 } + }, + undefined + ) await vi.advanceTimersByTimeAsync(0) sendMock.mockClear() @@ -628,13 +644,17 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { - op: 'subscribe', - id: 1, - dir: '/repo', - opts: {}, - delivery: { includeDirectoryMetadata: true, maxEventsPerBatch: 2 } - }) + process.emit( + 'message', + { + op: 'subscribe', + id: 1, + dir: '/repo', + opts: {}, + delivery: { includeDirectoryMetadata: true, maxEventsPerBatch: 2 } + }, + undefined + ) await vi.advanceTimersByTimeAsync(0) callback?.(null, [{ type: 'update', path: '/repo/first.txt' }]) @@ -673,19 +693,23 @@ describe('parcel watcher process canary', () => { await import('./parcel-watcher-process-entry') await vi.advanceTimersByTimeAsync(0) - process.emit('message', { - op: 'subscribe', - id: 1, - dir: '/repo', - opts: {}, - delivery: { includeDirectoryMetadata: true, maxEventsPerBatch: 2 } - }) + process.emit( + 'message', + { + op: 'subscribe', + id: 1, + dir: '/repo', + opts: {}, + delivery: { includeDirectoryMetadata: true, maxEventsPerBatch: 2 } + }, + undefined + ) await vi.advanceTimersByTimeAsync(0) callback?.(null, [{ type: 'update', path: '/repo/first.txt' }]) callback?.(null, [{ type: 'update', path: '/repo/queued.txt' }]) await vi.advanceTimersByTimeAsync(0) - process.emit('message', { op: 'unsubscribe', id: 1 }) + process.emit('message', { op: 'unsubscribe', id: 1 }, undefined) await vi.advanceTimersByTimeAsync(0) releaseFirstEvent?.() await vi.advanceTimersByTimeAsync(0) diff --git a/src/main/orcad/orcad-bundled-runtime.test.ts b/src/main/orcad/orcad-bundled-runtime.test.ts index 357d0efd1c6..ae7ebacb7cd 100644 --- a/src/main/orcad/orcad-bundled-runtime.test.ts +++ b/src/main/orcad/orcad-bundled-runtime.test.ts @@ -40,10 +40,10 @@ class RuntimeChild extends EventEmitter { let child: RuntimeChild const signalNames = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const -let oldListeners: Map> +let oldListeners: Map beforeEach(() => { - oldListeners = new Map(signalNames.map((signal) => [signal, process.rawListeners(signal)])) + oldListeners = new Map(signalNames.map((signal) => [signal, process.listeners(signal)])) child = new RuntimeChild() fixture.exists.mockReturnValue(true) fixture.read.mockImplementation((path) => @@ -61,7 +61,7 @@ beforeEach(() => { afterEach(() => { for (const signal of signalNames) { - for (const listener of process.rawListeners(signal)) { + for (const listener of process.listeners(signal)) { if (!oldListeners.get(signal)?.includes(listener)) { process.off(signal, listener) } @@ -165,7 +165,7 @@ describe('bundled Orca runtime handoff', () => { }) for (const signal of signalNames) { const listener = process - .rawListeners(signal) + .listeners(signal) .find((candidate) => !oldListeners.get(signal)?.includes(candidate)) if (signal === 'SIGHUP' && platform === 'win32') { expect(listener).toBeUndefined() @@ -193,7 +193,7 @@ describe('bundled Orca runtime handoff', () => { expect(process.exit).toHaveBeenCalledWith(23) expect(process.kill).not.toHaveBeenCalled() for (const signal of signalNames) { - expect(process.rawListeners(signal)).toEqual(oldListeners.get(signal)) + expect(process.listeners(signal)).toEqual(oldListeners.get(signal)) } }) @@ -222,7 +222,7 @@ describe('bundled Orca runtime handoff', () => { expect(() => child.emit('error', new Error('ENOENT'))).toThrow('test process exit') expect(process.exit).toHaveBeenCalledWith(78) for (const signal of signalNames) { - expect(process.rawListeners(signal)).toEqual(oldListeners.get(signal)) + expect(process.listeners(signal)).toEqual(oldListeners.get(signal)) } }) diff --git a/src/main/runtime/orca-runtime-files-mock-registry.ts b/src/main/runtime/orca-runtime-files-mock-registry.ts index 276c16cf90b..ab53ab5a4d2 100644 --- a/src/main/runtime/orca-runtime-files-mock-registry.ts +++ b/src/main/runtime/orca-runtime-files-mock-registry.ts @@ -46,7 +46,9 @@ export function enoent(): Error { return Object.assign(new Error('ENOENT'), { code: 'ENOENT' }) } -export async function fsModuleMock() { +export async function fsModuleMock(): Promise< + Omit & { watch: typeof watchMock } +> { const actual = await vi.importActual('fs') return { ...actual, diff --git a/src/main/speech/speech-model-download-transport.ts b/src/main/speech/speech-model-download-transport.ts index 1d887a1295e..1942f5d762e 100644 --- a/src/main/speech/speech-model-download-transport.ts +++ b/src/main/speech/speech-model-download-transport.ts @@ -148,7 +148,7 @@ export abstract class SpeechModelDownloadTransport extends SpeechModelHttpDownlo cleanup() reject(error) } - const onData = (chunk: Buffer): void => { + const onData = (chunk: string | Buffer): void => { hash.update(chunk) } const onError = (error: Error): void => {