mergeCustomSegments method

String mergeCustomSegments(
  1. String oldContent,
  2. String newContent, {
  3. String beginMarker = '// BEGIN CUSTOM ROUTES',
  4. String endMarker = '// END CUSTOM ROUTES',
})

Extracts the content between beginMarker and endMarker in oldContent and merges it into newContent between the same markers.

Implementation

String mergeCustomSegments(
  String oldContent,
  String newContent, {
  String beginMarker = '// BEGIN CUSTOM ROUTES',
  String endMarker = '// END CUSTOM ROUTES',
}) {
  try {
    if (!oldContent.contains(beginMarker) || !oldContent.contains(endMarker)) {
      return newContent;
    }
    if (!newContent.contains(beginMarker) || !newContent.contains(endMarker)) {
      return newContent;
    }

    final oldStart = oldContent.indexOf(beginMarker) + beginMarker.length;
    final oldEnd = oldContent.indexOf(endMarker);
    if (oldEnd <= oldStart) return newContent;

    final customSegment = oldContent.substring(oldStart, oldEnd);

    final newStart = newContent.indexOf(beginMarker) + beginMarker.length;
    final newEnd = newContent.indexOf(endMarker);
    if (newEnd <= newStart) return newContent;

    return newContent.substring(0, newStart) +
        customSegment +
        newContent.substring(newEnd);
  } catch (e) {
    throw TemplateException('Failed to merge custom user segments.', e);
  }
}