-
Notifications
You must be signed in to change notification settings - Fork 1
/
parse.ts
73 lines (57 loc) · 2.5 KB
/
parse.ts
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
const fs = require('fs')
const lineByLine = require('n-readlines')
const folders = ['icons', 'favicons', 'logos', 'spinners', 'misc']
let items = ''
for (let folder in folders) {
let content = JSON.parse(fs.readFileSync(`./src/lib/${folders[folder]}.json`, 'utf8'))
content.files.filter(component => !!component.file).forEach(component => {
const liner = new lineByLine(`./src/lib/${folders[folder]}/${component.file}`)
items += `export { default as ${component.file.replace(`.tsx`, ``)} } from './${folders[folder]}/${component.file.replace(`.tsx`, ``)}'\n`
let line
while (line = liner.next()) {
if (line.toString('utf8').trimStart().startsWith('name:')) {
const nameJSON = JSON.parse(
`{
${line.toString('utf8')
.replace(`name`, `"name"`)
.replace(/'/g, `"`)
.replace(`,`, ``)}
}`
)
content.files.forEach(item => {
if (item.file === component.file) item.name = nameJSON.name
})
}
if (line.toString('utf8').trimStart().startsWith('description:')) {
const descriptionJSON = JSON.parse(
`{
${line.toString('utf8')
.replace(`description`, `"description"`)
.replace(/'/g, `"`)
.replace(`,`, ``)}
}`
)
content.files.forEach(item => {
if (item.file === component.file) item.description = descriptionJSON.description
})
}
if (line.toString('utf8').trimStart().startsWith('tags:')) {
const tagsJSON = JSON.parse(
`{
${line.toString('utf8')
.replace(`tags`, `"tags"`)
.replace(`],`, `]`)
.replace(/Tag./g, `"`)
.replace(/,/g, `",`)
.replace(`]`, `"]`)}
}`
)
content.files.forEach(item => {
if (item.file === component.file) item.tags = tagsJSON.tags
})
}
}
})
fs.writeFileSync(`./src/lib/${folders[folder]}.json`, JSON.stringify(content, null, 2))
}
fs.writeFileSync(`./src/lib/index.ts`, items.toString())