// Build all.html by combining the generated toc and apicontent from each // of the generated html files. import fs from 'fs'; const source = new URL('../../out/doc/api/', import.meta.url); // Get a list of generated API documents. const htmlFiles = fs.readdirSync(source, 'utf8') .filter((name) => name.includes('.html') && name !== 'all.html'); // Read the table of contents. const toc = fs.readFileSync(new URL('./index.html', source), 'utf8'); // Extract (and concatenate) the toc and apicontent from each document. let contents = ''; let apicontent = ''; // Identify files that should be skipped. As files are processed, they // are added to this list to prevent dupes. const seen = new Set(['all.html', 'index.html']); for (const link of toc.match(//g)) { const href = /href="(.*?)"/.exec(link)[1]; if (!htmlFiles.includes(href) || seen.has(href)) continue; const data = fs.readFileSync(new URL(`./${href}`, source), 'utf8'); // Split the doc. const match = /(<\/ul>\s*)?<\/\w+>\s*<\w+ id="apicontent">/.exec(data); // Get module name const moduleName = href.replace(/\.html$/, ''); contents += data.slice(0, match.index) .replace(/[\s\S]*?id="toc"[^>]*>\s*<\w+>.*?<\/\w+>\s*(