forked from vuetifyjs/vuetify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconverter.js
82 lines (67 loc) · 2.1 KB
/
converter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Utilities
const fs = require('fs')
const path = require('path')
const glob = require('glob')
const stringify = require('stringify-object')
const resolve = file => path.resolve(__dirname, file)
const snippetsUsed = new Set()
function genCode (value) {
const [lang, ...rest] = value.split('_')
const name = rest.join('_')
const snippet = resolve(`../packages/docs/src/snippets/${lang}/${name}.txt`)
// const src = fs.readFileSync(snippet, 'utf8')
if (snippetsUsed.has(snippet)) console.log(`Snippet "${value}" used multiple times`)
snippetsUsed.add(snippet)
// return `code(lang="${lang}")\n` + src.split('\n').map(s => (' | ' + s).trimEnd()).join('\n')
return `code(lang="${lang}" src="${name}")`
}
function parse (child) {
const {
lang,
type,
value,
} = child
switch (type) {
case 'alert': return `alert(value="${value}") ${lang}`
case 'heading': return `\nh2 ${lang}`
case 'markup': return genCode(value)
case 'text': return `| ${lang}`
}
let ret = (type === 'up-next' ? '\n' : '') + type
if (value) {
ret += '('
if (typeof value === 'string') {
ret += `value="${value}"`
} else if (typeof value === 'object') {
ret += `:value=\`${stringify(value, { indent: ' ' })}\``
}
ret += ')'
}
if (lang) ret += ` ${lang}`
return ret
}
function recurse (children = []) {
return children.reduce((acc, cur) => {
if (cur.children && cur.children.length) {
acc = [].concat(acc, recurse(cur.children))
} else {
acc.push(parse(cur))
}
return acc
}, [])
}
const loc = str => resolve(`../packages/docs/src/data/pages/${str}`)
const files = glob.sync(resolve(`../packages/docs/src/data/pages/**/*.json`))
for (const file of files) {
const path = file
.split('/pages/')
.pop()
.split('/')
.map(i => i.replace(/\.json/, ''))
.join('/')
const read = JSON.parse(fs.readFileSync(loc(`${path}.json`), 'utf8'))
const children = recurse([read]).join('\n').trim() + '\n'
fs.writeFileSync(loc(`${path}.pug`), children, 'utf8')
fs.unlinkSync(file)
}
// snippetsUsed.forEach(file => fs.unlinkSync(file))