import { readFile, writeFile } from "fs/promises"; import { getIntegrationDocumentationUrl, integrationDefs, integrationKinds, } from "../packages/definitions/src/integration"; const FILE = "docs/README.md"; const MAX_COLUMNS_PER_ROW = 7; async function updateIntegrationList() { // Read current README content const content = await readFile(FILE, "utf8"); // Define markers const startMarker = ""; const endMarker = ""; // Find the section to replace const startIndex = content.indexOf(startMarker); const endIndex = content.indexOf(endMarker); if (startIndex === -1 || endIndex === -1) { throw new Error("Could not find markers in README.md"); } // Generate the new integration list const integrations = integrationKinds .filter((kind) => kind !== "mock") .map((kind) => ({ ...integrationDefs[kind], documentationUrl: getIntegrationDocumentationUrl(kind), })) .toSorted((a, b) => a.name.localeCompare(b.name)); const tableRows: string[] = []; let currentRow: string[] = []; integrations.forEach((integration) => { const cellBody = ` ${integration.name}

${integration.name.replaceAll(" ", "
")}

`; let cellContent = `
${cellBody}
`; if (integration.documentationUrl !== null) { cellContent = `${cellBody}`; } currentRow.push(` ${cellContent} `); if (currentRow.length === MAX_COLUMNS_PER_ROW) { tableRows.push(`${currentRow.join("\n")}`); currentRow = []; } }); // Add remaining items if any if (currentRow.length > 0) { tableRows.push(`${currentRow.join("\n")}`); } // Create the new content const newSection = `${startMarker}
${tableRows.join("\n")}
${endMarker}`; // Replace the old section with the new one const newContent = content.slice(0, startIndex) + newSection + content.slice(endIndex + endMarker.length); // Write the updated content back to the file await writeFile(FILE, newContent, "utf8"); } updateIntegrationList().catch((error: unknown) => { console.error(error); process.exitCode = 1; });