@@ -259,42 +259,53 @@ export class ContextImpl implements ObjectContext, WorkflowContext {
259
259
// --- Calls, background calls, etc
260
260
261
261
// DON'T make this function async!!! see sideEffect comment for details.
262
- private invoke (
262
+ private invoke < REQ = Uint8Array , RES = Uint8Array > (
263
263
service : string ,
264
264
method : string ,
265
- data : Uint8Array ,
266
- key ?: string
267
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
268
- ) : InternalCombineablePromise < any > {
265
+ data : REQ ,
266
+ key ?: string ,
267
+ serializer ?: ( req : REQ ) => Uint8Array ,
268
+ deserializer ?: ( res : Uint8Array ) => RES
269
+ ) : InternalCombineablePromise < RES > {
269
270
this . checkState ( "invoke" ) ;
270
271
271
272
const msg = new CallEntryMessage ( {
272
273
serviceName : service ,
273
274
handlerName : method ,
274
- parameter : data ,
275
+ parameter : serializer ? serializer ( data ) : ( data as Uint8Array ) ,
275
276
key,
276
277
} ) ;
278
+
277
279
return this . markCombineablePromise (
278
- this . stateMachine
279
- . handleUserCodeMessage ( INVOKE_ENTRY_MESSAGE_TYPE , msg )
280
- . transform ( ( v ) : any => deserializeJson ( v as Uint8Array ) )
280
+ (
281
+ this . stateMachine . handleUserCodeMessage (
282
+ INVOKE_ENTRY_MESSAGE_TYPE ,
283
+ msg
284
+ ) as WrappedPromise < Uint8Array >
285
+ ) . transform ( ( res ) => {
286
+ if ( deserializer ) {
287
+ return deserializer ( res ) ;
288
+ }
289
+ return res ;
290
+ } ) as WrappedPromise < RES >
281
291
) ;
282
292
}
283
293
284
- private async invokeOneWay (
294
+ private async invokeOneWay < REQ = Uint8Array > (
285
295
service : string ,
286
296
method : string ,
287
- data : Uint8Array ,
297
+ data : REQ ,
298
+ serializer ?: ( req : REQ ) => Uint8Array ,
288
299
delay ?: number ,
289
300
key ?: string
290
- ) : Promise < Uint8Array > {
301
+ ) : Promise < void > {
291
302
const actualDelay = delay || 0 ;
292
303
const invokeTime =
293
304
actualDelay > 0 ? Date . now ( ) + actualDelay : protoInt64 . zero ;
294
305
const msg = new OneWayCallEntryMessage ( {
295
306
serviceName : service ,
296
307
handlerName : method ,
297
- parameter : data ,
308
+ parameter : serializer ? serializer ( data ) : ( data as Uint8Array ) ,
298
309
invokeTime : protoInt64 . parse ( invokeTime ) ,
299
310
key,
300
311
} ) ;
@@ -303,7 +314,6 @@ export class ContextImpl implements ObjectContext, WorkflowContext {
303
314
BACKGROUND_INVOKE_ENTRY_MESSAGE_TYPE ,
304
315
msg
305
316
) ;
306
- return new Uint8Array ( ) ;
307
317
}
308
318
309
319
serviceClient < D > ( { name } : ServiceDefinitionFrom < D > ) : Client < Service < D > > {
@@ -313,8 +323,14 @@ export class ContextImpl implements ObjectContext, WorkflowContext {
313
323
get : ( _target , prop ) => {
314
324
const route = prop as string ;
315
325
return ( ...args : unknown [ ] ) => {
316
- const requestBytes = serializeJson ( args . shift ( ) ) ;
317
- return this . invoke ( name , route , requestBytes ) ;
326
+ return this . invoke (
327
+ name ,
328
+ route ,
329
+ args . shift ( ) ,
330
+ undefined ,
331
+ serializeJson ,
332
+ deserializeJson
333
+ ) ;
318
334
} ;
319
335
} ,
320
336
}
@@ -333,8 +349,14 @@ export class ContextImpl implements ObjectContext, WorkflowContext {
333
349
get : ( _target , prop ) => {
334
350
const route = prop as string ;
335
351
return ( ...args : unknown [ ] ) => {
336
- const requestBytes = serializeJson ( args . shift ( ) ) ;
337
- return this . invoke ( name , route , requestBytes , key ) ;
352
+ return this . invoke (
353
+ name ,
354
+ route ,
355
+ args . shift ( ) ,
356
+ key ,
357
+ serializeJson ,
358
+ deserializeJson
359
+ ) ;
338
360
} ;
339
361
} ,
340
362
}
@@ -353,11 +375,11 @@ export class ContextImpl implements ObjectContext, WorkflowContext {
353
375
get : ( _target , prop ) => {
354
376
const route = prop as string ;
355
377
return ( ...args : unknown [ ] ) => {
356
- const requestBytes = serializeJson ( args . shift ( ) ) ;
357
378
this . invokeOneWay (
358
379
service . name ,
359
380
route ,
360
- requestBytes ,
381
+ args . shift ( ) ,
382
+ serializeJson ,
361
383
opts ?. delay
362
384
) . catch ( ( e ) => {
363
385
this . stateMachine . handleDanglingPromiseError ( e as Error ) ;
@@ -381,11 +403,11 @@ export class ContextImpl implements ObjectContext, WorkflowContext {
381
403
get : ( _target , prop ) => {
382
404
const route = prop as string ;
383
405
return ( ...args : unknown [ ] ) => {
384
- const requestBytes = serializeJson ( args . shift ( ) ) ;
385
406
this . invokeOneWay (
386
407
obj . name ,
387
408
route ,
388
- requestBytes ,
409
+ args . shift ( ) ,
410
+ serializeJson ,
389
411
opts ?. delay ,
390
412
key
391
413
) . catch ( ( e ) => {
@@ -410,11 +432,11 @@ export class ContextImpl implements ObjectContext, WorkflowContext {
410
432
get : ( _target , prop ) => {
411
433
const route = prop as string ;
412
434
return ( ...args : unknown [ ] ) => {
413
- const requestBytes = serializeJson ( args . shift ( ) ) ;
414
435
this . invokeOneWay (
415
436
def . name ,
416
437
route ,
417
- requestBytes ,
438
+ args . shift ( ) ,
439
+ serializeJson ,
418
440
opts ?. delay ,
419
441
key
420
442
) . catch ( ( e ) => {
0 commit comments