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;
}