Skip to content

Commit 61eac7f

Browse files
committed
update services for mocking
1 parent 099eb0f commit 61eac7f

7 files changed

Lines changed: 163 additions & 41 deletions

File tree

cmd/generatets/main-generatets.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,37 @@ func generateServicesFile(tsTypesMap map[reflect.Type]string) error {
8888
fmt.Fprintf(&buf, "// Copyright 2026, Command Line Inc.\n")
8989
fmt.Fprintf(&buf, "// SPDX-License-Identifier: Apache-2.0\n\n")
9090
fmt.Fprintf(&buf, "// generated by cmd/generate/main-generatets.go\n\n")
91-
fmt.Fprintf(&buf, "import * as WOS from \"./wos\";\n\n")
91+
fmt.Fprintf(&buf, "import * as WOS from \"./wos\";\n")
92+
fmt.Fprintf(&buf, "import { WaveEnv } from \"@/app/waveenv/waveenv\";\n\n")
93+
fmt.Fprintf(&buf, "function callBackendService(waveEnv: WaveEnv, service: string, method: string, args: any[], noUIContext?: boolean): Promise<any> {\n")
94+
fmt.Fprintf(&buf, " if (waveEnv != null) {\n")
95+
fmt.Fprintf(&buf, " return waveEnv.callBackendService(service, method, args, noUIContext)\n")
96+
fmt.Fprintf(&buf, " }\n")
97+
fmt.Fprintf(&buf, " return WOS.callBackendService(service, method, args, noUIContext);\n")
98+
fmt.Fprintf(&buf, "}\n\n")
9299
orderedKeys := utilfn.GetOrderedMapKeys(service.ServiceMap)
93100
for _, serviceName := range orderedKeys {
94101
serviceObj := service.ServiceMap[serviceName]
95102
svcStr := tsgen.GenerateServiceClass(serviceName, serviceObj, tsTypesMap)
96103
fmt.Fprint(&buf, svcStr)
97104
fmt.Fprint(&buf, "\n")
98105
}
106+
fmt.Fprintf(&buf, "export const AllServiceTypes = {\n")
107+
for _, serviceName := range orderedKeys {
108+
serviceObj := service.ServiceMap[serviceName]
109+
serviceType := reflect.TypeOf(serviceObj)
110+
tsServiceName := serviceType.Elem().Name()
111+
fmt.Fprintf(&buf, " %q: %sType,\n", serviceName, tsServiceName)
112+
}
113+
fmt.Fprintf(&buf, "};\n\n")
114+
fmt.Fprintf(&buf, "export const AllServiceImpls = {\n")
115+
for _, serviceName := range orderedKeys {
116+
serviceObj := service.ServiceMap[serviceName]
117+
serviceType := reflect.TypeOf(serviceObj)
118+
tsServiceName := serviceType.Elem().Name()
119+
fmt.Fprintf(&buf, " %q: %s,\n", serviceName, tsServiceName)
120+
}
121+
fmt.Fprintf(&buf, "};\n")
99122
written, err := utilfn.WriteFileIfDifferent(fileName, buf.Bytes())
100123
if !written {
101124
fmt.Fprintf(os.Stderr, "no changes to %s\n", fileName)

eslint.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export default [
8989
{
9090
files: ["frontend/app/store/services.ts"],
9191
rules: {
92+
"@typescript-eslint/no-unused-vars": "off",
9293
"prefer-rest-params": "off",
9394
},
9495
},

frontend/app/store/services.ts

Lines changed: 99 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,172 +4,233 @@
44
// generated by cmd/generate/main-generatets.go
55

66
import * as WOS from "./wos";
7+
import { WaveEnv } from "@/app/waveenv/waveenv";
8+
9+
function callBackendService(waveEnv: WaveEnv, service: string, method: string, args: any[], noUIContext?: boolean): Promise<any> {
10+
if (waveEnv != null) {
11+
return waveEnv.callBackendService(service, method, args, noUIContext)
12+
}
13+
return WOS.callBackendService(service, method, args, noUIContext);
14+
}
715

816
// blockservice.BlockService (block)
9-
class BlockServiceType {
17+
export class BlockServiceType {
18+
waveEnv: WaveEnv;
19+
20+
constructor(waveEnv?: WaveEnv) {
21+
this.waveEnv = waveEnv;
22+
}
23+
1024
// queue a layout action to cleanup orphaned blocks in the tab
1125
// @returns object updates
1226
CleanupOrphanedBlocks(tabId: string): Promise<void> {
13-
return WOS.callBackendService("block", "CleanupOrphanedBlocks", Array.from(arguments))
27+
return callBackendService(this.waveEnv, "block", "CleanupOrphanedBlocks", Array.from(arguments))
1428
}
1529
GetControllerStatus(arg2: string): Promise<BlockControllerRuntimeStatus> {
16-
return WOS.callBackendService("block", "GetControllerStatus", Array.from(arguments))
30+
return callBackendService(this.waveEnv, "block", "GetControllerStatus", Array.from(arguments))
1731
}
1832

1933
// save the terminal state to a blockfile
2034
SaveTerminalState(blockId: string, state: string, stateType: string, ptyOffset: number, termSize: TermSize): Promise<void> {
21-
return WOS.callBackendService("block", "SaveTerminalState", Array.from(arguments))
35+
return callBackendService(this.waveEnv, "block", "SaveTerminalState", Array.from(arguments))
2236
}
2337
SaveWaveAiData(arg2: string, arg3: WaveAIPromptMessageType[]): Promise<void> {
24-
return WOS.callBackendService("block", "SaveWaveAiData", Array.from(arguments))
38+
return callBackendService(this.waveEnv, "block", "SaveWaveAiData", Array.from(arguments))
2539
}
2640
}
2741

2842
export const BlockService = new BlockServiceType();
2943

3044
// clientservice.ClientService (client)
31-
class ClientServiceType {
45+
export class ClientServiceType {
46+
waveEnv: WaveEnv;
47+
48+
constructor(waveEnv?: WaveEnv) {
49+
this.waveEnv = waveEnv;
50+
}
51+
3252
// @returns object updates
3353
AgreeTos(): Promise<void> {
34-
return WOS.callBackendService("client", "AgreeTos", Array.from(arguments))
54+
return callBackendService(this.waveEnv, "client", "AgreeTos", Array.from(arguments))
3555
}
3656
FocusWindow(arg2: string): Promise<void> {
37-
return WOS.callBackendService("client", "FocusWindow", Array.from(arguments))
57+
return callBackendService(this.waveEnv, "client", "FocusWindow", Array.from(arguments))
3858
}
3959
GetAllConnStatus(): Promise<ConnStatus[]> {
40-
return WOS.callBackendService("client", "GetAllConnStatus", Array.from(arguments))
60+
return callBackendService(this.waveEnv, "client", "GetAllConnStatus", Array.from(arguments))
4161
}
4262
GetClientData(): Promise<Client> {
43-
return WOS.callBackendService("client", "GetClientData", Array.from(arguments))
63+
return callBackendService(this.waveEnv, "client", "GetClientData", Array.from(arguments))
4464
}
4565
GetTab(arg1: string): Promise<Tab> {
46-
return WOS.callBackendService("client", "GetTab", Array.from(arguments))
66+
return callBackendService(this.waveEnv, "client", "GetTab", Array.from(arguments))
4767
}
4868
TelemetryUpdate(arg2: boolean): Promise<void> {
49-
return WOS.callBackendService("client", "TelemetryUpdate", Array.from(arguments))
69+
return callBackendService(this.waveEnv, "client", "TelemetryUpdate", Array.from(arguments))
5070
}
5171
}
5272

5373
export const ClientService = new ClientServiceType();
5474

5575
// objectservice.ObjectService (object)
56-
class ObjectServiceType {
76+
export class ObjectServiceType {
77+
waveEnv: WaveEnv;
78+
79+
constructor(waveEnv?: WaveEnv) {
80+
this.waveEnv = waveEnv;
81+
}
82+
5783
// @returns blockId (and object updates)
5884
CreateBlock(blockDef: BlockDef, rtOpts: RuntimeOpts): Promise<string> {
59-
return WOS.callBackendService("object", "CreateBlock", Array.from(arguments))
85+
return callBackendService(this.waveEnv, "object", "CreateBlock", Array.from(arguments))
6086
}
6187

6288
// @returns object updates
6389
DeleteBlock(blockId: string): Promise<void> {
64-
return WOS.callBackendService("object", "DeleteBlock", Array.from(arguments))
90+
return callBackendService(this.waveEnv, "object", "DeleteBlock", Array.from(arguments))
6591
}
6692

6793
// get wave object by oref
6894
GetObject(oref: string): Promise<WaveObj> {
69-
return WOS.callBackendService("object", "GetObject", Array.from(arguments))
95+
return callBackendService(this.waveEnv, "object", "GetObject", Array.from(arguments))
7096
}
7197

7298
// @returns objects
7399
GetObjects(orefs: string[]): Promise<WaveObj[]> {
74-
return WOS.callBackendService("object", "GetObjects", Array.from(arguments))
100+
return callBackendService(this.waveEnv, "object", "GetObjects", Array.from(arguments))
75101
}
76102

77103
// @returns object updates
78104
UpdateObject(waveObj: WaveObj, returnUpdates: boolean): Promise<void> {
79-
return WOS.callBackendService("object", "UpdateObject", Array.from(arguments))
105+
return callBackendService(this.waveEnv, "object", "UpdateObject", Array.from(arguments))
80106
}
81107

82108
// @returns object updates
83109
UpdateObjectMeta(oref: string, meta: MetaType): Promise<void> {
84-
return WOS.callBackendService("object", "UpdateObjectMeta", Array.from(arguments))
110+
return callBackendService(this.waveEnv, "object", "UpdateObjectMeta", Array.from(arguments))
85111
}
86112
}
87113

88114
export const ObjectService = new ObjectServiceType();
89115

90116
// userinputservice.UserInputService (userinput)
91-
class UserInputServiceType {
117+
export class UserInputServiceType {
118+
waveEnv: WaveEnv;
119+
120+
constructor(waveEnv?: WaveEnv) {
121+
this.waveEnv = waveEnv;
122+
}
123+
92124
SendUserInputResponse(arg1: UserInputResponse): Promise<void> {
93-
return WOS.callBackendService("userinput", "SendUserInputResponse", Array.from(arguments))
125+
return callBackendService(this.waveEnv, "userinput", "SendUserInputResponse", Array.from(arguments))
94126
}
95127
}
96128

97129
export const UserInputService = new UserInputServiceType();
98130

99131
// windowservice.WindowService (window)
100-
class WindowServiceType {
132+
export class WindowServiceType {
133+
waveEnv: WaveEnv;
134+
135+
constructor(waveEnv?: WaveEnv) {
136+
this.waveEnv = waveEnv;
137+
}
138+
101139
CloseWindow(windowId: string, fromElectron: boolean): Promise<void> {
102-
return WOS.callBackendService("window", "CloseWindow", Array.from(arguments))
140+
return callBackendService(this.waveEnv, "window", "CloseWindow", Array.from(arguments))
103141
}
104142
CreateWindow(winSize: WinSize, workspaceId: string): Promise<WaveWindow> {
105-
return WOS.callBackendService("window", "CreateWindow", Array.from(arguments))
143+
return callBackendService(this.waveEnv, "window", "CreateWindow", Array.from(arguments))
106144
}
107145
GetWindow(windowId: string): Promise<WaveWindow> {
108-
return WOS.callBackendService("window", "GetWindow", Array.from(arguments))
146+
return callBackendService(this.waveEnv, "window", "GetWindow", Array.from(arguments))
109147
}
110148

111149
// set window position and size
112150
// @returns object updates
113151
SetWindowPosAndSize(windowId: string, pos: Point, size: WinSize): Promise<void> {
114-
return WOS.callBackendService("window", "SetWindowPosAndSize", Array.from(arguments))
152+
return callBackendService(this.waveEnv, "window", "SetWindowPosAndSize", Array.from(arguments))
115153
}
116154
SwitchWorkspace(windowId: string, workspaceId: string): Promise<Workspace> {
117-
return WOS.callBackendService("window", "SwitchWorkspace", Array.from(arguments))
155+
return callBackendService(this.waveEnv, "window", "SwitchWorkspace", Array.from(arguments))
118156
}
119157
}
120158

121159
export const WindowService = new WindowServiceType();
122160

123161
// workspaceservice.WorkspaceService (workspace)
124-
class WorkspaceServiceType {
162+
export class WorkspaceServiceType {
163+
waveEnv: WaveEnv;
164+
165+
constructor(waveEnv?: WaveEnv) {
166+
this.waveEnv = waveEnv;
167+
}
168+
125169
// @returns CloseTabRtn (and object updates)
126170
CloseTab(workspaceId: string, tabId: string, fromElectron: boolean): Promise<CloseTabRtnType> {
127-
return WOS.callBackendService("workspace", "CloseTab", Array.from(arguments))
171+
return callBackendService(this.waveEnv, "workspace", "CloseTab", Array.from(arguments))
128172
}
129173

130174
// @returns tabId (and object updates)
131175
CreateTab(workspaceId: string, tabName: string, activateTab: boolean): Promise<string> {
132-
return WOS.callBackendService("workspace", "CreateTab", Array.from(arguments))
176+
return callBackendService(this.waveEnv, "workspace", "CreateTab", Array.from(arguments))
133177
}
134178

135179
// @returns workspaceId
136180
CreateWorkspace(name: string, icon: string, color: string, applyDefaults: boolean): Promise<string> {
137-
return WOS.callBackendService("workspace", "CreateWorkspace", Array.from(arguments))
181+
return callBackendService(this.waveEnv, "workspace", "CreateWorkspace", Array.from(arguments))
138182
}
139183

140184
// @returns object updates
141185
DeleteWorkspace(workspaceId: string): Promise<string> {
142-
return WOS.callBackendService("workspace", "DeleteWorkspace", Array.from(arguments))
186+
return callBackendService(this.waveEnv, "workspace", "DeleteWorkspace", Array.from(arguments))
143187
}
144188

145189
// @returns colors
146190
GetColors(): Promise<string[]> {
147-
return WOS.callBackendService("workspace", "GetColors", Array.from(arguments))
191+
return callBackendService(this.waveEnv, "workspace", "GetColors", Array.from(arguments))
148192
}
149193

150194
// @returns icons
151195
GetIcons(): Promise<string[]> {
152-
return WOS.callBackendService("workspace", "GetIcons", Array.from(arguments))
196+
return callBackendService(this.waveEnv, "workspace", "GetIcons", Array.from(arguments))
153197
}
154198

155199
// @returns workspace
156200
GetWorkspace(workspaceId: string): Promise<Workspace> {
157-
return WOS.callBackendService("workspace", "GetWorkspace", Array.from(arguments))
201+
return callBackendService(this.waveEnv, "workspace", "GetWorkspace", Array.from(arguments))
158202
}
159203
ListWorkspaces(): Promise<WorkspaceListEntry[]> {
160-
return WOS.callBackendService("workspace", "ListWorkspaces", Array.from(arguments))
204+
return callBackendService(this.waveEnv, "workspace", "ListWorkspaces", Array.from(arguments))
161205
}
162206

163207
// @returns object updates
164208
SetActiveTab(workspaceId: string, tabId: string): Promise<void> {
165-
return WOS.callBackendService("workspace", "SetActiveTab", Array.from(arguments))
209+
return callBackendService(this.waveEnv, "workspace", "SetActiveTab", Array.from(arguments))
166210
}
167211

168212
// @returns object updates
169213
UpdateWorkspace(workspaceId: string, name: string, icon: string, color: string, applyDefaults: boolean): Promise<void> {
170-
return WOS.callBackendService("workspace", "UpdateWorkspace", Array.from(arguments))
214+
return callBackendService(this.waveEnv, "workspace", "UpdateWorkspace", Array.from(arguments))
171215
}
172216
}
173217

174218
export const WorkspaceService = new WorkspaceServiceType();
175219

220+
export const AllServiceTypes = {
221+
"block": BlockServiceType,
222+
"client": ClientServiceType,
223+
"object": ObjectServiceType,
224+
"userinput": UserInputServiceType,
225+
"window": WindowServiceType,
226+
"workspace": WorkspaceServiceType,
227+
};
228+
229+
export const AllServiceImpls = {
230+
"block": BlockService,
231+
"client": ClientService,
232+
"object": ObjectService,
233+
"userinput": UserInputService,
234+
"window": WindowService,
235+
"workspace": WorkspaceService,
236+
};

frontend/app/waveenv/waveenv.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export type WaveEnv = {
6060
isMacOS: () => boolean;
6161
atoms: GlobalAtomsType;
6262
createBlock: (blockDef: BlockDef, magnified?: boolean, ephemeral?: boolean) => Promise<string>;
63+
callBackendService: (service: string, method: string, args: any[], noUIContext?: boolean) => Promise<any>;
6364
showContextMenu: (menu: ContextMenuItem[], e: React.MouseEvent) => void;
6465
getConnStatusAtom: (conn: string) => PrimitiveAtom<ConnStatus>;
6566
getLocalHostDisplayNameAtom: () => Atom<string>;

frontend/app/waveenv/waveenvimpl.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export function makeWaveEnvImpl(): WaveEnv {
2929
isMacOS,
3030
atoms,
3131
createBlock,
32+
callBackendService: WOS.callBackendService,
3233
showContextMenu: (menu: ContextMenuItem[], e: React.MouseEvent) => {
3334
ContextMenuModel.getInstance().showContextMenu(menu, e);
3435
},

0 commit comments

Comments
 (0)