diff --git a/lib/builtins/map.js b/lib/builtins/map.js index d652c40..d95da21 100644 --- a/lib/builtins/map.js +++ b/lib/builtins/map.js @@ -60,23 +60,26 @@ function map(inputdir, outputdir, options) { // Otherwise, we queue up a transformation return queue.add(function (fulfil, reject) { - return sander.readFile(src).then(String).then(function (data) { + // Create context object - this will be passed to transformers + var context = { + log: _this.log, + env: config['default'].env, + src: src, dest: dest, filename: filename + }; + + var transformOptions = assign['default']({}, options.fn.defaults, options.userOptions); + + delete transformOptions.accept; + delete transformOptions.ext; + + return sander.readFile(src).then(function (buffer) { + return buffer.toString(transformOptions.sourceEncoding); + }).then(function (data) { var result, code, map, mappath; if (_this.aborted) return; try { - // Create context object - this will be passed to transformers - var context = { - log: _this.log, - env: config['default'].env, - src: src, dest: dest, filename: filename - }; - - var transformOptions = assign['default']({}, options.fn.defaults, options.userOptions); - - delete transformOptions.accept; - delete transformOptions.ext; result = options.fn.call(context, data, transformOptions); } catch (e) { var err = createTransformError(e, src, filename, _this.node); diff --git a/src/builtins/map.js b/src/builtins/map.js index 5798efc..8ce00ee 100644 --- a/src/builtins/map.js +++ b/src/builtins/map.js @@ -53,23 +53,24 @@ export default function map ( inputdir, outputdir, options ) { // Otherwise, we queue up a transformation return queue.add( ( fulfil, reject ) => { - return readFile( src ).then( String ).then( data => { + // Create context object - this will be passed to transformers + let context = { + log: this.log, + env: config.env, + src, dest, filename + }; + + let transformOptions = assign( {}, options.fn.defaults, options.userOptions ); + + delete transformOptions.accept; + delete transformOptions.ext; + + return readFile( src ).then( buffer => buffer.toString( transformOptions.sourceEncoding ) ).then( data => { var result, code, map, mappath; if ( this.aborted ) return; try { - // Create context object - this will be passed to transformers - let context = { - log: this.log, - env: config.env, - src, dest, filename - }; - - let transformOptions = assign( {}, options.fn.defaults, options.userOptions ); - - delete transformOptions.accept; - delete transformOptions.ext; result = options.fn.call( context, data, transformOptions ); } catch ( e ) { let err = createTransformError( e, src, filename, this.node ); diff --git a/test/scenarios.js b/test/scenarios.js index 26fe49a..b9b9d9f 100644 --- a/test/scenarios.js +++ b/test/scenarios.js @@ -443,6 +443,35 @@ module.exports = function () { }); }); }); + + it( 'should use the specified encoding when reading files', function () { + var source = gobble( 'tmp/foo' ), count = 0, foundBar = false; + + function plugin ( input, options ) { + count++; + + if(this.filename === 'bar.md') { + foundBar = true; + + assert.equal( + new Buffer( input, 'base64' ).toString('utf8').trim(), + 'bar: this is some text' + ); + } + + return input.toString( 'base64' ); + } + plugin.defaults = {sourceEncoding: 'base64'}; + + task = source.transform( plugin ).build({ + dest: 'tmp/output' + }); + + return task.then( function () { + assert.equal( count, 3 ); + assert( foundBar ); + }); + }); });