generate method

String generate()

Generate the robots.txt content string

Implementation

String generate() {
  final buffer = StringBuffer();

  final cleanBase = baseUrl.endsWith('/')
      ? baseUrl.substring(0, baseUrl.length - 1)
      : baseUrl;

  // Additional lines at top (comments, etc.)
  if (additionalLines != null) {
    for (final line in additionalLines!) {
      buffer.writeln(line);
    }
    buffer.writeln();
  }

  // Rules
  if (rules.isEmpty) {
    // Default: allow all
    buffer.writeln('User-agent: *');
    buffer.writeln('Allow: /');
  } else {
    for (var i = 0; i < rules.length; i++) {
      final rule = rules[i];
      buffer.writeln('User-agent: ${rule.userAgent}');

      for (final path in rule.allow) {
        buffer.writeln('Allow: $path');
      }

      for (final path in rule.disallow) {
        buffer.writeln('Disallow: $path');
      }

      if (rule.crawlDelay != null) {
        buffer.writeln('Crawl-delay: ${rule.crawlDelay}');
      }

      // Add blank line between rules
      if (i < rules.length - 1) {
        buffer.writeln();
      }
    }
  }

  // Sitemaps
  if (sitemaps != null && sitemaps!.isNotEmpty) {
    buffer.writeln();
    for (final sitemap in sitemaps!) {
      final sitemapUrl = sitemap.startsWith('http')
          ? sitemap
          : '$cleanBase${sitemap.startsWith('/') ? sitemap : '/$sitemap'}';
      buffer.writeln('Sitemap: $sitemapUrl');
    }
  }

  return buffer.toString();
}