@@ -231,23 +231,9 @@ export function makeCloudFunction<EventData>({
231231 legacyEventType,
232232 opts = { } ,
233233} : 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 ;
250235
236+ let cloudFunctionNewSignature : any = ( data : any , context : any ) => {
251237 if ( legacyEventType && context . eventType === legacyEventType ) {
252238 // v1beta1 event flow has different format for context, transform them to new format.
253239 context = {
@@ -276,19 +262,42 @@ export function makeCloudFunction<EventData>({
276262 }
277263 context . params = context . params || _makeParams ( context , triggerResource ) ;
278264
279- try {
280- before ( event ) ;
265+ before ( event ) ;
281266
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' ) ;
290271 }
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+ } ) ;
291281 } ;
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+
292301 Object . defineProperty ( cloudFunction , '__trigger' , {
293302 get : ( ) => {
294303 let trigger : any = _ . assign ( optsToTrigger ( opts ) , {
@@ -311,10 +320,6 @@ function isEvent(event: Event | LegacyEvent): event is Event {
311320 return _ . has ( event , 'context' ) ;
312321}
313322
314- function isContext ( context : EventContext | any ) : context is EventContext {
315- return _ . has ( context , 'eventId' ) ;
316- }
317-
318323function _makeParams (
319324 context : EventContext ,
320325 triggerResourceGetter : ( ) => string
0 commit comments