tools/rfc-render/render-rfc-table.js (46 lines of code) (raw):
const { issuesGroupedByStatus } = require('./fetch-issues');
const { STATUS_LIST } = require('./status');
const labels = Object.keys(STATUS_LIST);
exports.render = render;
async function render(renderStatus = undefined, groupByStatus = true) {
const issuesByStatus = await issuesGroupedByStatus(renderStatus);
const lines = [];
lines.push('\\#|Title|Owner|Status');
lines.push('---|-----|-----|------');
if (groupByStatus) {
for (const statusGroup of (renderStatus || Object.keys(issuesByStatus))) {
for (const row of issuesByStatus[statusGroup]?.sort(byNumber) || []) {
lines.push(renderRow(row));
}
}
} else {
for (const row of Object.values(issuesByStatus).flat().sort(byNumber)) {
lines.push(renderRow(row));
}
}
return lines;
}
function renderRow(row) {
return [
`[${row.number}](https://github.com/aws/aws-cdk-rfcs/issues/${row.number})`,
`[${row.title.trim()}](${row.link})`,
renderUser(row.assignee),
STATUS_LIST[row.status],
].join('|');
}
function byNumber(a, b) {
return a.number - b.number;
}
function renderUser(user) {
if (!user) {
return '';
}
if (user.startsWith('@')) {
user = user.substring(1);
}
user = user.trim();
if (!user) {
return '';
}
return `[@${user}](https://github.com/${user})`;
}