const fs = require('fs-extra') const process = require('process') const changeCase = require('change-case') const EXIT = 1 const README = './README.md' const README_HEADER = '# Material Icons\n\n> materialdesignicons.com\n\n| | Name\n:-: | :----------:\n' const iconsFrom = './svg' const iconsTo = './icons' const createFileString = (name, paths) => `import React from 'react' const DEFAULT_SIZE = 24 export default ({ fill = 'currentColor', width = DEFAULT_SIZE, height = DEFAULT_SIZE, style = {}, ...props }) => ( ${ paths } ) ` const createIndexString = (file) => `export { default as ${ file.replace('.js', '') } } from './${ file }'` const createMarkdownString = (file) => { const name = file.replace('.js', '') const oldFileName = changeCase.paramCase(name).replace('-icon', '') return ` | \`${ name }\`` } fs.removeSync(README) fs.writeFileSync(README, '') fs.removeSync(iconsFrom) fs.ensureDirSync(iconsFrom) fs.copySync('./node_modules/mdi-svg/svg', iconsFrom) fs.removeSync(iconsTo) fs.ensureDirSync(iconsTo) fs.writeFileSync(`${ iconsTo }/index.js`, '') fs.readdir(iconsFrom) .then((files) => { const fileContents = files.map((filename) => fs.readFile(`${ iconsFrom }/${ filename }`, 'utf-8')) return Promise.all(fileContents) .then((contents) => ({ names: files, contents, })) }) .then((files) => Promise.all( files.names.map((filename, i) => { const content = files.contents[i] // eslint-disable-next-line no-unused-vars const [match, paths] = content.match(/(.+?)<\/svg>/) const name = `${ changeCase.pascalCase(filename.replace('.svg', '')) }Icon` return fs.writeFile(`${ iconsTo }/${ name }.js`, createFileString(name, paths)) }) )) .then(() => fs.readdir(iconsTo) .then((files) => { const file = files.map((fileName) => createMarkdownString(fileName)) return fs.writeFile(README, `${ README_HEADER }${ file.join('\n') }\n`) }) ) .then(() => fs.readdir(iconsTo) .then((files) => { const file = files.map((fileName) => createIndexString(fileName)) return fs.writeFile(`${ iconsTo }/index.js`, `${ file.join('\n') }\n`) }) ) .catch((err) => { console.log(err) process.exit(EXIT) })