@expo/metro-config 0.7.1 → 0.9.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/build/ExpoMetroConfig.d.ts +16 -8
- package/build/ExpoMetroConfig.js +167 -107
- package/build/ExpoMetroConfig.js.map +1 -1
- package/build/customizeFrame.d.ts +10 -0
- package/build/customizeFrame.js +85 -0
- package/build/customizeFrame.js.map +1 -0
- package/build/env.d.ts +16 -0
- package/build/env.js +47 -0
- package/build/env.js.map +1 -0
- package/build/getModulesPaths.d.ts +1 -0
- package/build/getModulesPaths.js +12 -0
- package/build/getModulesPaths.js.map +1 -1
- package/build/getWatchFolders.js.map +1 -1
- package/build/rewriteRequestUrl.d.ts +1 -0
- package/build/rewriteRequestUrl.js +88 -0
- package/build/rewriteRequestUrl.js.map +1 -0
- package/build/serializer/environmentVariableSerializerPlugin.d.ts +11 -0
- package/build/serializer/environmentVariableSerializerPlugin.js +125 -0
- package/build/serializer/environmentVariableSerializerPlugin.js.map +1 -0
- package/build/serializer/getCssDeps.d.ts +31 -0
- package/build/serializer/getCssDeps.js +107 -0
- package/build/serializer/getCssDeps.js.map +1 -0
- package/build/serializer/serializerAssets.d.ts +7 -0
- package/build/serializer/serializerAssets.js +2 -0
- package/build/serializer/serializerAssets.js.map +1 -0
- package/build/serializer/withExpoSerializers.d.ts +9 -0
- package/build/serializer/withExpoSerializers.js +135 -0
- package/build/serializer/withExpoSerializers.js.map +1 -0
- package/build/transform-worker/css-modules.d.ts +20 -0
- package/build/transform-worker/css-modules.js +93 -0
- package/build/transform-worker/css-modules.js.map +1 -0
- package/build/transform-worker/css.d.ts +7 -0
- package/build/transform-worker/css.js +49 -0
- package/build/transform-worker/css.js.map +1 -0
- package/build/transform-worker/postcss.d.ts +17 -0
- package/build/transform-worker/postcss.js +253 -0
- package/build/transform-worker/postcss.js.map +1 -0
- package/build/transform-worker/sass.d.ts +9 -0
- package/build/transform-worker/sass.js +49 -0
- package/build/transform-worker/sass.js.map +1 -0
- package/build/transform-worker/transform-worker.d.ts +3 -0
- package/build/transform-worker/transform-worker.js +180 -0
- package/build/transform-worker/transform-worker.js.map +1 -0
- package/build/transform-worker/utils/require.d.ts +2 -0
- package/build/transform-worker/utils/require.js +38 -0
- package/build/transform-worker/utils/require.js.map +1 -0
- package/build/transformer/createExoticTransformer.js.map +1 -1
- package/build/transformer/createMatcher.js +1 -1
- package/build/transformer/createMatcher.js.map +1 -1
- package/build/transformer/createMultiRuleTransformer.js +2 -2
- package/build/transformer/createMultiRuleTransformer.js.map +1 -1
- package/build/transformer/generateFunctionMap.d.ts +3 -1
- package/build/transformer/generateFunctionMap.js +6 -6
- package/build/transformer/generateFunctionMap.js.map +1 -1
- package/build/transformer/getBabelConfig.js.map +1 -1
- package/build/transformer/getCacheKey.js.map +1 -1
- package/build/transformer/index.js.map +1 -1
- package/build/transformer/metro-expo-babel-transformer.js.map +1 -1
- package/build/transformer/metro-expo-exotic-babel-transformer.js.map +1 -1
- package/build/traveling/metro-config.d.ts +3 -0
- package/build/traveling/metro-config.js +25 -0
- package/build/traveling/metro-config.js.map +1 -0
- package/build/utils/hash.d.ts +1 -0
- package/build/utils/hash.js +18 -0
- package/build/utils/hash.js.map +1 -0
- package/package.json +9 -7
- package/build/importMetroFromProject.d.ts +0 -4
- package/build/importMetroFromProject.js +0 -40
- package/build/importMetroFromProject.js.map +0 -1
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { Reporter } from 'metro';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export declare const INTERNAL_CALLSITES_REGEX: RegExp;
|
|
5
|
-
export interface DefaultConfigOptions {
|
|
6
|
-
mode?: 'exotic';
|
|
7
|
-
}
|
|
8
|
-
export declare function getDefaultConfig(projectRoot: string, options?: DefaultConfigOptions): MetroConfig.InputConfigT;
|
|
2
|
+
import { ConfigT as MetroConfig, InputConfigT } from 'metro-config';
|
|
3
|
+
import { INTERNAL_CALLSITES_REGEX } from './customizeFrame';
|
|
9
4
|
export interface LoadOptions {
|
|
10
5
|
config?: string;
|
|
11
6
|
maxWorkers?: number;
|
|
@@ -13,4 +8,17 @@ export interface LoadOptions {
|
|
|
13
8
|
reporter?: Reporter;
|
|
14
9
|
resetCache?: boolean;
|
|
15
10
|
}
|
|
16
|
-
export
|
|
11
|
+
export interface DefaultConfigOptions {
|
|
12
|
+
mode?: 'exotic';
|
|
13
|
+
/**
|
|
14
|
+
* **Experimental:** Enable CSS support for Metro web, and shim on native.
|
|
15
|
+
*
|
|
16
|
+
* This is an experimental feature and may change in the future. The underlying implementation
|
|
17
|
+
* is subject to change, and native support for CSS Modules may be added in the future during a non-major SDK release.
|
|
18
|
+
*/
|
|
19
|
+
isCSSEnabled?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function getDefaultConfig(projectRoot: string, options?: DefaultConfigOptions): InputConfigT;
|
|
22
|
+
export declare function loadAsync(projectRoot: string, { reporter, ...metroOptions }?: LoadOptions): Promise<MetroConfig>;
|
|
23
|
+
export { MetroConfig, INTERNAL_CALLSITES_REGEX };
|
|
24
|
+
export declare const EXPO_DEBUG: boolean;
|
package/build/ExpoMetroConfig.js
CHANGED
|
@@ -3,9 +3,28 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.EXPO_DEBUG = void 0;
|
|
7
|
+
Object.defineProperty(exports, "INTERNAL_CALLSITES_REGEX", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _customizeFrame().INTERNAL_CALLSITES_REGEX;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "MetroConfig", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _metroConfig().ConfigT;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
7
19
|
exports.getDefaultConfig = getDefaultConfig;
|
|
8
20
|
exports.loadAsync = loadAsync;
|
|
21
|
+
function _config() {
|
|
22
|
+
const data = require("@expo/config");
|
|
23
|
+
_config = function () {
|
|
24
|
+
return data;
|
|
25
|
+
};
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
9
28
|
function _paths() {
|
|
10
29
|
const data = require("@expo/config/paths");
|
|
11
30
|
_paths = function () {
|
|
@@ -13,6 +32,20 @@ function _paths() {
|
|
|
13
32
|
};
|
|
14
33
|
return data;
|
|
15
34
|
}
|
|
35
|
+
function runtimeEnv() {
|
|
36
|
+
const data = _interopRequireWildcard(require("@expo/env"));
|
|
37
|
+
runtimeEnv = function () {
|
|
38
|
+
return data;
|
|
39
|
+
};
|
|
40
|
+
return data;
|
|
41
|
+
}
|
|
42
|
+
function _jsonFile() {
|
|
43
|
+
const data = _interopRequireDefault(require("@expo/json-file"));
|
|
44
|
+
_jsonFile = function () {
|
|
45
|
+
return data;
|
|
46
|
+
};
|
|
47
|
+
return data;
|
|
48
|
+
}
|
|
16
49
|
function _chalk() {
|
|
17
50
|
const data = _interopRequireDefault(require("chalk"));
|
|
18
51
|
_chalk = function () {
|
|
@@ -20,9 +53,16 @@ function _chalk() {
|
|
|
20
53
|
};
|
|
21
54
|
return data;
|
|
22
55
|
}
|
|
23
|
-
function
|
|
24
|
-
const data = require("
|
|
25
|
-
|
|
56
|
+
function _metroCache() {
|
|
57
|
+
const data = require("metro-cache");
|
|
58
|
+
_metroCache = function () {
|
|
59
|
+
return data;
|
|
60
|
+
};
|
|
61
|
+
return data;
|
|
62
|
+
}
|
|
63
|
+
function _metroConfig() {
|
|
64
|
+
const data = require("metro-config");
|
|
65
|
+
_metroConfig = function () {
|
|
26
66
|
return data;
|
|
27
67
|
};
|
|
28
68
|
return data;
|
|
@@ -41,9 +81,16 @@ function _resolveFrom() {
|
|
|
41
81
|
};
|
|
42
82
|
return data;
|
|
43
83
|
}
|
|
44
|
-
function
|
|
45
|
-
const data = require("
|
|
46
|
-
|
|
84
|
+
function _customizeFrame() {
|
|
85
|
+
const data = require("./customizeFrame");
|
|
86
|
+
_customizeFrame = function () {
|
|
87
|
+
return data;
|
|
88
|
+
};
|
|
89
|
+
return data;
|
|
90
|
+
}
|
|
91
|
+
function _env2() {
|
|
92
|
+
const data = require("./env");
|
|
93
|
+
_env2 = function () {
|
|
47
94
|
return data;
|
|
48
95
|
};
|
|
49
96
|
return data;
|
|
@@ -62,83 +109,61 @@ function _getWatchFolders() {
|
|
|
62
109
|
};
|
|
63
110
|
return data;
|
|
64
111
|
}
|
|
65
|
-
function
|
|
66
|
-
const data = require("./
|
|
67
|
-
|
|
112
|
+
function _rewriteRequestUrl() {
|
|
113
|
+
const data = require("./rewriteRequestUrl");
|
|
114
|
+
_rewriteRequestUrl = function () {
|
|
115
|
+
return data;
|
|
116
|
+
};
|
|
117
|
+
return data;
|
|
118
|
+
}
|
|
119
|
+
function _withExpoSerializers() {
|
|
120
|
+
const data = require("./serializer/withExpoSerializers");
|
|
121
|
+
_withExpoSerializers = function () {
|
|
122
|
+
return data;
|
|
123
|
+
};
|
|
124
|
+
return data;
|
|
125
|
+
}
|
|
126
|
+
function _postcss() {
|
|
127
|
+
const data = require("./transform-worker/postcss");
|
|
128
|
+
_postcss = function () {
|
|
129
|
+
return data;
|
|
130
|
+
};
|
|
131
|
+
return data;
|
|
132
|
+
}
|
|
133
|
+
function _metroConfig2() {
|
|
134
|
+
const data = require("./traveling/metro-config");
|
|
135
|
+
_metroConfig2 = function () {
|
|
68
136
|
return data;
|
|
69
137
|
};
|
|
70
138
|
return data;
|
|
71
139
|
}
|
|
72
140
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
exports.EXPO_DEBUG = EXPO_DEBUG;
|
|
77
|
-
const EXPO_USE_METRO_WORKSPACE_ROOT = (0, _getenv().boolish)('EXPO_USE_METRO_WORKSPACE_ROOT', false);
|
|
78
|
-
const EXPO_USE_EXOTIC = (0, _getenv().boolish)('EXPO_USE_EXOTIC', false);
|
|
141
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
142
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
143
|
+
// Copyright 2023-present 650 Industries (Expo). All rights reserved.
|
|
79
144
|
|
|
80
|
-
|
|
81
|
-
const INTERNAL_CALLSITES_REGEX = new RegExp(['/Libraries/Renderer/implementations/.+\\.js$', '/Libraries/BatchedBridge/MessageQueue\\.js$', '/Libraries/YellowBox/.+\\.js$', '/Libraries/LogBox/.+\\.js$', '/Libraries/Core/Timers/.+\\.js$', 'node_modules/react-devtools-core/.+\\.js$', 'node_modules/react-refresh/.+\\.js$', 'node_modules/scheduler/.+\\.js$',
|
|
82
|
-
// Metro replaces `require()` with a different method,
|
|
83
|
-
// we want to omit this method from the stack trace.
|
|
84
|
-
// This is akin to most React tooling.
|
|
85
|
-
'/metro/.*/polyfills/require.js$',
|
|
86
|
-
// Hide frames related to a fast refresh.
|
|
87
|
-
'/metro/.*/lib/bundle-modules/.+\\.js$', 'node_modules/react-native/Libraries/Utilities/HMRClient.js$', 'node_modules/eventemitter3/index.js', 'node_modules/event-target-shim/dist/.+\\.js$',
|
|
88
|
-
// Ignore the log forwarder used in the expo package.
|
|
89
|
-
'/expo/build/logs/RemoteConsole.js$',
|
|
90
|
-
// Improve errors thrown by invariant (ex: `Invariant Violation: "main" has not been registered`).
|
|
91
|
-
'node_modules/invariant/.+\\.js$',
|
|
92
|
-
// Remove babel runtime additions
|
|
93
|
-
'node_modules/regenerator-runtime/.+\\.js$',
|
|
94
|
-
// Remove react native setImmediate ponyfill
|
|
95
|
-
'node_modules/promise/setimmediate/.+\\.js$',
|
|
96
|
-
// Babel helpers that implement language features
|
|
97
|
-
'node_modules/@babel/runtime/.+\\.js$',
|
|
98
|
-
// Hide Hermes internal bytecode
|
|
99
|
-
'/InternalBytecode/InternalBytecode\\.js$',
|
|
100
|
-
// Block native code invocations
|
|
101
|
-
`\\[native code\\]`,
|
|
102
|
-
// Hide react-dom (web)
|
|
103
|
-
'node_modules/react-dom/.+\\.js$'].join('|'));
|
|
104
|
-
exports.INTERNAL_CALLSITES_REGEX = INTERNAL_CALLSITES_REGEX;
|
|
105
|
-
function isUrl(value) {
|
|
106
|
-
try {
|
|
107
|
-
// eslint-disable-next-line no-new
|
|
108
|
-
new (_url().URL)(value);
|
|
109
|
-
return true;
|
|
110
|
-
} catch {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
145
|
+
const debug = require('debug')('expo:metro:config');
|
|
114
146
|
function getProjectBabelConfigFile(projectRoot) {
|
|
115
147
|
return _resolveFrom().default.silent(projectRoot, './babel.config.js') || _resolveFrom().default.silent(projectRoot, './.babelrc') || _resolveFrom().default.silent(projectRoot, './.babelrc.js');
|
|
116
148
|
}
|
|
117
149
|
function getAssetPlugins(projectRoot) {
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
hashAssetFilesPath = (0, _resolveFrom().default)(projectRoot, 'expo-asset/tools/hashAssetFiles');
|
|
122
|
-
} catch {
|
|
123
|
-
// TODO: we should warn/throw an error if the user has expo-updates installed but does not
|
|
124
|
-
// have hashAssetFiles available, or if the user is in managed workflow and does not have
|
|
125
|
-
// hashAssetFiles available. but in a bare app w/o expo-updates, just using dev-client,
|
|
126
|
-
// it is not needed
|
|
127
|
-
}
|
|
128
|
-
if (hashAssetFilesPath) {
|
|
129
|
-
assetPlugins.push(hashAssetFilesPath);
|
|
150
|
+
const hashAssetFilesPath = _resolveFrom().default.silent(projectRoot, 'expo-asset/tools/hashAssetFiles');
|
|
151
|
+
if (!hashAssetFilesPath) {
|
|
152
|
+
throw new Error(`The required package \`expo-asset\` cannot be found`);
|
|
130
153
|
}
|
|
131
|
-
return
|
|
154
|
+
return [hashAssetFilesPath];
|
|
132
155
|
}
|
|
133
156
|
let hasWarnedAboutExotic = false;
|
|
134
157
|
function getDefaultConfig(projectRoot, options = {}) {
|
|
135
|
-
|
|
136
|
-
|
|
158
|
+
const {
|
|
159
|
+
getDefaultConfig: getDefaultMetroConfig,
|
|
160
|
+
mergeConfig
|
|
161
|
+
} = (0, _metroConfig2().importMetroConfig)(projectRoot);
|
|
162
|
+
const isExotic = options.mode === 'exotic' || _env2().env.EXPO_USE_EXOTIC;
|
|
137
163
|
if (isExotic && !hasWarnedAboutExotic) {
|
|
138
164
|
hasWarnedAboutExotic = true;
|
|
139
165
|
console.log(_chalk().default.gray(`\u203A Unstable feature ${_chalk().default.bold`EXPO_USE_EXOTIC`} is enabled. Bundling may not work as expected, and is subject to breaking changes.`));
|
|
140
166
|
}
|
|
141
|
-
const MetroConfig = (0, _importMetroFromProject().importMetroConfigFromProject)(projectRoot);
|
|
142
167
|
const reactNativePath = _path().default.dirname((0, _resolveFrom().default)(projectRoot, 'react-native/package.json'));
|
|
143
168
|
try {
|
|
144
169
|
// Set the `EXPO_METRO_CACHE_KEY_VERSION` variable for use in the custom babel transformer.
|
|
@@ -155,10 +180,17 @@ function getDefaultConfig(projectRoot, options = {}) {
|
|
|
155
180
|
isModern: false
|
|
156
181
|
};
|
|
157
182
|
const sourceExts = (0, _paths().getBareExtensions)([], sourceExtsConfig);
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
183
|
+
|
|
184
|
+
// Add support for cjs (without platform extensions).
|
|
185
|
+
sourceExts.push('cjs');
|
|
186
|
+
let sassVersion = null;
|
|
187
|
+
if (options.isCSSEnabled) {
|
|
188
|
+
sassVersion = getSassVersion(projectRoot);
|
|
189
|
+
// Enable SCSS by default so we can provide a better error message
|
|
190
|
+
// when sass isn't installed.
|
|
191
|
+
sourceExts.push('scss', 'sass', 'css');
|
|
161
192
|
}
|
|
193
|
+
const envFiles = runtimeEnv().getFiles(process.env.NODE_ENV);
|
|
162
194
|
const babelConfigPath = getProjectBabelConfigFile(projectRoot);
|
|
163
195
|
const isCustomBabelConfigDefined = !!babelConfigPath;
|
|
164
196
|
const resolverMainFields = [];
|
|
@@ -169,10 +201,11 @@ function getDefaultConfig(projectRoot, options = {}) {
|
|
|
169
201
|
resolverMainFields.push('react-native');
|
|
170
202
|
}
|
|
171
203
|
resolverMainFields.push('browser', 'main');
|
|
204
|
+
const pkg = (0, _config().getPackageJson)(projectRoot);
|
|
172
205
|
const watchFolders = (0, _getWatchFolders().getWatchFolders)(projectRoot);
|
|
173
206
|
// TODO: nodeModulesPaths does not work with the new Node.js package.json exports API, this causes packages like uuid to fail. Disabling for now.
|
|
174
207
|
const nodeModulesPaths = (0, _getModulesPaths().getModulesPaths)(projectRoot);
|
|
175
|
-
if (EXPO_DEBUG) {
|
|
208
|
+
if (_env2().env.EXPO_DEBUG) {
|
|
176
209
|
console.log();
|
|
177
210
|
console.log(`Expo Metro config:`);
|
|
178
211
|
try {
|
|
@@ -185,6 +218,8 @@ function getDefaultConfig(projectRoot, options = {}) {
|
|
|
185
218
|
console.log(`- Watch Folders: ${watchFolders.join(', ')}`);
|
|
186
219
|
console.log(`- Node Module Paths: ${nodeModulesPaths.join(', ')}`);
|
|
187
220
|
console.log(`- Exotic: ${isExotic}`);
|
|
221
|
+
console.log(`- Env Files: ${envFiles}`);
|
|
222
|
+
console.log(`- Sass: ${sassVersion}`);
|
|
188
223
|
console.log();
|
|
189
224
|
}
|
|
190
225
|
const {
|
|
@@ -192,64 +227,59 @@ function getDefaultConfig(projectRoot, options = {}) {
|
|
|
192
227
|
// This prints a giant React logo which is less accessible to users on smaller terminals.
|
|
193
228
|
reporter,
|
|
194
229
|
...metroDefaultValues
|
|
195
|
-
} =
|
|
230
|
+
} = getDefaultMetroConfig.getDefaultValues(projectRoot);
|
|
196
231
|
|
|
197
232
|
// Merge in the default config from Metro here, even though loadConfig uses it as defaults.
|
|
198
233
|
// This is a convenience for getDefaultConfig use in metro.config.js, e.g. to modify assetExts.
|
|
199
|
-
|
|
234
|
+
const metroConfig = mergeConfig(metroDefaultValues, {
|
|
200
235
|
watchFolders,
|
|
201
236
|
resolver: {
|
|
202
237
|
resolverMainFields,
|
|
203
|
-
platforms: ['ios', 'android'
|
|
238
|
+
platforms: ['ios', 'android'],
|
|
204
239
|
assetExts: metroDefaultValues.resolver.assetExts.concat(
|
|
205
240
|
// Add default support for `expo-image` file types.
|
|
206
241
|
['heic', 'avif']).filter(assetExt => !sourceExts.includes(assetExt)),
|
|
207
242
|
sourceExts,
|
|
208
243
|
nodeModulesPaths
|
|
209
244
|
},
|
|
245
|
+
watcher: {
|
|
246
|
+
// strip starting dot from env files
|
|
247
|
+
additionalExts: envFiles.map(file => file.replace(/^\./, ''))
|
|
248
|
+
},
|
|
210
249
|
serializer: {
|
|
211
|
-
getModulesRunBeforeMainModule: () =>
|
|
212
|
-
|
|
213
|
-
],
|
|
250
|
+
getModulesRunBeforeMainModule: () => {
|
|
251
|
+
const preModules = [];
|
|
214
252
|
|
|
253
|
+
// We need to shift this to be the first module so web Fast Refresh works as expected.
|
|
254
|
+
// This will only be applied if the module is installed and imported somewhere in the bundle already.
|
|
255
|
+
const metroRuntime = _resolveFrom().default.silent(projectRoot, '@expo/metro-runtime');
|
|
256
|
+
if (metroRuntime) {
|
|
257
|
+
preModules.push(metroRuntime);
|
|
258
|
+
}
|
|
259
|
+
preModules.push(require.resolve(_path().default.join(reactNativePath, 'Libraries/Core/InitializeCore')));
|
|
260
|
+
return preModules;
|
|
261
|
+
},
|
|
215
262
|
getPolyfills: () => require(_path().default.join(reactNativePath, 'rn-get-polyfills'))()
|
|
216
263
|
},
|
|
217
264
|
server: {
|
|
218
|
-
|
|
265
|
+
rewriteRequestUrl: (0, _rewriteRequestUrl().getRewriteRequestUrl)(projectRoot),
|
|
266
|
+
port: Number(_env2().env.RCT_METRO_PORT) || 8081,
|
|
219
267
|
// NOTE(EvanBacon): Moves the server root down to the monorepo root.
|
|
220
268
|
// This enables proper monorepo support for web.
|
|
221
|
-
|
|
222
|
-
unstable_serverRoot: EXPO_USE_METRO_WORKSPACE_ROOT ? (_getWorkspaceRoot = (0, _getModulesPaths().getWorkspaceRoot)(projectRoot)) !== null && _getWorkspaceRoot !== void 0 ? _getWorkspaceRoot : projectRoot : projectRoot
|
|
269
|
+
unstable_serverRoot: (0, _getModulesPaths().getServerRoot)(projectRoot)
|
|
223
270
|
},
|
|
224
271
|
symbolicator: {
|
|
225
|
-
customizeFrame:
|
|
226
|
-
if (frame.file && isUrl(frame.file)) {
|
|
227
|
-
return {
|
|
228
|
-
...frame,
|
|
229
|
-
// HACK: This prevents Metro from attempting to read the invalid file URL it sent us.
|
|
230
|
-
lineNumber: null,
|
|
231
|
-
column: null,
|
|
232
|
-
// This prevents the invalid frame from being shown by default.
|
|
233
|
-
collapse: true
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
let collapse = Boolean(frame.file && INTERNAL_CALLSITES_REGEX.test(frame.file));
|
|
237
|
-
if (!collapse) {
|
|
238
|
-
var _frame$file;
|
|
239
|
-
// This represents the first frame of the stacktrace.
|
|
240
|
-
// Often this looks like: `__r(0);`.
|
|
241
|
-
// The URL will also be unactionable in the app and therefore not very useful to the developer.
|
|
242
|
-
if (frame.column === 3 && frame.methodName === 'global code' && (_frame$file = frame.file) !== null && _frame$file !== void 0 && _frame$file.match(/^https?:\/\//g)) {
|
|
243
|
-
collapse = true;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
return {
|
|
247
|
-
...(frame || {}),
|
|
248
|
-
collapse
|
|
249
|
-
};
|
|
250
|
-
}
|
|
272
|
+
customizeFrame: (0, _customizeFrame().getDefaultCustomizeFrame)()
|
|
251
273
|
},
|
|
274
|
+
transformerPath: options.isCSSEnabled ?
|
|
275
|
+
// Custom worker that adds CSS support for Metro web.
|
|
276
|
+
require.resolve('./transform-worker/transform-worker') : metroDefaultValues.transformerPath,
|
|
252
277
|
transformer: {
|
|
278
|
+
// Custom: These are passed to `getCacheKey` and ensure invalidation when the version changes.
|
|
279
|
+
// @ts-expect-error: not on type.
|
|
280
|
+
postcssHash: (0, _postcss().getPostcssConfigHash)(projectRoot),
|
|
281
|
+
browserslistHash: pkg.browserslist ? (0, _metroCache().stableHash)(JSON.stringify(pkg.browserslist)).toString('hex') : null,
|
|
282
|
+
sassVersion,
|
|
253
283
|
// `require.context` support
|
|
254
284
|
unstable_allowRequireContext: true,
|
|
255
285
|
allowOptionalDependencies: true,
|
|
@@ -264,6 +294,7 @@ function getDefaultConfig(projectRoot, options = {}) {
|
|
|
264
294
|
assetPlugins: getAssetPlugins(projectRoot)
|
|
265
295
|
}
|
|
266
296
|
});
|
|
297
|
+
return (0, _withExpoSerializers().withExpoSerializers)(metroConfig);
|
|
267
298
|
}
|
|
268
299
|
async function loadAsync(projectRoot, {
|
|
269
300
|
reporter,
|
|
@@ -276,11 +307,40 @@ async function loadAsync(projectRoot, {
|
|
|
276
307
|
reporter
|
|
277
308
|
};
|
|
278
309
|
}
|
|
279
|
-
const
|
|
280
|
-
|
|
310
|
+
const {
|
|
311
|
+
loadConfig
|
|
312
|
+
} = (0, _metroConfig2().importMetroConfig)(projectRoot);
|
|
313
|
+
return await loadConfig({
|
|
281
314
|
cwd: projectRoot,
|
|
282
315
|
projectRoot,
|
|
283
316
|
...metroOptions
|
|
284
317
|
}, defaultConfig);
|
|
285
318
|
}
|
|
319
|
+
|
|
320
|
+
// re-export for use in config files.
|
|
321
|
+
|
|
322
|
+
// re-export for legacy cases.
|
|
323
|
+
const EXPO_DEBUG = _env2().env.EXPO_DEBUG;
|
|
324
|
+
exports.EXPO_DEBUG = EXPO_DEBUG;
|
|
325
|
+
function getSassVersion(projectRoot) {
|
|
326
|
+
const sassPkg = _resolveFrom().default.silent(projectRoot, 'sass');
|
|
327
|
+
if (!sassPkg) return null;
|
|
328
|
+
const sassPkgJson = findUpPackageJson(sassPkg);
|
|
329
|
+
if (!sassPkgJson) return null;
|
|
330
|
+
const pkg = _jsonFile().default.read(sassPkgJson);
|
|
331
|
+
debug('sass package.json:', sassPkgJson);
|
|
332
|
+
const sassVersion = pkg.version;
|
|
333
|
+
if (typeof sassVersion === 'string') {
|
|
334
|
+
return sassVersion;
|
|
335
|
+
}
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
function findUpPackageJson(cwd) {
|
|
339
|
+
if (['.', _path().default.sep].includes(cwd)) return null;
|
|
340
|
+
const found = _resolveFrom().default.silent(cwd, './package.json');
|
|
341
|
+
if (found) {
|
|
342
|
+
return found;
|
|
343
|
+
}
|
|
344
|
+
return findUpPackageJson(_path().default.dirname(cwd));
|
|
345
|
+
}
|
|
286
346
|
//# sourceMappingURL=ExpoMetroConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoMetroConfig.js","names":["EXPO_DEBUG","boolish","EXPO_USE_METRO_WORKSPACE_ROOT","EXPO_USE_EXOTIC","INTERNAL_CALLSITES_REGEX","RegExp","join","isUrl","value","URL","getProjectBabelConfigFile","projectRoot","resolveFrom","silent","getAssetPlugins","assetPlugins","hashAssetFilesPath","push","hasWarnedAboutExotic","getDefaultConfig","options","isExotic","mode","console","log","chalk","gray","bold","MetroConfig","importMetroConfigFromProject","reactNativePath","path","dirname","babelPresetFbjsPath","process","env","EXPO_METRO_CACHE_KEY_VERSION","String","require","version","sourceExtsConfig","isTS","isReact","isModern","sourceExts","getBareExtensions","babelConfigPath","isCustomBabelConfigDefined","resolverMainFields","watchFolders","getWatchFolders","nodeModulesPaths","getModulesPaths","reporter","metroDefaultValues","getDefaultValues","mergeConfig","resolver","platforms","assetExts","concat","filter","assetExt","includes","serializer","getModulesRunBeforeMainModule","resolve","getPolyfills","server","port","Number","RCT_METRO_PORT","unstable_serverRoot","getWorkspaceRoot","symbolicator","customizeFrame","frame","file","lineNumber","column","collapse","Boolean","test","methodName","match","transformer","unstable_allowRequireContext","allowOptionalDependencies","babelTransformerPath","assetRegistryPath","loadAsync","metroOptions","defaultConfig","loadConfig","cwd"],"sources":["../src/ExpoMetroConfig.ts"],"sourcesContent":["// Copyright 2021-present 650 Industries (Expo). All rights reserved.\n\nimport { getBareExtensions } from '@expo/config/paths';\nimport chalk from 'chalk';\nimport { boolish } from 'getenv';\nimport { Reporter } from 'metro';\nimport type MetroConfig from 'metro-config';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport { URL } from 'url';\n\nimport { getModulesPaths, getWorkspaceRoot } from './getModulesPaths';\nimport { getWatchFolders } from './getWatchFolders';\nimport { importMetroConfigFromProject } from './importMetroFromProject';\n\nexport const EXPO_DEBUG = boolish('EXPO_DEBUG', false);\nconst EXPO_USE_METRO_WORKSPACE_ROOT = boolish('EXPO_USE_METRO_WORKSPACE_ROOT', false);\nconst EXPO_USE_EXOTIC = boolish('EXPO_USE_EXOTIC', false);\n\n// Import only the types here, the values will be imported from the project, at runtime.\nexport const INTERNAL_CALLSITES_REGEX = new RegExp(\n [\n '/Libraries/Renderer/implementations/.+\\\\.js$',\n '/Libraries/BatchedBridge/MessageQueue\\\\.js$',\n '/Libraries/YellowBox/.+\\\\.js$',\n '/Libraries/LogBox/.+\\\\.js$',\n '/Libraries/Core/Timers/.+\\\\.js$',\n 'node_modules/react-devtools-core/.+\\\\.js$',\n 'node_modules/react-refresh/.+\\\\.js$',\n 'node_modules/scheduler/.+\\\\.js$',\n // Metro replaces `require()` with a different method,\n // we want to omit this method from the stack trace.\n // This is akin to most React tooling.\n '/metro/.*/polyfills/require.js$',\n // Hide frames related to a fast refresh.\n '/metro/.*/lib/bundle-modules/.+\\\\.js$',\n 'node_modules/react-native/Libraries/Utilities/HMRClient.js$',\n 'node_modules/eventemitter3/index.js',\n 'node_modules/event-target-shim/dist/.+\\\\.js$',\n // Ignore the log forwarder used in the expo package.\n '/expo/build/logs/RemoteConsole.js$',\n // Improve errors thrown by invariant (ex: `Invariant Violation: \"main\" has not been registered`).\n 'node_modules/invariant/.+\\\\.js$',\n // Remove babel runtime additions\n 'node_modules/regenerator-runtime/.+\\\\.js$',\n // Remove react native setImmediate ponyfill\n 'node_modules/promise/setimmediate/.+\\\\.js$',\n // Babel helpers that implement language features\n 'node_modules/@babel/runtime/.+\\\\.js$',\n // Hide Hermes internal bytecode\n '/InternalBytecode/InternalBytecode\\\\.js$',\n // Block native code invocations\n `\\\\[native code\\\\]`,\n // Hide react-dom (web)\n 'node_modules/react-dom/.+\\\\.js$',\n ].join('|')\n);\n\nfunction isUrl(value: string): boolean {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nexport interface DefaultConfigOptions {\n mode?: 'exotic';\n}\n\nfunction getProjectBabelConfigFile(projectRoot: string): string | undefined {\n return (\n resolveFrom.silent(projectRoot, './babel.config.js') ||\n resolveFrom.silent(projectRoot, './.babelrc') ||\n resolveFrom.silent(projectRoot, './.babelrc.js')\n );\n}\n\nfunction getAssetPlugins(projectRoot: string): string[] {\n const assetPlugins: string[] = [];\n\n let hashAssetFilesPath;\n try {\n hashAssetFilesPath = resolveFrom(projectRoot, 'expo-asset/tools/hashAssetFiles');\n } catch {\n // TODO: we should warn/throw an error if the user has expo-updates installed but does not\n // have hashAssetFiles available, or if the user is in managed workflow and does not have\n // hashAssetFiles available. but in a bare app w/o expo-updates, just using dev-client,\n // it is not needed\n }\n\n if (hashAssetFilesPath) {\n assetPlugins.push(hashAssetFilesPath);\n }\n\n return assetPlugins;\n}\n\nlet hasWarnedAboutExotic = false;\n\nexport function getDefaultConfig(\n projectRoot: string,\n options: DefaultConfigOptions = {}\n): MetroConfig.InputConfigT {\n const isExotic = options.mode === 'exotic' || EXPO_USE_EXOTIC;\n\n if (isExotic && !hasWarnedAboutExotic) {\n hasWarnedAboutExotic = true;\n console.log(\n chalk.gray(\n `\\u203A Unstable feature ${chalk.bold`EXPO_USE_EXOTIC`} is enabled. Bundling may not work as expected, and is subject to breaking changes.`\n )\n );\n }\n const MetroConfig = importMetroConfigFromProject(projectRoot);\n\n const reactNativePath = path.dirname(resolveFrom(projectRoot, 'react-native/package.json'));\n\n try {\n // Set the `EXPO_METRO_CACHE_KEY_VERSION` variable for use in the custom babel transformer.\n // This hack is used because there doesn't appear to be anyway to resolve\n // `babel-preset-fbjs` relative to the project root later (in `metro-expo-babel-transformer`).\n const babelPresetFbjsPath = resolveFrom(projectRoot, 'babel-preset-fbjs/package.json');\n process.env.EXPO_METRO_CACHE_KEY_VERSION = String(require(babelPresetFbjsPath).version);\n } catch {\n // noop -- falls back to a hardcoded value.\n }\n\n const sourceExtsConfig = { isTS: true, isReact: true, isModern: false };\n const sourceExts = getBareExtensions([], sourceExtsConfig);\n\n if (isExotic) {\n // Add support for cjs (without platform extensions).\n sourceExts.push('cjs');\n }\n\n const babelConfigPath = getProjectBabelConfigFile(projectRoot);\n const isCustomBabelConfigDefined = !!babelConfigPath;\n\n const resolverMainFields: string[] = [];\n\n // Disable `react-native` in exotic mode, since library authors\n // use it to ship raw application code to the project.\n if (!isExotic) {\n resolverMainFields.push('react-native');\n }\n resolverMainFields.push('browser', 'main');\n\n const watchFolders = getWatchFolders(projectRoot);\n // TODO: nodeModulesPaths does not work with the new Node.js package.json exports API, this causes packages like uuid to fail. Disabling for now.\n const nodeModulesPaths = getModulesPaths(projectRoot);\n if (EXPO_DEBUG) {\n console.log();\n console.log(`Expo Metro config:`);\n try {\n console.log(`- Version: ${require('../package.json').version}`);\n } catch {}\n console.log(`- Extensions: ${sourceExts.join(', ')}`);\n console.log(`- React Native: ${reactNativePath}`);\n console.log(`- Babel config: ${babelConfigPath || 'babel-preset-expo (default)'}`);\n console.log(`- Resolver Fields: ${resolverMainFields.join(', ')}`);\n console.log(`- Watch Folders: ${watchFolders.join(', ')}`);\n console.log(`- Node Module Paths: ${nodeModulesPaths.join(', ')}`);\n console.log(`- Exotic: ${isExotic}`);\n console.log();\n }\n const {\n // Remove the default reporter which metro always resolves to be the react-native-community/cli reporter.\n // This prints a giant React logo which is less accessible to users on smaller terminals.\n reporter,\n ...metroDefaultValues\n } = MetroConfig.getDefaultConfig.getDefaultValues(projectRoot);\n\n // Merge in the default config from Metro here, even though loadConfig uses it as defaults.\n // This is a convenience for getDefaultConfig use in metro.config.js, e.g. to modify assetExts.\n return MetroConfig.mergeConfig(metroDefaultValues, {\n watchFolders,\n resolver: {\n resolverMainFields,\n platforms: ['ios', 'android', 'native', 'testing'],\n assetExts: metroDefaultValues.resolver.assetExts\n .concat(\n // Add default support for `expo-image` file types.\n ['heic', 'avif']\n )\n .filter((assetExt) => !sourceExts.includes(assetExt)),\n sourceExts,\n nodeModulesPaths,\n },\n serializer: {\n getModulesRunBeforeMainModule: () => [\n require.resolve(path.join(reactNativePath, 'Libraries/Core/InitializeCore')),\n // TODO: Bacon: load Expo side-effects\n ],\n getPolyfills: () => require(path.join(reactNativePath, 'rn-get-polyfills'))(),\n },\n server: {\n port: Number(process.env.RCT_METRO_PORT) || 8081,\n // NOTE(EvanBacon): Moves the server root down to the monorepo root.\n // This enables proper monorepo support for web.\n // @ts-expect-error: not on type\n unstable_serverRoot: EXPO_USE_METRO_WORKSPACE_ROOT\n ? getWorkspaceRoot(projectRoot) ?? projectRoot\n : projectRoot,\n },\n symbolicator: {\n customizeFrame: (frame) => {\n if (frame.file && isUrl(frame.file)) {\n return {\n ...frame,\n // HACK: This prevents Metro from attempting to read the invalid file URL it sent us.\n lineNumber: null,\n column: null,\n // This prevents the invalid frame from being shown by default.\n collapse: true,\n };\n }\n let collapse = Boolean(frame.file && INTERNAL_CALLSITES_REGEX.test(frame.file));\n\n if (!collapse) {\n // This represents the first frame of the stacktrace.\n // Often this looks like: `__r(0);`.\n // The URL will also be unactionable in the app and therefore not very useful to the developer.\n if (\n frame.column === 3 &&\n frame.methodName === 'global code' &&\n frame.file?.match(/^https?:\\/\\//g)\n ) {\n collapse = true;\n }\n }\n\n return { ...(frame || {}), collapse };\n },\n },\n transformer: {\n // `require.context` support\n unstable_allowRequireContext: true,\n allowOptionalDependencies: true,\n babelTransformerPath: isExotic\n ? require.resolve('./transformer/metro-expo-exotic-babel-transformer')\n : isCustomBabelConfigDefined\n ? // If the user defined a babel config file in their project,\n // then use the default transformer.\n // Try to use the project copy before falling back on the global version\n resolveFrom.silent(projectRoot, 'metro-react-native-babel-transformer')\n : // Otherwise, use a custom transformer that uses `babel-preset-expo` by default for projects.\n require.resolve('./transformer/metro-expo-babel-transformer'),\n assetRegistryPath: 'react-native/Libraries/Image/AssetRegistry',\n assetPlugins: getAssetPlugins(projectRoot),\n },\n });\n}\n\nexport interface LoadOptions {\n config?: string;\n maxWorkers?: number;\n port?: number;\n reporter?: Reporter;\n resetCache?: boolean;\n}\n\nexport async function loadAsync(\n projectRoot: string,\n { reporter, ...metroOptions }: LoadOptions = {}\n): Promise<MetroConfig.ConfigT> {\n let defaultConfig = getDefaultConfig(projectRoot);\n if (reporter) {\n defaultConfig = { ...defaultConfig, reporter };\n }\n const MetroConfig = importMetroConfigFromProject(projectRoot);\n return await MetroConfig.loadConfig(\n { cwd: projectRoot, projectRoot, ...metroOptions },\n defaultConfig\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExpoMetroConfig.js","names":["_config","data","require","_paths","runtimeEnv","_interopRequireWildcard","_jsonFile","_interopRequireDefault","_chalk","_metroCache","_metroConfig","_path","_resolveFrom","_customizeFrame","_env2","_getModulesPaths","_getWatchFolders","_rewriteRequestUrl","_withExpoSerializers","_postcss","_metroConfig2","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","debug","getProjectBabelConfigFile","projectRoot","resolveFrom","silent","getAssetPlugins","hashAssetFilesPath","Error","hasWarnedAboutExotic","getDefaultConfig","options","getDefaultMetroConfig","mergeConfig","importMetroConfig","isExotic","mode","env","EXPO_USE_EXOTIC","console","log","chalk","gray","bold","reactNativePath","path","dirname","babelPresetFbjsPath","process","EXPO_METRO_CACHE_KEY_VERSION","String","version","sourceExtsConfig","isTS","isReact","isModern","sourceExts","getBareExtensions","push","sassVersion","isCSSEnabled","getSassVersion","envFiles","getFiles","NODE_ENV","babelConfigPath","isCustomBabelConfigDefined","resolverMainFields","pkg","getPackageJson","watchFolders","getWatchFolders","nodeModulesPaths","getModulesPaths","EXPO_DEBUG","join","reporter","metroDefaultValues","getDefaultValues","metroConfig","resolver","platforms","assetExts","concat","filter","assetExt","includes","watcher","additionalExts","map","file","replace","serializer","getModulesRunBeforeMainModule","preModules","metroRuntime","resolve","getPolyfills","server","rewriteRequestUrl","getRewriteRequestUrl","port","Number","RCT_METRO_PORT","unstable_serverRoot","getServerRoot","symbolicator","customizeFrame","getDefaultCustomizeFrame","transformerPath","transformer","postcssHash","getPostcssConfigHash","browserslistHash","browserslist","stableHash","JSON","stringify","toString","unstable_allowRequireContext","allowOptionalDependencies","babelTransformerPath","assetRegistryPath","assetPlugins","withExpoSerializers","loadAsync","metroOptions","defaultConfig","loadConfig","cwd","exports","sassPkg","sassPkgJson","findUpPackageJson","JsonFile","read","sep","found"],"sources":["../src/ExpoMetroConfig.ts"],"sourcesContent":["// Copyright 2023-present 650 Industries (Expo). All rights reserved.\nimport { getPackageJson } from '@expo/config';\nimport { getBareExtensions } from '@expo/config/paths';\nimport * as runtimeEnv from '@expo/env';\nimport JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport { Reporter } from 'metro';\nimport { stableHash } from 'metro-cache';\nimport { ConfigT as MetroConfig, InputConfigT } from 'metro-config';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { getDefaultCustomizeFrame, INTERNAL_CALLSITES_REGEX } from './customizeFrame';\nimport { env } from './env';\nimport { getModulesPaths, getServerRoot } from './getModulesPaths';\nimport { getWatchFolders } from './getWatchFolders';\nimport { getRewriteRequestUrl } from './rewriteRequestUrl';\nimport { withExpoSerializers } from './serializer/withExpoSerializers';\nimport { getPostcssConfigHash } from './transform-worker/postcss';\nimport { importMetroConfig } from './traveling/metro-config';\n\nconst debug = require('debug')('expo:metro:config') as typeof console.log;\n\nexport interface LoadOptions {\n config?: string;\n maxWorkers?: number;\n port?: number;\n reporter?: Reporter;\n resetCache?: boolean;\n}\n\nexport interface DefaultConfigOptions {\n mode?: 'exotic';\n /**\n * **Experimental:** Enable CSS support for Metro web, and shim on native.\n *\n * This is an experimental feature and may change in the future. The underlying implementation\n * is subject to change, and native support for CSS Modules may be added in the future during a non-major SDK release.\n */\n isCSSEnabled?: boolean;\n}\n\nfunction getProjectBabelConfigFile(projectRoot: string): string | undefined {\n return (\n resolveFrom.silent(projectRoot, './babel.config.js') ||\n resolveFrom.silent(projectRoot, './.babelrc') ||\n resolveFrom.silent(projectRoot, './.babelrc.js')\n );\n}\n\nfunction getAssetPlugins(projectRoot: string): string[] {\n const hashAssetFilesPath = resolveFrom.silent(projectRoot, 'expo-asset/tools/hashAssetFiles');\n\n if (!hashAssetFilesPath) {\n throw new Error(`The required package \\`expo-asset\\` cannot be found`);\n }\n\n return [hashAssetFilesPath];\n}\n\nlet hasWarnedAboutExotic = false;\n\nexport function getDefaultConfig(\n projectRoot: string,\n options: DefaultConfigOptions = {}\n): InputConfigT {\n const { getDefaultConfig: getDefaultMetroConfig, mergeConfig } = importMetroConfig(projectRoot);\n\n const isExotic = options.mode === 'exotic' || env.EXPO_USE_EXOTIC;\n\n if (isExotic && !hasWarnedAboutExotic) {\n hasWarnedAboutExotic = true;\n console.log(\n chalk.gray(\n `\\u203A Unstable feature ${chalk.bold`EXPO_USE_EXOTIC`} is enabled. Bundling may not work as expected, and is subject to breaking changes.`\n )\n );\n }\n\n const reactNativePath = path.dirname(resolveFrom(projectRoot, 'react-native/package.json'));\n\n try {\n // Set the `EXPO_METRO_CACHE_KEY_VERSION` variable for use in the custom babel transformer.\n // This hack is used because there doesn't appear to be anyway to resolve\n // `babel-preset-fbjs` relative to the project root later (in `metro-expo-babel-transformer`).\n const babelPresetFbjsPath = resolveFrom(projectRoot, 'babel-preset-fbjs/package.json');\n process.env.EXPO_METRO_CACHE_KEY_VERSION = String(require(babelPresetFbjsPath).version);\n } catch {\n // noop -- falls back to a hardcoded value.\n }\n\n const sourceExtsConfig = { isTS: true, isReact: true, isModern: false };\n const sourceExts = getBareExtensions([], sourceExtsConfig);\n\n // Add support for cjs (without platform extensions).\n sourceExts.push('cjs');\n\n let sassVersion: string | null = null;\n if (options.isCSSEnabled) {\n sassVersion = getSassVersion(projectRoot);\n // Enable SCSS by default so we can provide a better error message\n // when sass isn't installed.\n sourceExts.push('scss', 'sass', 'css');\n }\n\n const envFiles = runtimeEnv.getFiles(process.env.NODE_ENV);\n\n const babelConfigPath = getProjectBabelConfigFile(projectRoot);\n const isCustomBabelConfigDefined = !!babelConfigPath;\n\n const resolverMainFields: string[] = [];\n\n // Disable `react-native` in exotic mode, since library authors\n // use it to ship raw application code to the project.\n if (!isExotic) {\n resolverMainFields.push('react-native');\n }\n resolverMainFields.push('browser', 'main');\n\n const pkg = getPackageJson(projectRoot);\n const watchFolders = getWatchFolders(projectRoot);\n // TODO: nodeModulesPaths does not work with the new Node.js package.json exports API, this causes packages like uuid to fail. Disabling for now.\n const nodeModulesPaths = getModulesPaths(projectRoot);\n if (env.EXPO_DEBUG) {\n console.log();\n console.log(`Expo Metro config:`);\n try {\n console.log(`- Version: ${require('../package.json').version}`);\n } catch {}\n console.log(`- Extensions: ${sourceExts.join(', ')}`);\n console.log(`- React Native: ${reactNativePath}`);\n console.log(`- Babel config: ${babelConfigPath || 'babel-preset-expo (default)'}`);\n console.log(`- Resolver Fields: ${resolverMainFields.join(', ')}`);\n console.log(`- Watch Folders: ${watchFolders.join(', ')}`);\n console.log(`- Node Module Paths: ${nodeModulesPaths.join(', ')}`);\n console.log(`- Exotic: ${isExotic}`);\n console.log(`- Env Files: ${envFiles}`);\n console.log(`- Sass: ${sassVersion}`);\n console.log();\n }\n const {\n // Remove the default reporter which metro always resolves to be the react-native-community/cli reporter.\n // This prints a giant React logo which is less accessible to users on smaller terminals.\n reporter,\n ...metroDefaultValues\n } = getDefaultMetroConfig.getDefaultValues(projectRoot);\n\n // Merge in the default config from Metro here, even though loadConfig uses it as defaults.\n // This is a convenience for getDefaultConfig use in metro.config.js, e.g. to modify assetExts.\n const metroConfig: Partial<MetroConfig> = mergeConfig(metroDefaultValues, {\n watchFolders,\n resolver: {\n resolverMainFields,\n platforms: ['ios', 'android'],\n assetExts: metroDefaultValues.resolver.assetExts\n .concat(\n // Add default support for `expo-image` file types.\n ['heic', 'avif']\n )\n .filter((assetExt) => !sourceExts.includes(assetExt)),\n sourceExts,\n nodeModulesPaths,\n },\n watcher: {\n // strip starting dot from env files\n additionalExts: envFiles.map((file: string) => file.replace(/^\\./, '')),\n },\n serializer: {\n getModulesRunBeforeMainModule: () => {\n const preModules: string[] = [];\n\n // We need to shift this to be the first module so web Fast Refresh works as expected.\n // This will only be applied if the module is installed and imported somewhere in the bundle already.\n const metroRuntime = resolveFrom.silent(projectRoot, '@expo/metro-runtime');\n if (metroRuntime) {\n preModules.push(metroRuntime);\n }\n\n preModules.push(\n require.resolve(path.join(reactNativePath, 'Libraries/Core/InitializeCore'))\n );\n return preModules;\n },\n getPolyfills: () => require(path.join(reactNativePath, 'rn-get-polyfills'))(),\n },\n server: {\n rewriteRequestUrl: getRewriteRequestUrl(projectRoot),\n port: Number(env.RCT_METRO_PORT) || 8081,\n // NOTE(EvanBacon): Moves the server root down to the monorepo root.\n // This enables proper monorepo support for web.\n unstable_serverRoot: getServerRoot(projectRoot),\n },\n symbolicator: {\n customizeFrame: getDefaultCustomizeFrame(),\n },\n transformerPath: options.isCSSEnabled\n ? // Custom worker that adds CSS support for Metro web.\n require.resolve('./transform-worker/transform-worker')\n : metroDefaultValues.transformerPath,\n\n transformer: {\n // Custom: These are passed to `getCacheKey` and ensure invalidation when the version changes.\n // @ts-expect-error: not on type.\n postcssHash: getPostcssConfigHash(projectRoot),\n browserslistHash: pkg.browserslist\n ? stableHash(JSON.stringify(pkg.browserslist)).toString('hex')\n : null,\n sassVersion,\n\n // `require.context` support\n unstable_allowRequireContext: true,\n allowOptionalDependencies: true,\n babelTransformerPath: isExotic\n ? require.resolve('./transformer/metro-expo-exotic-babel-transformer')\n : isCustomBabelConfigDefined\n ? // If the user defined a babel config file in their project,\n // then use the default transformer.\n // Try to use the project copy before falling back on the global version\n resolveFrom.silent(projectRoot, 'metro-react-native-babel-transformer')\n : // Otherwise, use a custom transformer that uses `babel-preset-expo` by default for projects.\n require.resolve('./transformer/metro-expo-babel-transformer'),\n assetRegistryPath: 'react-native/Libraries/Image/AssetRegistry',\n assetPlugins: getAssetPlugins(projectRoot),\n },\n });\n\n return withExpoSerializers(metroConfig);\n}\n\nexport async function loadAsync(\n projectRoot: string,\n { reporter, ...metroOptions }: LoadOptions = {}\n): Promise<MetroConfig> {\n let defaultConfig = getDefaultConfig(projectRoot);\n if (reporter) {\n defaultConfig = { ...defaultConfig, reporter };\n }\n\n const { loadConfig } = importMetroConfig(projectRoot);\n\n return await loadConfig({ cwd: projectRoot, projectRoot, ...metroOptions }, defaultConfig);\n}\n\n// re-export for use in config files.\nexport { MetroConfig, INTERNAL_CALLSITES_REGEX };\n\n// re-export for legacy cases.\nexport const EXPO_DEBUG = env.EXPO_DEBUG;\n\nfunction getSassVersion(projectRoot: string): string | null {\n const sassPkg = resolveFrom.silent(projectRoot, 'sass');\n if (!sassPkg) return null;\n const sassPkgJson = findUpPackageJson(sassPkg);\n if (!sassPkgJson) return null;\n const pkg = JsonFile.read(sassPkgJson);\n\n debug('sass package.json:', sassPkgJson);\n const sassVersion = pkg.version;\n if (typeof sassVersion === 'string') {\n return sassVersion;\n }\n\n return null;\n}\n\nfunction findUpPackageJson(cwd: string): string | null {\n if (['.', path.sep].includes(cwd)) return null;\n\n const found = resolveFrom.silent(cwd, './package.json');\n if (found) {\n return found;\n }\n return findUpPackageJson(path.dirname(cwd));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SymbolicatorConfigT } from 'metro-config';
|
|
2
|
+
type CustomizeFrameFunc = SymbolicatorConfigT['customizeFrame'];
|
|
3
|
+
export declare const INTERNAL_CALLSITES_REGEX: RegExp;
|
|
4
|
+
/**
|
|
5
|
+
* The default frame processor. This is used to modify the stack traces.
|
|
6
|
+
* This method attempts to collapse all frames that aren't relevant to
|
|
7
|
+
* the user by default.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getDefaultCustomizeFrame(): CustomizeFrameFunc;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.INTERNAL_CALLSITES_REGEX = void 0;
|
|
7
|
+
exports.getDefaultCustomizeFrame = getDefaultCustomizeFrame;
|
|
8
|
+
function _url() {
|
|
9
|
+
const data = require("url");
|
|
10
|
+
_url = function () {
|
|
11
|
+
return data;
|
|
12
|
+
};
|
|
13
|
+
return data;
|
|
14
|
+
}
|
|
15
|
+
// Copyright 2023-present 650 Industries (Expo). All rights reserved.
|
|
16
|
+
|
|
17
|
+
// Import only the types here, the values will be imported from the project, at runtime.
|
|
18
|
+
const INTERNAL_CALLSITES_REGEX = new RegExp(['/Libraries/Renderer/implementations/.+\\.js$', '/Libraries/BatchedBridge/MessageQueue\\.js$', '/Libraries/YellowBox/.+\\.js$', '/Libraries/LogBox/.+\\.js$', '/Libraries/Core/Timers/.+\\.js$', 'node_modules/react-devtools-core/.+\\.js$', 'node_modules/react-refresh/.+\\.js$', 'node_modules/scheduler/.+\\.js$',
|
|
19
|
+
// Metro replaces `require()` with a different method,
|
|
20
|
+
// we want to omit this method from the stack trace.
|
|
21
|
+
// This is akin to most React tooling.
|
|
22
|
+
'/metro/.*/polyfills/require.js$',
|
|
23
|
+
// Hide frames related to a fast refresh.
|
|
24
|
+
'/metro/.*/lib/bundle-modules/.+\\.js$', 'node_modules/react-native/Libraries/Utilities/HMRClient.js$', 'node_modules/eventemitter3/index.js', 'node_modules/event-target-shim/dist/.+\\.js$',
|
|
25
|
+
// Ignore the log forwarder used in the expo package.
|
|
26
|
+
'/expo/build/logs/RemoteConsole.js$',
|
|
27
|
+
// Improve errors thrown by invariant (ex: `Invariant Violation: "main" has not been registered`).
|
|
28
|
+
'node_modules/invariant/.+\\.js$',
|
|
29
|
+
// Remove babel runtime additions
|
|
30
|
+
'node_modules/regenerator-runtime/.+\\.js$',
|
|
31
|
+
// Remove react native setImmediate ponyfill
|
|
32
|
+
'node_modules/promise/setimmediate/.+\\.js$',
|
|
33
|
+
// Babel helpers that implement language features
|
|
34
|
+
'node_modules/@babel/runtime/.+\\.js$',
|
|
35
|
+
// Hide Hermes internal bytecode
|
|
36
|
+
'/InternalBytecode/InternalBytecode\\.js$',
|
|
37
|
+
// Block native code invocations
|
|
38
|
+
`\\[native code\\]`,
|
|
39
|
+
// Hide react-dom (web)
|
|
40
|
+
'node_modules/react-dom/.+\\.js$'].join('|'));
|
|
41
|
+
exports.INTERNAL_CALLSITES_REGEX = INTERNAL_CALLSITES_REGEX;
|
|
42
|
+
function isUrl(value) {
|
|
43
|
+
try {
|
|
44
|
+
// eslint-disable-next-line no-new
|
|
45
|
+
new (_url().URL)(value);
|
|
46
|
+
return true;
|
|
47
|
+
} catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The default frame processor. This is used to modify the stack traces.
|
|
54
|
+
* This method attempts to collapse all frames that aren't relevant to
|
|
55
|
+
* the user by default.
|
|
56
|
+
*/
|
|
57
|
+
function getDefaultCustomizeFrame() {
|
|
58
|
+
return frame => {
|
|
59
|
+
if (frame.file && isUrl(frame.file)) {
|
|
60
|
+
return {
|
|
61
|
+
...frame,
|
|
62
|
+
// HACK: This prevents Metro from attempting to read the invalid file URL it sent us.
|
|
63
|
+
lineNumber: null,
|
|
64
|
+
column: null,
|
|
65
|
+
// This prevents the invalid frame from being shown by default.
|
|
66
|
+
collapse: true
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
let collapse = Boolean(frame.file && INTERNAL_CALLSITES_REGEX.test(frame.file));
|
|
70
|
+
if (!collapse) {
|
|
71
|
+
var _frame$file;
|
|
72
|
+
// This represents the first frame of the stacktrace.
|
|
73
|
+
// Often this looks like: `__r(0);`.
|
|
74
|
+
// The URL will also be unactionable in the app and therefore not very useful to the developer.
|
|
75
|
+
if (frame.column === 3 && frame.methodName === 'global code' && (_frame$file = frame.file) !== null && _frame$file !== void 0 && _frame$file.match(/^https?:\/\//g)) {
|
|
76
|
+
collapse = true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
...(frame || {}),
|
|
81
|
+
collapse
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=customizeFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customizeFrame.js","names":["_url","data","require","INTERNAL_CALLSITES_REGEX","RegExp","join","exports","isUrl","value","URL","getDefaultCustomizeFrame","frame","file","lineNumber","column","collapse","Boolean","test","_frame$file","methodName","match"],"sources":["../src/customizeFrame.ts"],"sourcesContent":["// Copyright 2023-present 650 Industries (Expo). All rights reserved.\nimport { SymbolicatorConfigT } from 'metro-config';\nimport { URL } from 'url';\n\ntype CustomizeFrameFunc = SymbolicatorConfigT['customizeFrame'];\n\n// Import only the types here, the values will be imported from the project, at runtime.\nexport const INTERNAL_CALLSITES_REGEX = new RegExp(\n [\n '/Libraries/Renderer/implementations/.+\\\\.js$',\n '/Libraries/BatchedBridge/MessageQueue\\\\.js$',\n '/Libraries/YellowBox/.+\\\\.js$',\n '/Libraries/LogBox/.+\\\\.js$',\n '/Libraries/Core/Timers/.+\\\\.js$',\n 'node_modules/react-devtools-core/.+\\\\.js$',\n 'node_modules/react-refresh/.+\\\\.js$',\n 'node_modules/scheduler/.+\\\\.js$',\n // Metro replaces `require()` with a different method,\n // we want to omit this method from the stack trace.\n // This is akin to most React tooling.\n '/metro/.*/polyfills/require.js$',\n // Hide frames related to a fast refresh.\n '/metro/.*/lib/bundle-modules/.+\\\\.js$',\n 'node_modules/react-native/Libraries/Utilities/HMRClient.js$',\n 'node_modules/eventemitter3/index.js',\n 'node_modules/event-target-shim/dist/.+\\\\.js$',\n // Ignore the log forwarder used in the expo package.\n '/expo/build/logs/RemoteConsole.js$',\n // Improve errors thrown by invariant (ex: `Invariant Violation: \"main\" has not been registered`).\n 'node_modules/invariant/.+\\\\.js$',\n // Remove babel runtime additions\n 'node_modules/regenerator-runtime/.+\\\\.js$',\n // Remove react native setImmediate ponyfill\n 'node_modules/promise/setimmediate/.+\\\\.js$',\n // Babel helpers that implement language features\n 'node_modules/@babel/runtime/.+\\\\.js$',\n // Hide Hermes internal bytecode\n '/InternalBytecode/InternalBytecode\\\\.js$',\n // Block native code invocations\n `\\\\[native code\\\\]`,\n // Hide react-dom (web)\n 'node_modules/react-dom/.+\\\\.js$',\n ].join('|')\n);\n\nfunction isUrl(value: string): boolean {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * The default frame processor. This is used to modify the stack traces.\n * This method attempts to collapse all frames that aren't relevant to\n * the user by default.\n */\nexport function getDefaultCustomizeFrame(): CustomizeFrameFunc {\n return (frame: Parameters<CustomizeFrameFunc>[0]) => {\n if (frame.file && isUrl(frame.file)) {\n return {\n ...frame,\n // HACK: This prevents Metro from attempting to read the invalid file URL it sent us.\n lineNumber: null,\n column: null,\n // This prevents the invalid frame from being shown by default.\n collapse: true,\n };\n }\n let collapse = Boolean(frame.file && INTERNAL_CALLSITES_REGEX.test(frame.file));\n\n if (!collapse) {\n // This represents the first frame of the stacktrace.\n // Often this looks like: `__r(0);`.\n // The URL will also be unactionable in the app and therefore not very useful to the developer.\n if (\n frame.column === 3 &&\n frame.methodName === 'global code' &&\n frame.file?.match(/^https?:\\/\\//g)\n ) {\n collapse = true;\n }\n }\n\n return { ...(frame || {}), collapse };\n };\n}\n"],"mappings":";;;;;;;AAEA,SAAAA,KAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,IAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAFA;;AAMA;AACO,MAAME,wBAAwB,GAAG,IAAIC,MAAM,CAChD,CACE,8CAA8C,EAC9C,6CAA6C,EAC7C,+BAA+B,EAC/B,4BAA4B,EAC5B,iCAAiC,EACjC,2CAA2C,EAC3C,qCAAqC,EACrC,iCAAiC;AACjC;AACA;AACA;AACA,iCAAiC;AACjC;AACA,uCAAuC,EACvC,6DAA6D,EAC7D,qCAAqC,EACrC,8CAA8C;AAC9C;AACA,oCAAoC;AACpC;AACA,iCAAiC;AACjC;AACA,2CAA2C;AAC3C;AACA,4CAA4C;AAC5C;AACA,sCAAsC;AACtC;AACA,0CAA0C;AAC1C;AACC,mBAAkB;AACnB;AACA,iCAAiC,CAClC,CAACC,IAAI,CAAC,GAAG,CAAC,CACZ;AAACC,OAAA,CAAAH,wBAAA,GAAAA,wBAAA;AAEF,SAASI,KAAKA,CAACC,KAAa,EAAW;EACrC,IAAI;IACF;IACA,KAAIC,UAAG,EAACD,KAAK,CAAC;IACd,OAAO,IAAI;EACb,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,wBAAwBA,CAAA,EAAuB;EAC7D,OAAQC,KAAwC,IAAK;IACnD,IAAIA,KAAK,CAACC,IAAI,IAAIL,KAAK,CAACI,KAAK,CAACC,IAAI,CAAC,EAAE;MACnC,OAAO;QACL,GAAGD,KAAK;QACR;QACAE,UAAU,EAAE,IAAI;QAChBC,MAAM,EAAE,IAAI;QACZ;QACAC,QAAQ,EAAE;MACZ,CAAC;IACH;IACA,IAAIA,QAAQ,GAAGC,OAAO,CAACL,KAAK,CAACC,IAAI,IAAIT,wBAAwB,CAACc,IAAI,CAACN,KAAK,CAACC,IAAI,CAAC,CAAC;IAE/E,IAAI,CAACG,QAAQ,EAAE;MAAA,IAAAG,WAAA;MACb;MACA;MACA;MACA,IACEP,KAAK,CAACG,MAAM,KAAK,CAAC,IAClBH,KAAK,CAACQ,UAAU,KAAK,aAAa,KAAAD,WAAA,GAClCP,KAAK,CAACC,IAAI,cAAAM,WAAA,eAAVA,WAAA,CAAYE,KAAK,CAAC,eAAe,CAAC,EAClC;QACAL,QAAQ,GAAG,IAAI;MACjB;IACF;IAEA,OAAO;MAAE,IAAIJ,KAAK,IAAI,CAAC,CAAC,CAAC;MAAEI;IAAS,CAAC;EACvC,CAAC;AACH"}
|