diff --git a/lib/consolidate.js b/lib/consolidate.js index 0b8d60b..a198484 100644 --- a/lib/consolidate.js +++ b/lib/consolidate.js @@ -114,13 +114,13 @@ function read(path, options, cb) { function readPartials(path, options, cb) { if (!options.partials) return cb(); - var partials = options.partials; - var keys = Object.keys(partials); + var keys = Object.keys(options.partials); + var partials = {}; function next(index) { - if (index === keys.length) return cb(null); + if (index === keys.length) return cb(null, partials); var key = keys[index]; - var partialPath = partials[key]; + var partialPath = options.partials[key]; if (partialPath === undefined || partialPath === null || partialPath === false) { return next(++index); @@ -139,7 +139,7 @@ function readPartials(path, options, cb) { read(file, options, function(err, str) { if (err) return cb(err); - options.partials[key] = str; + partials[key] = str; next(++index); }); } @@ -171,14 +171,17 @@ function fromStringRenderer(name) { options.filename = path; return promisify(cb, function(cb) { - readPartials(path, options, function(err) { + readPartials(path, options, function(err, partials) { + var extend = (requires.extend || (requires.extend = require('util')._extend)); + var opts = extend({}, options); + opts.partials = partials; if (err) return cb(err); - if (cache(options)) { - exports[name].render('', options, cb); + if (cache(opts)) { + exports[name].render('', opts, cb); } else { - read(path, options, function(err, str) { + read(path, opts, function(err, str) { if (err) return cb(err); - exports[name].render(str, options, cb); + exports[name].render(str, opts, cb); }); } }); @@ -894,9 +897,11 @@ exports.underscore.render = function(str, options, cb) { return promisify(cb, function(cb) { var engine = requires.underscore || (requires.underscore = require('underscore')); try { + const partials = {}; for (var partial in options.partials) { - options.partials[partial] = engine.template(options.partials[partial]); + partials[partial] = engine.template(options.partials[partial]); } + options.partials = partials; var tmpl = cache(options) || cache(options, engine.template(str, null, options)); cb(null, tmpl(options).replace(/\n$/, '')); } catch (err) {