mirror of
https://github.com/EnixCoda/Gitako.git
synced 2026-03-11 08:54:44 +00:00
50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
const path = require('path')
|
|
const { promises: fs, existsSync } = require('fs')
|
|
const { chromium } = require('@playwright/test')
|
|
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 chromium.launch({ headless }))
|
|
const context = await browser.newContext()
|
|
return await context.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()
|