@react-native/babel-preset 0.73.1 → 0.73.3
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/.babelrc +12 -0
- package/.prettierrc +8 -0
- package/package.json +26 -4
- package/scripts/build.js +114 -0
- package/src/configs/lazy-imports.js +0 -2
- package/src/configs/main.js +106 -28
- package/src/index.js +0 -2
- package/src/passthrough-syntax-plugins.js +0 -1
package/.babelrc
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"plugins": [
|
|
3
|
+
"@babel/plugin-proposal-object-rest-spread",
|
|
4
|
+
"@babel/plugin-transform-async-to-generator",
|
|
5
|
+
"@babel/plugin-transform-destructuring",
|
|
6
|
+
"@babel/plugin-transform-flow-strip-types",
|
|
7
|
+
"@babel/plugin-syntax-dynamic-import",
|
|
8
|
+
"@babel/plugin-proposal-class-properties",
|
|
9
|
+
"@babel/plugin-proposal-nullish-coalescing-operator",
|
|
10
|
+
"@babel/plugin-proposal-optional-chaining"
|
|
11
|
+
]
|
|
12
|
+
}
|
package/.prettierrc
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native/babel-preset",
|
|
3
|
-
"version": "0.73.
|
|
3
|
+
"version": "0.73.3",
|
|
4
4
|
"description": "Babel preset for React Native applications",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -8,8 +8,12 @@
|
|
|
8
8
|
"url": "git@github.com:facebook/react-native.git"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"prepare-release": "test -d
|
|
12
|
-
"cleanup-release": "test ! -e
|
|
11
|
+
"prepare-release": "test -d lib && mv src src.real && mv lib src",
|
|
12
|
+
"cleanup-release": "test ! -e lib && mv src lib && mv src.real src && rimraf lib",
|
|
13
|
+
"build-clean": "rimraf build && rimraf src.real",
|
|
14
|
+
"build": " node scripts/build.js --verbose",
|
|
15
|
+
"prepare": "yarn run build-clean && yarn run build && yarn run prepare-release",
|
|
16
|
+
"postpublish": "yarn run cleanup-release"
|
|
13
17
|
},
|
|
14
18
|
"keywords": [
|
|
15
19
|
"babel",
|
|
@@ -58,10 +62,28 @@
|
|
|
58
62
|
"babel-plugin-transform-flow-enums": "^0.0.2",
|
|
59
63
|
"react-refresh": "^0.4.0"
|
|
60
64
|
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@babel/plugin-proposal-class-properties": "^7.18.0",
|
|
67
|
+
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0",
|
|
68
|
+
"@babel/plugin-proposal-object-rest-spread": "^7.20.0",
|
|
69
|
+
"@babel/plugin-proposal-optional-chaining": "^7.20.0",
|
|
70
|
+
"@babel/plugin-syntax-dynamic-import": "^7.8.0",
|
|
71
|
+
"@babel/plugin-transform-async-to-generator": "^7.20.0",
|
|
72
|
+
"@babel/plugin-transform-destructuring": "^7.20.0",
|
|
73
|
+
"@babel/plugin-transform-flow-strip-types": "^7.20.0",
|
|
74
|
+
"@babel/preset-env": "^7.20.0",
|
|
75
|
+
"chalk": "^4.0.0",
|
|
76
|
+
"glob": "^7.1.1",
|
|
77
|
+
"invariant": "^2.2.4",
|
|
78
|
+
"micromatch": "^4.0.4",
|
|
79
|
+
"mkdirp": "^0.5.1",
|
|
80
|
+
"prettier": "2.8.8",
|
|
81
|
+
"rimraf": "^3.0.2"
|
|
82
|
+
},
|
|
61
83
|
"peerDependencies": {
|
|
62
84
|
"@babel/core": "*"
|
|
63
85
|
},
|
|
64
86
|
"engines": {
|
|
65
|
-
"node": ">=
|
|
87
|
+
"node": ">=18"
|
|
66
88
|
}
|
|
67
89
|
}
|
package/scripts/build.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* script to build (transpile) files.
|
|
12
|
+
*
|
|
13
|
+
* Based off of the build script from Metro, and tweaked to run in just one
|
|
14
|
+
* package instead of in a monorepo. Just run `build.js` and the JS files in
|
|
15
|
+
* `src/` will be built in `lib/`, and the original source files will be copied
|
|
16
|
+
* over as `Example.js.flow`, so consumers of this module can still make use of
|
|
17
|
+
* type checking.
|
|
18
|
+
*
|
|
19
|
+
* Call this script with the `--verbose` flag to show the full output of this
|
|
20
|
+
* script.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
'use strict';
|
|
24
|
+
|
|
25
|
+
const babel = require('@babel/core');
|
|
26
|
+
const chalk = require('chalk');
|
|
27
|
+
const fs = require('fs');
|
|
28
|
+
const glob = require('glob');
|
|
29
|
+
const micromatch = require('micromatch');
|
|
30
|
+
const mkdirp = require('mkdirp');
|
|
31
|
+
const path = require('path');
|
|
32
|
+
const prettier = require('prettier');
|
|
33
|
+
const prettierConfig = JSON.parse(
|
|
34
|
+
fs.readFileSync(path.resolve(__dirname, '..', '.prettierrc'), 'utf8'),
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const SRC_DIR = 'src';
|
|
38
|
+
const BUILD_DIR = 'lib';
|
|
39
|
+
const JS_FILES_PATTERN = '**/*.js';
|
|
40
|
+
const IGNORE_PATTERN = '**/__tests__/**';
|
|
41
|
+
const PACKAGE_DIR = path.resolve(__dirname, '../');
|
|
42
|
+
|
|
43
|
+
const fixedWidth = str => {
|
|
44
|
+
const WIDTH = 80;
|
|
45
|
+
const strs = str.match(new RegExp(`(.{1,${WIDTH}})`, 'g')) || [str];
|
|
46
|
+
let lastString = strs[strs.length - 1];
|
|
47
|
+
if (lastString.length < WIDTH) {
|
|
48
|
+
lastString += Array(WIDTH - lastString.length).join(chalk.dim('.'));
|
|
49
|
+
}
|
|
50
|
+
return strs.slice(0, -1).concat(lastString).join('\n');
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
function getBuildPath(file, buildFolder) {
|
|
54
|
+
const pkgSrcPath = path.resolve(PACKAGE_DIR, SRC_DIR);
|
|
55
|
+
const pkgBuildPath = path.resolve(PACKAGE_DIR, BUILD_DIR);
|
|
56
|
+
const relativeToSrcPath = path.relative(pkgSrcPath, file);
|
|
57
|
+
return path.resolve(pkgBuildPath, relativeToSrcPath);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function buildFile(file, silent) {
|
|
61
|
+
const destPath = getBuildPath(file, BUILD_DIR);
|
|
62
|
+
|
|
63
|
+
mkdirp.sync(path.dirname(destPath));
|
|
64
|
+
if (micromatch.isMatch(file, IGNORE_PATTERN)) {
|
|
65
|
+
silent ||
|
|
66
|
+
process.stdout.write(
|
|
67
|
+
chalk.dim(' \u2022 ') +
|
|
68
|
+
path.relative(PACKAGE_DIR, file) +
|
|
69
|
+
' (ignore)\n',
|
|
70
|
+
);
|
|
71
|
+
} else if (!micromatch.isMatch(file, JS_FILES_PATTERN)) {
|
|
72
|
+
fs.createReadStream(file).pipe(fs.createWriteStream(destPath));
|
|
73
|
+
silent ||
|
|
74
|
+
process.stdout.write(
|
|
75
|
+
chalk.red(' \u2022 ') +
|
|
76
|
+
path.relative(PACKAGE_DIR, file) +
|
|
77
|
+
chalk.red(' \u21D2 ') +
|
|
78
|
+
path.relative(PACKAGE_DIR, destPath) +
|
|
79
|
+
' (copy)' +
|
|
80
|
+
'\n',
|
|
81
|
+
);
|
|
82
|
+
} else {
|
|
83
|
+
const transformed = prettier.format(
|
|
84
|
+
babel.transformFileSync(file, {}).code,
|
|
85
|
+
{
|
|
86
|
+
...prettierConfig,
|
|
87
|
+
parser: 'babel',
|
|
88
|
+
},
|
|
89
|
+
);
|
|
90
|
+
fs.writeFileSync(destPath, transformed);
|
|
91
|
+
const source = fs.readFileSync(file).toString('utf-8');
|
|
92
|
+
if (/@flow/.test(source)) {
|
|
93
|
+
fs.createReadStream(file).pipe(fs.createWriteStream(destPath + '.flow'));
|
|
94
|
+
}
|
|
95
|
+
silent ||
|
|
96
|
+
process.stdout.write(
|
|
97
|
+
chalk.green(' \u2022 ') +
|
|
98
|
+
path.relative(PACKAGE_DIR, file) +
|
|
99
|
+
chalk.green(' \u21D2 ') +
|
|
100
|
+
path.relative(PACKAGE_DIR, destPath) +
|
|
101
|
+
'\n',
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const srcDir = path.resolve(__dirname, '..', SRC_DIR);
|
|
107
|
+
const pattern = path.resolve(srcDir, '**/*');
|
|
108
|
+
const files = glob.sync(pattern, {nodir: true});
|
|
109
|
+
|
|
110
|
+
process.stdout.write(fixedWidth(`${path.basename(PACKAGE_DIR)}\n`));
|
|
111
|
+
|
|
112
|
+
files.forEach(file => buildFile(file, !process.argv.includes('--verbose')));
|
|
113
|
+
|
|
114
|
+
process.stdout.write(`[ ${chalk.green('OK')} ]\n`);
|
|
@@ -46,7 +46,6 @@ module.exports = new Set([
|
|
|
46
46
|
'View',
|
|
47
47
|
'VirtualizedList',
|
|
48
48
|
'VirtualizedSectionList',
|
|
49
|
-
|
|
50
49
|
// APIs
|
|
51
50
|
'ActionSheetIOS',
|
|
52
51
|
'Alert',
|
|
@@ -82,7 +81,6 @@ module.exports = new Set([
|
|
|
82
81
|
'ReactNative',
|
|
83
82
|
'UTFSequence',
|
|
84
83
|
'Vibration',
|
|
85
|
-
|
|
86
84
|
// Plugins
|
|
87
85
|
'RCTDeviceEventEmitter',
|
|
88
86
|
'RCTNativeAppEventEmitter',
|
package/src/configs/main.js
CHANGED
|
@@ -10,17 +10,76 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
+
function ownKeys(object, enumerableOnly) {
|
|
14
|
+
var keys = Object.keys(object);
|
|
15
|
+
if (Object.getOwnPropertySymbols) {
|
|
16
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
17
|
+
enumerableOnly &&
|
|
18
|
+
(symbols = symbols.filter(function (sym) {
|
|
19
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
20
|
+
})),
|
|
21
|
+
keys.push.apply(keys, symbols);
|
|
22
|
+
}
|
|
23
|
+
return keys;
|
|
24
|
+
}
|
|
25
|
+
function _objectSpread(target) {
|
|
26
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
27
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
28
|
+
i % 2
|
|
29
|
+
? ownKeys(Object(source), !0).forEach(function (key) {
|
|
30
|
+
_defineProperty(target, key, source[key]);
|
|
31
|
+
})
|
|
32
|
+
: Object.getOwnPropertyDescriptors
|
|
33
|
+
? Object.defineProperties(
|
|
34
|
+
target,
|
|
35
|
+
Object.getOwnPropertyDescriptors(source),
|
|
36
|
+
)
|
|
37
|
+
: ownKeys(Object(source)).forEach(function (key) {
|
|
38
|
+
Object.defineProperty(
|
|
39
|
+
target,
|
|
40
|
+
key,
|
|
41
|
+
Object.getOwnPropertyDescriptor(source, key),
|
|
42
|
+
);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return target;
|
|
46
|
+
}
|
|
47
|
+
function _defineProperty(obj, key, value) {
|
|
48
|
+
key = _toPropertyKey(key);
|
|
49
|
+
if (key in obj) {
|
|
50
|
+
Object.defineProperty(obj, key, {
|
|
51
|
+
value: value,
|
|
52
|
+
enumerable: true,
|
|
53
|
+
configurable: true,
|
|
54
|
+
writable: true,
|
|
55
|
+
});
|
|
56
|
+
} else {
|
|
57
|
+
obj[key] = value;
|
|
58
|
+
}
|
|
59
|
+
return obj;
|
|
60
|
+
}
|
|
61
|
+
function _toPropertyKey(arg) {
|
|
62
|
+
var key = _toPrimitive(arg, 'string');
|
|
63
|
+
return typeof key === 'symbol' ? key : String(key);
|
|
64
|
+
}
|
|
65
|
+
function _toPrimitive(input, hint) {
|
|
66
|
+
if (typeof input !== 'object' || input === null) return input;
|
|
67
|
+
var prim = input[Symbol.toPrimitive];
|
|
68
|
+
if (prim !== undefined) {
|
|
69
|
+
var res = prim.call(input, hint || 'default');
|
|
70
|
+
if (typeof res !== 'object') return res;
|
|
71
|
+
throw new TypeError('@@toPrimitive must return a primitive value.');
|
|
72
|
+
}
|
|
73
|
+
return (hint === 'string' ? String : Number)(input);
|
|
74
|
+
}
|
|
13
75
|
const passthroughSyntaxPlugins = require('../passthrough-syntax-plugins');
|
|
14
76
|
const lazyImports = require('./lazy-imports');
|
|
15
|
-
|
|
16
77
|
function isTypeScriptSource(fileName) {
|
|
17
78
|
return !!fileName && fileName.endsWith('.ts');
|
|
18
79
|
}
|
|
19
|
-
|
|
20
80
|
function isTSXSource(fileName) {
|
|
21
81
|
return !!fileName && fileName.endsWith('.tsx');
|
|
22
82
|
}
|
|
23
|
-
|
|
24
83
|
const defaultPlugins = [
|
|
25
84
|
[require('@babel/plugin-syntax-flow')],
|
|
26
85
|
[require('babel-plugin-transform-flow-enums')],
|
|
@@ -28,32 +87,32 @@ const defaultPlugins = [
|
|
|
28
87
|
[
|
|
29
88
|
require('@babel/plugin-proposal-class-properties'),
|
|
30
89
|
// use `this.foo = bar` instead of `this.defineProperty('foo', ...)`
|
|
31
|
-
{
|
|
90
|
+
{
|
|
91
|
+
loose: true,
|
|
92
|
+
},
|
|
32
93
|
],
|
|
33
94
|
[require('@babel/plugin-syntax-dynamic-import')],
|
|
34
95
|
[require('@babel/plugin-syntax-export-default-from')],
|
|
35
96
|
...passthroughSyntaxPlugins,
|
|
36
97
|
[require('@babel/plugin-transform-unicode-regex')],
|
|
37
98
|
];
|
|
38
|
-
|
|
39
99
|
const getPreset = (src, options) => {
|
|
40
100
|
const transformProfile =
|
|
41
101
|
(options && options.unstable_transformProfile) || 'default';
|
|
42
102
|
const isHermesStable = transformProfile === 'hermes-stable';
|
|
43
103
|
const isHermesCanary = transformProfile === 'hermes-canary';
|
|
44
104
|
const isHermes = isHermesStable || isHermesCanary;
|
|
45
|
-
|
|
46
105
|
const isNull = src == null;
|
|
47
106
|
const hasClass = isNull || src.indexOf('class') !== -1;
|
|
48
|
-
|
|
49
107
|
const extraPlugins = [];
|
|
50
108
|
if (!options.useTransformReactJSXExperimental) {
|
|
51
109
|
extraPlugins.push([
|
|
52
110
|
require('@babel/plugin-transform-react-jsx'),
|
|
53
|
-
{
|
|
111
|
+
{
|
|
112
|
+
runtime: 'automatic',
|
|
113
|
+
},
|
|
54
114
|
]);
|
|
55
115
|
}
|
|
56
|
-
|
|
57
116
|
if (!options || !options.disableImportExportTransform) {
|
|
58
117
|
extraPlugins.push(
|
|
59
118
|
[require('@babel/plugin-proposal-export-default-from')],
|
|
@@ -61,7 +120,8 @@ const getPreset = (src, options) => {
|
|
|
61
120
|
require('@babel/plugin-transform-modules-commonjs'),
|
|
62
121
|
{
|
|
63
122
|
strict: false,
|
|
64
|
-
strictMode: false,
|
|
123
|
+
strictMode: false,
|
|
124
|
+
// prevent "use strict" injections
|
|
65
125
|
lazy:
|
|
66
126
|
options && options.lazyImportExportTransform != null
|
|
67
127
|
? options.lazyImportExportTransform
|
|
@@ -79,7 +139,6 @@ const getPreset = (src, options) => {
|
|
|
79
139
|
// TODO(gaearon): put this back into '=>' indexOf bailout
|
|
80
140
|
// and patch react-refresh to not depend on this transform.
|
|
81
141
|
extraPlugins.push([require('@babel/plugin-transform-arrow-functions')]);
|
|
82
|
-
|
|
83
142
|
if (!isHermes) {
|
|
84
143
|
extraPlugins.push([require('@babel/plugin-transform-computed-properties')]);
|
|
85
144
|
extraPlugins.push([require('@babel/plugin-transform-parameters')]);
|
|
@@ -101,7 +160,9 @@ const getPreset = (src, options) => {
|
|
|
101
160
|
if (!isHermesCanary) {
|
|
102
161
|
extraPlugins.push([
|
|
103
162
|
require('@babel/plugin-transform-destructuring'),
|
|
104
|
-
{
|
|
163
|
+
{
|
|
164
|
+
useBuiltIns: true,
|
|
165
|
+
},
|
|
105
166
|
]);
|
|
106
167
|
}
|
|
107
168
|
if (!isHermes && (isNull || hasClass || src.indexOf('...') !== -1)) {
|
|
@@ -110,7 +171,10 @@ const getPreset = (src, options) => {
|
|
|
110
171
|
[
|
|
111
172
|
require('@babel/plugin-proposal-object-rest-spread'),
|
|
112
173
|
// Assume no dependence on getters or evaluation order. See https://github.com/babel/babel/pull/11520
|
|
113
|
-
{
|
|
174
|
+
{
|
|
175
|
+
loose: true,
|
|
176
|
+
useBuiltIns: true,
|
|
177
|
+
},
|
|
114
178
|
],
|
|
115
179
|
);
|
|
116
180
|
}
|
|
@@ -130,35 +194,42 @@ const getPreset = (src, options) => {
|
|
|
130
194
|
if (!isHermes && (isNull || src.indexOf('?.') !== -1)) {
|
|
131
195
|
extraPlugins.push([
|
|
132
196
|
require('@babel/plugin-proposal-optional-chaining'),
|
|
133
|
-
{
|
|
197
|
+
{
|
|
198
|
+
loose: true,
|
|
199
|
+
},
|
|
134
200
|
]);
|
|
135
201
|
}
|
|
136
202
|
if (!isHermes && (isNull || src.indexOf('??') !== -1)) {
|
|
137
203
|
extraPlugins.push([
|
|
138
204
|
require('@babel/plugin-proposal-nullish-coalescing-operator'),
|
|
139
|
-
{
|
|
205
|
+
{
|
|
206
|
+
loose: true,
|
|
207
|
+
},
|
|
140
208
|
]);
|
|
141
209
|
}
|
|
142
|
-
|
|
143
210
|
if (options && options.dev && !options.useTransformReactJSXExperimental) {
|
|
144
211
|
extraPlugins.push([require('@babel/plugin-transform-react-jsx-source')]);
|
|
145
212
|
extraPlugins.push([require('@babel/plugin-transform-react-jsx-self')]);
|
|
146
213
|
}
|
|
147
|
-
|
|
148
214
|
if (!options || options.enableBabelRuntime !== false) {
|
|
149
215
|
// Allows configuring a specific runtime version to optimize output
|
|
150
|
-
const isVersion =
|
|
151
|
-
|
|
216
|
+
const isVersion =
|
|
217
|
+
typeof (options === null || options === void 0
|
|
218
|
+
? void 0
|
|
219
|
+
: options.enableBabelRuntime) === 'string';
|
|
152
220
|
extraPlugins.push([
|
|
153
221
|
require('@babel/plugin-transform-runtime'),
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
222
|
+
_objectSpread(
|
|
223
|
+
{
|
|
224
|
+
helpers: true,
|
|
225
|
+
regenerator: !isHermes,
|
|
226
|
+
},
|
|
227
|
+
isVersion && {
|
|
228
|
+
version: options.enableBabelRuntime,
|
|
229
|
+
},
|
|
230
|
+
),
|
|
159
231
|
]);
|
|
160
232
|
}
|
|
161
|
-
|
|
162
233
|
return {
|
|
163
234
|
comments: false,
|
|
164
235
|
compact: true,
|
|
@@ -201,15 +272,22 @@ const getPreset = (src, options) => {
|
|
|
201
272
|
],
|
|
202
273
|
};
|
|
203
274
|
};
|
|
204
|
-
|
|
205
275
|
module.exports = options => {
|
|
206
276
|
if (options.withDevTools == null) {
|
|
207
277
|
const env = process.env.BABEL_ENV || process.env.NODE_ENV;
|
|
208
278
|
if (!env || env === 'development') {
|
|
209
|
-
return getPreset(
|
|
279
|
+
return getPreset(
|
|
280
|
+
null,
|
|
281
|
+
_objectSpread(
|
|
282
|
+
_objectSpread({}, options),
|
|
283
|
+
{},
|
|
284
|
+
{
|
|
285
|
+
dev: true,
|
|
286
|
+
},
|
|
287
|
+
),
|
|
288
|
+
);
|
|
210
289
|
}
|
|
211
290
|
}
|
|
212
291
|
return getPreset(null, options);
|
|
213
292
|
};
|
|
214
|
-
|
|
215
293
|
module.exports.getPreset = getPreset;
|
package/src/index.js
CHANGED
|
@@ -11,10 +11,8 @@
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
13
|
const main = require('./configs/main');
|
|
14
|
-
|
|
15
14
|
module.exports = function (babel, options) {
|
|
16
15
|
return main(options);
|
|
17
16
|
};
|
|
18
|
-
|
|
19
17
|
module.exports.getPreset = main.getPreset;
|
|
20
18
|
module.exports.passthroughSyntaxPlugins = require('./passthrough-syntax-plugins');
|