process method
Implementation
Future<RawEvent?> process(RawEvent incomingEvent) async {
// apply .before first, ensuring all .before phases for all events triggered
// in a synchronous block are finished before moving onto the enrichment phase
final beforeResult = await _queue.enqueue(() async {
return await applyPlugins(PluginType.before, incomingEvent);
});
if (beforeResult == null) {
return null;
}
// .enrichment here is akin to source middleware in the old analytics-ios.
final enrichmentResult = await applyPlugins(PluginType.enrichment, beforeResult);
if (enrichmentResult == null) {
return null;
}
// once the event enters a destination, we don't want
// to know about changes that happen there. those changes
// are to only be received by the destination.
await applyPlugins(PluginType.destination, enrichmentResult);
// apply .after plugins ...
final afterResult = await applyPlugins(PluginType.after, enrichmentResult);
return afterResult;
}