const fs = require('fs') const path = require('path') const dotenv = require('dotenv') function isObject(obj) { return obj !== null && typeof obj === 'object' } function checkInstalled(target) { let ret = true try { const resolveModule = require(path.resolve(target)) if (!resolveModule) { ret = false } } catch (e) { ret = false } return ret } function exists(path) { let ret = true try { fs.accessSync(path, fs.constants.F_OK) } catch (e) { ret = false } return ret } function mkdir(path) { let ret = true try { fs.mkdirSync(path) } catch (e) { ret = false } return ret } function writeFile(path, content) { let ret = true try { fs.writeFileSync(path, content, { encoding: 'utf8' }) } catch (e) { ret = false } return ret } function readFile(path) { let ret = '' try { ret = fs.readFileSync(path, { encoding: 'utf8' }) } catch (e) { ret = '' } return ret } function readEnv(path) { let ret = {} try { ret = dotenv.parse(Buffer.from(readFile(path))) } catch (e) { console.warn('readEnv error:', e.message) ret = {} } return ret } function buildEnvContent(values) { let content = '' Object.keys(values).forEach(key => { content += `${key}=${values[key]}\n` }) return content } function sortObject(obj, order = 'asc') { const keys = Object.keys(obj) const sortedKeys = order === 'asc' ? keys.sort() : keys.reverse() return sortedKeys.reduce((val, key) => { const v = obj[key] if (isObject(v)) { val[key] = sortObject(v, order) } else if (Array.isArray(v)) { val[key] = order === 'asc' ? v.sort() : v.reverse() } else { val[key] = v } return val }, {}) } module.exports = { isObject, checkInstalled, exists, mkdir, writeFile, readFile, readEnv, buildEnvContent, sortObject }