aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vuepress/lib/prepare/util.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vuepress/lib/prepare/util.js')
-rw-r--r--node_modules/vuepress/lib/prepare/util.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/node_modules/vuepress/lib/prepare/util.js b/node_modules/vuepress/lib/prepare/util.js
new file mode 100644
index 00000000..efa96cc9
--- /dev/null
+++ b/node_modules/vuepress/lib/prepare/util.js
@@ -0,0 +1,80 @@
+const path = require('path')
+const spawn = require('cross-spawn')
+const fs = require('fs-extra')
+const globby = require('globby')
+
+const tempPath = path.resolve(__dirname, '../app/.temp')
+fs.ensureDirSync(tempPath)
+
+const tempCache = new Map()
+exports.writeTemp = async function (file, content) {
+ // cache write to avoid hitting the dist if it didn't change
+ const cached = tempCache.get(file)
+ if (cached !== content) {
+ await fs.writeFile(path.join(tempPath, file), content)
+ tempCache.set(file, content)
+ }
+}
+
+exports.writeEnhanceTemp = async function (destName, srcPath) {
+ await exports.writeTemp(
+ destName,
+ fs.existsSync(srcPath)
+ ? `export { default } from ${JSON.stringify(srcPath)}`
+ : `export default function () {}`
+ )
+}
+
+const indexRE = /(^|.*\/)(index|readme)\.md$/i
+const extRE = /\.(vue|md)$/
+
+exports.fileToPath = function (file) {
+ if (exports.isIndexFile(file)) {
+ // README.md -> /
+ // foo/README.md -> /foo/
+ return file.replace(indexRE, '/$1')
+ } else {
+ // foo.md -> /foo.html
+ // foo/bar.md -> /foo/bar.html
+ return `/${file.replace(extRE, '').replace(/\\/g, '/')}.html`
+ }
+}
+
+exports.fileToComponentName = function (file) {
+ let normalizedName = file
+ .replace(/\/|\\/g, '-')
+ .replace(extRE, '')
+ if (exports.isIndexFile(file)) {
+ normalizedName = normalizedName.replace(/readme$/i, 'index')
+ }
+ const pagePrefix = /\.md$/.test(file) ? `page-` : ``
+ return `${pagePrefix}${normalizedName}`
+}
+
+exports.isIndexFile = function (file) {
+ return indexRE.test(file)
+}
+
+exports.resolveComponents = async function (sourceDir) {
+ const componentDir = path.resolve(sourceDir, '.vuepress/components')
+ if (!fs.existsSync(componentDir)) {
+ return
+ }
+ return exports.sort(await globby(['**/*.vue'], { cwd: componentDir }))
+}
+
+exports.sort = function (arr) {
+ return arr.sort((a, b) => {
+ if (a < b) return -1
+ if (a > b) return 1
+ return 0
+ })
+}
+
+exports.encodePath = function (userpath) {
+ return userpath.split('/').map(item => encodeURIComponent(item)).join('/')
+}
+
+exports.getGitLastUpdatedTimeStamp = function (filepath) {
+ return parseInt(spawn.sync('git', ['log', '-1', '--format=%ct', filepath]).stdout.toString('utf-8')) * 1000
+}