Skip to content

Commit 647728b

Browse files
Requests and Responses updated
1 parent 2606a85 commit 647728b

File tree

24 files changed

+296
-194
lines changed

24 files changed

+296
-194
lines changed

src/dataEditor/dataEditorClient.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export class DataEditorClient implements vscode.Disposable {
133133
fileToEdit: string = '',
134134
private panel: DataEditorUI
135135
) {
136-
this.panel.onDidReceiveMessage(this.msgReceiver, this)
136+
this.panel.onDidReceiveMessage(this.msgReceiver)
137137

138138
this.disposables = [
139139
this.panel,
@@ -187,6 +187,8 @@ export class DataEditorClient implements vscode.Disposable {
187187

188188
await editor.initialize()
189189

190+
ui.reveal()
191+
190192
ui.onDidDispose(async () => {
191193
const pathKey = path.resolve(editor.fileToEdit).toLowerCase()
192194
OPEN_EDITORS.delete(pathKey)
@@ -373,7 +375,12 @@ export class DataEditorClient implements vscode.Disposable {
373375
vscode.window.showErrorMessage(msg)
374376
}
375377

376-
this.panel.postMessage
378+
this.panel.postMessage('fileInfo', {
379+
bom: data.byteOrderMark,
380+
contentType: data.type,
381+
filename: this.fileToEdit,
382+
language: data.language,
383+
})
377384
// send the initial file info to the webview
378385
// await this.panel.postMessage({
379386
// command: MessageCommand.fileInfo,

src/dataEditor/ui/svelteWebviewInitializer.ts

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,58 +19,63 @@ import * as vscode from 'vscode'
1919
import * as fs from 'fs'
2020
import {
2121
DataEditorMessageResponses,
22-
ExtensionMessageResponses,
23-
MessageCommandMap,
22+
MessageRequestMap,
23+
MessageResponseMap,
2424
PostMessageArgs,
2525
} from 'ext_types'
2626
import { DisplayState } from './displayState'
27+
import { randomUUID } from 'crypto'
2728

2829
export interface DataEditorUI extends vscode.Disposable {
2930
readonly displayState: DisplayState
3031
dispose(): void
3132
setTitle(title: string): void
32-
postMessage<K extends keyof MessageCommandMap>(
33-
...payload: PostMessageArgs<MessageCommandMap, K>
33+
getMsgId(): string
34+
postMessage<K extends keyof MessageResponseMap>(
35+
...payload: PostMessageArgs<MessageResponseMap, K>
3436
): void
3537
reveal: vscode.WebviewPanel['reveal']
36-
onDidReceiveMessage: vscode.Webview['onDidReceiveMessage']
37-
onDidDispose: vscode.WebviewPanel['onDidDispose']
38+
onDidReceiveMessage(listener: (e: any) => void): void
39+
onDidDispose(listener: (e: any) => void): void
3840
}
3941
class SvelteUIWebviewPanel implements DataEditorUI {
4042
static readonly uiViewId: string = 'dataEditor'
4143
readonly displayState: DisplayState = new DisplayState()
44+
private messengerId: string = ''
4245

4346
constructor(private vscodePanel: vscode.WebviewPanel) {}
4447
dispose() {
4548
this.vscodePanel.dispose()
4649
}
47-
50+
getMsgId() {
51+
return this.messengerId
52+
}
4853
setTitle(title: string) {
4954
this.vscodePanel.title = title
5055
}
5156

52-
postMessage<K extends keyof MessageCommandMap>(
53-
...payload: PostMessageArgs<MessageCommandMap, K>
54-
) {}
55-
postEditorResponse<K extends keyof DataEditorMessageResponses>(
56-
type: K,
57-
message: DataEditorMessageResponses[K]
57+
postMessage<K extends keyof MessageResponseMap>(
58+
...msg: PostMessageArgs<MessageResponseMap, K>
5859
) {
59-
this.vscodePanel.webview.postMessage({ command: type, data: message })
60-
}
61-
postExtensionResponse<K extends keyof ExtensionMessageResponses>(
62-
type: K,
63-
message: ExtensionMessageResponses[K]
64-
) {
65-
this.vscodePanel.webview.postMessage({ command: type, data: message })
60+
const [type, payload] = msg as [K, MessageResponseMap[K]]
61+
this.vscodePanel.webview.postMessage({
62+
command: type,
63+
id: this.messengerId,
64+
data: { ...payload },
65+
})
6666
}
6767

68-
public readonly onDidReceiveMessage =
69-
this.vscodePanel.webview.onDidReceiveMessage
68+
public onDidReceiveMessage(listener: (e: any) => void) {
69+
this.vscodePanel.webview.onDidReceiveMessage(listener)
70+
}
7071

71-
public readonly reveal = this.vscodePanel.reveal
72+
public readonly reveal = () => {
73+
this.vscodePanel.reveal()
74+
}
7275

73-
public readonly onDidDispose = this.vscodePanel.onDidDispose
76+
public onDidDispose(listener: (e: any) => void) {
77+
this.vscodePanel.onDidDispose(listener)
78+
}
7479
}
7580

7681
export type SveltePanelArgs = {
@@ -104,7 +109,6 @@ const ValidInitializerState: SvelteInitializerState = {
104109
}
105110
class SvelteWebviewInitializer {
106111
static state: SvelteInitializerState = InvalidInitializerState
107-
108112
constructor() {}
109113

110114
createSveltePanel(args: SveltePanelArgs): SvelteUIWebviewPanel {
@@ -114,13 +118,14 @@ class SvelteWebviewInitializer {
114118
args.column
115119
)
116120
this.setWebviewOptions(ret)
117-
this.setHtmlContent(ret)
121+
const uiMsgId = randomUUID()
122+
this.setHtmlContent(ret, uiMsgId)
118123

119124
return new SvelteUIWebviewPanel(ret)
120125
}
121126

122127
// get the HTML content for the webview
123-
private setHtmlContent(vsPanel: vscode.WebviewPanel): string {
128+
private setHtmlContent(vsPanel: vscode.WebviewPanel, msgId: string) {
124129
let vsWebview = vsPanel.webview
125130
const nonce = this.getNonce()
126131

@@ -142,7 +147,9 @@ class SvelteWebviewInitializer {
142147
.replace(/src="\.\/index.js"/, `src="${scriptUri.toString()}"`)
143148
.replace(/href="\.\/style.css"/, `href="${stylesUri.toString()}"`)
144149
.replaceAll(/nonce="__nonce__"/g, `nonce="${nonce}""`)
145-
return indexHTML
150+
.replace('__extension_msg_id__', msgId)
151+
152+
vsWebview.html = indexHTML
146153
}
147154
private injectNonce(
148155
html: string,

src/ext_types/messageContent.ts

Lines changed: 57 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { IServerHeartbeat } from '@omega-edit/client'
12
import {
23
EditorMessageId,
34
EditorMessageIds,
@@ -50,7 +51,10 @@ type MessageCommands =
5051
| 'undoChange'
5152
| 'viewportRefresh'
5253

53-
export interface MessageCommandMap {
54+
type CommandMap = {
55+
[K in MessageCommands]: any
56+
}
57+
export interface MessageRequestMap extends CommandMap {
5458
counts: never
5559
clearChanges: never
5660
applyChanges: ApplyChangesRequest
@@ -73,19 +77,46 @@ export interface MessageCommandMap {
7377
setUITheme: SetUIThemeRequest
7478
}
7579

80+
export interface MessageResponseMap extends CommandMap {
81+
clearChanges: void
82+
applyChanges: ChangesInfoResponse
83+
editorOnChange: EditorOnChangeResponse
84+
fileInfo: FileInfoResponse
85+
counts: CountResponse
86+
profile: ProfileResponse
87+
redoChange: void
88+
replaceResults: ReplaceResponse
89+
requestEditedData: EditedDataResponse
90+
save: void
91+
saveAs: SaveAsResponse
92+
saveSegment: void
93+
scrollViewport: void
94+
search: SearchResponse
95+
replace: ReplaceResponse
96+
undoChange: void
97+
viewportRefresh: ViewportRefreshResponse
98+
showMessage: undefined
99+
setUITheme: void
100+
heartbeat: IServerHeartbeat & { port: number }
101+
}
102+
76103
export type ExtensionMessageKeys =
77104
| 'showMessage'
78105
| 'setUITheme'
79106
| 'editorOnChange'
107+
80108
export type DataEditorMessageKeys = Exclude<
81109
MessageCommands,
82110
ExtensionMessageKeys
83111
>
84112
export type DataEditorMessageRequests = Pick<
85-
MessageCommandMap,
113+
MessageRequestMap,
114+
DataEditorMessageKeys
115+
>
116+
export type DataEditorMessageResponses = Pick<
117+
MessageResponseMap,
86118
DataEditorMessageKeys
87119
>
88-
89120
/**
90121
* Key indexable interface to templated type inference of available messages sent between
91122
* the components of the DFDL VSCode extension.
@@ -112,36 +143,33 @@ export type DataEditorMessageRequests = Pick<
112143
// viewportRefresh: never
113144
// }
114145
export type ExtensionMessageRequests = Pick<
115-
MessageCommandMap,
146+
MessageRequestMap,
116147
ExtensionMessageKeys
117148
>
118149

119-
export interface ExtensionMessageResponses {
120-
showMessage: undefined
121-
setUITheme: void
122-
}
150+
// export type ExtensionMessageResponses = Pick<
123151

124-
export interface DataEditorMessageResponses
125-
extends Record<keyof DataEditorMessageRequests, unknown> {
126-
clearChanges: void
127-
applyChanges: ChangesInfoResponse
128-
editorOnChange: EditorOnChangeResponse
129-
fileInfo: FileInfoResponse
130-
counts: CountResponse
131-
// heartbeat: IServerHeartbeat & { port: number } // service
132-
profile: ProfileResponse
133-
redoChange: void
134-
replaceResults: ReplaceResponse
135-
requestEditedData: EditedDataResponse
136-
save: void
137-
saveAs: SaveAsResponse
138-
saveSegment: void
139-
scrollViewport: void
140-
search: SearchResponse
141-
replace: ReplaceResponse
142-
undoChange: void
143-
viewportRefresh: ViewportRefreshResponse
144-
}
152+
// export interface DataEditorMessageResponses
153+
// extends Record<keyof DataEditorMessageRequests, unknown> {
154+
// clearChanges: void
155+
// applyChanges: ChangesInfoResponse
156+
// editorOnChange: EditorOnChangeResponse
157+
// fileInfo: FileInfoResponse
158+
// counts: CountResponse
159+
// // heartbeat: IServerHeartbeat & { port: number } // service
160+
// profile: ProfileResponse
161+
// redoChange: void
162+
// replaceResults: ReplaceResponse
163+
// requestEditedData: EditedDataResponse
164+
// save: void
165+
// saveAs: SaveAsResponse
166+
// saveSegment: void
167+
// scrollViewport: void
168+
// search: SearchResponse
169+
// replace: ReplaceResponse
170+
// undoChange: void
171+
// viewportRefresh: ViewportRefreshResponse
172+
// }
145173

146174
export type VSEditorMessagePackage<K extends keyof DataEditorMessageRequests> =
147175
{

src/ext_types/messages.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@
1515
* limitations under the License.
1616
*/
1717

18-
import {
19-
DataEditorMessageResponses,
20-
ExtensionMessageResponses,
21-
} from 'ext_types'
2218
import { EditByteModes } from './formattypes'
2319

2420
/**

src/svelte/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<title>Vite + Svelte + TS</title>
2424
</head>
2525
<body>
26-
<div id="app"></div>
26+
<div id="app" extension_msg_id="__extension_msg_id__"></div>
2727
<script type="module" src="/src/main.ts"></script>
2828
</body>
2929
</html>

src/svelte/src/App.svelte

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ limitations under the License.
5959
import { byte_count_divisible_offset } from './utilities/display'
6060
import Help from './components/layouts/Help.svelte'
6161
import { EditByteModes, type BytesPerRow } from 'ext_types'
62-
import { VIEWPORT_SCROLL_INCREMENT } from 'stores/configuration'
63-
62+
import { VIEWPORT_SCROLL_INCREMENT } from './stores/configuration'
63+
import { getUIMsgId, setUIMsgId } from 'stores/states.svelte'
64+
setUIMsgId( document.getElementById('app')?.attributes['extension_msg_id'].value )
65+
console.log("Svelte UI Messenger Id: ", getUIMsgId())
6466
function requestEditedData() {
6567
if ($requestable) {
6668
67-
vscode.postEditorMessage('requestEditedData', {
69+
vscode.postMessage('test','requestEditedData', {
6870
selectionToFileOffset: $selectionDataStore.startOffset,
6971
editedContent: $editorSelection,
7072
viewport: $focusedViewportId,
@@ -153,7 +155,7 @@ limitations under the License.
153155
$bytesPerRow,
154156
fetchOffset
155157
)
156-
vscode.postMessage('scrollViewport', {
158+
vscode.postMessage('test','scrollViewport', {
157159
startOffset: fetchOffset,
158160
bytesPerRow: $bytesPerRow,
159161
numLinesDisplayed: $dataDislayLineAmount,
@@ -169,7 +171,7 @@ limitations under the License.
169171
const navigationData = navigationEvent.detail
170172
$dataFeedAwaitRefresh = true
171173
172-
vscode.postMessage('scrollViewport', {
174+
vscode.postMessage('test','scrollViewport', {
173175
startOffset: navigationData.nextViewportOffset,
174176
bytesPerRow: $bytesPerRow
175177
})
@@ -217,32 +219,27 @@ limitations under the License.
217219
editedData = new Uint8Array(0)
218220
break
219221
}
220-
vscode.postEditorMessage('applyChanges', {
221-
offset: editedOffset,
222-
original_segment: originalData as Uint8Array,
223-
edited_segment: editedData,
224-
225-
})
226-
vscode.postMessage('applyChanges', {
222+
vscode.postMessage('test','applyChanges', {
227223
offset: editedOffset,
228224
original_segment: originalData as Uint8Array,
229225
edited_segment: editedData,
230226
231227
})
228+
232229
clearDataDisplays()
233230
clearQueryableData()
234231
}
235232
236233
function undo() {
237-
vscode.postMessage("undoChange")
234+
vscode.postMessage('test',"undoChange")
238235
}
239236
240237
function redo() {
241-
vscode.postMessage("redoChange")
238+
vscode.postMessage('test',"redoChange")
242239
}
243240
244241
function clearChangeStack() {
245-
vscode.postMessage('clearChanges')
242+
vscode.postMessage('test','clearChanges')
246243
}
247244
248245
function clearDataDisplays() {

0 commit comments

Comments
 (0)