-
Notifications
You must be signed in to change notification settings - Fork 0
/
annotate-post.js
49 lines (41 loc) · 1.08 KB
/
annotate-post.js
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
'use strict';
const fs = require('fs');
const dateParse = require('date-fns/parse');
const frontMatter = require('front-matter');
module.exports = annotatePost;
function annotatePost(post) {
return new Promise((resolve, reject) => {
fs.readFile(post.fullpath, 'utf8', (err, data) => {
if (!!err) {
return reject(err);
}
let content = frontMatterExtra(data);
return resolve({
file: post,
header: content.attributes,
body: content.body,
});
})
});
}
function frontMatterExtra(data) {
let content = frontMatter(data);
// parse date into something useable
try {
content.attributes.__date_utc =
content.attributes.date.valueOf();
}
catch (ex) {
console.error(`Unable to parse ${content.attributes.date} as a date`);
content.attributes.__date_utc = null;
}
// parse tags
if (typeof content.attributes.tags === 'string') {
content.attributes.__tags = content.attributes.tags
.split(',')
.map((tag) => {
return tag.trim().toLowerCase();
});
}
return content;
}