|
- const fs = require('fs')
- const jsdom = require('jsdom')
- const axios = require('axios')
-
- const fetchBrands = () => new Promise(async (resolve, reject) => {
- try {
- const res = await axios({
- method: 'GET',
- url: process.env.SIMPLEICONS_URL,
- responseType: 'buffer',
- })
-
- const response = res.data.toString('utf-8')
- const dom = new jsdom.JSDOM(response)
- const { window, } = dom
- const linkElements = Array.from(window.document.getElementsByClassName('grid-item__link'))
- const links = linkElements
- .map(el => el.parentElement)
- .map(el => {
- const titleEl = el.getElementsByClassName('grid-item__title')[0]
- const subtitleEl = el.getElementsByClassName('grid-item__subtitle')[0]
-
- return {
- name: titleEl.textContent,
- color: subtitleEl.textContent,
- }
- })
- .sort((a, b) => a.name.localeCompare(b.name))
- const outputStream = fs.createWriteStream(process.env.BRANDS_JSON_FILE_PATH)
- outputStream.on('finish', () => {
- resolve(links)
- })
- outputStream.write(JSON.stringify(links))
- } catch (err) {
- reject(err)
- }
- })
-
- module.exports = () => new Promise((resolve, reject) => {
- fs.readFile(process.env.BRANDS_JSON_FILE_PATH, async (err, file) => {
- if (err && err.code === 'ENOENT') {
- const result = await fetchBrands()
- resolve(result)
- return
- }
- if (err) {
- reject(err)
- return
- }
- resolve(JSON.parse(file.toString('utf-8')))
- })
- })
|