mirror of
https://github.com/vuejs/awesome-vue.git
synced 2025-07-31 21:59:54 -04:00
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
import fs from 'fs'
|
|
import path from 'path'
|
|
import yaml from 'js-yaml'
|
|
import somebody from 'somebody'
|
|
import chalk from 'chalk'
|
|
import marked from 'marked'
|
|
|
|
const opts = {
|
|
root: `${process.cwd()}/awesomeness`,
|
|
output: `${process.cwd()}/app/site/dist/data.js`
|
|
}
|
|
|
|
const json = JSON.stringify(parseDir(opts.root).children)
|
|
fs.writeFile(opts.output, `window.data = ${json};`, {}, err => {
|
|
if (err) {
|
|
console.log(chalk.red(err))
|
|
return
|
|
}
|
|
|
|
console.log(chalk.green(`Data generated at ${opts.output}.`))
|
|
})
|
|
|
|
function parseDir(filename) {
|
|
if (filename[0] === '.') {
|
|
return
|
|
}
|
|
|
|
const stats = fs.lstatSync(filename)
|
|
const info = {
|
|
name: path.basename(filename)
|
|
}
|
|
|
|
if (stats.isDirectory()) {
|
|
info.type = 'group'
|
|
info.children = fs.readdirSync(filename).map(child => {
|
|
return parseDir(`${filename}/${child}`)
|
|
})
|
|
|
|
// An ugly hardcode here to make sure forward slashes are treated properly
|
|
info.name = info.name.replace(/:/g, '/')
|
|
|
|
return info
|
|
}
|
|
|
|
if (stats.isFile() && path.extname(filename) === '.md') {
|
|
info.type = 'item'
|
|
info.content = yaml.safeLoad(fs.readFileSync(filename, 'utf8'))
|
|
if (info.content.author) {
|
|
info.content.author = somebody.parse(info.content.author)
|
|
}
|
|
|
|
if (info.content.description) {
|
|
info.content.description = marked(info.content.description)
|
|
}
|
|
}
|
|
|
|
return info
|
|
}
|