aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vuepress/lib/prepare/loadConfig.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vuepress/lib/prepare/loadConfig.js')
-rw-r--r--node_modules/vuepress/lib/prepare/loadConfig.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/node_modules/vuepress/lib/prepare/loadConfig.js b/node_modules/vuepress/lib/prepare/loadConfig.js
new file mode 100644
index 00000000..aa913ba0
--- /dev/null
+++ b/node_modules/vuepress/lib/prepare/loadConfig.js
@@ -0,0 +1,56 @@
+const fs = require('fs-extra')
+const path = require('path')
+const yamlParser = require('js-yaml')
+const tomlParser = require('toml')
+
+module.exports = function loadConfig (vuepressDir, bustCache = true) {
+ const configPath = path.resolve(vuepressDir, 'config.js')
+ const configYmlPath = path.resolve(vuepressDir, 'config.yml')
+ const configTomlPath = path.resolve(vuepressDir, 'config.toml')
+
+ if (bustCache) {
+ delete require.cache[configPath]
+ }
+
+ // resolve siteConfig
+ let siteConfig = {}
+ if (fs.existsSync(configYmlPath)) {
+ siteConfig = parseConfig(configYmlPath)
+ } else if (fs.existsSync(configTomlPath)) {
+ siteConfig = parseConfig(configTomlPath)
+ } else if (fs.existsSync(configPath)) {
+ siteConfig = require(configPath)
+ }
+
+ return siteConfig
+}
+
+function parseConfig (file) {
+ const content = fs.readFileSync(file, 'utf-8')
+ const [extension] = /.\w+$/.exec(file)
+ let data
+
+ switch (extension) {
+ case '.yml':
+ case '.yaml':
+ data = yamlParser.safeLoad(content)
+ break
+
+ case '.toml':
+ data = tomlParser.parse(content)
+ // reformat to match config since TOML does not allow different data type
+ // https://github.com/toml-lang/toml#array
+ const format = []
+ if (data.head) {
+ Object.keys(data.head).forEach(meta => {
+ data.head[meta].forEach(values => {
+ format.push([meta, values])
+ })
+ })
+ }
+ data.head = format
+ break
+ }
+
+ return data || {}
+}