@react-native/babel-preset 0.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUCK +23 -0
- package/README.md +41 -0
- package/package.json +68 -0
- package/src/configs/hmr.js +17 -0
- package/src/configs/lazy-imports.js +93 -0
- package/src/configs/main.js +215 -0
- package/src/index.js +20 -0
- package/src/passthrough-syntax-plugins.js +23 -0
package/BUCK
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
load("@fbsource//tools/build_defs/third_party:yarn_defs.bzl", "yarn_workspace")
|
|
2
|
+
|
|
3
|
+
oncall("react_native")
|
|
4
|
+
|
|
5
|
+
yarn_workspace(
|
|
6
|
+
name = "yarn-workspace",
|
|
7
|
+
srcs = glob(
|
|
8
|
+
["src/**/*.js"],
|
|
9
|
+
exclude = [
|
|
10
|
+
"**/__fixtures__/**",
|
|
11
|
+
"**/__flowtests__/**",
|
|
12
|
+
"**/__mocks__/**",
|
|
13
|
+
"**/__server_snapshot_tests__/**",
|
|
14
|
+
"**/__tests__/**",
|
|
15
|
+
"**/.*",
|
|
16
|
+
"**/.*/**",
|
|
17
|
+
"**/.*/.*",
|
|
18
|
+
"**/*.xcodeproj/**",
|
|
19
|
+
"**/*.xcworkspace/**",
|
|
20
|
+
],
|
|
21
|
+
),
|
|
22
|
+
visibility = ["PUBLIC"],
|
|
23
|
+
)
|
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# @react-native/babel-preset
|
|
2
|
+
|
|
3
|
+
Babel presets for [React Native](https://reactnative.dev) applications. React Native itself uses this Babel preset by default when transforming your app's source code.
|
|
4
|
+
|
|
5
|
+
If you wish to use a custom Babel configuration by writing a `babel.config.js` file in your project's root directory, you must specify all the plugins necessary to transform your code. React Native does not apply its default Babel configuration in this case. So, to make your life easier, you can use this preset to get the default configuration and then specify more plugins that run before it.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
As mentioned above, you only need to use this preset if you are writing a custom `babel.config.js` file.
|
|
10
|
+
|
|
11
|
+
### Installation
|
|
12
|
+
|
|
13
|
+
Install `@react-native/babel-preset` in your app:
|
|
14
|
+
|
|
15
|
+
with `npm`:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
npm i @react-native/babel-preset --save-dev
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
or with `yarn`:
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
yarn add -D @react-native/babel-preset
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Configuring Babel
|
|
28
|
+
|
|
29
|
+
Then, create a file called `babel.config.js` in your project's root directory. The existence of this `babel.config.js` file will tell React Native to use your custom Babel configuration instead of its own. Then load this preset:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
{
|
|
33
|
+
"presets": ["module:@react-native/babel-preset"]
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
You can further customize your Babel configuration by specifying plugins and other options. See [Babel's `babel.config.js` documentation](https://babeljs.io/docs/en/config-files/) to learn more.
|
|
38
|
+
|
|
39
|
+
## Help and Support
|
|
40
|
+
|
|
41
|
+
If you get stuck configuring Babel, please ask a question on Stack Overflow or find a consultant for help. If you discover a bug, please open up an issue.
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@react-native/babel-preset",
|
|
3
|
+
"version": "0.73.0",
|
|
4
|
+
"description": "Babel preset for React Native applications",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git@github.com:facebook/react-native.git",
|
|
9
|
+
"directory": "packages/react-native-babel-preset"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"prepare-release": "test -d build && rm -rf src.real && mv src src.real && mv build src",
|
|
13
|
+
"cleanup-release": "test ! -e build && mv src build && mv src.real src"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"babel",
|
|
17
|
+
"preset",
|
|
18
|
+
"react-native"
|
|
19
|
+
],
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@babel/core": "^7.20.0",
|
|
23
|
+
"@babel/plugin-proposal-async-generator-functions": "^7.0.0",
|
|
24
|
+
"@babel/plugin-proposal-class-properties": "^7.0.0",
|
|
25
|
+
"@babel/plugin-proposal-export-default-from": "^7.0.0",
|
|
26
|
+
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
|
|
27
|
+
"@babel/plugin-proposal-numeric-separator": "^7.0.0",
|
|
28
|
+
"@babel/plugin-proposal-object-rest-spread": "^7.0.0",
|
|
29
|
+
"@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
|
|
30
|
+
"@babel/plugin-proposal-optional-chaining": "^7.0.0",
|
|
31
|
+
"@babel/plugin-syntax-dynamic-import": "^7.0.0",
|
|
32
|
+
"@babel/plugin-syntax-export-default-from": "^7.0.0",
|
|
33
|
+
"@babel/plugin-syntax-flow": "^7.18.0",
|
|
34
|
+
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0",
|
|
35
|
+
"@babel/plugin-syntax-optional-chaining": "^7.0.0",
|
|
36
|
+
"@babel/plugin-transform-arrow-functions": "^7.0.0",
|
|
37
|
+
"@babel/plugin-transform-async-to-generator": "^7.0.0",
|
|
38
|
+
"@babel/plugin-transform-block-scoping": "^7.0.0",
|
|
39
|
+
"@babel/plugin-transform-classes": "^7.0.0",
|
|
40
|
+
"@babel/plugin-transform-computed-properties": "^7.0.0",
|
|
41
|
+
"@babel/plugin-transform-destructuring": "^7.0.0",
|
|
42
|
+
"@babel/plugin-transform-flow-strip-types": "^7.0.0",
|
|
43
|
+
"@babel/plugin-transform-function-name": "^7.0.0",
|
|
44
|
+
"@babel/plugin-transform-literals": "^7.0.0",
|
|
45
|
+
"@babel/plugin-transform-modules-commonjs": "^7.0.0",
|
|
46
|
+
"@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0",
|
|
47
|
+
"@babel/plugin-transform-parameters": "^7.0.0",
|
|
48
|
+
"@babel/plugin-transform-react-display-name": "^7.0.0",
|
|
49
|
+
"@babel/plugin-transform-react-jsx": "^7.0.0",
|
|
50
|
+
"@babel/plugin-transform-react-jsx-self": "^7.0.0",
|
|
51
|
+
"@babel/plugin-transform-react-jsx-source": "^7.0.0",
|
|
52
|
+
"@babel/plugin-transform-runtime": "^7.0.0",
|
|
53
|
+
"@babel/plugin-transform-shorthand-properties": "^7.0.0",
|
|
54
|
+
"@babel/plugin-transform-spread": "^7.0.0",
|
|
55
|
+
"@babel/plugin-transform-sticky-regex": "^7.0.0",
|
|
56
|
+
"@babel/plugin-transform-typescript": "^7.5.0",
|
|
57
|
+
"@babel/plugin-transform-unicode-regex": "^7.0.0",
|
|
58
|
+
"@babel/template": "^7.0.0",
|
|
59
|
+
"babel-plugin-transform-flow-enums": "^0.0.2",
|
|
60
|
+
"react-refresh": "^0.4.0"
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"@babel/core": "*"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=16"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall react_native
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
module.exports = function () {
|
|
14
|
+
return {
|
|
15
|
+
plugins: [require('react-refresh/babel')],
|
|
16
|
+
};
|
|
17
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall react_native
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// This is the set of modules that React Native publicly exports and that we
|
|
12
|
+
// want to require lazily. Keep this list in sync with
|
|
13
|
+
// react-native/index.js (though having extra entries here is fairly harmless).
|
|
14
|
+
|
|
15
|
+
'use strict';
|
|
16
|
+
|
|
17
|
+
module.exports = new Set([
|
|
18
|
+
'AccessibilityInfo',
|
|
19
|
+
'ActivityIndicator',
|
|
20
|
+
'Button',
|
|
21
|
+
'DatePickerIOS',
|
|
22
|
+
'DrawerLayoutAndroid',
|
|
23
|
+
'FlatList',
|
|
24
|
+
'Image',
|
|
25
|
+
'ImageBackground',
|
|
26
|
+
'InputAccessoryView',
|
|
27
|
+
'KeyboardAvoidingView',
|
|
28
|
+
'Modal',
|
|
29
|
+
'Pressable',
|
|
30
|
+
'ProgressBarAndroid',
|
|
31
|
+
'ProgressViewIOS',
|
|
32
|
+
'SafeAreaView',
|
|
33
|
+
'ScrollView',
|
|
34
|
+
'SectionList',
|
|
35
|
+
'Slider',
|
|
36
|
+
'Switch',
|
|
37
|
+
'RefreshControl',
|
|
38
|
+
'StatusBar',
|
|
39
|
+
'Text',
|
|
40
|
+
'TextInput',
|
|
41
|
+
'Touchable',
|
|
42
|
+
'TouchableHighlight',
|
|
43
|
+
'TouchableNativeFeedback',
|
|
44
|
+
'TouchableOpacity',
|
|
45
|
+
'TouchableWithoutFeedback',
|
|
46
|
+
'View',
|
|
47
|
+
'VirtualizedList',
|
|
48
|
+
'VirtualizedSectionList',
|
|
49
|
+
|
|
50
|
+
// APIs
|
|
51
|
+
'ActionSheetIOS',
|
|
52
|
+
'Alert',
|
|
53
|
+
'Animated',
|
|
54
|
+
'Appearance',
|
|
55
|
+
'AppRegistry',
|
|
56
|
+
'AppState',
|
|
57
|
+
'AsyncStorage',
|
|
58
|
+
'BackHandler',
|
|
59
|
+
'Clipboard',
|
|
60
|
+
'DeviceInfo',
|
|
61
|
+
'Dimensions',
|
|
62
|
+
'Easing',
|
|
63
|
+
'ReactNative',
|
|
64
|
+
'I18nManager',
|
|
65
|
+
'InteractionManager',
|
|
66
|
+
'Keyboard',
|
|
67
|
+
'LayoutAnimation',
|
|
68
|
+
'Linking',
|
|
69
|
+
'LogBox',
|
|
70
|
+
'NativeEventEmitter',
|
|
71
|
+
'PanResponder',
|
|
72
|
+
'PermissionsAndroid',
|
|
73
|
+
'PixelRatio',
|
|
74
|
+
'PushNotificationIOS',
|
|
75
|
+
'Settings',
|
|
76
|
+
'Share',
|
|
77
|
+
'StyleSheet',
|
|
78
|
+
'Systrace',
|
|
79
|
+
'ToastAndroid',
|
|
80
|
+
'TVEventHandler',
|
|
81
|
+
'UIManager',
|
|
82
|
+
'ReactNative',
|
|
83
|
+
'UTFSequence',
|
|
84
|
+
'Vibration',
|
|
85
|
+
|
|
86
|
+
// Plugins
|
|
87
|
+
'RCTDeviceEventEmitter',
|
|
88
|
+
'RCTNativeAppEventEmitter',
|
|
89
|
+
'NativeModules',
|
|
90
|
+
'Platform',
|
|
91
|
+
'processColor',
|
|
92
|
+
'requireNativeComponent',
|
|
93
|
+
]);
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall react_native
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
const passthroughSyntaxPlugins = require('../passthrough-syntax-plugins');
|
|
14
|
+
const lazyImports = require('./lazy-imports');
|
|
15
|
+
|
|
16
|
+
function isTypeScriptSource(fileName) {
|
|
17
|
+
return !!fileName && fileName.endsWith('.ts');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function isTSXSource(fileName) {
|
|
21
|
+
return !!fileName && fileName.endsWith('.tsx');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const defaultPlugins = [
|
|
25
|
+
[require('@babel/plugin-syntax-flow')],
|
|
26
|
+
[require('babel-plugin-transform-flow-enums')],
|
|
27
|
+
[require('@babel/plugin-transform-block-scoping')],
|
|
28
|
+
[
|
|
29
|
+
require('@babel/plugin-proposal-class-properties'),
|
|
30
|
+
// use `this.foo = bar` instead of `this.defineProperty('foo', ...)`
|
|
31
|
+
{loose: true},
|
|
32
|
+
],
|
|
33
|
+
[require('@babel/plugin-syntax-dynamic-import')],
|
|
34
|
+
[require('@babel/plugin-syntax-export-default-from')],
|
|
35
|
+
...passthroughSyntaxPlugins,
|
|
36
|
+
[require('@babel/plugin-transform-unicode-regex')],
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const getPreset = (src, options) => {
|
|
40
|
+
const transformProfile =
|
|
41
|
+
(options && options.unstable_transformProfile) || 'default';
|
|
42
|
+
const isHermesStable = transformProfile === 'hermes-stable';
|
|
43
|
+
const isHermesCanary = transformProfile === 'hermes-canary';
|
|
44
|
+
const isHermes = isHermesStable || isHermesCanary;
|
|
45
|
+
|
|
46
|
+
const isNull = src == null;
|
|
47
|
+
const hasClass = isNull || src.indexOf('class') !== -1;
|
|
48
|
+
|
|
49
|
+
const extraPlugins = [];
|
|
50
|
+
if (!options.useTransformReactJSXExperimental) {
|
|
51
|
+
extraPlugins.push([
|
|
52
|
+
require('@babel/plugin-transform-react-jsx'),
|
|
53
|
+
{runtime: 'automatic'},
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (!options || !options.disableImportExportTransform) {
|
|
58
|
+
extraPlugins.push(
|
|
59
|
+
[require('@babel/plugin-proposal-export-default-from')],
|
|
60
|
+
[
|
|
61
|
+
require('@babel/plugin-transform-modules-commonjs'),
|
|
62
|
+
{
|
|
63
|
+
strict: false,
|
|
64
|
+
strictMode: false, // prevent "use strict" injections
|
|
65
|
+
lazy:
|
|
66
|
+
options && options.lazyImportExportTransform != null
|
|
67
|
+
? options.lazyImportExportTransform
|
|
68
|
+
: importSpecifier => lazyImports.has(importSpecifier),
|
|
69
|
+
allowTopLevelThis: true, // dont rewrite global `this` -> `undefined`
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (hasClass) {
|
|
76
|
+
extraPlugins.push([require('@babel/plugin-transform-classes')]);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// TODO(gaearon): put this back into '=>' indexOf bailout
|
|
80
|
+
// and patch react-refresh to not depend on this transform.
|
|
81
|
+
extraPlugins.push([require('@babel/plugin-transform-arrow-functions')]);
|
|
82
|
+
|
|
83
|
+
if (!isHermes) {
|
|
84
|
+
extraPlugins.push([require('@babel/plugin-transform-computed-properties')]);
|
|
85
|
+
extraPlugins.push([require('@babel/plugin-transform-parameters')]);
|
|
86
|
+
extraPlugins.push([
|
|
87
|
+
require('@babel/plugin-transform-shorthand-properties'),
|
|
88
|
+
]);
|
|
89
|
+
extraPlugins.push([
|
|
90
|
+
require('@babel/plugin-proposal-optional-catch-binding'),
|
|
91
|
+
]);
|
|
92
|
+
extraPlugins.push([require('@babel/plugin-transform-function-name')]);
|
|
93
|
+
extraPlugins.push([require('@babel/plugin-transform-literals')]);
|
|
94
|
+
extraPlugins.push([require('@babel/plugin-proposal-numeric-separator')]);
|
|
95
|
+
extraPlugins.push([require('@babel/plugin-transform-sticky-regex')]);
|
|
96
|
+
} else {
|
|
97
|
+
extraPlugins.push([
|
|
98
|
+
require('@babel/plugin-transform-named-capturing-groups-regex'),
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
101
|
+
if (!isHermesCanary) {
|
|
102
|
+
extraPlugins.push([
|
|
103
|
+
require('@babel/plugin-transform-destructuring'),
|
|
104
|
+
{useBuiltIns: true},
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
if (!isHermes && (isNull || hasClass || src.indexOf('...') !== -1)) {
|
|
108
|
+
extraPlugins.push(
|
|
109
|
+
[require('@babel/plugin-transform-spread')],
|
|
110
|
+
[
|
|
111
|
+
require('@babel/plugin-proposal-object-rest-spread'),
|
|
112
|
+
// Assume no dependence on getters or evaluation order. See https://github.com/babel/babel/pull/11520
|
|
113
|
+
{loose: true, useBuiltIns: true},
|
|
114
|
+
],
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
if (isNull || src.indexOf('async') !== -1) {
|
|
118
|
+
extraPlugins.push([
|
|
119
|
+
require('@babel/plugin-proposal-async-generator-functions'),
|
|
120
|
+
]);
|
|
121
|
+
extraPlugins.push([require('@babel/plugin-transform-async-to-generator')]);
|
|
122
|
+
}
|
|
123
|
+
if (
|
|
124
|
+
isNull ||
|
|
125
|
+
src.indexOf('React.createClass') !== -1 ||
|
|
126
|
+
src.indexOf('createReactClass') !== -1
|
|
127
|
+
) {
|
|
128
|
+
extraPlugins.push([require('@babel/plugin-transform-react-display-name')]);
|
|
129
|
+
}
|
|
130
|
+
if (!isHermes && (isNull || src.indexOf('?.') !== -1)) {
|
|
131
|
+
extraPlugins.push([
|
|
132
|
+
require('@babel/plugin-proposal-optional-chaining'),
|
|
133
|
+
{loose: true},
|
|
134
|
+
]);
|
|
135
|
+
}
|
|
136
|
+
if (!isHermes && (isNull || src.indexOf('??') !== -1)) {
|
|
137
|
+
extraPlugins.push([
|
|
138
|
+
require('@babel/plugin-proposal-nullish-coalescing-operator'),
|
|
139
|
+
{loose: true},
|
|
140
|
+
]);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (options && options.dev && !options.useTransformReactJSXExperimental) {
|
|
144
|
+
extraPlugins.push([require('@babel/plugin-transform-react-jsx-source')]);
|
|
145
|
+
extraPlugins.push([require('@babel/plugin-transform-react-jsx-self')]);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!options || options.enableBabelRuntime !== false) {
|
|
149
|
+
// Allows configuring a specific runtime version to optimize output
|
|
150
|
+
const isVersion = typeof options?.enableBabelRuntime === 'string';
|
|
151
|
+
|
|
152
|
+
extraPlugins.push([
|
|
153
|
+
require('@babel/plugin-transform-runtime'),
|
|
154
|
+
{
|
|
155
|
+
helpers: true,
|
|
156
|
+
regenerator: !isHermes,
|
|
157
|
+
...(isVersion && {version: options.enableBabelRuntime}),
|
|
158
|
+
},
|
|
159
|
+
]);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
comments: false,
|
|
164
|
+
compact: true,
|
|
165
|
+
overrides: [
|
|
166
|
+
// the flow strip types plugin must go BEFORE class properties!
|
|
167
|
+
// there'll be a test case that fails if you don't.
|
|
168
|
+
{
|
|
169
|
+
plugins: [require('@babel/plugin-transform-flow-strip-types')],
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
plugins: defaultPlugins,
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
test: isTypeScriptSource,
|
|
176
|
+
plugins: [
|
|
177
|
+
[
|
|
178
|
+
require('@babel/plugin-transform-typescript'),
|
|
179
|
+
{
|
|
180
|
+
isTSX: false,
|
|
181
|
+
allowNamespaces: true,
|
|
182
|
+
},
|
|
183
|
+
],
|
|
184
|
+
],
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
test: isTSXSource,
|
|
188
|
+
plugins: [
|
|
189
|
+
[
|
|
190
|
+
require('@babel/plugin-transform-typescript'),
|
|
191
|
+
{
|
|
192
|
+
isTSX: true,
|
|
193
|
+
allowNamespaces: true,
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
plugins: extraPlugins,
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
module.exports = options => {
|
|
206
|
+
if (options.withDevTools == null) {
|
|
207
|
+
const env = process.env.BABEL_ENV || process.env.NODE_ENV;
|
|
208
|
+
if (!env || env === 'development') {
|
|
209
|
+
return getPreset(null, {...options, dev: true});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return getPreset(null, options);
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
module.exports.getPreset = getPreset;
|
package/src/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall react_native
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
const main = require('./configs/main');
|
|
14
|
+
|
|
15
|
+
module.exports = function (babel, options) {
|
|
16
|
+
return main(options);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
module.exports.getPreset = main.getPreset;
|
|
20
|
+
module.exports.passthroughSyntaxPlugins = require('./passthrough-syntax-plugins');
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
* @oncall react_native
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
// This list of syntax plugins is used for two purposes:
|
|
14
|
+
// 1. Enabling experimental syntax features in the INPUT to the Metro Babel
|
|
15
|
+
// transformer, regardless of whether we actually transform them.
|
|
16
|
+
// 2. Enabling these same features in parser passes that consume the OUTPUT of
|
|
17
|
+
// the Metro Babel transformer.
|
|
18
|
+
const passthroughSyntaxPlugins = [
|
|
19
|
+
[require('@babel/plugin-syntax-nullish-coalescing-operator')],
|
|
20
|
+
[require('@babel/plugin-syntax-optional-chaining')],
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
module.exports = passthroughSyntaxPlugins;
|