function _makeDefaultContext()

in src/main.ts [229:280]


function _makeDefaultContext<T>(
  cloudFunction: CloudFunction<T>,
  options: ContextOptions,
  triggerData?: T
): EventContext {
  let eventContextOptions = options as EventContextOptions;
  const eventResource = cloudFunction.__trigger.eventTrigger?.resource;
  const eventType = cloudFunction.__trigger.eventTrigger?.eventType;

  const optionsParams = eventContextOptions.params ?? {};
  let triggerParams = {};
  if (eventResource && eventType && triggerData) {
    if (eventType.startsWith('google.firebase.database.ref.')) {
      let data: database.DataSnapshot;
      if (eventType.endsWith('.write')) {
        // Triggered with change
        if (!(triggerData instanceof Change)) {
          throw new Error('Must be triggered by database change');
        }
        data = triggerData.before;
      } else {
        data = triggerData as any;
      }
      triggerParams = _extractDatabaseParams(eventResource, data);
    } else if (eventType.startsWith('google.firestore.document.')) {
      let data: firestore.DocumentSnapshot;
      if (eventType.endsWith('.write')) {
        // Triggered with change
        if (!(triggerData instanceof Change)) {
          throw new Error('Must be triggered by firestore document change');
        }
        data = triggerData.before;
      } else {
        data = triggerData as any;
      }
      triggerParams = _extractFirestoreDocumentParams(eventResource, data);
    }
  }
  const params = { ...triggerParams, ...optionsParams };

  const defaultContext: EventContext = {
    eventId: _makeEventId(),
    resource: eventResource && {
      service: cloudFunction.__trigger.eventTrigger?.service,
      name: _makeResourceName(eventResource, params),
    },
    eventType,
    timestamp: new Date().toISOString(),
    params,
  };
  return defaultContext;
}