'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; }