mirror of
https://github.com/react/react-native.git
synced 2026-09-28 05:13:06 +08:00
Deprecate jest/preprocessor.js
Summary: Changelog: [General][Deprecated] Deprecate the use of `react-native/jest/preprocessor.js` by external projects The supported method of using Jest in React Native projects is using the [Jest preset](https://jestjs.io/docs/tutorial-react-native) shipped as part of the `react-native` package. Some projects are directly using `preprocessor.js` which is part of the testing setup for the React Native repo itself. In a future release of React Native, we will stop publishing this file to npm and require projects to switch to the supported preset (or a custom Jest config if necessary). Reviewed By: GijsWeterings Differential Revision: D34820086 fbshipit-source-id: 197c33726639e66c6916a244117252e6af11f2f6
This commit is contained in:
committed by
Facebook GitHub Bot
parent
5ea50fd549
commit
c1e9aa9a27
+1
-1
@@ -13,7 +13,7 @@ module.exports = {
|
||||
transform: {
|
||||
'^.+\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$':
|
||||
'<rootDir>/jest/assetFileTransformer.js',
|
||||
'.*': './jest/preprocessor.js',
|
||||
'.*': './jest/preprocessor_DO_NOT_USE.js',
|
||||
},
|
||||
setupFiles: ['./jest/setup.js'],
|
||||
timers: 'fake',
|
||||
|
||||
+23
-105
@@ -12,111 +12,29 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
const babelRegisterOnly = require('metro-babel-register');
|
||||
const createCacheKeyFunction =
|
||||
require('@jest/create-cache-key-function').default;
|
||||
// NOTE: Avoiding using a package like 'chalk' here, for simplicity
|
||||
const YELLOW = process.stderr.isTTY ? '\u001b[33m' : '';
|
||||
const BOLD = process.stderr.isTTY ? '\u001b[1m' : '';
|
||||
const RESET = process.stderr.isTTY ? '\u001b[0m' : '';
|
||||
const UNDERLINE = process.stderr.isTTY ? '\u001b[4m' : '';
|
||||
|
||||
const {transformSync: babelTransformSync} = require('@babel/core');
|
||||
const generate = require('@babel/generator').default;
|
||||
|
||||
const nodeFiles = new RegExp(
|
||||
[
|
||||
'/metro(?:-[^/]*)?/', // metro, metro-core, metro-source-map, metro-etc.
|
||||
].join('|'),
|
||||
console.warn(
|
||||
'\n' +
|
||||
YELLOW +
|
||||
BOLD +
|
||||
'react-native/jest/preprocessor.js' +
|
||||
RESET +
|
||||
YELLOW +
|
||||
' is deprecated and will be removed.\n' +
|
||||
'Use "preset": "react-native" in your Jest config instead.\n' +
|
||||
'See ' +
|
||||
UNDERLINE +
|
||||
'https://jestjs.io/docs/tutorial-react-native' +
|
||||
RESET +
|
||||
YELLOW +
|
||||
' for more setup instructions.' +
|
||||
RESET +
|
||||
'\n',
|
||||
);
|
||||
const nodeOptions = babelRegisterOnly.config([nodeFiles]);
|
||||
|
||||
babelRegisterOnly([]);
|
||||
|
||||
const transformer = require('metro-react-native-babel-transformer');
|
||||
module.exports = {
|
||||
process(src /*: string */, file /*: string */) /*: string */ {
|
||||
if (nodeFiles.test(file)) {
|
||||
// node specific transforms only
|
||||
return babelTransformSync(src, {
|
||||
filename: file,
|
||||
sourceType: 'script',
|
||||
...nodeOptions,
|
||||
ast: false,
|
||||
}).code;
|
||||
}
|
||||
|
||||
const {ast} = transformer.transform({
|
||||
filename: file,
|
||||
options: {
|
||||
ast: true, // needed for open source (?) https://github.com/facebook/react-native/commit/f8d6b97140cffe8d18b2558f94570c8d1b410d5c#r28647044
|
||||
dev: true,
|
||||
enableBabelRuntime: false,
|
||||
experimentalImportSupport: false,
|
||||
globalPrefix: '',
|
||||
hot: false,
|
||||
inlineRequires: true,
|
||||
minify: false,
|
||||
platform: '',
|
||||
projectRoot: '',
|
||||
publicPath: '/assets',
|
||||
retainLines: true,
|
||||
sourceType: 'unambiguous', // b7 required. detects module vs script mode
|
||||
},
|
||||
src,
|
||||
plugins: [
|
||||
[require('@babel/plugin-transform-block-scoping')],
|
||||
// the flow strip types plugin must go BEFORE class properties!
|
||||
// there'll be a test case that fails if you don't.
|
||||
[require('@babel/plugin-transform-flow-strip-types')],
|
||||
[
|
||||
require('@babel/plugin-proposal-class-properties'),
|
||||
// use `this.foo = bar` instead of `this.defineProperty('foo', ...)`
|
||||
{loose: true},
|
||||
],
|
||||
[require('@babel/plugin-transform-computed-properties')],
|
||||
[require('@babel/plugin-transform-destructuring')],
|
||||
[require('@babel/plugin-transform-function-name')],
|
||||
[require('@babel/plugin-transform-literals')],
|
||||
[require('@babel/plugin-transform-parameters')],
|
||||
[require('@babel/plugin-transform-shorthand-properties')],
|
||||
[require('@babel/plugin-transform-react-jsx')],
|
||||
[require('@babel/plugin-transform-regenerator')],
|
||||
[require('@babel/plugin-transform-sticky-regex')],
|
||||
[require('@babel/plugin-transform-unicode-regex')],
|
||||
[
|
||||
require('@babel/plugin-transform-modules-commonjs'),
|
||||
{strict: false, allowTopLevelThis: true},
|
||||
],
|
||||
[require('@babel/plugin-transform-classes')],
|
||||
[require('@babel/plugin-transform-arrow-functions')],
|
||||
[require('@babel/plugin-transform-spread')],
|
||||
[require('@babel/plugin-proposal-object-rest-spread')],
|
||||
[
|
||||
require('@babel/plugin-transform-template-literals'),
|
||||
{loose: true}, // dont 'a'.concat('b'), just use 'a'+'b'
|
||||
],
|
||||
[require('@babel/plugin-transform-exponentiation-operator')],
|
||||
[require('@babel/plugin-transform-for-of'), {loose: true}],
|
||||
[require('@babel/plugin-transform-react-display-name')],
|
||||
[require('@babel/plugin-transform-react-jsx-source')],
|
||||
],
|
||||
});
|
||||
|
||||
return generate(
|
||||
ast,
|
||||
// $FlowFixMe[prop-missing] Error found when improving flow typing for libs
|
||||
{
|
||||
code: true,
|
||||
comments: false,
|
||||
compact: false,
|
||||
filename: file,
|
||||
retainLines: true,
|
||||
sourceFileName: file,
|
||||
sourceMaps: true,
|
||||
},
|
||||
src,
|
||||
).code;
|
||||
},
|
||||
|
||||
getCacheKey: (createCacheKeyFunction([
|
||||
__filename,
|
||||
require.resolve('metro-react-native-babel-transformer'),
|
||||
require.resolve('@babel/core/package.json'),
|
||||
]) /*: any */),
|
||||
};
|
||||
module.exports = require('./preprocessor_DO_NOT_USE');
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
* @flow
|
||||
*/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
'use strict';
|
||||
|
||||
const babelRegisterOnly = require('metro-babel-register');
|
||||
const createCacheKeyFunction =
|
||||
require('@jest/create-cache-key-function').default;
|
||||
|
||||
const {transformSync: babelTransformSync} = require('@babel/core');
|
||||
const generate = require('@babel/generator').default;
|
||||
|
||||
const nodeFiles = new RegExp(
|
||||
[
|
||||
'/metro(?:-[^/]*)?/', // metro, metro-core, metro-source-map, metro-etc.
|
||||
].join('|'),
|
||||
);
|
||||
const nodeOptions = babelRegisterOnly.config([nodeFiles]);
|
||||
|
||||
babelRegisterOnly([]);
|
||||
|
||||
const transformer = require('metro-react-native-babel-transformer');
|
||||
module.exports = {
|
||||
process(src /*: string */, file /*: string */) /*: string */ {
|
||||
if (nodeFiles.test(file)) {
|
||||
// node specific transforms only
|
||||
return babelTransformSync(src, {
|
||||
filename: file,
|
||||
sourceType: 'script',
|
||||
...nodeOptions,
|
||||
ast: false,
|
||||
}).code;
|
||||
}
|
||||
|
||||
const {ast} = transformer.transform({
|
||||
filename: file,
|
||||
options: {
|
||||
ast: true, // needed for open source (?) https://github.com/facebook/react-native/commit/f8d6b97140cffe8d18b2558f94570c8d1b410d5c#r28647044
|
||||
dev: true,
|
||||
enableBabelRuntime: false,
|
||||
experimentalImportSupport: false,
|
||||
globalPrefix: '',
|
||||
hot: false,
|
||||
inlineRequires: true,
|
||||
minify: false,
|
||||
platform: '',
|
||||
projectRoot: '',
|
||||
publicPath: '/assets',
|
||||
retainLines: true,
|
||||
sourceType: 'unambiguous', // b7 required. detects module vs script mode
|
||||
},
|
||||
src,
|
||||
plugins: [
|
||||
[require('@babel/plugin-transform-block-scoping')],
|
||||
// the flow strip types plugin must go BEFORE class properties!
|
||||
// there'll be a test case that fails if you don't.
|
||||
[require('@babel/plugin-transform-flow-strip-types')],
|
||||
[
|
||||
require('@babel/plugin-proposal-class-properties'),
|
||||
// use `this.foo = bar` instead of `this.defineProperty('foo', ...)`
|
||||
{loose: true},
|
||||
],
|
||||
[require('@babel/plugin-transform-computed-properties')],
|
||||
[require('@babel/plugin-transform-destructuring')],
|
||||
[require('@babel/plugin-transform-function-name')],
|
||||
[require('@babel/plugin-transform-literals')],
|
||||
[require('@babel/plugin-transform-parameters')],
|
||||
[require('@babel/plugin-transform-shorthand-properties')],
|
||||
[require('@babel/plugin-transform-react-jsx')],
|
||||
[require('@babel/plugin-transform-regenerator')],
|
||||
[require('@babel/plugin-transform-sticky-regex')],
|
||||
[require('@babel/plugin-transform-unicode-regex')],
|
||||
[
|
||||
require('@babel/plugin-transform-modules-commonjs'),
|
||||
{strict: false, allowTopLevelThis: true},
|
||||
],
|
||||
[require('@babel/plugin-transform-classes')],
|
||||
[require('@babel/plugin-transform-arrow-functions')],
|
||||
[require('@babel/plugin-transform-spread')],
|
||||
[require('@babel/plugin-proposal-object-rest-spread')],
|
||||
[
|
||||
require('@babel/plugin-transform-template-literals'),
|
||||
{loose: true}, // dont 'a'.concat('b'), just use 'a'+'b'
|
||||
],
|
||||
[require('@babel/plugin-transform-exponentiation-operator')],
|
||||
[require('@babel/plugin-transform-for-of'), {loose: true}],
|
||||
[require('@babel/plugin-transform-react-display-name')],
|
||||
[require('@babel/plugin-transform-react-jsx-source')],
|
||||
],
|
||||
});
|
||||
|
||||
return generate(
|
||||
ast,
|
||||
// $FlowFixMe[prop-missing] Error found when improving flow typing for libs
|
||||
{
|
||||
code: true,
|
||||
comments: false,
|
||||
compact: false,
|
||||
filename: file,
|
||||
retainLines: true,
|
||||
sourceFileName: file,
|
||||
sourceMaps: true,
|
||||
},
|
||||
src,
|
||||
).code;
|
||||
},
|
||||
|
||||
getCacheKey: (createCacheKeyFunction([
|
||||
__filename,
|
||||
require.resolve('metro-react-native-babel-transformer'),
|
||||
require.resolve('@babel/core/package.json'),
|
||||
]) /*: any */),
|
||||
};
|
||||
Reference in New Issue
Block a user