-
-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathemitter.ts
55 lines (44 loc) · 1.54 KB
/
emitter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import type { EventEmitterMap } from '@nicepkg/gpt-runner-shared/common'
import { ClientEventName } from '@nicepkg/gpt-runner-shared/common'
import { EventEmitter } from 'eventemitter3'
import { commands } from 'vscode'
import { state } from './state'
import { Commands } from './constant'
export enum VscodeEventName {
VscodeUpdateOpeningFilePaths = 'vscodeUpdateOpeningFilePaths',
VscodeGoTo = 'vscodeGoTo',
}
export interface VscodeEventData {
[VscodeEventName.VscodeUpdateOpeningFilePaths]: void
[VscodeEventName.VscodeGoTo]: { url: string }
}
export type VscodeEventEmitterMap = EventEmitterMap & {
[K in VscodeEventName]: (data: VscodeEventData[K]) => any
}
export enum EventType {
ReceiveMessage = 'ReceiveMessage',
}
const emitter = new EventEmitter<VscodeEventEmitterMap>()
// rewrite emit method to send message to webview
const oldEmit = emitter.emit
emitter.emit = function (...args) {
const [eventName, eventData, type] = args
if (type !== EventType.ReceiveMessage) {
state.sidebarWebviewView?.webview.postMessage({ eventName, eventData })
state.webviewPanels.forEach((webviewPanel) => {
webviewPanel?.webview.postMessage({ eventName, eventData })
})
}
return oldEmit.apply(this, args as any)
}
// insert codes
emitter.on(ClientEventName.InsertCodes, ({ codes }) => {
state.insertCodes = codes
commands.executeCommand(Commands.InsertCodes)
})
// diff codes
emitter.on(ClientEventName.DiffCodes, ({ codes }) => {
state.diffCodes = codes
commands.executeCommand(Commands.DiffCodes)
})
export { emitter }