export function addAuthorsToContent()

in scripts-ts/src/updateAuthors.ts [175:228]


export function addAuthorsToContent(
  authorsContent: string,
  authors: Author[]
): AddAuthorsResult {
  const existingEmails = extractExistingEmails(authorsContent);
  const existingGitHubUrls = extractExistingGitHubUrls(authorsContent);

  const newAuthors = authors.filter(
    (a) => !existingEmails.has(a.mail) && !existingGitHubUrls.has(a.url)
  );

  if (newAuthors.length === 0) {
    return { content: authorsContent, newAuthors: [] };
  }

  const jetBrainsAuthors = newAuthors.filter(isJetBrainsEmployee);
  const regularAuthors = newAuthors.filter((a) => !isJetBrainsEmployee(a));

  let result = authorsContent;

  // Add JetBrains employees to JetBrains IP section
  if (jetBrainsAuthors.length > 0) {
    const insertionPoint = findSectionEndOffset(
      result,
      JETBRAINS_IP_HEADER,
      PREVIOUS_CONTRIBUTORS_HEADER
    );
    if (insertionPoint !== -1) {
      const insertionString = authorsToMdString(jetBrainsAuthors, true);
      result =
        result.slice(0, insertionPoint) +
        insertionString +
        result.slice(insertionPoint);
    }
  }

  // Add regular contributors to Contributors section
  if (regularAuthors.length > 0) {
    const insertionPoint = findSectionEndOffset(
      result,
      CONTRIBUTORS_HEADER,
      JETBRAINS_IP_HEADER
    );
    if (insertionPoint !== -1) {
      const insertionString = authorsToMdString(regularAuthors, false);
      result =
        result.slice(0, insertionPoint) +
        insertionString +
        result.slice(insertionPoint);
    }
  }

  return { content: result, newAuthors };
}