52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
const fs = require('fs').promises;
|
|
const {promisify} = require('util');
|
|
const frontMatterParser = require('parser-front-matter');
|
|
|
|
const parse = promisify(frontMatterParser.parse.bind(frontMatterParser));
|
|
|
|
async function loadPostsWithFrontMatter(postsDirectoryPath) {
|
|
const postNames = await fs.readdir(postsDirectoryPath);
|
|
const posts = await Promise.all(
|
|
postNames.map(async fileName => {
|
|
const fileContent = await fs.readFile(
|
|
`${postsDirectoryPath}/${fileName}`,
|
|
'utf8'
|
|
);
|
|
const {content, data} = await parse(fileContent);
|
|
return {
|
|
content: content.slice(0, 3000),
|
|
...data
|
|
};
|
|
})
|
|
);
|
|
return posts;
|
|
}
|
|
|
|
const lunrjs = require('lunr');
|
|
|
|
function makeIndex(posts) {
|
|
return lunrjs(function() {
|
|
this.ref('title');
|
|
this.field('title');
|
|
this.field('content');
|
|
this.field('tags');
|
|
posts.forEach(p => {
|
|
this.add(p);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function run() {
|
|
const posts = await loadPostsWithFrontMatter(`${__dirname}/content/post`);
|
|
const fbposts = await loadPostsWithFrontMatter(`${__dirname}/content/fb`);
|
|
const leren = await loadPostsWithFrontMatter(`${__dirname}/content/leren`);
|
|
const index = makeIndex(posts.concat(leren).concat(fbposts));
|
|
console.log(JSON.stringify(index));
|
|
}
|
|
|
|
run()
|
|
.then(() => process.exit(0))
|
|
.catch(error => {
|
|
console.error(error.stack);
|
|
process.exit(1);
|
|
}); |