diff --git a/jestSupport/scriptPreprocess.js b/jestSupport/scriptPreprocess.js index 02d3f634146..2764b35bd68 100644 --- a/jestSupport/scriptPreprocess.js +++ b/jestSupport/scriptPreprocess.js @@ -2,8 +2,8 @@ var transformer = require('../packager/transformer.js'); -function transformSource(src) { - return transformer.transform(null, src).code; +function transformSource(src, filename) { + return transformer.transform(src, filename).code; } module.exports = { @@ -15,7 +15,7 @@ module.exports = { } try { - return transformSource(src); + return transformSource(src, fileName); } catch(e) { throw new Error('\nError transforming file:\n js/' + (fileName.split('/js/')[1] || fileName) + ':' + e.lineNumber + ': \'' + diff --git a/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js b/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js index cdba0b8bd56..36d81d8fa2d 100644 --- a/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js +++ b/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js @@ -35,7 +35,7 @@ describe('Transformer', function() { callback(null, 'content'); }); - return new Transformer(OPTIONS).loadFileAndTransform([], 'file', {}) + return new Transformer(OPTIONS).loadFileAndTransform('file') .then(function(data) { expect(data).toEqual({ code: 'transformed', @@ -58,7 +58,7 @@ describe('Transformer', function() { callback(null, {error: esprimaError}); }); - return new Transformer(OPTIONS).loadFileAndTransform([], 'foo-file.js', {}) + return new Transformer(OPTIONS).loadFileAndTransform('foo-file.js') .catch(function(error) { expect(error.type).toEqual('TransformError'); expect(error.snippet).toEqual([ diff --git a/packager/react-packager/src/JSTransformer/index.js b/packager/react-packager/src/JSTransformer/index.js index e3e713eefae..87cb6e1a373 100644 --- a/packager/react-packager/src/JSTransformer/index.js +++ b/packager/react-packager/src/JSTransformer/index.js @@ -78,11 +78,7 @@ Transformer.prototype.invalidateFile = function(filePath) { this._cache.invalidate(filePath); }; -Transformer.prototype.loadFileAndTransform = function( - transformSets, - filePath, - options -) { +Transformer.prototype.loadFileAndTransform = function(filePath) { if (this._failedToStart) { return this._failedToStart; } @@ -92,15 +88,14 @@ Transformer.prototype.loadFileAndTransform = function( return readFile(filePath) .then(function(buffer) { var sourceCode = buffer.toString(); - var opts = _.extend({}, options, {filename: filePath}); + return q.nfbind(workers)({ - transformSets: transformSets, sourceCode: sourceCode, - options: opts, + filename: filePath, }).then( function(res) { if (res.error) { - throw formatEsprimaError(res.error, filePath, sourceCode); + throw formatError(res.error, filePath, sourceCode); } return { @@ -117,11 +112,26 @@ Transformer.prototype.loadFileAndTransform = function( function TransformError() {} util.inherits(TransformError, SyntaxError); -function formatEsprimaError(err, filename, source) { - if (!(err.lineNumber && err.column)) { - return err; +function formatError(err, filename, source) { + if (err.lineNumber && err.column) { + return formatEsprimaError(err, filename, source); + } else { + return formatGenericError(err, filename, source); } +} +function formatGenericError(err, filename) { + var msg = 'TransformError: ' + filename + ': ' + err.message; + var error = new TransformError(); + var stack = err.stack.split('\n').slice(0, -1); + stack.push(msg); + error.stack = stack.join('\n'); + error.message = msg; + error.type = 'TransformError'; + return error; +} + +function formatEsprimaError(err, filename, source) { var stack = err.stack.split('\n'); stack.shift(); diff --git a/packager/react-packager/src/Packager/__tests__/Packager-test.js b/packager/react-packager/src/Packager/__tests__/Packager-test.js index 21af12ca82b..2e43e91a9e5 100644 --- a/packager/react-packager/src/Packager/__tests__/Packager-test.js +++ b/packager/react-packager/src/Packager/__tests__/Packager-test.js @@ -49,7 +49,7 @@ describe('Packager', function() { }); require('../../JSTransformer').prototype.loadFileAndTransform - .mockImpl(function(tsets, path) { + .mockImpl(function(path) { return q({ code: 'transformed ' + path, sourceCode: 'source ' + path, diff --git a/packager/react-packager/src/Packager/index.js b/packager/react-packager/src/Packager/index.js index 42295acc829..123a3913391 100644 --- a/packager/react-packager/src/Packager/index.js +++ b/packager/react-packager/src/Packager/index.js @@ -126,9 +126,7 @@ Packager.prototype.getDependencies = function(main) { Packager.prototype._transformModule = function(module) { var resolver = this._resolver; return this._transformer.loadFileAndTransform( - ['es6'], - path.resolve(module.path), - this._opts.transformer || {} + path.resolve(module.path) ).then(function(transformed) { return _.extend( {}, diff --git a/packager/transformer.js b/packager/transformer.js index ffcb80e2dc8..acb586d7f0f 100644 --- a/packager/transformer.js +++ b/packager/transformer.js @@ -16,10 +16,11 @@ var staticTypeSyntax = var visitorList = reactVisitors; -function transform(transformSets, srcTxt) { +function transform(srcTxt, filename) { var options = { es3: true, - sourceType: 'nonStrictModule' + sourceType: 'nonStrictModule', + filename: filename, }; // These tranforms mostly just erase type annotations and static typing @@ -42,8 +43,8 @@ module.exports = function(data, callback) { var result; try { result = transform( - data.transformSets, - data.sourceCode + data.sourceCode, + data.filename ); } catch (e) { return callback(null, {