-
Notifications
You must be signed in to change notification settings - Fork 46.9k
/
preprocessor.js
77 lines (68 loc) · 2.29 KB
/
preprocessor.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
'use strict';
// React's test can only work in NODE_ENV=test because of how things
// are set up. So we might as well enforce it.
process.env.NODE_ENV = 'test';
var path = require('path');
var babel = require('babel-core');
var coffee = require('coffee-script');
var tsPreprocessor = require('./ts-preprocessor');
// This assumes the module map has been built. This might not be safe.
// We should consider consuming this from a built fbjs module from npm.
var moduleMap = require('fbjs/module-map');
var babelPluginModules = require('fbjs-scripts/babel-6/rewrite-modules');
var createCacheKeyFunction = require('fbjs-scripts/jest/createCacheKeyFunction');
// Use require.resolve to be resilient to file moves, npm updates, etc
var pathToBabel = path.join(require.resolve('babel-core'), '..', 'package.json');
var pathToModuleMap = require.resolve('fbjs/module-map');
var pathToBabelPluginDevWithCode = require.resolve('../error-codes/dev-expression-with-codes');
var pathToBabelPluginModules = require.resolve('fbjs-scripts/babel-6/rewrite-modules');
var pathToBabelrc = path.join(__dirname, '..', '..', '.babelrc');
var pathToErrorCodes = require.resolve('../error-codes/codes.json');
// TODO: make sure this stays in sync with gulpfile
var babelOptions = {
plugins: [
pathToBabelPluginDevWithCode, // this pass has to run before `rewrite-modules`
[babelPluginModules, {
map: Object.assign(
{},
moduleMap,
{
'object-assign': 'object-assign',
}
),
}],
],
retainLines: true,
};
module.exports = {
process: function(src, filePath) {
if (filePath.match(/\.coffee$/)) {
return coffee.compile(src, {'bare': true});
}
if (filePath.match(/\.ts$/) && !filePath.match(/\.d\.ts$/)) {
return tsPreprocessor.compile(src, filePath);
}
if (
!filePath.match(/\/node_modules\//) &&
!filePath.match(/\/third_party\//)
) {
return babel.transform(
src,
Object.assign(
{filename: path.relative(process.cwd(), filePath)},
babelOptions
)
).code;
}
return src;
},
getCacheKey: createCacheKeyFunction([
__filename,
pathToBabel,
pathToBabelrc,
pathToModuleMap,
pathToBabelPluginDevWithCode,
pathToBabelPluginModules,
pathToErrorCodes,
]),
};