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.
60 lines (45 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _readline = require('readline');
var _readline2 = _interopRequireDefault(_readline);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
var _grayMatter = require('gray-matter');
var _grayMatter2 = _interopRequireDefault(_grayMatter);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const readFrontMatter = filepath => {
return new Promise((resolve, reject) => {
let frontMatter = '';
const fileReader = _fs2.default.createReadStream(filepath);
const lineReader = _readline2.default.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 + _os2.default.EOL + line;
lineReader.close();
} else {
frontMatter = frontMatter + _os2.default.EOL + line;
}
});
lineReader.on('close', () => {
resolve(frontMatter);
});
fileReader.on('error', error => {
reject(error);
});
});
};
exports.default = filepath => {
return new Promise((resolve, reject) => {
readFrontMatter(filepath).then(frontMatter => {
const parsedFrontMatter = (0, _grayMatter2.default)(frontMatter);
resolve(parsedFrontMatter.data);
}).catch(e => reject(e));
});
};