@@ -114,13 +114,13 @@ function read(path, options, cb) {
114114
115115function readPartials ( path , options , cb ) {
116116 if ( ! options . partials ) return cb ( ) ;
117- var partials = options . partials ;
118- var keys = Object . keys ( partials ) ;
117+ var keys = Object . keys ( options . partials ) ;
118+ var partials = { } ;
119119
120120 function next ( index ) {
121- if ( index === keys . length ) return cb ( null ) ;
121+ if ( index === keys . length ) return cb ( null , partials ) ;
122122 var key = keys [ index ] ;
123- var partialPath = partials [ key ] ;
123+ var partialPath = options . partials [ key ] ;
124124
125125 if ( partialPath === undefined || partialPath === null || partialPath === false ) {
126126 return next ( ++ index ) ;
@@ -139,7 +139,7 @@ function readPartials(path, options, cb) {
139139
140140 read ( file , options , function ( err , str ) {
141141 if ( err ) return cb ( err ) ;
142- options . partials [ key ] = str ;
142+ partials [ key ] = str ;
143143 next ( ++ index ) ;
144144 } ) ;
145145 }
@@ -171,14 +171,17 @@ function fromStringRenderer(name) {
171171 options . filename = path ;
172172
173173 return promisify ( cb , function ( cb ) {
174- readPartials ( path , options , function ( err ) {
174+ readPartials ( path , options , function ( err , partials ) {
175+ var extend = ( requires . extend || ( requires . extend = require ( 'util' ) . _extend ) ) ;
176+ var opts = extend ( { } , options ) ;
177+ opts . partials = partials ;
175178 if ( err ) return cb ( err ) ;
176- if ( cache ( options ) ) {
177- exports [ name ] . render ( '' , options , cb ) ;
179+ if ( cache ( opts ) ) {
180+ exports [ name ] . render ( '' , opts , cb ) ;
178181 } else {
179- read ( path , options , function ( err , str ) {
182+ read ( path , opts , function ( err , str ) {
180183 if ( err ) return cb ( err ) ;
181- exports [ name ] . render ( str , options , cb ) ;
184+ exports [ name ] . render ( str , opts , cb ) ;
182185 } ) ;
183186 }
184187 } ) ;
@@ -894,9 +897,11 @@ exports.underscore.render = function(str, options, cb) {
894897 return promisify ( cb , function ( cb ) {
895898 var engine = requires . underscore || ( requires . underscore = require ( 'underscore' ) ) ;
896899 try {
900+ const partials = { } ;
897901 for ( var partial in options . partials ) {
898- options . partials [ partial ] = engine . template ( options . partials [ partial ] ) ;
902+ partials [ partial ] = engine . template ( options . partials [ partial ] ) ;
899903 }
904+ options . partials = partials ;
900905 var tmpl = cache ( options ) || cache ( options , engine . template ( str , null , options ) ) ;
901906 cb ( null , tmpl ( options ) . replace ( / \n $ / , '' ) ) ;
902907 } catch ( err ) {
0 commit comments