@expo/metro-config 0.11.0 → 0.12.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.
@@ -174,15 +174,16 @@ function getDefaultConfig(projectRoot, options = {}) {
174
174
  const sourceExtsConfig = {
175
175
  isTS: true,
176
176
  isReact: true,
177
- isModern: false
177
+ isModern: true
178
178
  };
179
179
  const sourceExts = (0, _paths().getBareExtensions)([], sourceExtsConfig);
180
180
 
181
181
  // Add support for cjs (without platform extensions).
182
182
  sourceExts.push('cjs');
183
+ const reanimatedVersion = getPkgVersion(projectRoot, 'react-native-reanimated');
183
184
  let sassVersion = null;
184
185
  if (options.isCSSEnabled) {
185
- sassVersion = getSassVersion(projectRoot);
186
+ sassVersion = getPkgVersion(projectRoot, 'sass');
186
187
  // Enable SCSS by default so we can provide a better error message
187
188
  // when sass isn't installed.
188
189
  sourceExts.push('scss', 'sass', 'css');
@@ -190,14 +191,6 @@ function getDefaultConfig(projectRoot, options = {}) {
190
191
  const envFiles = runtimeEnv().getFiles(process.env.NODE_ENV, {
191
192
  silent: true
192
193
  });
193
- const resolverMainFields = [];
194
-
195
- // Disable `react-native` in exotic mode, since library authors
196
- // use it to ship raw application code to the project.
197
- if (!isExotic) {
198
- resolverMainFields.push('react-native');
199
- }
200
- resolverMainFields.push('browser', 'main');
201
194
  const pkg = (0, _config().getPackageJson)(projectRoot);
202
195
  const watchFolders = (0, _getWatchFolders().getWatchFolders)(projectRoot);
203
196
  // TODO: nodeModulesPaths does not work with the new Node.js package.json exports API, this causes packages like uuid to fail. Disabling for now.
@@ -210,12 +203,12 @@ function getDefaultConfig(projectRoot, options = {}) {
210
203
  } catch {}
211
204
  console.log(`- Extensions: ${sourceExts.join(', ')}`);
212
205
  console.log(`- React Native: ${reactNativePath}`);
213
- console.log(`- Resolver Fields: ${resolverMainFields.join(', ')}`);
214
206
  console.log(`- Watch Folders: ${watchFolders.join(', ')}`);
215
207
  console.log(`- Node Module Paths: ${nodeModulesPaths.join(', ')}`);
216
208
  console.log(`- Exotic: ${isExotic}`);
217
209
  console.log(`- Env Files: ${envFiles}`);
218
210
  console.log(`- Sass: ${sassVersion}`);
211
+ console.log(`- Reanimated: ${reanimatedVersion}`);
219
212
  console.log();
220
213
  }
221
214
  const {
@@ -230,7 +223,9 @@ function getDefaultConfig(projectRoot, options = {}) {
230
223
  const metroConfig = mergeConfig(metroDefaultValues, {
231
224
  watchFolders,
232
225
  resolver: {
233
- resolverMainFields,
226
+ // unstable_conditionsByPlatform: { web: ['browser'] },
227
+ unstable_conditionNames: ['require', 'import', 'react-native'],
228
+ resolverMainFields: ['react-native', 'browser', 'main'],
234
229
  platforms: ['ios', 'android'],
235
230
  assetExts: metroDefaultValues.resolver.assetExts.concat(
236
231
  // Add default support for `expo-image` file types.
@@ -277,6 +272,8 @@ function getDefaultConfig(projectRoot, options = {}) {
277
272
  postcssHash: (0, _postcss().getPostcssConfigHash)(projectRoot),
278
273
  browserslistHash: pkg.browserslist ? (0, _metroCache().stableHash)(JSON.stringify(pkg.browserslist)).toString('hex') : null,
279
274
  sassVersion,
275
+ // Ensure invalidation when the version changes due to the Babel plugin.
276
+ reanimatedVersion,
280
277
  // `require.context` support
281
278
  unstable_allowRequireContext: true,
282
279
  allowOptionalDependencies: true,
@@ -315,16 +312,16 @@ async function loadAsync(projectRoot, {
315
312
  // re-export for legacy cases.
316
313
  const EXPO_DEBUG = _env2().env.EXPO_DEBUG;
317
314
  exports.EXPO_DEBUG = EXPO_DEBUG;
318
- function getSassVersion(projectRoot) {
319
- const sassPkg = _resolveFrom().default.silent(projectRoot, 'sass');
320
- if (!sassPkg) return null;
321
- const sassPkgJson = findUpPackageJson(sassPkg);
322
- if (!sassPkgJson) return null;
323
- const pkg = _jsonFile().default.read(sassPkgJson);
324
- debug('sass package.json:', sassPkgJson);
325
- const sassVersion = pkg.version;
326
- if (typeof sassVersion === 'string') {
327
- return sassVersion;
315
+ function getPkgVersion(projectRoot, pkgName) {
316
+ const targetPkg = _resolveFrom().default.silent(projectRoot, pkgName);
317
+ if (!targetPkg) return null;
318
+ const targetPkgJson = findUpPackageJson(targetPkg);
319
+ if (!targetPkgJson) return null;
320
+ const pkg = _jsonFile().default.read(targetPkgJson);
321
+ debug(`${pkgName} package.json:`, targetPkgJson);
322
+ const pkgVersion = pkg.version;
323
+ if (typeof pkgVersion === 'string') {
324
+ return pkgVersion;
328
325
  }
329
326
  return null;
330
327
  }
@@ -1 +1 @@
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","getAssetPlugins","projectRoot","hashAssetFilesPath","resolveFrom","silent","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","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","resolve","metroRuntime","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 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, { silent: true });\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(`- 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 // MUST be first\n require.resolve(path.join(reactNativePath, 'Libraries/Core/InitializeCore')),\n ];\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 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 ? // TODO: Combine these into one transformer.\n require.resolve('./transformer/metro-expo-exotic-babel-transformer')\n : require.resolve('./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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"}
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","getAssetPlugins","projectRoot","hashAssetFilesPath","resolveFrom","silent","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","reanimatedVersion","getPkgVersion","sassVersion","isCSSEnabled","envFiles","getFiles","NODE_ENV","pkg","getPackageJson","watchFolders","getWatchFolders","nodeModulesPaths","getModulesPaths","EXPO_DEBUG","join","reporter","metroDefaultValues","getDefaultValues","metroConfig","resolver","unstable_conditionNames","resolverMainFields","platforms","assetExts","concat","filter","assetExt","includes","watcher","additionalExts","map","file","replace","serializer","getModulesRunBeforeMainModule","preModules","resolve","metroRuntime","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","pkgName","targetPkg","targetPkgJson","findUpPackageJson","JsonFile","read","pkgVersion","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 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: true };\n const sourceExts = getBareExtensions([], sourceExtsConfig);\n\n // Add support for cjs (without platform extensions).\n sourceExts.push('cjs');\n\n const reanimatedVersion = getPkgVersion(projectRoot, 'react-native-reanimated');\n\n let sassVersion: string | null = null;\n if (options.isCSSEnabled) {\n sassVersion = getPkgVersion(projectRoot, 'sass');\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, { silent: true });\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(`- 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(`- Reanimated: ${reanimatedVersion}`);\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 // unstable_conditionsByPlatform: { web: ['browser'] },\n unstable_conditionNames: ['require', 'import', 'react-native'],\n resolverMainFields: ['react-native', 'browser', 'main'],\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 // MUST be first\n require.resolve(path.join(reactNativePath, 'Libraries/Core/InitializeCore')),\n ];\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 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 // Ensure invalidation when the version changes due to the Babel plugin.\n reanimatedVersion,\n\n // `require.context` support\n unstable_allowRequireContext: true,\n allowOptionalDependencies: true,\n babelTransformerPath: isExotic\n ? // TODO: Combine these into one transformer.\n require.resolve('./transformer/metro-expo-exotic-babel-transformer')\n : require.resolve('./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 getPkgVersion(projectRoot: string, pkgName: string): string | null {\n const targetPkg = resolveFrom.silent(projectRoot, pkgName);\n if (!targetPkg) return null;\n const targetPkgJson = findUpPackageJson(targetPkg);\n if (!targetPkgJson) return null;\n const pkg = JsonFile.read(targetPkgJson);\n\n debug(`${pkgName} package.json:`, targetPkgJson);\n const pkgVersion = pkg.version;\n if (typeof pkgVersion === 'string') {\n return pkgVersion;\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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"}
@@ -22,8 +22,6 @@ const INTERNAL_CALLSITES_REGEX = new RegExp(['/Libraries/Renderer/implementation
22
22
  '/metro/.*/polyfills/require.js$',
23
23
  // Hide frames related to a fast refresh.
24
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
25
  // Improve errors thrown by invariant (ex: `Invariant Violation: "main" has not been registered`).
28
26
  'node_modules/invariant/.+\\.js$',
29
27
  // Remove babel runtime additions
@@ -37,7 +35,11 @@ const INTERNAL_CALLSITES_REGEX = new RegExp(['/Libraries/Renderer/implementation
37
35
  // Block native code invocations
38
36
  `\\[native code\\]`,
39
37
  // Hide react-dom (web)
40
- 'node_modules/react-dom/.+\\.js$', '@expo/metro-runtime/build/.+\\.js$'].join('|'));
38
+ 'node_modules/react-dom/.+\\.js$',
39
+ // Block expo's metro-runtime
40
+ '@expo/metro-runtime/build/.+\\.js$',
41
+ // Block upstream metro-runtime
42
+ '/metro-runtime/.+\\.js$'].join('|'));
41
43
  exports.INTERNAL_CALLSITES_REGEX = INTERNAL_CALLSITES_REGEX;
42
44
  function isUrl(value) {
43
45
  try {
@@ -1 +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 '@expo/metro-runtime/build/.+\\\\.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,EACjC,oCAAoC,CACrC,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"}
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 // 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 // Block expo's metro-runtime\n '@expo/metro-runtime/build/.+\\\\.js$',\n // Block upstream metro-runtime\n '/metro-runtime/.+\\\\.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,iCAAiC;AACjC;AACA,2CAA2C;AAC3C;AACA,4CAA4C;AAC5C;AACA,sCAAsC;AACtC;AACA,0CAA0C;AAC1C;AACC,mBAAkB;AACnB;AACA,iCAAiC;AACjC;AACA,oCAAoC;AACpC;AACA,yBAAyB,CAC1B,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"}
@@ -62,15 +62,16 @@ function getCssSerialAssets(dependencies, {
62
62
  const cssMetadata = getCssMetadata(module);
63
63
  if (cssMetadata) {
64
64
  const contents = cssMetadata.code;
65
+ const originFilename = _path().default.relative(projectRoot, module.path);
65
66
  const filename = _path().default.join(
66
67
  // Consistent location
67
68
  STATIC_EXPORT_DIRECTORY,
68
69
  // Hashed file contents + name for caching
69
70
  fileNameFromContents({
70
- filepath: module.path,
71
+ // Stable filename for hashing in CI.
72
+ filepath: originFilename,
71
73
  src: contents
72
74
  }) + '.css');
73
- const originFilename = _path().default.relative(projectRoot, module.path);
74
75
  assets.push({
75
76
  type: 'css',
76
77
  originFilename,
@@ -1 +1 @@
1
- {"version":3,"file":"getCssDeps.js","names":["_js","data","require","_path","_interopRequireDefault","_css","_hash","obj","__esModule","default","STATIC_EXPORT_DIRECTORY","filterJsModules","dependencies","processModuleFilter","projectRoot","assets","module","values","isJsModule","getJsOutput","type","path","relative","push","getCssSerialAssets","cssMetadata","getCssMetadata","contents","code","filename","join","fileNameFromContents","filepath","src","originFilename","source","metadata","hmrId","pathToHtmlSafeName","_module$output$","output","css","Error","JSON","stringify","getFileName","hashString","basename","replace"],"sources":["../../src/serializer/getCssDeps.ts"],"sourcesContent":["import type { Module } from 'metro';\nimport { getJsOutput, isJsModule } from 'metro/src/DeltaBundler/Serializers/helpers/js';\nimport path from 'path';\n\nimport { pathToHtmlSafeName } from '../transform-worker/css';\nimport { hashString } from '../utils/hash';\nimport { SerialAsset } from './serializerAssets';\n\nexport type ReadOnlyDependencies<T = any> = ReadonlyMap<string, Module<T>>;\n\ntype Options = {\n processModuleFilter: (modules: Module) => boolean;\n assetPlugins: readonly string[];\n platform?: string | null;\n projectRoot: string;\n publicPath: string;\n};\n\ntype MetroModuleCSSMetadata = {\n code: string;\n lineCount: number;\n map: any[];\n};\n\n// s = static\nconst STATIC_EXPORT_DIRECTORY = '_expo/static/css';\n\nexport type JSModule = Module<{\n data: {\n code: string;\n map: unknown;\n lineCount: number;\n css?: {\n code: string;\n map: unknown;\n lineCount: number;\n };\n };\n type: 'js/module';\n}>;\n\nexport function filterJsModules(\n dependencies: ReadOnlyDependencies,\n { processModuleFilter, projectRoot }: Pick<Options, 'projectRoot' | 'processModuleFilter'>\n) {\n const assets: JSModule[] = [];\n\n for (const module of dependencies.values()) {\n if (\n isJsModule(module) &&\n processModuleFilter(module) &&\n getJsOutput(module).type === 'js/module' &&\n path.relative(projectRoot, module.path) !== 'package.json'\n ) {\n assets.push(module as JSModule);\n }\n }\n return assets;\n}\n\nexport function getCssSerialAssets<T extends any>(\n dependencies: ReadOnlyDependencies<T>,\n { processModuleFilter, projectRoot }: Pick<Options, 'projectRoot' | 'processModuleFilter'>\n): SerialAsset[] {\n const assets: SerialAsset[] = [];\n\n for (const module of filterJsModules(dependencies, { processModuleFilter, projectRoot })) {\n const cssMetadata = getCssMetadata(module);\n if (cssMetadata) {\n const contents = cssMetadata.code;\n const filename = path.join(\n // Consistent location\n STATIC_EXPORT_DIRECTORY,\n // Hashed file contents + name for caching\n fileNameFromContents({\n filepath: module.path,\n src: contents,\n }) + '.css'\n );\n const originFilename = path.relative(projectRoot, module.path);\n assets.push({\n type: 'css',\n originFilename,\n filename,\n source: contents,\n metadata: {\n hmrId: pathToHtmlSafeName(originFilename),\n },\n });\n }\n }\n\n return assets;\n}\n\nfunction getCssMetadata(module: JSModule): MetroModuleCSSMetadata | null {\n const data = module.output[0]?.data;\n if (data && typeof data === 'object' && 'css' in data) {\n if (typeof data.css !== 'object' || !('code' in (data as any).css)) {\n throw new Error(\n `Unexpected CSS metadata in Metro module (${module.path}): ${JSON.stringify(data.css)}`\n );\n }\n return data.css as MetroModuleCSSMetadata;\n }\n return null;\n}\n\nexport function fileNameFromContents({ filepath, src }: { filepath: string; src: string }): string {\n return getFileName(filepath) + '-' + hashString(filepath + src);\n}\n\nexport function getFileName(module: string) {\n return path.basename(module).replace(/\\.[^.]+$/, '');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"getCssDeps.js","names":["_js","data","require","_path","_interopRequireDefault","_css","_hash","obj","__esModule","default","STATIC_EXPORT_DIRECTORY","filterJsModules","dependencies","processModuleFilter","projectRoot","assets","module","values","isJsModule","getJsOutput","type","path","relative","push","getCssSerialAssets","cssMetadata","getCssMetadata","contents","code","originFilename","filename","join","fileNameFromContents","filepath","src","source","metadata","hmrId","pathToHtmlSafeName","_module$output$","output","css","Error","JSON","stringify","getFileName","hashString","basename","replace"],"sources":["../../src/serializer/getCssDeps.ts"],"sourcesContent":["import type { Module } from 'metro';\nimport { getJsOutput, isJsModule } from 'metro/src/DeltaBundler/Serializers/helpers/js';\nimport path from 'path';\n\nimport { SerialAsset } from './serializerAssets';\nimport { pathToHtmlSafeName } from '../transform-worker/css';\nimport { hashString } from '../utils/hash';\n\nexport type ReadOnlyDependencies<T = any> = ReadonlyMap<string, Module<T>>;\n\ntype Options = {\n processModuleFilter: (modules: Module) => boolean;\n assetPlugins: readonly string[];\n platform?: string | null;\n projectRoot: string;\n publicPath: string;\n};\n\ntype MetroModuleCSSMetadata = {\n code: string;\n lineCount: number;\n map: any[];\n};\n\n// s = static\nconst STATIC_EXPORT_DIRECTORY = '_expo/static/css';\n\nexport type JSModule = Module<{\n data: {\n code: string;\n map: unknown;\n lineCount: number;\n css?: {\n code: string;\n map: unknown;\n lineCount: number;\n };\n };\n type: 'js/module';\n}>;\n\nexport function filterJsModules(\n dependencies: ReadOnlyDependencies,\n { processModuleFilter, projectRoot }: Pick<Options, 'projectRoot' | 'processModuleFilter'>\n) {\n const assets: JSModule[] = [];\n\n for (const module of dependencies.values()) {\n if (\n isJsModule(module) &&\n processModuleFilter(module) &&\n getJsOutput(module).type === 'js/module' &&\n path.relative(projectRoot, module.path) !== 'package.json'\n ) {\n assets.push(module as JSModule);\n }\n }\n return assets;\n}\n\nexport function getCssSerialAssets<T extends any>(\n dependencies: ReadOnlyDependencies<T>,\n { processModuleFilter, projectRoot }: Pick<Options, 'projectRoot' | 'processModuleFilter'>\n): SerialAsset[] {\n const assets: SerialAsset[] = [];\n\n for (const module of filterJsModules(dependencies, { processModuleFilter, projectRoot })) {\n const cssMetadata = getCssMetadata(module);\n if (cssMetadata) {\n const contents = cssMetadata.code;\n const originFilename = path.relative(projectRoot, module.path);\n\n const filename = path.join(\n // Consistent location\n STATIC_EXPORT_DIRECTORY,\n // Hashed file contents + name for caching\n fileNameFromContents({\n // Stable filename for hashing in CI.\n filepath: originFilename,\n src: contents,\n }) + '.css'\n );\n assets.push({\n type: 'css',\n originFilename,\n filename,\n source: contents,\n metadata: {\n hmrId: pathToHtmlSafeName(originFilename),\n },\n });\n }\n }\n\n return assets;\n}\n\nfunction getCssMetadata(module: JSModule): MetroModuleCSSMetadata | null {\n const data = module.output[0]?.data;\n if (data && typeof data === 'object' && 'css' in data) {\n if (typeof data.css !== 'object' || !('code' in (data as any).css)) {\n throw new Error(\n `Unexpected CSS metadata in Metro module (${module.path}): ${JSON.stringify(data.css)}`\n );\n }\n return data.css as MetroModuleCSSMetadata;\n }\n return null;\n}\n\nexport function fileNameFromContents({ filepath, src }: { filepath: string; src: string }): string {\n return getFileName(filepath) + '-' + hashString(filepath + src);\n}\n\nexport function getFileName(module: string) {\n return path.basename(module).replace(/\\.[^.]+$/, '');\n}\n"],"mappings":"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"}
@@ -2,6 +2,6 @@ export type SerialAsset = {
2
2
  originFilename: string;
3
3
  filename: string;
4
4
  source: string;
5
- type: 'css' | 'js';
5
+ type: 'css' | 'js' | 'map';
6
6
  metadata: Record<string, string>;
7
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"serializerAssets.js","names":[],"sources":["../../src/serializer/serializerAssets.ts"],"sourcesContent":["export type SerialAsset = {\n // 'styles.css'\n originFilename: string;\n // '_expo/static/css/bc6aa0a69dcebf8e8cac1faa76705756.css'\n filename: string;\n // '\\ndiv {\\n background: cyan;\\n}\\n\\n'\n source: string;\n type: 'css' | 'js';\n\n metadata: Record<string, string>;\n};\n"],"mappings":""}
1
+ {"version":3,"file":"serializerAssets.js","names":[],"sources":["../../src/serializer/serializerAssets.ts"],"sourcesContent":["export type SerialAsset = {\n // 'styles.css'\n originFilename: string;\n // '_expo/static/css/bc6aa0a69dcebf8e8cac1faa76705756.css'\n filename: string;\n // '\\ndiv {\\n background: cyan;\\n}\\n\\n'\n source: string;\n type: 'css' | 'js' | 'map';\n\n metadata: Record<string, string>;\n};\n"],"mappings":""}
@@ -26,6 +26,13 @@ function _baseJSBundle() {
26
26
  };
27
27
  return data;
28
28
  }
29
+ function _sourceMapString() {
30
+ const data = _interopRequireDefault(require("metro/src/DeltaBundler/Serializers/sourceMapString"));
31
+ _sourceMapString = function () {
32
+ return data;
33
+ };
34
+ return data;
35
+ }
29
36
  function _bundleToString() {
30
37
  const data = _interopRequireDefault(require("metro/src/lib/bundleToString"));
31
38
  _bundleToString = function () {
@@ -33,9 +40,9 @@ function _bundleToString() {
33
40
  };
34
41
  return data;
35
42
  }
36
- function _env() {
37
- const data = require("../env");
38
- _env = function () {
43
+ function _path() {
44
+ const data = _interopRequireDefault(require("path"));
45
+ _path = function () {
39
46
  return data;
40
47
  };
41
48
  return data;
@@ -61,6 +68,13 @@ function _serializerAssets() {
61
68
  };
62
69
  return data;
63
70
  }
71
+ function _env() {
72
+ const data = require("../env");
73
+ _env = function () {
74
+ return data;
75
+ };
76
+ return data;
77
+ }
64
78
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
65
79
  /**
66
80
  * Copyright © 2022 650 Industries.
@@ -69,6 +83,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
69
83
  * LICENSE file in the root directory of this source tree.
70
84
  */
71
85
 
86
+ // @ts-expect-error
87
+
72
88
  function withExpoSerializers(config) {
73
89
  const processors = [];
74
90
  if (!_env().env.EXPO_NO_CLIENT_ENV_VARS) {
@@ -97,8 +113,8 @@ function getDefaultSerializer(fallbackSerializer) {
97
113
  return outputCode;
98
114
  };
99
115
  return async (...props) => {
100
- const [,, graph, options] = props;
101
- const jsCode = await defaultSerializer(...props);
116
+ const [entryPoint, preModules, graph, options] = props;
117
+ const jsCode = await defaultSerializer(entryPoint, preModules, graph, options);
102
118
  if (!options.sourceUrl) {
103
119
  return jsCode;
104
120
  }
@@ -108,27 +124,75 @@ function getDefaultSerializer(fallbackSerializer) {
108
124
  // Default behavior if `serializer.output=static` is not present in the URL.
109
125
  return jsCode;
110
126
  }
127
+ const includeSourceMaps = url.searchParams.get('serializer.map') === 'true';
111
128
  const cssDeps = (0, _getCssDeps().getCssSerialAssets)(graph.dependencies, {
112
129
  projectRoot: options.projectRoot,
113
130
  processModuleFilter: options.processModuleFilter
114
131
  });
115
- let jsAsset;
132
+ const jsAssets = [];
116
133
  if (jsCode) {
117
134
  const stringContents = typeof jsCode === 'string' ? jsCode : jsCode.code;
118
- jsAsset = {
119
- filename: options.dev ? 'index.js' : `_expo/static/js/web/${(0, _getCssDeps().fileNameFromContents)({
120
- filepath: url.pathname,
121
- src: stringContents
122
- })}.js`,
135
+ const jsFilename = (0, _getCssDeps().fileNameFromContents)({
136
+ filepath: url.pathname,
137
+ src: stringContents
138
+ });
139
+ jsAssets.push({
140
+ filename: options.dev ? 'index.js' : `_expo/static/js/web/${jsFilename}.js`,
123
141
  originFilename: 'index.js',
124
142
  type: 'js',
125
143
  metadata: {},
126
144
  source: stringContents
127
- };
145
+ });
146
+ if (
147
+ // Only include the source map if the `options.sourceMapUrl` option is provided and we are exporting a static build.
148
+ includeSourceMaps && options.sourceMapUrl) {
149
+ const sourceMap = typeof jsCode === 'string' ? serializeToSourceMap(...props) : jsCode.map;
150
+
151
+ // Make all paths relative to the server root to prevent the entire user filesystem from being exposed.
152
+ const parsed = JSON.parse(sourceMap);
153
+ // TODO: Maybe we can do this earlier.
154
+ parsed.sources = parsed.sources.map(
155
+ // TODO: Maybe basePath support
156
+ value => {
157
+ if (value.startsWith('/')) {
158
+ var _options$serverRoot;
159
+ return '/' + _path().default.relative((_options$serverRoot = options.serverRoot) !== null && _options$serverRoot !== void 0 ? _options$serverRoot : options.projectRoot, value);
160
+ }
161
+ // Prevent `__prelude__` from being relative.
162
+ return value;
163
+ });
164
+ jsAssets.push({
165
+ filename: options.dev ? 'index.map' : `_expo/static/js/web/${jsFilename}.js.map`,
166
+ originFilename: 'index.map',
167
+ type: 'map',
168
+ metadata: {},
169
+ source: JSON.stringify(parsed)
170
+ });
171
+ }
128
172
  }
129
- return JSON.stringify([jsAsset, ...cssDeps]);
173
+ return JSON.stringify([...jsAssets, ...cssDeps]);
130
174
  };
131
175
  }
176
+ function getSortedModules(graph, {
177
+ createModuleId
178
+ }) {
179
+ const modules = [...graph.dependencies.values()];
180
+ // Assign IDs to modules in a consistent order
181
+ for (const module of modules) {
182
+ createModuleId(module.path);
183
+ }
184
+ // Sort by IDs
185
+ return modules.sort((a, b) => createModuleId(a.path) - createModuleId(b.path));
186
+ }
187
+ function serializeToSourceMap(...props) {
188
+ const [, prepend, graph, options] = props;
189
+ const modules = [...prepend, ...getSortedModules(graph, {
190
+ createModuleId: options.createModuleId
191
+ })];
192
+ return (0, _sourceMapString().default)(modules, {
193
+ ...options
194
+ });
195
+ }
132
196
  function createSerializerFromSerialProcessors(processors, originalSerializer) {
133
197
  const finalSerializer = getDefaultSerializer(originalSerializer);
134
198
  return (...props) => {
@@ -1 +1 @@
1
- {"version":3,"file":"withExpoSerializers.js","names":["_jscSafeUrl","data","require","_baseJSBundle","_interopRequireDefault","_bundleToString","_env","_environmentVariableSerializerPlugin","_getCssDeps","_serializerAssets","obj","__esModule","default","withExpoSerializers","config","processors","env","EXPO_NO_CLIENT_ENV_VARS","push","environmentVariableSerializerPlugin","withSerializerPlugins","_config$serializer","originalSerializer","serializer","customSerializer","createSerializerFromSerialProcessors","getDefaultSerializer","fallbackSerializer","defaultSerializer","params","bundle","baseJSBundle","outputCode","bundleToString","code","props","graph","options","jsCode","sourceUrl","isJscSafeUrl","toNormalUrl","url","URL","searchParams","get","cssDeps","getCssSerialAssets","dependencies","projectRoot","processModuleFilter","jsAsset","stringContents","filename","dev","fileNameFromContents","filepath","pathname","src","originFilename","type","metadata","source","JSON","stringify","finalSerializer","processor"],"sources":["../../src/serializer/withExpoSerializers.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { isJscSafeUrl, toNormalUrl } from 'jsc-safe-url';\nimport { MixedOutput } from 'metro';\nimport { InputConfigT, SerializerConfigT } from 'metro-config';\nimport baseJSBundle from 'metro/src/DeltaBundler/Serializers/baseJSBundle';\nimport bundleToString from 'metro/src/lib/bundleToString';\n\nimport { env } from '../env';\nimport { environmentVariableSerializerPlugin } from './environmentVariableSerializerPlugin';\nimport { fileNameFromContents, getCssSerialAssets } from './getCssDeps';\nimport { SerialAsset } from './serializerAssets';\n\nexport type Serializer = NonNullable<SerializerConfigT['customSerializer']>;\n\nexport type SerializerParameters = Parameters<Serializer>;\n\n// A serializer that processes the input and returns a modified version.\n// Unlike a serializer, these can be chained together.\nexport type SerializerPlugin = (...props: SerializerParameters) => SerializerParameters;\n\nexport function withExpoSerializers(config: InputConfigT): InputConfigT {\n const processors: SerializerPlugin[] = [];\n if (!env.EXPO_NO_CLIENT_ENV_VARS) {\n processors.push(environmentVariableSerializerPlugin);\n }\n\n return withSerializerPlugins(config, processors);\n}\n\n// There can only be one custom serializer as the input doesn't match the output.\n// Here we simply run\nexport function withSerializerPlugins(\n config: InputConfigT,\n processors: SerializerPlugin[]\n): InputConfigT {\n const originalSerializer = config.serializer?.customSerializer;\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer: createSerializerFromSerialProcessors(processors, originalSerializer),\n },\n };\n}\n\nfunction getDefaultSerializer(fallbackSerializer?: Serializer | null): Serializer {\n const defaultSerializer =\n fallbackSerializer ??\n (async (...params: SerializerParameters) => {\n const bundle = baseJSBundle(...params);\n const outputCode = bundleToString(bundle).code;\n return outputCode;\n });\n return async (\n ...props: SerializerParameters\n ): Promise<string | { code: string; map: string }> => {\n const [, , graph, options] = props;\n const jsCode = await defaultSerializer(...props);\n\n if (!options.sourceUrl) {\n return jsCode;\n }\n const sourceUrl = isJscSafeUrl(options.sourceUrl)\n ? toNormalUrl(options.sourceUrl)\n : options.sourceUrl;\n const url = new URL(sourceUrl, 'https://expo.dev');\n if (\n url.searchParams.get('platform') !== 'web' ||\n url.searchParams.get('serializer.output') !== 'static'\n ) {\n // Default behavior if `serializer.output=static` is not present in the URL.\n return jsCode;\n }\n\n const cssDeps = getCssSerialAssets<MixedOutput>(graph.dependencies, {\n projectRoot: options.projectRoot,\n processModuleFilter: options.processModuleFilter,\n });\n\n let jsAsset: SerialAsset | undefined;\n\n if (jsCode) {\n const stringContents = typeof jsCode === 'string' ? jsCode : jsCode.code;\n jsAsset = {\n filename: options.dev\n ? 'index.js'\n : `_expo/static/js/web/${fileNameFromContents({\n filepath: url.pathname,\n src: stringContents,\n })}.js`,\n originFilename: 'index.js',\n type: 'js',\n metadata: {},\n source: stringContents,\n };\n }\n\n return JSON.stringify([jsAsset, ...cssDeps]);\n };\n}\n\nexport function createSerializerFromSerialProcessors(\n processors: (SerializerPlugin | undefined)[],\n originalSerializer?: Serializer | null\n): Serializer {\n const finalSerializer = getDefaultSerializer(originalSerializer);\n return (...props: SerializerParameters): ReturnType<Serializer> => {\n for (const processor of processors) {\n if (processor) {\n props = processor(...props);\n }\n }\n\n return finalSerializer(...props);\n };\n}\n\nexport { SerialAsset };\n"],"mappings":"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"}
1
+ {"version":3,"file":"withExpoSerializers.js","names":["_jscSafeUrl","data","require","_baseJSBundle","_interopRequireDefault","_sourceMapString","_bundleToString","_path","_environmentVariableSerializerPlugin","_getCssDeps","_serializerAssets","_env","obj","__esModule","default","withExpoSerializers","config","processors","env","EXPO_NO_CLIENT_ENV_VARS","push","environmentVariableSerializerPlugin","withSerializerPlugins","_config$serializer","originalSerializer","serializer","customSerializer","createSerializerFromSerialProcessors","getDefaultSerializer","fallbackSerializer","defaultSerializer","params","bundle","baseJSBundle","outputCode","bundleToString","code","props","entryPoint","preModules","graph","options","jsCode","sourceUrl","isJscSafeUrl","toNormalUrl","url","URL","searchParams","get","includeSourceMaps","cssDeps","getCssSerialAssets","dependencies","projectRoot","processModuleFilter","jsAssets","stringContents","jsFilename","fileNameFromContents","filepath","pathname","src","filename","dev","originFilename","type","metadata","source","sourceMapUrl","sourceMap","serializeToSourceMap","map","parsed","JSON","parse","sources","value","startsWith","_options$serverRoot","path","relative","serverRoot","stringify","getSortedModules","createModuleId","modules","values","module","sort","a","b","prepend","sourceMapString","finalSerializer","processor"],"sources":["../../src/serializer/withExpoSerializers.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { isJscSafeUrl, toNormalUrl } from 'jsc-safe-url';\nimport { Module, MixedOutput } from 'metro';\nimport baseJSBundle from 'metro/src/DeltaBundler/Serializers/baseJSBundle';\n// @ts-expect-error\nimport sourceMapString from 'metro/src/DeltaBundler/Serializers/sourceMapString';\nimport bundleToString from 'metro/src/lib/bundleToString';\nimport { InputConfigT, SerializerConfigT } from 'metro-config';\nimport path from 'path';\n\nimport { environmentVariableSerializerPlugin } from './environmentVariableSerializerPlugin';\nimport { fileNameFromContents, getCssSerialAssets } from './getCssDeps';\nimport { SerialAsset } from './serializerAssets';\nimport { env } from '../env';\n\nexport type Serializer = NonNullable<SerializerConfigT['customSerializer']>;\n\nexport type SerializerParameters = Parameters<Serializer>;\n\n// A serializer that processes the input and returns a modified version.\n// Unlike a serializer, these can be chained together.\nexport type SerializerPlugin = (...props: SerializerParameters) => SerializerParameters;\n\nexport function withExpoSerializers(config: InputConfigT): InputConfigT {\n const processors: SerializerPlugin[] = [];\n if (!env.EXPO_NO_CLIENT_ENV_VARS) {\n processors.push(environmentVariableSerializerPlugin);\n }\n\n return withSerializerPlugins(config, processors);\n}\n\n// There can only be one custom serializer as the input doesn't match the output.\n// Here we simply run\nexport function withSerializerPlugins(\n config: InputConfigT,\n processors: SerializerPlugin[]\n): InputConfigT {\n const originalSerializer = config.serializer?.customSerializer;\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer: createSerializerFromSerialProcessors(processors, originalSerializer),\n },\n };\n}\n\nfunction getDefaultSerializer(fallbackSerializer?: Serializer | null): Serializer {\n const defaultSerializer =\n fallbackSerializer ??\n (async (...params: SerializerParameters) => {\n const bundle = baseJSBundle(...params);\n const outputCode = bundleToString(bundle).code;\n return outputCode;\n });\n return async (\n ...props: SerializerParameters\n ): Promise<string | { code: string; map: string }> => {\n const [entryPoint, preModules, graph, options] = props;\n\n const jsCode = await defaultSerializer(entryPoint, preModules, graph, options);\n\n if (!options.sourceUrl) {\n return jsCode;\n }\n const sourceUrl = isJscSafeUrl(options.sourceUrl)\n ? toNormalUrl(options.sourceUrl)\n : options.sourceUrl;\n const url = new URL(sourceUrl, 'https://expo.dev');\n if (\n url.searchParams.get('platform') !== 'web' ||\n url.searchParams.get('serializer.output') !== 'static'\n ) {\n // Default behavior if `serializer.output=static` is not present in the URL.\n return jsCode;\n }\n\n const includeSourceMaps = url.searchParams.get('serializer.map') === 'true';\n\n const cssDeps = getCssSerialAssets<MixedOutput>(graph.dependencies, {\n projectRoot: options.projectRoot,\n processModuleFilter: options.processModuleFilter,\n });\n\n const jsAssets: SerialAsset[] = [];\n\n if (jsCode) {\n const stringContents = typeof jsCode === 'string' ? jsCode : jsCode.code;\n const jsFilename = fileNameFromContents({\n filepath: url.pathname,\n src: stringContents,\n });\n jsAssets.push({\n filename: options.dev ? 'index.js' : `_expo/static/js/web/${jsFilename}.js`,\n originFilename: 'index.js',\n type: 'js',\n metadata: {},\n source: stringContents,\n });\n\n if (\n // Only include the source map if the `options.sourceMapUrl` option is provided and we are exporting a static build.\n includeSourceMaps &&\n options.sourceMapUrl\n ) {\n const sourceMap = typeof jsCode === 'string' ? serializeToSourceMap(...props) : jsCode.map;\n\n // Make all paths relative to the server root to prevent the entire user filesystem from being exposed.\n const parsed = JSON.parse(sourceMap);\n // TODO: Maybe we can do this earlier.\n parsed.sources = parsed.sources.map(\n // TODO: Maybe basePath support\n (value: string) => {\n if (value.startsWith('/')) {\n return '/' + path.relative(options.serverRoot ?? options.projectRoot, value);\n }\n // Prevent `__prelude__` from being relative.\n return value;\n }\n );\n\n jsAssets.push({\n filename: options.dev ? 'index.map' : `_expo/static/js/web/${jsFilename}.js.map`,\n originFilename: 'index.map',\n type: 'map',\n metadata: {},\n source: JSON.stringify(parsed),\n });\n }\n }\n\n return JSON.stringify([...jsAssets, ...cssDeps]);\n };\n}\n\nfunction getSortedModules(\n graph: SerializerParameters[2],\n {\n createModuleId,\n }: {\n createModuleId: (path: string) => number;\n }\n): readonly Module<any>[] {\n const modules = [...graph.dependencies.values()];\n // Assign IDs to modules in a consistent order\n for (const module of modules) {\n createModuleId(module.path);\n }\n // Sort by IDs\n return modules.sort(\n (a: Module<any>, b: Module<any>) => createModuleId(a.path) - createModuleId(b.path)\n );\n}\n\nfunction serializeToSourceMap(...props: SerializerParameters): string {\n const [, prepend, graph, options] = props;\n\n const modules = [\n ...prepend,\n ...getSortedModules(graph, {\n createModuleId: options.createModuleId,\n }),\n ];\n\n return sourceMapString(modules, {\n ...options,\n });\n}\n\nexport function createSerializerFromSerialProcessors(\n processors: (SerializerPlugin | undefined)[],\n originalSerializer?: Serializer | null\n): Serializer {\n const finalSerializer = getDefaultSerializer(originalSerializer);\n return (...props: SerializerParameters): ReturnType<Serializer> => {\n for (const processor of processors) {\n if (processor) {\n props = processor(...props);\n }\n }\n\n return finalSerializer(...props);\n };\n}\n\nexport { SerialAsset };\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/metro-config",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "A Metro config for running React Native projects with the Metro bundler",
5
5
  "main": "build/ExpoMetroConfig.js",
6
6
  "scripts": {
@@ -32,7 +32,7 @@
32
32
  ],
33
33
  "dependencies": {
34
34
  "babel-preset-fbjs": "^3.4.0",
35
- "@expo/config": "~8.2.0",
35
+ "@expo/config": "~8.3.0",
36
36
  "@expo/env": "~0.1.0",
37
37
  "@expo/json-file": "~8.2.37",
38
38
  "chalk": "^4.1.0",
@@ -56,5 +56,5 @@
56
56
  "publishConfig": {
57
57
  "access": "public"
58
58
  },
59
- "gitHead": "663654577a7068c641b5e9474efbc502e3f334ea"
59
+ "gitHead": "79607a7325f47aa17c36d266100d09a4ff2cc544"
60
60
  }