UNPKG

2.12 kBJavaScriptView Raw
1const path = require('path')
2const semver = require('semver')
3const fs = require('fs')
4const crypto = require('crypto')
5const { promisify } = require('util')
6const glob = require('glob')
7
8const { state } = require('./state')
9const { engines } = require('../package.json')
10
11const COLORS = { GREEN: '\x1b[32m', RED: '\x1b[31m', YELLOW: '\x1b[33m', DIM: '\x1b[2m', RESET: '\x1b[0m' }
12
13
14module.exports.readFileAsync = promisify(fs.readFile)
15
16module.exports.lstatAsync = promisify(fs.lstat)
17
18module.exports.globAsync = promisify(glob)
19
20module.exports.checkVersion = () => {
21 if (!semver.satisfies(process.version, engines.node)) {
22 console.error(`You need to install node.js version ${engines.node}`)
23 process.exit(1)
24 }
25}
26
27module.exports.calcHash = async (filename, length = 6) => {
28 return new Promise((resolve, reject) => {
29 const stream = fs.createReadStream(filename)
30 const hash = crypto.createHash('sha1')
31 hash.setEncoding('hex')
32 stream.on('error', err => reject(err))
33 stream.on('data', chunk => hash.update(chunk))
34 stream.on('end', () => resolve(hash.digest('hex').substring(0, length)))
35 })
36}
37
38module.exports.injectHash = (filename, hash) => {
39 let parts = filename.split('.')
40 if (parts.length < 2) return filename
41 parts[parts.length - 2] += '-' + hash
42 return parts.join('.')
43}
44
45module.exports.resolvePath = (referrer, rel) => {
46 // if (rel.startsWith('/')) {
47 // return state.config.srcRoot + rel
48 // } else {
49 return path.relative('.' , path.resolve(path.dirname(referrer), rel.split('?')[0])).replace(/\\/g, '/')
50 // }
51}
52
53module.exports.log = (...args) => {
54 const colorKeys = Object.keys(COLORS)
55 const colored = []
56 let argsStr = args.join('___')
57 colorKeys.forEach(clr => argsStr = argsStr.replace(new RegExp(`_${clr}_`, 'g'), COLORS[clr]))
58 const time = new Date().toISOString().split('T').pop()
59 console.log(`${COLORS.YELLOW}${time}${COLORS.RESET} : `, ...argsStr.split('___'), COLORS.RESET)
60}
61
62
63module.exports.error = function error(...args) {
64 module.exports.log('_RED_', ...args)
65}
\No newline at end of file