assemble-utils
Version:
Utilities built for the Assemble project.
82 lines (64 loc) • 1.82 kB
JavaScript
/*
* Assemble
* https://github.com/assemble/
*
* Copyright (c) 2013 Upstage
* Licensed under the MIT license.
*/
(function(exports) {
var fs = require('fs'),
_ = require('lodash'),
yaml = require('js-yaml');
var yamlOptions = ['filename', 'strict', 'schema'];
var FrontMatter = function(options) {
return this.init(options);
};
FrontMatter.prototype.init = function(options) {
var defaults = {
fromFile: true
};
this.options = _.extend(defaults, options);
return this;
};
FrontMatter.prototype.extract = function(src) {
var data = {
originalContent: '',
content: '',
context: {}
};
if(this.options.fromFile) {
if(!fs.existsSync(src)) {
console.log('File: ' + src + ' not found.');
return false;
}
// read in file
data.originalContent = fs.readFileSync(src, 'utf8');
} else {
data.originalContent = src;
}
// find front matter
if(data.originalContent.indexOf('---') !== 0) {
data.content = data.originalContent;
return data;
}
// end of yaml
var eoy = data.originalContent.indexOf('---', 3);
var yamlText = '';
if(eoy === -1) {
yamlText = data.originalContent;
} else {
yamlText = data.originalContent.substring(0, eoy);
}
try {
data.context = _.extend(data.context, yaml.load(yamlText, _.pick(this.options, yamlOptions)));
} catch(e) {
log(e);
return false;
}
data.content = data.originalContent.substring(eoy+3);
return data;
};
exports.FrontMatter = function(options) {
return new FrontMatter(options);
};
}(typeof exports === 'object' && exports || this));