@@ -231,23 +231,9 @@ export function makeCloudFunction<EventData>({
231
231
legacyEventType,
232
232
opts = { } ,
233
233
} : MakeCloudFunctionArgs < EventData > ) : CloudFunction < EventData > {
234
- let cloudFunction : any = async ( eventOrData : any , context ?: any ) => {
235
- let data : any ;
236
- if ( isContext ( context ) ) {
237
- // In Node 8 runtime, function called with 2 params: data & context
238
- data = eventOrData ;
239
- } else {
240
- // In Node 6 runtime, function called with single event param
241
- data = _ . get ( eventOrData , 'data' ) ;
242
- if ( isEvent ( eventOrData ) ) {
243
- // new eventflow v1beta2 format
244
- context = _ . cloneDeep ( eventOrData . context ) ;
245
- } else {
246
- // eventflow v1beta1 format
247
- context = _ . omit ( eventOrData , 'data' ) ;
248
- }
249
- }
234
+ let cloudFunction ;
250
235
236
+ let cloudFunctionNewSignature : any = ( data : any , context : any ) => {
251
237
if ( legacyEventType && context . eventType === legacyEventType ) {
252
238
// v1beta1 event flow has different format for context, transform them to new format.
253
239
context = {
@@ -276,19 +262,42 @@ export function makeCloudFunction<EventData>({
276
262
}
277
263
context . params = context . params || _makeParams ( context , triggerResource ) ;
278
264
279
- try {
280
- before ( event ) ;
265
+ before ( event ) ;
281
266
282
- let dataOrChange = dataConstructor ( event ) ;
283
- let promise = handler ( dataOrChange , context ) ;
284
- if ( typeof promise === 'undefined' ) {
285
- console . warn ( 'Function returned undefined, expected Promise or value' ) ;
286
- }
287
- return await promise ;
288
- } finally {
289
- after ( event ) ;
267
+ let dataOrChange = dataConstructor ( event ) ;
268
+ let promise = handler ( dataOrChange , context ) ;
269
+ if ( typeof promise === 'undefined' ) {
270
+ console . warn ( 'Function returned undefined, expected Promise or value' ) ;
290
271
}
272
+ return Promise . resolve ( promise )
273
+ . then ( result => {
274
+ after ( event ) ;
275
+ return result ;
276
+ } )
277
+ . catch ( err => {
278
+ after ( event ) ;
279
+ return Promise . reject ( err ) ;
280
+ } ) ;
291
281
} ;
282
+
283
+ if ( process . env . X_GOOGLE_NEW_FUNCTION_SIGNATURE === 'true' ) {
284
+ cloudFunction = cloudFunctionNewSignature ;
285
+ } else {
286
+ cloudFunction = ( raw : Event | LegacyEvent ) => {
287
+ let context ;
288
+ // In Node 6 runtime, function called with single event param
289
+ let data = _ . get ( raw , 'data' ) ;
290
+ if ( isEvent ( raw ) ) {
291
+ // new eventflow v1beta2 format
292
+ context = _ . cloneDeep ( raw . context ) ;
293
+ } else {
294
+ // eventflow v1beta1 format
295
+ context = _ . omit ( raw , 'data' ) ;
296
+ }
297
+ return cloudFunctionNewSignature ( data , context ) ;
298
+ } ;
299
+ }
300
+
292
301
Object . defineProperty ( cloudFunction , '__trigger' , {
293
302
get : ( ) => {
294
303
let trigger : any = _ . assign ( optsToTrigger ( opts ) , {
@@ -311,10 +320,6 @@ function isEvent(event: Event | LegacyEvent): event is Event {
311
320
return _ . has ( event , 'context' ) ;
312
321
}
313
322
314
- function isContext ( context : EventContext | any ) : context is EventContext {
315
- return _ . has ( context , 'eventId' ) ;
316
- }
317
-
318
323
function _makeParams (
319
324
context : EventContext ,
320
325
triggerResourceGetter : ( ) => string
0 commit comments