-
-
Notifications
You must be signed in to change notification settings - Fork 779
/
prepare.ts
58 lines (49 loc) · 1.82 KB
/
prepare.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
import { basename, dirname, parse } from 'path'
import fs from 'fs-extra'
import fg from 'fast-glob'
import YAML from 'js-yaml'
import { genArrayFromRaw, genObjectFromRaw } from 'knitwork'
import { objectMap } from '@antfu/utils'
const dereference = process.platform === 'win32' ? true : undefined
const { copyFile, copy, writeFileSync } = fs
await fs.ensureDir('guides/vendor/')
await copy('node_modules/shiki/', 'public/shiki/', {
dereference,
filter: src => src === 'node_modules/shiki/' || src.includes('languages') || src.includes('dist'),
})
await copy('node_modules/theme-vitesse/themes', 'public/shiki/themes', { dereference })
await copy('node_modules/theme-vitesse/themes', 'node_modules/shiki/themes', { overwrite: true, dereference })
await Promise.all([
copyFile('../README.md', 'guides/vendor/intro.md'),
...fg.sync('../packages/*/README.md')
.map(async (src) => {
const name = basename(dirname(src))
if (['unocss', 'scope'].includes(name) || name.startsWith('shared-'))
return
copyFile(src, `guides/vendor/${name}.md`)
}),
])
const code = genArrayFromRaw(
fg.sync('guides/**/*.{md,vue}')
.map((file) => {
const ext = parse(file).ext
const yml = `${file.slice(0, -ext.length)}.yml`
const data: any = fs.existsSync(yml)
? YAML.load(fs.readFileSync(yml, 'utf-8'))
: {}
return genObjectFromRaw({
...objectMap({
type: 'guide',
name: basename(file, ext),
title: basename(file, ext),
...data,
}, (k, v) => [k, JSON.stringify(v)]),
component: `() => import('../${file}')`,
})
}),
)
writeFileSync('data/guides.ts', `
import type { GuideItem } from '~/types'
export const guideIndex: GuideItem[] = ${code}
export const guideColors = guideIndex.find(i => i.name === 'colors')!
`, 'utf-8')