Skip to content

Commit ed54b8e

Browse files
authored
fix(tests): patch exposeEmitters (#2989)
## Problem VSC Insiders now minimizes private field names ## Solution Replace the event if the emitter is not found
1 parent 2e0460a commit ed54b8e

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

src/test/shared/vscode/testUtils.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as vscode from 'vscode'
77
import { Command, Commands } from '../../../shared/vscode/commands2'
88

99
type EventEmitters<T> = {
10-
[P in keyof T]: T[P] extends vscode.Event<any> ? P : never
10+
[P in keyof T]: T[P] extends vscode.Event<any> ? P & string : never
1111
}[keyof T]
1212

1313
type InterceptEmitters<T, K extends keyof T> = {
@@ -51,10 +51,18 @@ export function exposeEmitters<T extends Record<string, any>, K extends EventEmi
5151
}
5252
})
5353

54-
if (keys.length > 0) {
55-
throw new Error(
56-
`exposeEmitters(): failed to find emitters for keys ${keys.map(k => `"${String(k)}"`).join(', ')}`
57-
)
54+
// Patch in emitters if they weren't found
55+
// The patched `fire___` method won't work on listeners
56+
// subscribed prior to `exposeEmitters` being called
57+
for (const key of keys) {
58+
const event = obj[key] as vscode.Event<any>
59+
const emitter = new vscode.EventEmitter<T[K]>()
60+
event(v => emitter.fire(v))
61+
62+
Object.assign(obj, {
63+
[key]: emitter.event,
64+
[`fire${capitalize(key)}`]: emitter.fire.bind(emitter),
65+
})
5866
}
5967

6068
return obj as any

0 commit comments

Comments
 (0)