UNPKG

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
'use strict'; 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)); }); };