@@ -39,7 +39,8 @@ export const SysinfoBlockId = crypto.randomUUID();
3939// - rpc.UpdateWorkspaceTabIdsCommand -- updates .tabids on the Workspace WaveObj in the mock WOS
4040//
4141// Any other RPC call falls through to a console.log and resolves null.
42- // Override specific calls via MockEnv.rpc (keys are the Command method names, e.g. "GetMetaCommand").
42+ // Override specific calls via MockEnv.rpc (keys are Command method names, e.g. "GetMetaCommand").
43+ // Override specific streaming calls via MockEnv.rpcStreaming (same key names, handler returns AsyncGenerator).
4344//
4445// Backend service calls (handled in callBackendService):
4546// Any call falls through to a console.log and resolves null.
@@ -50,7 +51,11 @@ export type RpcHandlerType = (...args: any[]) => Promise<any>;
5051export type RpcStreamHandlerType = ( ...args : any [ ] ) => AsyncGenerator < any , void , boolean > ;
5152
5253export type RpcOverrides = {
53- [ K in keyof RpcApiType as K extends `${string } Command` ? K : never ] ?: RpcHandlerType | RpcStreamHandlerType ;
54+ [ K in keyof RpcApiType as K extends `${string } Command` ? K : never ] ?: RpcHandlerType ;
55+ } ;
56+
57+ export type RpcStreamOverrides = {
58+ [ K in keyof RpcApiType as K extends `${string } Command` ? K : never ] ?: RpcStreamHandlerType ;
5459} ;
5560
5661type ServiceOverrides = {
@@ -65,6 +70,7 @@ export type MockEnv = {
6570 platform ?: NodeJS . Platform ;
6671 settings ?: Partial < SettingsType > ;
6772 rpc ?: RpcOverrides ;
73+ rpcStreaming ?: RpcStreamOverrides ;
6874 services ?: ServiceOverrides ;
6975 atoms ?: Partial < GlobalAtomsType > ;
7076 electron ?: Partial < ElectronApi > ;
@@ -77,7 +83,7 @@ export type MockEnv = {
7783export type MockWaveEnv = WaveEnv & {
7884 mockEnv : MockEnv ;
7985 addRpcOverride : < K extends keyof RpcOverrides > ( command : K , handler : RpcHandlerType ) => void ;
80- addRpcStreamOverride : < K extends keyof RpcOverrides > ( command : K , handler : RpcStreamHandlerType ) => void ;
86+ addRpcStreamOverride : < K extends keyof RpcStreamOverrides > ( command : K , handler : RpcStreamHandlerType ) => void ;
8187} ;
8288
8389function mergeRecords < T > ( base : Record < string , T > , overrides : Record < string , T > ) : Record < string , T > {
@@ -104,6 +110,7 @@ export function mergeMockEnv(base: MockEnv, overrides: MockEnv): MockEnv {
104110 platform : overrides . platform ?? base . platform ,
105111 settings : mergeRecords ( base . settings , overrides . settings ) ,
106112 rpc : mergeRecords ( base . rpc as any , overrides . rpc as any ) as RpcOverrides ,
113+ rpcStreaming : mergeRecords ( base . rpcStreaming as any , overrides . rpcStreaming as any ) as RpcStreamOverrides ,
107114 services : mergedServices ,
108115 atoms : overrides . atoms != null || base . atoms != null ? { ...base . atoms , ...overrides . atoms } : undefined ,
109116 electron :
@@ -198,6 +205,7 @@ type MockWosFns = {
198205
199206export function makeMockRpc (
200207 overrides : RpcOverrides ,
208+ streamOverrides : RpcStreamOverrides ,
201209 wos : MockWosFns
202210) : {
203211 rpc : RpcApiType ;
@@ -311,11 +319,13 @@ export function makeMockRpc(
311319 if ( overrides ) {
312320 for ( const key of Object . keys ( overrides ) as ( keyof RpcOverrides ) [ ] ) {
313321 const cmdName = key . slice ( 0 , - "Command" . length ) . toLowerCase ( ) ;
314- if ( cmdName === "filereadstream" || cmdName === "fileliststream" ) {
315- setStreamHandler ( cmdName , overrides [ key ] as ( ...args : any [ ] ) => AsyncGenerator < any , void , boolean > ) ;
316- } else {
317- setCallHandler ( cmdName , overrides [ key ] as ( ...args : any [ ] ) => Promise < any > ) ;
318- }
322+ setCallHandler ( cmdName , overrides [ key ] as RpcHandlerType ) ;
323+ }
324+ }
325+ if ( streamOverrides ) {
326+ for ( const key of Object . keys ( streamOverrides ) as ( keyof RpcStreamOverrides ) [ ] ) {
327+ const cmdName = key . slice ( 0 , - "Command" . length ) . toLowerCase ( ) ;
328+ setStreamHandler ( cmdName , streamOverrides [ key ] as RpcStreamHandlerType ) ;
319329 }
320330 }
321331 const rpc = new RpcApiType ( ) ;
@@ -451,7 +461,7 @@ export function makeMockWaveEnv(mockEnv?: MockEnv): MockWaveEnv {
451461 globalStore . set ( waveObjectValueAtomCache . get ( oref ) , obj ) ;
452462 } ,
453463 } ;
454- const { rpc, setRpcHandler, setRpcStreamHandler } = makeMockRpc ( mergedOverrides . rpc , mockWosFns ) ;
464+ const { rpc, setRpcHandler, setRpcStreamHandler } = makeMockRpc ( mergedOverrides . rpc , mergedOverrides . rpcStreaming , mockWosFns ) ;
455465 const env = {
456466 isMock : true ,
457467 mockEnv : mergedOverrides ,
@@ -566,7 +576,7 @@ export function makeMockWaveEnv(mockEnv?: MockEnv): MockWaveEnv {
566576 addRpcOverride : < K extends keyof RpcOverrides > ( command : K , handler : RpcHandlerType ) => {
567577 setRpcHandler ( command as string , handler ) ;
568578 } ,
569- addRpcStreamOverride : < K extends keyof RpcOverrides > ( command : K , handler : RpcStreamHandlerType ) => {
579+ addRpcStreamOverride : < K extends keyof RpcStreamOverrides > ( command : K , handler : RpcStreamHandlerType ) => {
570580 setRpcStreamHandler ( command as string , handler ) ;
571581 } ,
572582 } as MockWaveEnv ;
0 commit comments