@@ -77,6 +77,48 @@ Map<ConnectionMode, DataSourceFactory> _defaultFactories(
7777 };
7878}
7979
80+ typedef EventProcessorFactory = EventProcessor Function (
81+ {required LDLogger logger,
82+ required bool indexEvents,
83+ required int eventCapacity,
84+ required Duration flushInterval,
85+ required HttpClient client,
86+ required String analyticsEventsPath,
87+ required String diagnosticEventsPath,
88+ required ServiceEndpoints endpoints,
89+ required Duration diagnosticRecordingInterval,
90+ required bool allAttributesPrivate,
91+ required Set <AttributeReference > globalPrivateAttributes,
92+ DiagnosticsManager ? diagnosticsManager});
93+
94+ EventProcessor _defaultEventProcessorFactory (
95+ {required LDLogger logger,
96+ required bool indexEvents,
97+ required int eventCapacity,
98+ required Duration flushInterval,
99+ required HttpClient client,
100+ required String analyticsEventsPath,
101+ required String diagnosticEventsPath,
102+ required ServiceEndpoints endpoints,
103+ required Duration diagnosticRecordingInterval,
104+ required bool allAttributesPrivate,
105+ required Set <AttributeReference > globalPrivateAttributes,
106+ DiagnosticsManager ? diagnosticsManager}) {
107+ return DefaultEventProcessor (
108+ logger: logger,
109+ indexEvents: indexEvents,
110+ eventCapacity: eventCapacity,
111+ flushInterval: flushInterval,
112+ client: client,
113+ analyticsEventsPath: analyticsEventsPath,
114+ diagnosticEventsPath: diagnosticEventsPath,
115+ diagnosticsManager: diagnosticsManager,
116+ endpoints: endpoints,
117+ allAttributesPrivate: allAttributesPrivate,
118+ globalPrivateAttributes: globalPrivateAttributes,
119+ diagnosticRecordingInterval: diagnosticRecordingInterval);
120+ }
121+
80122final class LDCommonClient {
81123 final LDCommonConfig _config;
82124 final Persistence _persistence;
@@ -96,6 +138,8 @@ final class LDCommonClient {
96138 // If there are cross-dependent modifiers, then this must be considered.
97139 late final List <ContextModifier > _modifiers;
98140
141+ final EventProcessorFactory _eventProcessorFactory;
142+
99143 /// The event processor is not constructed during LDCommonClient construction
100144 /// because it requires the HTTP properties which must be determined
101145 /// asynchronously.
@@ -127,7 +171,8 @@ final class LDCommonClient {
127171
128172 LDCommonClient (LDCommonConfig commonConfig, CommonPlatform platform,
129173 LDContext context, DiagnosticSdkData sdkData,
130- {DataSourceFactoriesFn ? dataSourceFactories})
174+ {DataSourceFactoriesFn ? dataSourceFactories,
175+ EventProcessorFactory ? eventProcessorFactory})
131176 : _config = commonConfig,
132177 _platform = platform,
133178 _persistence = ValidatingPersistence (
@@ -143,6 +188,8 @@ final class LDCommonClient {
143188 _initialUndecoratedContext = context,
144189 // Data source factories is primarily a mechanism for testing.
145190 _dataSourceFactories = dataSourceFactories ?? _defaultFactories,
191+ _eventProcessorFactory =
192+ eventProcessorFactory ?? _defaultEventProcessorFactory,
146193 _sdkData = sdkData {
147194 final dataSourceEventHandler = DataSourceEventHandler (
148195 flagManager: _flagManager,
@@ -273,8 +320,9 @@ final class LDCommonClient {
273320 final osInfo = _envReport.osInfo;
274321 DiagnosticsManager ? diagnosticsManager = _makeDiagnosticsManager (osInfo);
275322
276- _eventProcessor = DefaultEventProcessor (
323+ _eventProcessor = _eventProcessorFactory (
277324 logger: _logger,
325+ indexEvents: false ,
278326 eventCapacity: _config.events.eventCapacity,
279327 flushInterval: _config.events.flushInterval,
280328 client: HttpClient (httpProperties: httpProperties),
@@ -528,6 +576,10 @@ final class LDCommonClient {
528576 LDEvaluationDetail <LDValue > detail;
529577
530578 if (evalResult != null && evalResult.flag != null ) {
579+ evalResult.flag? .prerequisites? .forEach ((prereq) {
580+ _variationInternal (prereq, LDValue .ofNull (), isDetailed: isDetailed);
581+ });
582+
531583 if (type == null || type == evalResult.flag! .detail.value.type) {
532584 detail = evalResult.flag! .detail;
533585 } else {
0 commit comments