tools/RuiDocs/index.js (57 lines of code) (raw):

#!/usr/bin/env node /* eslint-disable @typescript-eslint/no-var-requires */ const glob = require('glob'); const path = require('path'); const fs = require('fs'); const fm = require('front-matter'); const extract = require('multilang-extract-comments'); const args = process.argv; const cssVarRegex = /(--.+?)\:\s?(.+)\;/; const fIndex = args.indexOf('--files'); const pattern = args[fIndex + 1]; // const oIndex = args.indexOf('--out'); // const outDir = args[oIndex + 1]; const outDir = path.join(__dirname, '../../', '.ruidocs'); if (!fs.existsSync(outDir)) { try { fs.mkdirSync(outDir); } catch(e) { // Likely failed because concurrent threads creating the folder too console.log(e); } } let readme; let readmeAbsolutePath; try { readme = fs.readFileSync('./readme.md', 'UTF8'); readmeAbsolutePath = path.resolve('./readme.md'); } catch(err) { readme = fs.readFileSync('./readme.mdx', 'UTF8'); readmeAbsolutePath = path.resolve('./readme.mdx'); } let filename = 'readme'; // Read meta data from file const frontMatter = fm(readme); if (frontMatter && frontMatter.attributes && frontMatter.attributes.title) { filename = frontMatter.attributes.title.replace(/\s/g,'-').toLowerCase(); } else { throw 'Readme must have front matter with a unique title'; } // Parse passed typescript files glob(pattern, {}, (er, files) => { if (er) { console.log(er); process.exit(1); } console.log(`ruidocs processing ${files.length} files`); files.forEach(file => { const data = fs.readFileSync(file, 'utf8'); const comments = extract(data); // Build markdown table with @variable comments const markdown = Object.values(comments).reduce((md, block) => { const parts = cssVarRegex.exec(block.code); if (Array.isArray(parts)) { const name = parts[1]; const v = parts[2]; return `${md}| \`${name}\` | \`${v}\` | ${block.content.replace(/@variable\s?/, '').replace(/(\t)/g, '').replace(/\n/g,'')} | \r\n`; } return md; }, '\r\n ## CSS Variables\r\n\r\n| CSS Variable | Default Value | Description |\r\n| --- | --- | --- |\r\n'); // build front matter const frontmatter = `---\r\nparentFileAbsolutePath: "${readmeAbsolutePath}"\r\nmeta: true\r\n---`; fs.writeFileSync(path.join(outDir, `${filename}-variables.md`), `${frontmatter}\r\n\r\n${markdown}`); }); }); //const readme = fs.readFileSync('README.md'); //fs.writeFileSync('./docs/readme.md', `${banner}\n\n${readme}\n\n${markdown}`); //console.log(args);