1
|
|
|
/** |
2
|
|
|
* The external dependencies. |
3
|
|
|
*/ |
4
|
|
|
const fs = require('fs'); |
5
|
|
|
const path = require('path'); |
6
|
|
|
const crypto = require('crypto'); |
7
|
|
|
|
8
|
|
|
/** |
9
|
|
|
* User config cache. |
10
|
|
|
*/ |
11
|
|
|
let userConfig = null; |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* API. |
15
|
|
|
*/ |
16
|
|
|
module.exports.themeRootPath = (basePath = '', destPath = '') => |
17
|
|
|
path.resolve(path.dirname(__dirname), '../../', basePath, destPath); |
18
|
|
|
|
19
|
|
|
module.exports.srcPath = (basePath = '', destPath = '') => |
20
|
|
|
path.resolve(path.dirname(__dirname), '../', basePath, destPath); |
21
|
|
|
|
22
|
|
|
module.exports.distPath = (basePath = '', destPath = '') => |
23
|
|
|
path.resolve(path.dirname(__dirname), '../../dist', basePath, destPath); |
24
|
|
|
|
25
|
|
|
module.exports.srcScriptsPath = destPath => exports.srcPath('scripts', destPath); |
26
|
|
|
|
27
|
|
|
module.exports.srcStylesPath = destPath => exports.srcPath('styles', destPath); |
28
|
|
|
|
29
|
|
|
module.exports.srcImagesPath = destPath => exports.srcPath('images', destPath); |
30
|
|
|
|
31
|
|
|
module.exports.srcFontsPath = destPath => exports.srcPath('fonts', destPath); |
32
|
|
|
|
33
|
|
|
module.exports.srcVendorPath = destPath => exports.srcPath('vendor', destPath); |
34
|
|
|
|
35
|
|
|
module.exports.distScriptsPath = destPath => exports.distPath('scripts', destPath); |
36
|
|
|
|
37
|
|
|
module.exports.distStylesPath = destPath => exports.distPath('styles', destPath); |
38
|
|
|
|
39
|
|
|
module.exports.distImagesPath = destPath => exports.distPath('images', destPath); |
40
|
|
|
|
41
|
|
|
module.exports.distFontsPath = destPath => exports.distPath('fonts', destPath); |
42
|
|
|
|
43
|
|
|
module.exports.tests = { |
44
|
|
|
scripts: /\.(js|jsx)$/, |
45
|
|
|
styles: /\.(css|scss)$/, |
46
|
|
|
images: /images[\\/].*\.(ico|jpg|jpeg|png|svg|gif)$/, |
47
|
|
|
fonts: /fonts[\\/].*\.(eot|svg|ttf|woff|woff2)$/, |
48
|
|
|
}; |
49
|
|
|
|
50
|
|
|
module.exports.detectEnv = () => { |
51
|
|
|
const env = process.env.NODE_ENV || 'development'; |
52
|
|
|
const isDev = env === 'development'; |
53
|
|
|
const isProduction = env === 'production'; |
54
|
|
|
|
55
|
|
|
return { |
56
|
|
|
env, |
57
|
|
|
isDev, |
58
|
|
|
isProduction, |
59
|
|
|
}; |
60
|
|
|
}; |
61
|
|
|
|
62
|
|
|
module.exports.getUserConfig = () => { |
63
|
|
|
const userConfigPath = path.join(process.cwd(), 'config.json'); |
64
|
|
|
|
65
|
|
|
if (userConfig !== null) { |
66
|
|
|
return userConfig; |
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
if (!fs.existsSync(userConfigPath)) { |
70
|
|
|
console.log('\x1B[31mCould not find your config.json file. Please make a copy of config.json.dist and adjust as needed.\x1B[0m'); |
|
|
|
|
71
|
|
|
process.exit(1); |
|
|
|
|
72
|
|
|
} |
73
|
|
|
|
74
|
|
|
try { |
75
|
|
|
userConfig = JSON.parse(fs.readFileSync(userConfigPath)); |
76
|
|
|
} catch (e) { |
77
|
|
|
console.log('\x1B[31mCould not parse your config.json file. Please make sure it is a valid JSON file.\x1B[0m'); |
78
|
|
|
process.exit(1); |
|
|
|
|
79
|
|
|
} |
80
|
|
|
|
81
|
|
|
return userConfig; |
82
|
|
|
}; |
83
|
|
|
|
84
|
|
|
module.exports.filehash = (file) => { |
85
|
|
|
const hash = crypto.createHash('sha1'); |
86
|
|
|
hash.update(fs.readFileSync(file)); |
87
|
|
|
return hash.digest('hex'); |
88
|
|
|
}; |
89
|
|
|
|