Gitako/scripts/generate-icon-index.js
2021-08-01 16:09:15 +08:00

49 lines
1.5 KiB
JavaScript

const path = require('path')
const { promises: fs, existsSync } = require('fs')
const puppeteer = require('puppeteer')
const generateFileIconIndex = require('./generate-file-icon-index')
const generateFolderIconIndex = require('./generate-folder-icon-index')
const { emitDirPath, checkEmitDir } = require('./check-emit-dir')
let browser
async function getPage() {
const headless = process.env.HEADLESS !== 'false'
browser = browser || (await puppeteer.launch({ headless }))
return await browser.newPage()
}
async function generateCSV() {
await checkEmitDir()
await Promise.all(
[generateFileIconIndex, generateFolderIconIndex].map(
async ({ fileName, link, parsePageContent, prepareCSV }) => {
let records
const emitJSONPath = path.resolve(emitDirPath, fileName + '.json')
if (!existsSync(emitJSONPath)) {
const page = await getPage()
await page.goto(link)
records = await page.evaluate(parsePageContent)
await page.close()
await fs.writeFile(emitJSONPath, JSON.stringify(records))
} else {
records = require(emitJSONPath)
}
const rowSeparator = '\n'
const columnSeparator = ','
const csv = records.map(prepareCSV)
const emitPath = path.resolve(__dirname, '..', 'src/assets/icons')
await fs.writeFile(
path.resolve(emitPath, fileName + '.csv'),
csv.map(cols => cols.join(columnSeparator)).join(rowSeparator),
)
},
),
)
if (browser) await browser.close()
}
generateCSV()