generateQueryWithCustomFields static method

String generateQueryWithCustomFields(
  1. String queryTemplate,
  2. Map<String, List> customFieldsConfig
)

Implementation

static String generateQueryWithCustomFields(
  String queryTemplate,
  Map<String, List<dynamic>> customFieldsConfig,
) {
  customFieldsConfig.forEach((typeName, customFields) {
    if (customFields.isEmpty) {
      queryTemplate = queryTemplate.replaceAll(
        RegExp(
          r'\.\.\.' + typeName.capitalize() + r'CustomFields\s*',
          multiLine: true,
        ),
        '',
      );

      queryTemplate = queryTemplate.replaceAll(
        RegExp(
          r'fragment\s+' +
              typeName.capitalize() +
              r'CustomFields\s+on\s+' +
              typeName.capitalize() +
              r'\s*\{[^}]*\}',
          multiLine: true,
        ),
        '',
      );
    }
  });

  customFieldsConfig.forEach((typeName, customFields) {
    if (customFields.isNotEmpty) {
      String generatedFragment = generateFragmentWithTypename(
        typeName,
        customFields,
      );

      queryTemplate = queryTemplate.replaceAllMapped(
        RegExp(
          r'fragment\s+' +
              typeName.capitalize() +
              r'CustomFields\s+on\s+' +
              typeName.capitalize() +
              r'\s*\{[^}]*\}',
          multiLine: true,
        ),
        (match) => generatedFragment,
      );
    }
  });

  queryTemplate = queryTemplate
      .replaceAll(RegExp(r'\n\s*\n', multiLine: true), '\n')
      .trim();

  return queryTemplate;
}