gray-matter-from-file
Version:
Extracts only the front matter from a file stream, and passes to the well known gray-matter library for parsing.
44 lines (38 loc) • 1.31 kB
JavaScript
import readline from 'readline';
import fs from 'fs';
import os from 'os';
import grayMatter from 'gray-matter';
const readFrontMatter = filepath => {
return new Promise((resolve, reject) => {
let frontMatter = '';
const fileReader = fs.createReadStream(filepath);
const lineReader = readline.createInterface({ input: fileReader });
lineReader.on('line', line => {
// first line / last line / mid lines
if (!frontMatter && line === '---') {
frontMatter = frontMatter + line;
} else if (frontMatter && line === '---') {
frontMatter = frontMatter + os.EOL + line;
lineReader.close();
} else {
frontMatter = frontMatter + os.EOL + line;
}
});
lineReader.on('close', () => {
resolve(frontMatter);
});
fileReader.on('error', error => {
reject(error);
});
});
};
export default filepath => {
return new Promise((resolve, reject) => {
readFrontMatter(filepath)
.then(frontMatter => {
const parsedFrontMatter = grayMatter(frontMatter);
resolve(parsedFrontMatter.data);
})
.catch(e => reject(e))
});
};