From 6cbd5fb9415d328bcbea7695a2cc52997c8572b8 Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Wed, 18 Feb 2015 17:43:36 -0800 Subject: [PATCH] Updates from Sun Feb 15 - [react-packager][streamline oss] Injectable transformer | Amjad Masad --- packager.js | 5 +--- react-packager/src/JSTransformer/index.js | 23 +++++----------- react-packager/src/Server/index.js | 1 + .../transformer.js => transformer.js | 26 ++++++++++++++++++- 4 files changed, 33 insertions(+), 22 deletions(-) rename react-packager/src/JSTransformer/transformer.js => transformer.js (66%) diff --git a/packager.js b/packager.js index 58f93a58..fd0b14f7 100644 --- a/packager.js +++ b/packager.js @@ -84,10 +84,7 @@ function getAppMiddleware(options) { projectRoots: options.projectRoots, blacklistRE: blacklist(false), cacheVersion: '2', - polyfillModuleNames: [ - path.resolve(__dirname, 'polyfill/console.js'), - path.resolve(__dirname, 'polyfill/error-guard.js'), - ] + transformModulePath: require.resolve('./transformer.js'), }); } diff --git a/react-packager/src/JSTransformer/index.js b/react-packager/src/JSTransformer/index.js index b748c32e..ce7de143 100644 --- a/react-packager/src/JSTransformer/index.js +++ b/react-packager/src/JSTransformer/index.js @@ -8,9 +8,6 @@ var Cache = require('./Cache'); var _ = require('underscore'); var workerFarm = require('worker-farm'); -var workers = workerFarm(require.resolve('./worker')); -warmupWorkers(); - var readFile = q.nfbind(fs.readFile); module.exports = Transformer; @@ -18,10 +15,14 @@ Transformer.TransformError = TransformError; function Transformer(projectConfig) { this._cache = new Cache(projectConfig); + this._workers = workerFarm( + {autoStart: true}, + projectConfig.transformModulePath + ); } Transformer.prototype.kill = function() { - workerFarm.end(workers); + workerFarm.end(this._workers); return this._cache.end(); }; @@ -36,6 +37,7 @@ Transformer.prototype.loadFileAndTransform = function( filePath, options ) { + var workers = this._workers; return this._cache.get(filePath, function() { return readFile(filePath) .then(function(buffer) { @@ -62,19 +64,6 @@ Transformer.prototype.loadFileAndTransform = function( }); }; -// worker-farm module starts workers lazily. But we want them to take time -// to initialize so we send a dummy request. -// see https://github.com/rvagg/node-worker-farm/issues/23 -function warmupWorkers() { - os.cpus().forEach(function() { - workers({ - transformSets: ['es6'], - sourceCode: '\n', - options: {} - }, function() {}); - }); -} - function TransformError() {} TransformError.__proto__ = SyntaxError.prototype; diff --git a/react-packager/src/Server/index.js b/react-packager/src/Server/index.js index e71572ed..5545b349 100644 --- a/react-packager/src/Server/index.js +++ b/react-packager/src/Server/index.js @@ -18,6 +18,7 @@ function Server(options) { cacheVersion: options.cacheVersion, resetCache: options.resetCache, dev: options.dev, + transformModulePath: options.transformModulePath }); this._fileWatcher = new FileWatcher(options.projectRoots); diff --git a/react-packager/src/JSTransformer/transformer.js b/transformer.js similarity index 66% rename from react-packager/src/JSTransformer/transformer.js rename to transformer.js index 39e409b3..df5e7143 100644 --- a/react-packager/src/JSTransformer/transformer.js +++ b/transformer.js @@ -30,4 +30,28 @@ function transform(transformSets, srcTxt, options) { return jstransform(visitorList, staticTypeSyntaxResult.code); } -exports.transform = transform; +module.exports = function(data, callback) { + var result; + try { + result = transform( + data.transformSets, + data.sourceCode, + data.options + ); + } catch (e) { + return callback(null, { + error: { + lineNumber: e.lineNumber, + column: e.column, + message: e.message, + stack: e.stack, + description: e.description + } + }); + } + + callback(null, result); +}; + +// export for use in jest +module.exports.transform = transform;