59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const fs = require('fs');
|
||
|
const path = require('path');
|
||
|
const algoliasearch = require('algoliasearch');
|
||
|
const slugify = require('transliteration').slugify;
|
||
|
const key = require('./algolia-key');
|
||
|
|
||
|
const client = algoliasearch('4C63BTGP6S', key);
|
||
|
const langs = {
|
||
|
'zh-CN': 'element-zh',
|
||
|
'en-US': 'element-en',
|
||
|
'es': 'element-es',
|
||
|
'fr-FR': 'element-fr'
|
||
|
};
|
||
|
|
||
|
['zh-CN', 'en-US', 'es', 'fr-FR'].forEach(lang => {
|
||
|
const indexName = langs[lang];
|
||
|
const index = client.initIndex(indexName);
|
||
|
index.clearIndex(err => {
|
||
|
if (err) return;
|
||
|
fs.readdir(path.resolve(__dirname, `../../examples/docs/${ lang }`), (err, files) => {
|
||
|
if (err) return;
|
||
|
let indices = [];
|
||
|
files.forEach(file => {
|
||
|
const component = file.replace('.md', '');
|
||
|
const content = fs.readFileSync(path.resolve(__dirname, `../../examples/docs/${ lang }/${ 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;
|
||
|
});
|
||
|
|
||
|
indices = indices.concat(matches.map(match => {
|
||
|
const isComponent = match[0].indexOf('###') < 0;
|
||
|
const title = match[0].replace(/#{2,4}/, '').trim();
|
||
|
const index = { component, title };
|
||
|
index.ranking = isComponent ? 2 : 1;
|
||
|
index.anchor = slugify(title);
|
||
|
index.content = (match[1] || title).replace(/<[^>]+>/g, '');
|
||
|
return index;
|
||
|
}));
|
||
|
});
|
||
|
|
||
|
index.addObjects(indices, (err, res) => {
|
||
|
console.log(err, res);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|