1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | 'use strict';
|
14 |
|
15 | const babelRegisterOnly = require('metro-babel-register');
|
16 | const createCacheKeyFunction = require('fbjs-scripts/jest/createCacheKeyFunction');
|
17 |
|
18 | const {transformSync: babelTransformSync} = require('@babel/core');
|
19 | const generate = require('@babel/generator').default;
|
20 |
|
21 | const nodeFiles = new RegExp(
|
22 | [
|
23 | '/metro(?:-[^/]*)?/',
|
24 | ].join('|'),
|
25 | );
|
26 | const nodeOptions = babelRegisterOnly.config([nodeFiles]);
|
27 |
|
28 | babelRegisterOnly([]);
|
29 |
|
30 | const transformer = require('metro-react-native-babel-transformer');
|
31 | module.exports = {
|
32 | process(src , file ) {
|
33 | if (nodeFiles.test(file)) {
|
34 |
|
35 | return babelTransformSync(src, {
|
36 | filename: file,
|
37 | sourceType: 'script',
|
38 | ...nodeOptions,
|
39 | ast: false,
|
40 | }).code;
|
41 | }
|
42 |
|
43 | |
44 |
|
45 | const {ast} = transformer.transform({
|
46 | filename: file,
|
47 | options: {
|
48 | ast: true,
|
49 | dev: true,
|
50 | enableBabelRuntime: false,
|
51 | experimentalImportSupport: false,
|
52 | hot: false,
|
53 | inlineRequires: true,
|
54 | minify: false,
|
55 | platform: '',
|
56 | projectRoot: '',
|
57 | publicPath: '/assets',
|
58 | retainLines: true,
|
59 | sourceType: 'unambiguous',
|
60 | },
|
61 | src,
|
62 | plugins: [
|
63 | [require('@babel/plugin-transform-block-scoping')],
|
64 |
|
65 |
|
66 | [require('@babel/plugin-transform-flow-strip-types')],
|
67 | [
|
68 | require('@babel/plugin-proposal-class-properties'),
|
69 |
|
70 | {loose: true},
|
71 | ],
|
72 | [require('@babel/plugin-transform-computed-properties')],
|
73 | [require('@babel/plugin-transform-destructuring')],
|
74 | [require('@babel/plugin-transform-function-name')],
|
75 | [require('@babel/plugin-transform-literals')],
|
76 | [require('@babel/plugin-transform-parameters')],
|
77 | [require('@babel/plugin-transform-shorthand-properties')],
|
78 | [require('@babel/plugin-transform-react-jsx')],
|
79 | [require('@babel/plugin-transform-regenerator')],
|
80 | [require('@babel/plugin-transform-sticky-regex')],
|
81 | [require('@babel/plugin-transform-unicode-regex')],
|
82 | [
|
83 | require('@babel/plugin-transform-modules-commonjs'),
|
84 | {strict: false, allowTopLevelThis: true},
|
85 | ],
|
86 | [require('@babel/plugin-transform-classes')],
|
87 | [require('@babel/plugin-transform-arrow-functions')],
|
88 | [require('@babel/plugin-transform-spread')],
|
89 | [require('@babel/plugin-proposal-object-rest-spread')],
|
90 | [
|
91 | require('@babel/plugin-transform-template-literals'),
|
92 | {loose: true},
|
93 | ],
|
94 | [require('@babel/plugin-transform-exponentiation-operator')],
|
95 | [require('@babel/plugin-transform-object-assign')],
|
96 | [require('@babel/plugin-transform-for-of'), {loose: true}],
|
97 | [require('@babel/plugin-transform-react-display-name')],
|
98 | [require('@babel/plugin-transform-react-jsx-source')],
|
99 | ],
|
100 | });
|
101 |
|
102 | return generate(
|
103 | ast,
|
104 | {
|
105 | code: true,
|
106 | comments: false,
|
107 | compact: false,
|
108 | filename: file,
|
109 | retainLines: true,
|
110 | sourceFileName: file,
|
111 | sourceMaps: true,
|
112 | },
|
113 | src,
|
114 | ).code;
|
115 | },
|
116 |
|
117 | getCacheKey: (createCacheKeyFunction([
|
118 | __filename,
|
119 | require.resolve('metro-react-native-babel-transformer'),
|
120 | require.resolve('@babel/core/package.json'),
|
121 | ]) ),
|
122 | };
|