2021-08-24 16:52:44 +08:00
|
|
|
/* 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'
|
|
|
|
|
2021-08-31 09:40:13 +08:00
|
|
|
interface Index {
|
|
|
|
component: string
|
|
|
|
title: string
|
|
|
|
anchor: string
|
|
|
|
content: string
|
|
|
|
sort: number
|
|
|
|
path: string
|
|
|
|
}
|
|
|
|
|
2021-08-24 16:52:44 +08:00
|
|
|
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`)
|
2021-08-31 09:40:13 +08:00
|
|
|
const indices: Index[][] = []
|
2021-08-24 16:52:44 +08:00
|
|
|
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
|
2021-08-31 09:40:13 +08:00
|
|
|
indices.push(
|
2021-08-24 16:52:44 +08:00
|
|
|
matches.map(match => {
|
|
|
|
const title = match[0].replace(/#{2,4}/, '').trim()
|
2021-08-31 09:40:13 +08:00
|
|
|
const index: Index = {
|
|
|
|
component,
|
|
|
|
title,
|
|
|
|
anchor: slugify(title),
|
|
|
|
content: (match[1] || title).replace(/<[^>]+>/g, ''),
|
|
|
|
path: path,
|
|
|
|
sort: i++,
|
|
|
|
}
|
2021-08-24 16:52:44 +08:00
|
|
|
return index
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
})
|
|
|
|
|
|
|
|
index.saveObjects(indices, {
|
|
|
|
autoGenerateObjectIDIfNotExist: true,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|