mirror of
https://github.com/zebrajr/react.git
synced 2025-12-07 12:20:38 +01:00
If a Scheduler profile runs without stopping, the event log will grow unbounded. Eventually it will run out of memory and the VM will throw an error. To prevent this from happening, let's automatically stop the profiler once the log exceeds a certain limit. We'll also print a warning with advice to call `stopLoggingProfilingEvents` explicitly.
97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
const path = require('path');
|
|
|
|
const babel = require('@babel/core');
|
|
const coffee = require('coffee-script');
|
|
|
|
const tsPreprocessor = require('./typescript/preprocessor');
|
|
const createCacheKeyFunction = require('fbjs-scripts/jest/createCacheKeyFunction');
|
|
|
|
const pathToBabel = path.join(
|
|
require.resolve('@babel/core'),
|
|
'../..',
|
|
'package.json'
|
|
);
|
|
const pathToBabelPluginDevWithCode = require.resolve(
|
|
'../error-codes/transform-error-messages'
|
|
);
|
|
const pathToBabelPluginWrapWarning = require.resolve(
|
|
'../babel/wrap-warning-with-env-check'
|
|
);
|
|
const pathToBabelPluginAsyncToGenerator = require.resolve(
|
|
'@babel/plugin-transform-async-to-generator'
|
|
);
|
|
const pathToTransformInfiniteLoops = require.resolve(
|
|
'../babel/transform-prevent-infinite-loops'
|
|
);
|
|
const pathToBabelrc = path.join(__dirname, '..', '..', 'babel.config.js');
|
|
const pathToErrorCodes = require.resolve('../error-codes/codes.json');
|
|
|
|
const babelOptions = {
|
|
plugins: [
|
|
// For Node environment only. For builds, Rollup takes care of ESM.
|
|
require.resolve('@babel/plugin-transform-modules-commonjs'),
|
|
|
|
pathToBabelPluginDevWithCode,
|
|
pathToBabelPluginWrapWarning,
|
|
|
|
// Keep stacks detailed in tests.
|
|
// Don't put this in .babelrc so that we don't embed filenames
|
|
// into ReactART builds that include JSX.
|
|
// TODO: I have not verified that this actually works.
|
|
require.resolve('@babel/plugin-transform-react-jsx-source'),
|
|
|
|
pathToTransformInfiniteLoops,
|
|
|
|
// This optimization is important for extremely performance-sensitive (e.g. React source).
|
|
// It's okay to disable it for tests.
|
|
[
|
|
require.resolve('@babel/plugin-transform-block-scoping'),
|
|
{throwIfClosureRequired: false},
|
|
],
|
|
],
|
|
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(/\/third_party\//)) {
|
|
// for test files, we also apply the async-await transform, but we want to
|
|
// make sure we don't accidentally apply that transform to product code.
|
|
const isTestFile = !!filePath.match(/\/__tests__\//);
|
|
return babel.transform(
|
|
src,
|
|
Object.assign(
|
|
{filename: path.relative(process.cwd(), filePath)},
|
|
babelOptions,
|
|
isTestFile
|
|
? {
|
|
plugins: [pathToBabelPluginAsyncToGenerator].concat(
|
|
babelOptions.plugins
|
|
),
|
|
}
|
|
: {}
|
|
)
|
|
);
|
|
}
|
|
return src;
|
|
},
|
|
|
|
getCacheKey: createCacheKeyFunction([
|
|
__filename,
|
|
pathToBabel,
|
|
pathToBabelrc,
|
|
pathToBabelPluginDevWithCode,
|
|
pathToBabelPluginWrapWarning,
|
|
pathToTransformInfiniteLoops,
|
|
pathToErrorCodes,
|
|
]),
|
|
};
|