import fs from 'fs' import theme from '../themes/themes.json' const BASE_URL = 'https://codestats-readme.vercel.app' // const BASE_URL = 'http://localhost:3000' const TARGET_FILE = './themes/README.md' const LINKS_FLAG = '' const PROFILE_CARD_TABLE_FLAG = '' const TOP_LANGS_CARD_TABLE_FLAG = '' const HISTORY_CARD_TABLE_FLAG = '' const THEME_TEMPLATE = `## Available Themes With inbuilt themes you can customize the look of the card without doing any manual customization. Use \`?theme=THEME_NAME\` parameter like so :- \`\`\`md ![Anurag's github stats](${BASE_URL}/api?username=aviortheking&theme=dark&show_icons=true) \`\`\` ## Profile | | | | | :--: | :--: | :--: | ${PROFILE_CARD_TABLE_FLAG} ## History Card | | | | | :--: | :--: | :--: | ${HISTORY_CARD_TABLE_FLAG} ## Top Langs Card | | | | | :--: | :--: | :--: | ${TOP_LANGS_CARD_TABLE_FLAG} ${LINKS_FLAG} [add-theme]: https://github.com/aviortheking/codestats-readme/edit/master/themes/index.js Wanted to add a new theme? Consider reading the [contribution guidelines](../CONTRIBUTING.md#themes-contribution) :D ` const createTopLangsMdLink = (theme: string) => { return `\n[top_langs_${theme}]: ${BASE_URL}/api/top-langs/?username=aviortheking&theme=${theme}` } const createProfileMdLink = (theme: string) => { return `\n[profile_${theme}]: ${BASE_URL}/api?username=aviortheking&show_icons=true&theme=${theme}` } const createHistoryMdLink = (theme: string) => { return `\n[history_${theme}]: ${BASE_URL}/api/history?username=Aviortheking&layout=horizontal&theme=${theme}` } const generateLinks = (fn: typeof createHistoryMdLink) => { return Object.keys(theme) .map((name) => fn(name)) .join('') } const createTableItem = ({ link, label }: {link: string, label: string}) => { if (!link || !label) return '' return `\`${label}\` ![${link}][${link}]` } const generateTable = (prefix: string) => { const rows = [] const themes = Object.keys(theme) for (let i = 0; i < themes.length; i += 3) { const one = prefix + themes[i] const two = prefix + themes[i + 1] const three = prefix + themes[i + 2] const tableItem1 = createTableItem({ link: one, label: themes[i] }) const tableItem2 = createTableItem({ link: two, label: themes[i + 1] }) let tableItem3 = createTableItem({ link: three, label: themes[i + 2] }) if (three === undefined) { tableItem3 = '[Add your theme][add-theme]' } rows.push(`| ${tableItem1} | ${tableItem2} | ${tableItem3} |`) // if it's the last row & the row has no empty space push a new row if (three && i + 3 === themes.length) { rows.push('| [Add your theme][add-theme] | | |') } } return rows.join('\n') } const buildReadme = () => { return THEME_TEMPLATE.split('\n') .map((line) => { if (line.includes(LINKS_FLAG)) { return generateLinks(createTopLangsMdLink) + generateLinks(createHistoryMdLink) + generateLinks(createProfileMdLink) } if (line.includes(PROFILE_CARD_TABLE_FLAG)) { return generateTable('profile_') } if (line.includes(TOP_LANGS_CARD_TABLE_FLAG)) { return generateTable('top_langs_') } if (line.includes(HISTORY_CARD_TABLE_FLAG)) { return generateTable('history_') } return line }) .join('\n') } fs.writeFileSync(TARGET_FILE, buildReadme())