1 | const path = require('path')
|
2 | const semver = require('semver')
|
3 | const fs = require('fs')
|
4 | const crypto = require('crypto')
|
5 | const { promisify } = require('util')
|
6 | const glob = require('glob')
|
7 |
|
8 | const { state } = require('./state')
|
9 | const { engines } = require('../package.json')
|
10 |
|
11 | const COLORS = { GREEN: '\x1b[32m', RED: '\x1b[31m', YELLOW: '\x1b[33m', DIM: '\x1b[2m', RESET: '\x1b[0m' }
|
12 |
|
13 |
|
14 | module.exports.readFileAsync = promisify(fs.readFile)
|
15 |
|
16 | module.exports.lstatAsync = promisify(fs.lstat)
|
17 |
|
18 | module.exports.globAsync = promisify(glob)
|
19 |
|
20 | module.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 |
|
27 | module.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 |
|
38 | module.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 |
|
45 | module.exports.resolvePath = (referrer, rel) => {
|
46 |
|
47 |
|
48 |
|
49 | return path.relative('.' , path.resolve(path.dirname(referrer), rel.split('?')[0])).replace(/\\/g, '/')
|
50 |
|
51 | }
|
52 |
|
53 | module.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 |
|
63 | module.exports.error = function error(...args) {
|
64 | module.exports.log('_RED_', ...args)
|
65 | } |
\ | No newline at end of file |