sanitizeGraphQLQuery static method
Implementation
static String sanitizeGraphQLQuery(
String query, Map<String, List<dynamic>> customFieldsConfig) {
final entityNames = customFieldsConfig.keys.map(RegExp.escape).join('|');
final regex = RegExp(
r'fragment\s+(\w+)\s+on\s+(' + entityNames + r')\b\s*\{([\s\S]*?)\}',
multiLine: true);
final buffer = StringBuffer();
var lastIndex = 0;
for (final match in regex.allMatches(query)) {
final fragmentName = match.group(1)!;
final entityName = match.group(2)!;
final fragmentContent = match.group(3)!;
buffer.write(query.substring(lastIndex, match.start));
if (customFieldsConfig[entityName]!.isNotEmpty &&
!fragmentContent.contains('customFields ') &&
!fragmentContent.contains('customFields{')) {
final customFields = customFieldsConfig[entityName]!;
String customFieldsFragment;
if (customFields.contains('SCALAR_CUSTOM_FIELDS')) {
customFieldsFragment = '\n customFields\n';
} else {
customFieldsFragment = '''
customFields {
${_generateFieldsRecursive(customFields, indent: ' ')} }
''';
}
buffer.write(
'fragment $fragmentName on $entityName {$fragmentContent$customFieldsFragment}');
} else {
buffer.write(match.group(0));
}
lastIndex = match.end;
}
buffer.write(query.substring(lastIndex));
return buffer.toString();
}