| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 'use strict';
- const typeOf = require('kind-of');
- const getEngine = require('./engine');
- const defaults = require('./defaults');
- module.exports = function(file, data, options) {
- if (data == null && options == null) {
- switch (typeOf(file)) {
- case 'object':
- data = file.data;
- options = {};
- break;
- case 'string':
- return file;
- default: {
- throw new TypeError('expected file to be a string or object');
- }
- }
- }
- const str = file.content;
- const opts = defaults(options);
- if (data == null) {
- if (!opts.data) return file;
- data = opts.data;
- }
- const language = file.language || opts.language;
- const engine = getEngine(language, opts);
- if (typeof engine.stringify !== 'function') {
- throw new TypeError('expected "' + language + '.stringify" to be a function');
- }
- data = Object.assign({}, file.data, data);
- const open = opts.delimiters[0];
- const close = opts.delimiters[1];
- const matter = engine.stringify(data, options).trim();
- let buf = '';
- if (matter !== '{}') {
- buf = newline(open) + newline(matter) + newline(close);
- }
- if (typeof file.excerpt === 'string' && file.excerpt !== '') {
- if (str.indexOf(file.excerpt.trim()) === -1) {
- buf += newline(file.excerpt) + newline(close);
- }
- }
- return buf + newline(str);
- };
- function newline(str) {
- return str.slice(-1) !== '\n' ? str + '\n' : str;
- }
|