2015-01-30 01:10:49 +00:00
|
|
|
/**
|
2015-03-23 22:07:33 +00:00
|
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD-style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
2015-01-30 01:10:49 +00:00
|
|
|
*
|
|
|
|
* Note: This is a fork of the fb-specific transform.js
|
|
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var jstransform = require('jstransform').transform;
|
|
|
|
|
|
|
|
var reactVisitors =
|
|
|
|
require('react-tools/vendor/fbtransform/visitors').getAllVisitors();
|
|
|
|
var staticTypeSyntax =
|
|
|
|
require('jstransform/visitors/type-syntax').visitorList;
|
2015-05-15 22:11:49 +00:00
|
|
|
var trailingCommaVisitors =
|
|
|
|
require('jstransform/visitors/es7-trailing-comma-visitors.js').visitorList;
|
|
|
|
|
2015-01-30 01:10:49 +00:00
|
|
|
// Note that reactVisitors now handles ES6 classes, rest parameters, arrow
|
|
|
|
// functions, template strings, and object short notation.
|
2015-05-15 22:11:49 +00:00
|
|
|
var visitorList = reactVisitors.concat(trailingCommaVisitors);
|
2015-01-30 01:10:49 +00:00
|
|
|
|
2015-03-02 19:36:55 +00:00
|
|
|
function transform(srcTxt, filename) {
|
2015-02-25 17:54:45 +00:00
|
|
|
var options = {
|
|
|
|
es3: true,
|
2015-03-02 19:36:55 +00:00
|
|
|
sourceType: 'nonStrictModule',
|
|
|
|
filename: filename,
|
2015-02-25 17:54:45 +00:00
|
|
|
};
|
2015-01-30 01:10:49 +00:00
|
|
|
|
|
|
|
// These tranforms mostly just erase type annotations and static typing
|
|
|
|
// related statements, but they were conflicting with other tranforms.
|
|
|
|
// Running them first solves that problem
|
|
|
|
var staticTypeSyntaxResult = jstransform(
|
|
|
|
staticTypeSyntax,
|
2015-02-25 17:54:45 +00:00
|
|
|
srcTxt,
|
|
|
|
options
|
2015-01-30 01:10:49 +00:00
|
|
|
);
|
|
|
|
|
2015-02-25 17:54:45 +00:00
|
|
|
return jstransform(
|
|
|
|
visitorList,
|
|
|
|
staticTypeSyntaxResult.code,
|
|
|
|
options
|
|
|
|
);
|
2015-01-30 01:10:49 +00:00
|
|
|
}
|
|
|
|
|
2015-02-19 01:43:36 +00:00
|
|
|
module.exports = function(data, callback) {
|
|
|
|
var result;
|
|
|
|
try {
|
|
|
|
result = transform(
|
2015-03-02 19:36:55 +00:00
|
|
|
data.sourceCode,
|
|
|
|
data.filename
|
2015-02-19 01:43:36 +00:00
|
|
|
);
|
|
|
|
} 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;
|