element-plus/build/build-indices.ts
Sanxiaozhizi 6cc16bbd06
refactor: enhance type definition (#3062)
* chore: add vue-tsc for type check

* refactor(components): respect Vue's own style type

* refactor(components): improve props type

* chore(build): improve types

* fix(components): remove unnecessary props

* perf(components): use shallowRef

* fix(components): add missing property type for table

* refactor(components): improve time-picker types

* refactor(components): extract import type

* refactor(components): improve popper types

* refactor(components): upload list types

* fix(docs): fix type

* better type

* fix: remove index
2021-08-31 09:40:13 +08:00

82 lines
2.2 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-var-requires */
'use strict'
import fs from 'fs'
import algoliasearch from 'algoliasearch'
import { slugify } from 'transliteration'
import fg from 'fast-glob'
interface Index {
component: string
title: string
anchor: string
content: string
sort: number
path: string
}
const algoliaKey = process.env.ALGOLIA_KEY
const client = algoliasearch('7DCTSU0WBW', algoliaKey)
const langs = {
'zh-CN': 'element-zh',
'en-US': 'element-en',
es: 'element-es',
'fr-FR': 'element-fr',
jp: 'element-jp',
}
;['zh-CN', 'en-US', 'es', 'fr-FR', 'jp'].forEach(lang => {
const indexName = langs[lang]
const index = client.initIndex(indexName)
index.clearObjects().then(() => {
const files = fg.sync(`website/docs/${lang}/*.md`)
const indices: Index[][] = []
files.forEach(file => {
const regExp = new RegExp(`website\/docs\/${lang}\/(.*).md`)
const pathContent = file.match(regExp)
const path = pathContent[1]
const index = path.lastIndexOf('/')
const names = index !== -1 ? path.split('/') : []
const component = names.length ? names[names.length - 1] : path
const content = fs.readFileSync(file, 'utf8')
const matches = content
.replace(/:::[\s\S]*?:::/g, '')
.replace(/```[\s\S]*?```/g, '')
.match(/#{2,4}[^#]*/g)
.map(match =>
match
.replace(/\n+/g, '\n')
.split('\n')
.filter(part => !!part),
)
.map(match => {
const length = match.length
if (length > 2) {
const desc = match.slice(1, length).join('')
return [match[0], desc]
}
return match
})
let i = 0
indices.push(
matches.map(match => {
const title = match[0].replace(/#{2,4}/, '').trim()
const index: Index = {
component,
title,
anchor: slugify(title),
content: (match[1] || title).replace(/<[^>]+>/g, ''),
path: path,
sort: i++,
}
return index
}),
)
})
index.saveObjects(indices, {
autoGenerateObjectIDIfNotExist: true,
})
})
})