diff options
Diffstat (limited to 'node_modules/gray-matter/lib/stringify.js')
| -rw-r--r-- | node_modules/gray-matter/lib/stringify.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/node_modules/gray-matter/lib/stringify.js b/node_modules/gray-matter/lib/stringify.js new file mode 100644 index 0000000..b4c70a4 --- /dev/null +++ b/node_modules/gray-matter/lib/stringify.js @@ -0,0 +1,56 @@ +'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; +} |
