123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- const config = require('./figma-import.config')
- const path = require('path')
- const fs = require('fs').promises
- const { kebabCase } = require('lodash')
- const { getImageContent, getNodeChildren, getSvgImageUrl } = require('./utils/api')
- const type = process.argv.slice(2)[0] === '--icons' ? 'icons' : 'illustrations'
- const filesDir = path.resolve(`src/components/_${type}/svgs`)
- let counter = 0
- /**
- * clear files dir
- *
- */
- const clearFilesDir = async () => {
- try {
- await fs.rm(filesDir, { recursive: true })
- console.log(`${filesDir} successfully deleted!`)
- } catch (err) {
- console.error(`Error while deleting ${filesDir}`)
- }
- }
- /**
- * generate icon/illustration content
- * [fileName].svg files
- *
- * @param {object} svgNode
- * @param {number} total
- * @return {Promise<void>}
- */
- const generateIconOrIllustration = async (svgNode, total) => {
- const fileUrl = await getSvgImageUrl(svgNode.id)
- const fileName = kebabCase(svgNode.name)
- try {
- await fs.access(filesDir)
- } catch (error) {
- await fs.mkdir(filesDir)
- }
- const { data: fileContent } = await getImageContent(fileUrl)
- await Promise.all([await fs.writeFile(path.resolve(filesDir, `${fileName}.svg`), fileContent, 'utf-8')])
- counter++
- process.stdout.write(` ${counter}/${total} files has been saved\r`)
- if (counter === total) {
- console.info('All svgs has been saved')
- }
- }
- /**
- * generate icons/illustrations components
- *
- * @param {[Object]} svgNodesArr - array of svgs from frame
- * @return {Promise<void>}
- */
- const generateIconsOrIllustrations = async (svgNodesArr) => {
- await Promise.all(
- svgNodesArr.map((item, index) => {
- setTimeout(() => generateIconOrIllustration(item, svgNodesArr.length), 1000 * index)
- })
- )
- }
- const main = async () => {
- try {
- await clearFilesDir()
- const filesNodesArr = await getNodeChildren(
- type === 'icons' ? config.FRAME_WITH_ICONS_ID : config.FRAME_WITH_ILLUSTRATIONS_ID
- )
- if (!filesNodesArr) {
- console.error('No nodes found')
- return
- }
- await generateIconsOrIllustrations(filesNodesArr)
- } catch (e) {
- console.error('Unhandled error', e)
- }
- }
- module.exports = main
|