Skip to content

Commit

Permalink
fix: Firebase plugin fixes
Browse files Browse the repository at this point in the history
fix: Firebase plugin fixes
  • Loading branch information
oscb authored Jun 5, 2023
2 parents b43c7b0 + 772d315 commit 1e4d686
Show file tree
Hide file tree
Showing 13 changed files with 263 additions and 1,031 deletions.
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,16 @@ migrate_working_dir/

# Flutter/Dart/Pub related
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
/pubspec.lock
pubspec.lock
**/doc/api/
.dart_tool/
.packages
build/
.flutter-plugins
.flutter-plugins-dependencies

# ASDF
.tool-versions

# VSCode
launch.json
1 change: 0 additions & 1 deletion packages/core/lib/event.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ abstract class RawEvent with JSONSerialisable {
Context? context;

Map<String, dynamic>? integrations;
List<Map<String, dynamic>>? metrics;

@JsonKey(name: "_metadata")
DestinationMetadata? metadata;
Expand Down
26 changes: 4 additions & 22 deletions packages/core/lib/event.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

94 changes: 28 additions & 66 deletions packages/core/lib/map_transform.dart
Original file line number Diff line number Diff line change
@@ -1,82 +1,44 @@
// class PropertyMap {
// final Set<String>? keys;
// final bool optional;

// PropertyMap({this.keys, this.optional = false});
// }

class PropertyMapper {
final Set<String> sourceKeys;
final String targetKey;
final dynamic Function(dynamic)? fromJson;

const PropertyMapper(this.sourceKeys, {this.fromJson});
const PropertyMapper(this.targetKey, {this.fromJson});
}

dynamic recurseMapper(
dynamic value, Map<String, PropertyMapper> propertiesMapper) {
dynamic recurseMapper(dynamic value, Map<String, PropertyMapper> mappings) {
if (value is List) {
return value.map((value) => recurseMapper(value, propertiesMapper));
return value.map((value) => recurseMapper(value, mappings));
} else if (value is Map<String, dynamic>) {
return mapProperties(value, mappings);
} else if (value is Map) {
value.map(
(key, value) => MapEntry(key, recurseMapper(value, propertiesMapper)));
return value
.map((key, value) => MapEntry(key, recurseMapper(value, mappings)));
} else {
return value;
}
}

dynamic Function(String targetKey,
{bool? optional, dynamic Function(dynamic)? fromJson})
propertyMapper(Map<String, dynamic>? properties,
Map<String, PropertyMapper> propertiesMapper) {
return (String targetKey,
{bool? optional, dynamic Function(dynamic)? fromJson}) {
final propertyMapper = propertiesMapper[targetKey];
if (properties != null) {
for (final sourceKey in (propertyMapper != null
? propertyMapper.sourceKeys
: {targetKey})) {
final value = properties[sourceKey];
if (value != null) {
return fromJson == null
? (propertyMapper?.fromJson == null
? value
: propertyMapper?.fromJson!(value))
: fromJson(value);
}
}
}
if (optional == null || optional == false) {
throw Exception(
"Missing properties: ${propertyMapper == null ? targetKey : propertyMapper.sourceKeys.join(',')}");
} else {
return null;
}
};
}
Map<String, Object?> mapProperties(
Map<String, dynamic>? properties, Map<String, PropertyMapper> mappings) {
final Map<String, Object?> output = {};

// Map<String, dynamic> mapProperties(
// Map<String, dynamic> properties, Map<String, PropertyMap> mapper) {
// final Map<String, dynamic> output = {};
// final Set<String> missing = {};
if (properties == null) {
return {};
}

// for (final entry in mapper.entries) {
// var found = false;
// for (final sourceKey in entry.value.keys ?? {entry.key}) {
// final value = properties[sourceKey];
// if (value != null) {
// output[entry.key] = value;
// found = true;
// break;
// }
// }
// if (!found && !entry.value.optional) {
// missing.add(entry.value.keys?.first ?? entry.key);
// }
// }
for (final entry in properties.entries) {
final sourceKey = entry.key;
final sourceValue = properties[sourceKey];
if (mappings.containsKey(sourceKey)) {
final mapping = mappings[sourceKey]!;

// if (missing.isNotEmpty) {
// throw Exception("Missing properties: ${missing.join(',')}");
// }
output[mapping.targetKey] = (mapping.fromJson != null)
? mapping.fromJson!(sourceValue)
: sourceValue;
} else {
output[sourceKey] = sourceValue;
}
}

// return output;
// }
return output;
}
24 changes: 21 additions & 3 deletions packages/core/lib/plugin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,31 @@ abstract class DestinationPlugin extends EventPlugin {
timeline.remove(plugin);
}

@override
Future<RawEvent?> execute(RawEvent event) async {
Future<RawEvent?> process(RawEvent event) async {
if (!_isEnabled(event)) {
return null;
}

return timeline.process(event);
final beforeResult = await timeline.applyPlugins(PluginType.before, event);
if (beforeResult == null) {
return null;
}

final enrichmentResult =
await timeline.applyPlugins(PluginType.enrichment, event);
if (enrichmentResult == null) {
return null;
}

await super.execute(enrichmentResult);

final afterResult = await timeline.applyPlugins(PluginType.after, event);
return afterResult;
}

@override
Future<RawEvent?> execute(RawEvent event) async {
return process(event);
}
}

Expand Down
Loading

0 comments on commit 1e4d686

Please sign in to comment.