tools/rfc-render/inject-table.js (26 lines of code) (raw):
#!/usr/bin/env node
const fs = require('fs').promises;
const path = require('path');
const { render } = require('./render-rfc-table');
const { parseArgs } = require('util');
async function main() {
const { values: { status = undefined }, positionals: [readme = 'README.md'] } = parseArgs({
options: {
status: {
type: 'string',
short: 's',
multiple: true,
}
},
strict: true,
allowPositionals: true,
})
const readmeFile = path.resolve(readme);
const statusList = status?.map(s => s.startsWith('status/') ? s : `status/${s}`);
console.info(`Injecting '${readmeFile}' with status: ${statusList ? statusList.join(', ') : '<all>'}`);
const text = (await fs.readFile(readmeFile, 'utf-8'));
const lines = text.split('\n');
const begin = lines.indexOf('<!--BEGIN_TABLE-->');
const end = lines.indexOf('<!--END_TABLE-->');
if (begin === -1 || end === -1) {
throw new Error(`unable to find begin/end markers in file ${readmeFile}`);
}
const final = [...lines.slice(0, begin + 1), ...(await render(statusList, Boolean(statusList))), ...lines.slice(end)];
console.error(`Writing ${readmeFile}`);
await fs.writeFile(readmeFile, final.join('\n'));
console.error(`Done`);
}
main().catch(e => {
console.error();
console.error(e);
console.error();
console.error(`Usage:\n\t${path.relative(process.cwd(), process.argv[1])} README.md [--status <STATUS_1>] [--status <STATUS_2>] [...]`)
process.exitCode = 1;
});