UNPKG

1.45 kBJavaScriptView Raw
1'use strict';
2
3var extend = require('extend-shallow');
4var typeOf = require('kind-of');
5var getEngine = require('./engine');
6var defaults = require('./defaults');
7
8module.exports = function(file, data, options) {
9 if (data == null && options == null) {
10 switch (typeOf(file)) {
11 case 'object':
12 data = file.data;
13 options = {};
14 break;
15 case 'string':
16 return file;
17 default: {
18 throw new TypeError('expected file to be a string or object');
19 }
20 }
21 }
22
23 var str = file.content;
24 var opts = defaults(options);
25 if (data == null) {
26 if (!opts.data) {
27 return file;
28 }
29 data = opts.data;
30 }
31
32 var language = file.language || opts.language;
33 var engine = getEngine(language, opts);
34 if (typeof engine.stringify !== 'function') {
35 throw new TypeError('expected "' + language + '.stringify" to be a function');
36 }
37
38 data = extend({}, file.data, data);
39 var open = opts.delimiters[0];
40 var close = opts.delimiters[1];
41 var matter = engine.stringify(data, options).trim();
42 var buf = '';
43
44 if (matter !== '{}') {
45 buf = newline(open) + newline(matter) + newline(close);
46 }
47
48 if (typeof file.excerpt === 'string' && file.excerpt !== '') {
49 if (str.indexOf(file.excerpt.trim()) === -1) {
50 buf += newline(file.excerpt) + newline(close);
51 }
52 }
53
54 return buf + newline(str);
55};
56
57function newline(str) {
58 return str.slice(-1) !== '\n' ? str + '\n' : str;
59}