@expo/cli 0.25.0 → 0.25.2

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/bin/cli CHANGED
@@ -123,7 +123,7 @@ const args = (0, _arg().default)({
123
123
  });
124
124
  if (args['--version']) {
125
125
  // Version is added in the build script.
126
- console.log("0.25.0");
126
+ console.log("0.25.2");
127
127
  process.exit(0);
128
128
  }
129
129
  if (args['--non-interactive']) {
@@ -16,6 +16,13 @@ _export(exports, {
16
16
  return getAssetSchemasAsync;
17
17
  }
18
18
  });
19
+ function _schemautils() {
20
+ const data = require("@expo/schema-utils");
21
+ _schemautils = function() {
22
+ return data;
23
+ };
24
+ return data;
25
+ }
19
26
  function _fs() {
20
27
  const data = /*#__PURE__*/ _interop_require_default(require("fs"));
21
28
  _fs = function() {
@@ -33,7 +40,6 @@ function _path() {
33
40
  const _client = require("./rest/client");
34
41
  const _env = require("../utils/env");
35
42
  const _errors = require("../utils/errors");
36
- const _jsonSchemaDeref = require("../utils/jsonSchemaDeref");
37
43
  function _interop_require_default(obj) {
38
44
  return obj && obj.__esModule ? obj : {
39
45
  default: obj
@@ -42,12 +48,7 @@ function _interop_require_default(obj) {
42
48
  const schemaJson = {};
43
49
  async function _getSchemaAsync(sdkVersion) {
44
50
  const json = await getSchemaJSONAsync(sdkVersion);
45
- // NOTE(@kitten): This is a replacement for the `json-schema-deref-sync` package.
46
- // We re-implemented it locally to remove it, since it comes with heavy dependencies
47
- // and a large install time impact.
48
- // The tests have been ported to match the behaviour closely, but we removed
49
- // local file ref support. For our purposes the behaviour should be identical.
50
- return (0, _jsonSchemaDeref.jsonSchemaDeref)(json.schema);
51
+ return (0, _schemautils().derefSchema)(json.schema);
51
52
  }
52
53
  async function getAssetSchemasAsync(sdkVersion = 'UNVERSIONED') {
53
54
  // If no SDK version is available then fall back to unversioned
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/getExpoSchema.ts"],"sourcesContent":["import { JSONObject } from '@expo/json-file';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { createCachedFetch, getResponseDataOrThrow } from './rest/client';\nimport { env } from '../utils/env';\nimport { CommandError } from '../utils/errors';\nimport { jsonSchemaDeref } from '../utils/jsonSchemaDeref';\n\nexport type Schema = any;\n\nexport type AssetSchema = {\n fieldPath: string;\n};\n\nconst schemaJson: { [sdkVersion: string]: Schema } = {};\n\nexport async function _getSchemaAsync(sdkVersion: string): Promise<Schema> {\n const json = await getSchemaJSONAsync(sdkVersion);\n // NOTE(@kitten): This is a replacement for the `json-schema-deref-sync` package.\n // We re-implemented it locally to remove it, since it comes with heavy dependencies\n // and a large install time impact.\n // The tests have been ported to match the behaviour closely, but we removed\n // local file ref support. For our purposes the behaviour should be identical.\n return jsonSchemaDeref(json.schema);\n}\n\n/**\n * Array of schema nodes that refer to assets along with their field path (eg. 'notification.icon')\n *\n * @param sdkVersion\n */\nexport async function getAssetSchemasAsync(sdkVersion: string = 'UNVERSIONED'): Promise<string[]> {\n // If no SDK version is available then fall back to unversioned\n const schema = await _getSchemaAsync(sdkVersion);\n const assetSchemas: string[] = [];\n const visit = (node: Schema, fieldPath: string) => {\n if (node.meta && node.meta.asset) {\n assetSchemas.push(fieldPath);\n }\n const properties = node.properties;\n if (properties) {\n Object.keys(properties).forEach((property) =>\n visit(properties[property], `${fieldPath}${fieldPath.length > 0 ? '.' : ''}${property}`)\n );\n }\n };\n visit(schema, '');\n\n return assetSchemas;\n}\n\nasync function getSchemaJSONAsync(sdkVersion: string): Promise<{ schema: Schema }> {\n if (env.EXPO_UNIVERSE_DIR) {\n return JSON.parse(\n fs\n .readFileSync(\n path.join(\n env.EXPO_UNIVERSE_DIR,\n 'server',\n 'www',\n 'xdl-schemas',\n 'UNVERSIONED-schema.json'\n )\n )\n .toString()\n );\n }\n\n if (!schemaJson[sdkVersion]) {\n try {\n schemaJson[sdkVersion] = await getConfigurationSchemaAsync(sdkVersion);\n } catch (e: any) {\n if (e.code === 'INVALID_JSON') {\n throw new CommandError('INVALID_JSON', `Couldn't read schema from server`);\n }\n\n throw e;\n }\n }\n\n return schemaJson[sdkVersion];\n}\n\nasync function getConfigurationSchemaAsync(sdkVersion: string): Promise<JSONObject> {\n // Reconstruct the cached fetch since caching could be disabled.\n const fetchAsync = createCachedFetch({\n cacheDirectory: 'schema-cache',\n // We'll use a 1 week cache for versions so older versions get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n });\n const response = await fetchAsync(`project/configuration/schema/${sdkVersion}`);\n const json = await response.json();\n\n return getResponseDataOrThrow<JSONObject>(json);\n}\n"],"names":["_getSchemaAsync","getAssetSchemasAsync","schemaJson","sdkVersion","json","getSchemaJSONAsync","jsonSchemaDeref","schema","assetSchemas","visit","node","fieldPath","meta","asset","push","properties","Object","keys","forEach","property","length","env","EXPO_UNIVERSE_DIR","JSON","parse","fs","readFileSync","path","join","toString","getConfigurationSchemaAsync","e","code","CommandError","fetchAsync","createCachedFetch","cacheDirectory","ttl","response","getResponseDataOrThrow"],"mappings":";;;;;;;;;;;IAiBsBA,eAAe;eAAfA;;IAeAC,oBAAoB;eAApBA;;;;gEA/BP;;;;;;;gEACE;;;;;;wBAEyC;qBACtC;wBACS;iCACG;;;;;;AAQhC,MAAMC,aAA+C,CAAC;AAE/C,eAAeF,gBAAgBG,UAAkB;IACtD,MAAMC,OAAO,MAAMC,mBAAmBF;IACtC,iFAAiF;IACjF,oFAAoF;IACpF,mCAAmC;IACnC,4EAA4E;IAC5E,8EAA8E;IAC9E,OAAOG,IAAAA,gCAAe,EAACF,KAAKG,MAAM;AACpC;AAOO,eAAeN,qBAAqBE,aAAqB,aAAa;IAC3E,+DAA+D;IAC/D,MAAMI,SAAS,MAAMP,gBAAgBG;IACrC,MAAMK,eAAyB,EAAE;IACjC,MAAMC,QAAQ,CAACC,MAAcC;QAC3B,IAAID,KAAKE,IAAI,IAAIF,KAAKE,IAAI,CAACC,KAAK,EAAE;YAChCL,aAAaM,IAAI,CAACH;QACpB;QACA,MAAMI,aAAaL,KAAKK,UAAU;QAClC,IAAIA,YAAY;YACdC,OAAOC,IAAI,CAACF,YAAYG,OAAO,CAAC,CAACC,WAC/BV,MAAMM,UAAU,CAACI,SAAS,EAAE,GAAGR,YAAYA,UAAUS,MAAM,GAAG,IAAI,MAAM,KAAKD,UAAU;QAE3F;IACF;IACAV,MAAMF,QAAQ;IAEd,OAAOC;AACT;AAEA,eAAeH,mBAAmBF,UAAkB;IAClD,IAAIkB,QAAG,CAACC,iBAAiB,EAAE;QACzB,OAAOC,KAAKC,KAAK,CACfC,aAAE,CACCC,YAAY,CACXC,eAAI,CAACC,IAAI,CACPP,QAAG,CAACC,iBAAiB,EACrB,UACA,OACA,eACA,4BAGHO,QAAQ;IAEf;IAEA,IAAI,CAAC3B,UAAU,CAACC,WAAW,EAAE;QAC3B,IAAI;YACFD,UAAU,CAACC,WAAW,GAAG,MAAM2B,4BAA4B3B;QAC7D,EAAE,OAAO4B,GAAQ;YACf,IAAIA,EAAEC,IAAI,KAAK,gBAAgB;gBAC7B,MAAM,IAAIC,oBAAY,CAAC,gBAAgB,CAAC,gCAAgC,CAAC;YAC3E;YAEA,MAAMF;QACR;IACF;IAEA,OAAO7B,UAAU,CAACC,WAAW;AAC/B;AAEA,eAAe2B,4BAA4B3B,UAAkB;IAC3D,gEAAgE;IAChE,MAAM+B,aAAaC,IAAAA,yBAAiB,EAAC;QACnCC,gBAAgB;QAChB,sFAAsF;QACtFC,KAAK,OAAO,KAAK,KAAK,KAAK;IAC7B;IACA,MAAMC,WAAW,MAAMJ,WAAW,CAAC,6BAA6B,EAAE/B,YAAY;IAC9E,MAAMC,OAAO,MAAMkC,SAASlC,IAAI;IAEhC,OAAOmC,IAAAA,8BAAsB,EAAanC;AAC5C"}
1
+ {"version":3,"sources":["../../../src/api/getExpoSchema.ts"],"sourcesContent":["import type { JSONObject } from '@expo/json-file';\nimport { derefSchema } from '@expo/schema-utils';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { createCachedFetch, getResponseDataOrThrow } from './rest/client';\nimport { env } from '../utils/env';\nimport { CommandError } from '../utils/errors';\n\nexport type Schema = any;\n\nexport type AssetSchema = {\n fieldPath: string;\n};\n\nconst schemaJson: { [sdkVersion: string]: Schema } = {};\n\nexport async function _getSchemaAsync(sdkVersion: string): Promise<Schema> {\n const json = await getSchemaJSONAsync(sdkVersion);\n return derefSchema(json.schema);\n}\n\n/**\n * Array of schema nodes that refer to assets along with their field path (eg. 'notification.icon')\n *\n * @param sdkVersion\n */\nexport async function getAssetSchemasAsync(sdkVersion: string = 'UNVERSIONED'): Promise<string[]> {\n // If no SDK version is available then fall back to unversioned\n const schema = await _getSchemaAsync(sdkVersion);\n const assetSchemas: string[] = [];\n const visit = (node: Schema, fieldPath: string) => {\n if (node.meta && node.meta.asset) {\n assetSchemas.push(fieldPath);\n }\n const properties = node.properties;\n if (properties) {\n Object.keys(properties).forEach((property) =>\n visit(properties[property], `${fieldPath}${fieldPath.length > 0 ? '.' : ''}${property}`)\n );\n }\n };\n visit(schema, '');\n\n return assetSchemas;\n}\n\nasync function getSchemaJSONAsync(sdkVersion: string): Promise<{ schema: Schema }> {\n if (env.EXPO_UNIVERSE_DIR) {\n return JSON.parse(\n fs\n .readFileSync(\n path.join(\n env.EXPO_UNIVERSE_DIR,\n 'server',\n 'www',\n 'xdl-schemas',\n 'UNVERSIONED-schema.json'\n )\n )\n .toString()\n );\n }\n\n if (!schemaJson[sdkVersion]) {\n try {\n schemaJson[sdkVersion] = await getConfigurationSchemaAsync(sdkVersion);\n } catch (e: any) {\n if (e.code === 'INVALID_JSON') {\n throw new CommandError('INVALID_JSON', `Couldn't read schema from server`);\n }\n\n throw e;\n }\n }\n\n return schemaJson[sdkVersion];\n}\n\nasync function getConfigurationSchemaAsync(sdkVersion: string): Promise<JSONObject> {\n // Reconstruct the cached fetch since caching could be disabled.\n const fetchAsync = createCachedFetch({\n cacheDirectory: 'schema-cache',\n // We'll use a 1 week cache for versions so older versions get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n });\n const response = await fetchAsync(`project/configuration/schema/${sdkVersion}`);\n const json = await response.json();\n\n return getResponseDataOrThrow<JSONObject>(json);\n}\n"],"names":["_getSchemaAsync","getAssetSchemasAsync","schemaJson","sdkVersion","json","getSchemaJSONAsync","derefSchema","schema","assetSchemas","visit","node","fieldPath","meta","asset","push","properties","Object","keys","forEach","property","length","env","EXPO_UNIVERSE_DIR","JSON","parse","fs","readFileSync","path","join","toString","getConfigurationSchemaAsync","e","code","CommandError","fetchAsync","createCachedFetch","cacheDirectory","ttl","response","getResponseDataOrThrow"],"mappings":";;;;;;;;;;;IAiBsBA,eAAe;eAAfA;;IAUAC,oBAAoB;eAApBA;;;;yBA1BM;;;;;;;gEACb;;;;;;;gEACE;;;;;;wBAEyC;qBACtC;wBACS;;;;;;AAQ7B,MAAMC,aAA+C,CAAC;AAE/C,eAAeF,gBAAgBG,UAAkB;IACtD,MAAMC,OAAO,MAAMC,mBAAmBF;IACtC,OAAOG,IAAAA,0BAAW,EAACF,KAAKG,MAAM;AAChC;AAOO,eAAeN,qBAAqBE,aAAqB,aAAa;IAC3E,+DAA+D;IAC/D,MAAMI,SAAS,MAAMP,gBAAgBG;IACrC,MAAMK,eAAyB,EAAE;IACjC,MAAMC,QAAQ,CAACC,MAAcC;QAC3B,IAAID,KAAKE,IAAI,IAAIF,KAAKE,IAAI,CAACC,KAAK,EAAE;YAChCL,aAAaM,IAAI,CAACH;QACpB;QACA,MAAMI,aAAaL,KAAKK,UAAU;QAClC,IAAIA,YAAY;YACdC,OAAOC,IAAI,CAACF,YAAYG,OAAO,CAAC,CAACC,WAC/BV,MAAMM,UAAU,CAACI,SAAS,EAAE,GAAGR,YAAYA,UAAUS,MAAM,GAAG,IAAI,MAAM,KAAKD,UAAU;QAE3F;IACF;IACAV,MAAMF,QAAQ;IAEd,OAAOC;AACT;AAEA,eAAeH,mBAAmBF,UAAkB;IAClD,IAAIkB,QAAG,CAACC,iBAAiB,EAAE;QACzB,OAAOC,KAAKC,KAAK,CACfC,aAAE,CACCC,YAAY,CACXC,eAAI,CAACC,IAAI,CACPP,QAAG,CAACC,iBAAiB,EACrB,UACA,OACA,eACA,4BAGHO,QAAQ;IAEf;IAEA,IAAI,CAAC3B,UAAU,CAACC,WAAW,EAAE;QAC3B,IAAI;YACFD,UAAU,CAACC,WAAW,GAAG,MAAM2B,4BAA4B3B;QAC7D,EAAE,OAAO4B,GAAQ;YACf,IAAIA,EAAEC,IAAI,KAAK,gBAAgB;gBAC7B,MAAM,IAAIC,oBAAY,CAAC,gBAAgB,CAAC,gCAAgC,CAAC;YAC3E;YAEA,MAAMF;QACR;IACF;IAEA,OAAO7B,UAAU,CAACC,WAAW;AAC/B;AAEA,eAAe2B,4BAA4B3B,UAAkB;IAC3D,gEAAgE;IAChE,MAAM+B,aAAaC,IAAAA,yBAAiB,EAAC;QACnCC,gBAAgB;QAChB,sFAAsF;QACtFC,KAAK,OAAO,KAAK,KAAK,KAAK;IAC7B;IACA,MAAMC,WAAW,MAAMJ,WAAW,CAAC,6BAA6B,EAAE/B,YAAY;IAC9E,MAAMC,OAAO,MAAMkC,SAASlC,IAAI;IAEhC,OAAOmC,IAAAA,8BAAsB,EAAanC;AAC5C"}
@@ -16,25 +16,6 @@ _export(exports, {
16
16
  return DevToolsPluginManager;
17
17
  }
18
18
  });
19
- function _path() {
20
- const data = /*#__PURE__*/ _interop_require_default(require("path"));
21
- _path = function() {
22
- return data;
23
- };
24
- return data;
25
- }
26
- function _resolvefrom() {
27
- const data = /*#__PURE__*/ _interop_require_default(require("resolve-from"));
28
- _resolvefrom = function() {
29
- return data;
30
- };
31
- return data;
32
- }
33
- function _interop_require_default(obj) {
34
- return obj && obj.__esModule ? obj : {
35
- default: obj
36
- };
37
- }
38
19
  const debug = require('debug')('expo:start:server:devtools');
39
20
  const DevToolsPluginEndpoint = '/_expo/plugins';
40
21
  class DevToolsPluginManager {
@@ -59,23 +40,14 @@ class DevToolsPluginManager {
59
40
  return (plugin == null ? void 0 : plugin.webpageRoot) ?? null;
60
41
  }
61
42
  async queryAutolinkedPluginsAsync(projectRoot) {
62
- const expoPackagePath = _resolvefrom().default.silent(projectRoot, 'expo/package.json');
63
- if (!expoPackagePath) {
64
- return [];
65
- }
66
- const resolvedPath = _resolvefrom().default.silent(_path().default.dirname(expoPackagePath), 'expo-modules-autolinking/exports');
67
- if (!resolvedPath) {
68
- return [];
69
- }
70
- const autolinkingModule = require(resolvedPath);
71
- if (!autolinkingModule.queryAutolinkingModulesFromProjectAsync) {
72
- throw new Error('Missing exported `queryAutolinkingModulesFromProjectAsync()` function from `expo-modules-autolinking`');
73
- }
74
- const plugins = await autolinkingModule.queryAutolinkingModulesFromProjectAsync(projectRoot, {
75
- platform: 'devtools',
76
- onlyProjectDeps: false
43
+ const autolinking = require('expo/internal/unstable-autolinking-exports');
44
+ const linker = autolinking.makeCachedDependenciesLinker({
45
+ projectRoot
77
46
  });
78
- debug('Found autolinked plugins', this.plugins);
47
+ const revisions = await autolinking.scanExpoModuleResolutionsForPlatform(linker, 'devtools');
48
+ const { resolveModuleAsync } = autolinking.getLinkingImplementationForPlatform('devtools');
49
+ const plugins = (await Promise.all(Object.values(revisions).map((revision)=>resolveModuleAsync(revision.name, revision)))).filter((maybePlugin)=>maybePlugin != null);
50
+ debug('Found autolinked plugins', plugins);
79
51
  return plugins;
80
52
  }
81
53
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/server/DevToolsPluginManager.ts"],"sourcesContent":["import type { ModuleDescriptorDevTools } from 'expo-modules-autolinking/exports';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nconst debug = require('debug')('expo:start:server:devtools');\n\nexport const DevToolsPluginEndpoint = '/_expo/plugins';\n\ninterface AutolinkingPlugin {\n packageName: string;\n packageRoot: string;\n webpageRoot: string;\n}\n\nexport interface DevToolsPlugin extends AutolinkingPlugin {\n webpageEndpoint: string;\n}\n\nexport default class DevToolsPluginManager {\n private plugins: DevToolsPlugin[] | null = null;\n\n constructor(private projectRoot: string) {}\n\n public async queryPluginsAsync(): Promise<DevToolsPlugin[]> {\n if (this.plugins) {\n return this.plugins;\n }\n const plugins = (await this.queryAutolinkedPluginsAsync(this.projectRoot)).map((plugin) => ({\n ...plugin,\n webpageEndpoint: `${DevToolsPluginEndpoint}/${plugin.packageName}`,\n }));\n this.plugins = plugins;\n return this.plugins;\n }\n\n public async queryPluginWebpageRootAsync(pluginName: string): Promise<string | null> {\n const plugins = await this.queryPluginsAsync();\n const plugin = plugins.find((p) => p.packageName === pluginName);\n return plugin?.webpageRoot ?? null;\n }\n\n private async queryAutolinkedPluginsAsync(projectRoot: string): Promise<AutolinkingPlugin[]> {\n const expoPackagePath = resolveFrom.silent(projectRoot, 'expo/package.json');\n if (!expoPackagePath) {\n return [];\n }\n const resolvedPath = resolveFrom.silent(\n path.dirname(expoPackagePath),\n 'expo-modules-autolinking/exports'\n );\n if (!resolvedPath) {\n return [];\n }\n const autolinkingModule = require(\n resolvedPath\n ) as typeof import('expo-modules-autolinking/exports');\n if (!autolinkingModule.queryAutolinkingModulesFromProjectAsync) {\n throw new Error(\n 'Missing exported `queryAutolinkingModulesFromProjectAsync()` function from `expo-modules-autolinking`'\n );\n }\n const plugins = (await autolinkingModule.queryAutolinkingModulesFromProjectAsync(projectRoot, {\n platform: 'devtools',\n onlyProjectDeps: false,\n })) as ModuleDescriptorDevTools[];\n debug('Found autolinked plugins', this.plugins);\n return plugins;\n }\n}\n"],"names":["DevToolsPluginEndpoint","DevToolsPluginManager","debug","require","constructor","projectRoot","plugins","queryPluginsAsync","queryAutolinkedPluginsAsync","map","plugin","webpageEndpoint","packageName","queryPluginWebpageRootAsync","pluginName","find","p","webpageRoot","expoPackagePath","resolveFrom","silent","resolvedPath","path","dirname","autolinkingModule","queryAutolinkingModulesFromProjectAsync","Error","platform","onlyProjectDeps"],"mappings":";;;;;;;;;;;IAMaA,sBAAsB;eAAtBA;;IAYb,OAkDC;eAlDoBC;;;;gEAjBJ;;;;;;;gEACO;;;;;;;;;;;AAExB,MAAMC,QAAQC,QAAQ,SAAS;AAExB,MAAMH,yBAAyB;AAYvB,MAAMC;IAGnBG,YAAY,AAAQC,WAAmB,CAAE;aAArBA,cAAAA;aAFZC,UAAmC;IAED;IAE1C,MAAaC,oBAA+C;QAC1D,IAAI,IAAI,CAACD,OAAO,EAAE;YAChB,OAAO,IAAI,CAACA,OAAO;QACrB;QACA,MAAMA,UAAU,AAAC,CAAA,MAAM,IAAI,CAACE,2BAA2B,CAAC,IAAI,CAACH,WAAW,CAAA,EAAGI,GAAG,CAAC,CAACC,SAAY,CAAA;gBAC1F,GAAGA,MAAM;gBACTC,iBAAiB,GAAGX,uBAAuB,CAAC,EAAEU,OAAOE,WAAW,EAAE;YACpE,CAAA;QACA,IAAI,CAACN,OAAO,GAAGA;QACf,OAAO,IAAI,CAACA,OAAO;IACrB;IAEA,MAAaO,4BAA4BC,UAAkB,EAA0B;QACnF,MAAMR,UAAU,MAAM,IAAI,CAACC,iBAAiB;QAC5C,MAAMG,SAASJ,QAAQS,IAAI,CAAC,CAACC,IAAMA,EAAEJ,WAAW,KAAKE;QACrD,OAAOJ,CAAAA,0BAAAA,OAAQO,WAAW,KAAI;IAChC;IAEA,MAAcT,4BAA4BH,WAAmB,EAAgC;QAC3F,MAAMa,kBAAkBC,sBAAW,CAACC,MAAM,CAACf,aAAa;QACxD,IAAI,CAACa,iBAAiB;YACpB,OAAO,EAAE;QACX;QACA,MAAMG,eAAeF,sBAAW,CAACC,MAAM,CACrCE,eAAI,CAACC,OAAO,CAACL,kBACb;QAEF,IAAI,CAACG,cAAc;YACjB,OAAO,EAAE;QACX;QACA,MAAMG,oBAAoBrB,QACxBkB;QAEF,IAAI,CAACG,kBAAkBC,uCAAuC,EAAE;YAC9D,MAAM,IAAIC,MACR;QAEJ;QACA,MAAMpB,UAAW,MAAMkB,kBAAkBC,uCAAuC,CAACpB,aAAa;YAC5FsB,UAAU;YACVC,iBAAiB;QACnB;QACA1B,MAAM,4BAA4B,IAAI,CAACI,OAAO;QAC9C,OAAOA;IACT;AACF"}
1
+ {"version":3,"sources":["../../../../src/start/server/DevToolsPluginManager.ts"],"sourcesContent":["import type { ModuleDescriptorDevTools } from 'expo-modules-autolinking/exports';\n\nconst debug = require('debug')('expo:start:server:devtools');\n\nexport const DevToolsPluginEndpoint = '/_expo/plugins';\n\ninterface AutolinkingPlugin {\n packageName: string;\n packageRoot: string;\n webpageRoot: string;\n}\n\nexport interface DevToolsPlugin extends AutolinkingPlugin {\n webpageEndpoint: string;\n}\n\nexport default class DevToolsPluginManager {\n private plugins: DevToolsPlugin[] | null = null;\n\n constructor(private projectRoot: string) {}\n\n public async queryPluginsAsync(): Promise<DevToolsPlugin[]> {\n if (this.plugins) {\n return this.plugins;\n }\n const plugins = (await this.queryAutolinkedPluginsAsync(this.projectRoot)).map((plugin) => ({\n ...plugin,\n webpageEndpoint: `${DevToolsPluginEndpoint}/${plugin.packageName}`,\n }));\n this.plugins = plugins;\n return this.plugins;\n }\n\n public async queryPluginWebpageRootAsync(pluginName: string): Promise<string | null> {\n const plugins = await this.queryPluginsAsync();\n const plugin = plugins.find((p) => p.packageName === pluginName);\n return plugin?.webpageRoot ?? null;\n }\n\n private async queryAutolinkedPluginsAsync(projectRoot: string): Promise<AutolinkingPlugin[]> {\n const autolinking: typeof import('expo/internal/unstable-autolinking-exports') = require('expo/internal/unstable-autolinking-exports');\n const linker = autolinking.makeCachedDependenciesLinker({ projectRoot });\n const revisions = await autolinking.scanExpoModuleResolutionsForPlatform(linker, 'devtools');\n const { resolveModuleAsync } = autolinking.getLinkingImplementationForPlatform('devtools');\n const plugins: ModuleDescriptorDevTools[] = (\n await Promise.all(\n Object.values(revisions).map((revision) => resolveModuleAsync(revision.name, revision))\n )\n ).filter((maybePlugin) => maybePlugin != null);\n debug('Found autolinked plugins', plugins);\n return plugins;\n }\n}\n"],"names":["DevToolsPluginEndpoint","DevToolsPluginManager","debug","require","constructor","projectRoot","plugins","queryPluginsAsync","queryAutolinkedPluginsAsync","map","plugin","webpageEndpoint","packageName","queryPluginWebpageRootAsync","pluginName","find","p","webpageRoot","autolinking","linker","makeCachedDependenciesLinker","revisions","scanExpoModuleResolutionsForPlatform","resolveModuleAsync","getLinkingImplementationForPlatform","Promise","all","Object","values","revision","name","filter","maybePlugin"],"mappings":";;;;;;;;;;;IAIaA,sBAAsB;eAAtBA;;IAYb,OAoCC;eApCoBC;;;AAdrB,MAAMC,QAAQC,QAAQ,SAAS;AAExB,MAAMH,yBAAyB;AAYvB,MAAMC;IAGnBG,YAAY,AAAQC,WAAmB,CAAE;aAArBA,cAAAA;aAFZC,UAAmC;IAED;IAE1C,MAAaC,oBAA+C;QAC1D,IAAI,IAAI,CAACD,OAAO,EAAE;YAChB,OAAO,IAAI,CAACA,OAAO;QACrB;QACA,MAAMA,UAAU,AAAC,CAAA,MAAM,IAAI,CAACE,2BAA2B,CAAC,IAAI,CAACH,WAAW,CAAA,EAAGI,GAAG,CAAC,CAACC,SAAY,CAAA;gBAC1F,GAAGA,MAAM;gBACTC,iBAAiB,GAAGX,uBAAuB,CAAC,EAAEU,OAAOE,WAAW,EAAE;YACpE,CAAA;QACA,IAAI,CAACN,OAAO,GAAGA;QACf,OAAO,IAAI,CAACA,OAAO;IACrB;IAEA,MAAaO,4BAA4BC,UAAkB,EAA0B;QACnF,MAAMR,UAAU,MAAM,IAAI,CAACC,iBAAiB;QAC5C,MAAMG,SAASJ,QAAQS,IAAI,CAAC,CAACC,IAAMA,EAAEJ,WAAW,KAAKE;QACrD,OAAOJ,CAAAA,0BAAAA,OAAQO,WAAW,KAAI;IAChC;IAEA,MAAcT,4BAA4BH,WAAmB,EAAgC;QAC3F,MAAMa,cAA2Ef,QAAQ;QACzF,MAAMgB,SAASD,YAAYE,4BAA4B,CAAC;YAAEf;QAAY;QACtE,MAAMgB,YAAY,MAAMH,YAAYI,oCAAoC,CAACH,QAAQ;QACjF,MAAM,EAAEI,kBAAkB,EAAE,GAAGL,YAAYM,mCAAmC,CAAC;QAC/E,MAAMlB,UAAsC,AAC1C,CAAA,MAAMmB,QAAQC,GAAG,CACfC,OAAOC,MAAM,CAACP,WAAWZ,GAAG,CAAC,CAACoB,WAAaN,mBAAmBM,SAASC,IAAI,EAAED,WAC/E,EACAE,MAAM,CAAC,CAACC,cAAgBA,eAAe;QACzC9B,MAAM,4BAA4BI;QAClC,OAAOA;IACT;AACF"}
@@ -513,7 +513,7 @@ function withExtendedResolver(config, { tsconfig, stickyModuleResolverInput, isT
513
513
  'react-native/Libraries/Utilities/codegenNativeComponent'
514
514
  ].some((matcher)=>// Support absolute and modules with .js extensions.
515
515
  moduleName.includes(matcher))) {
516
- throw new _createExpoMetroResolver.FailedToResolvePathError(`Importing native-only module "${moduleName}" on web from: ${context.originModulePath}`);
516
+ throw new _createExpoMetroResolver.FailedToResolvePathError(`Importing native-only module "${moduleName}" on web from: ${_path().default.relative(config.projectRoot, context.originModulePath)}`);
517
517
  }
518
518
  // Replace with static shims
519
519
  const normalName = normalizeSlashes(result.filePath)// Drop everything up until the `node_modules` folder.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/withMetroMultiPlatform.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 type { ExpoConfig, Platform } from '@expo/config';\nimport type Bundler from '@expo/metro/metro/Bundler';\nimport type { ConfigT } from '@expo/metro/metro-config';\nimport type {\n Resolution,\n ResolutionContext,\n CustomResolutionContext,\n} from '@expo/metro/metro-resolver';\nimport { resolve as metroResolver } from '@expo/metro/metro-resolver';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { createFallbackModuleResolver } from './createExpoFallbackResolver';\nimport { createFastResolver, FailedToResolvePathError } from './createExpoMetroResolver';\nimport {\n createStickyModuleResolverInput,\n createStickyModuleResolver,\n StickyModuleResolverInput,\n} from './createExpoStickyResolver';\nimport { isNodeExternal, shouldCreateVirtualCanary, shouldCreateVirtualShim } from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { getMetroBundlerWithVirtualModules } from './metroVirtualModules';\nimport { withMetroErrorReportingResolver } from './withMetroErrorReportingResolver';\nimport { withMetroMutatedResolverContext, withMetroResolvers } from './withMetroResolvers';\nimport { Log } from '../../../log';\nimport { FileNotifier } from '../../../utils/FileNotifier';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\nimport { isInteractive } from '../../../utils/interactive';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { isServerEnvironment } from '../middleware/metroOptions';\nimport { PlatformBundlers } from '../platformBundlers';\n\ntype Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\nexport type StrictResolver = (moduleName: string) => Resolution;\nexport type StrictResolverFactory = (\n context: ResolutionContext,\n platform: string | null\n) => StrictResolver;\n\nconst ASSET_REGISTRY_SRC = `const assets=[];module.exports={registerAsset:s=>assets.push(s),getAssetByID:s=>assets[s-1]};`;\n\nconst debug = require('debug')('expo:start:server:metro:multi-platform') as typeof console.log;\n\nfunction withWebPolyfills(\n config: ConfigT,\n {\n getMetroBundler,\n }: {\n getMetroBundler: () => Bundler;\n }\n): ConfigT {\n const originalGetPolyfills = config.serializer.getPolyfills\n ? config.serializer.getPolyfills.bind(config.serializer)\n : () => [];\n\n const getPolyfills = (ctx: { platform?: string | null }): readonly string[] => {\n const virtualEnvVarId = `\\0polyfill:environment-variables`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualEnvVarId,\n (() => {\n return `//`;\n })()\n );\n\n const virtualModuleId = `\\0polyfill:external-require`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n (() => {\n if (ctx.platform === 'web') {\n return `global.$$require_external = typeof require !== \"undefined\" ? require : () => null;`;\n } else {\n // Wrap in try/catch to support Android.\n return 'try { global.$$require_external = typeof expo === \"undefined\" ? require : (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} } catch { global.$$require_external = (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} }';\n }\n })()\n );\n\n const virtualModulesPolyfills = [virtualModuleId, virtualEnvVarId];\n\n if (ctx.platform === 'web') {\n try {\n const rnGetPolyfills: () => string[] = require('react-native/rn-get-polyfills');\n return [\n ...virtualModulesPolyfills,\n // Ensure that the error-guard polyfill is included in the web polyfills to\n // make metro-runtime work correctly.\n // TODO: This module is pretty big for a function that simply re-throws an error that doesn't need to be caught.\n // NOTE(@kitten): This is technically the public API to get polyfills rather than resolving directly into\n // `@react-native/js-polyfills`. We should really just start vendoring these, but for now, this exclusion works\n ...rnGetPolyfills().filter((x: string) => !x.includes('/console')),\n ];\n } catch (error: any) {\n if ('code' in error && error.code === 'MODULE_NOT_FOUND') {\n // If react-native is not installed, because we're targeting web, we still continue\n // This should be rare, but we add it so we don't unnecessarily have a fixed peer dependency on react-native\n debug(\n 'Skipping react-native/rn-get-polyfills from getPolyfills. react-native is not installed.'\n );\n return virtualModulesPolyfills;\n } else {\n throw error;\n }\n }\n }\n\n // Generally uses `@expo/metro-config`'s `getPolyfills` function, unless overridden\n const polyfills = originalGetPolyfills(ctx);\n return [\n ...polyfills,\n ...virtualModulesPolyfills,\n // Removed on server platforms during the transform.\n require.resolve('expo/virtual/streams.js'),\n ];\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n getPolyfills,\n },\n };\n}\n\nfunction normalizeSlashes(p: string) {\n return p.replace(/\\\\/g, '/');\n}\n\nexport function getNodejsExtensions(srcExts: readonly string[]): string[] {\n const mjsExts = srcExts.filter((ext) => /mjs$/.test(ext));\n const nodejsSourceExtensions = srcExts.filter((ext) => !/mjs$/.test(ext));\n // find index of last `*.js` extension\n const jsIndex = nodejsSourceExtensions.reduce((index, ext, i) => {\n return /jsx?$/.test(ext) ? i : index;\n }, -1);\n\n // insert `*.mjs` extensions after `*.js` extensions\n nodejsSourceExtensions.splice(jsIndex + 1, 0, ...mjsExts);\n\n return nodejsSourceExtensions;\n}\n\n/**\n * Apply custom resolvers to do the following:\n * - Disable `.native.js` extensions on web.\n * - Alias `react-native` to `react-native-web` on web.\n * - Redirect `react-native-web/dist/modules/AssetRegistry/index.js` to `@react-native/assets/registry.js` on web.\n * - Add support for `tsconfig.json`/`jsconfig.json` aliases via `compilerOptions.paths`.\n * - Alias react-native renderer code to a vendored React canary build on native.\n */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n tsconfig,\n stickyModuleResolverInput,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n isReactServerComponentsEnabled,\n getMetroBundler,\n }: {\n tsconfig: TsConfigPaths | null;\n stickyModuleResolverInput?: StickyModuleResolverInput;\n isTsconfigPathsEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled?: boolean;\n isReactServerComponentsEnabled?: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isReactServerComponentsEnabled) {\n Log.warn(`React Server Components (beta) is enabled.`);\n }\n if (isReactCanaryEnabled) {\n Log.warn(`Experimental React 19 canary is enabled.`);\n }\n if (isFastResolverEnabled) {\n Log.log(chalk.dim`Fast resolver is enabled.`);\n }\n if (stickyModuleResolverInput) {\n Log.log(chalk.dim`Sticky resolver is enabled.`);\n }\n\n const defaultResolver = metroResolver;\n const resolver = isFastResolverEnabled\n ? createFastResolver({\n preserveSymlinks: true,\n blockList: !config.resolver?.blockList\n ? []\n : Array.isArray(config.resolver?.blockList)\n ? config.resolver?.blockList\n : [config.resolver?.blockList],\n })\n : defaultResolver;\n\n const aliases: { [key: string]: Record<string, string> } = {\n web: {\n 'react-native': 'react-native-web',\n 'react-native/index': 'react-native-web',\n 'react-native/Libraries/Image/resolveAssetSource': 'expo-asset/build/resolveAssetSource',\n },\n };\n\n // The vendored canary modules live inside /static/canary-full/node_modules\n // Adding the `index.js` allows us to add this path as `originModulePath` to\n // resolve the nested `node_modules` folder properly.\n const canaryModulesPath = path.join(\n require.resolve('@expo/cli/package.json'),\n '../static/canary-full/index.js'\n );\n\n let _universalAliases: [RegExp, string][] | null;\n\n function getUniversalAliases() {\n if (_universalAliases) {\n return _universalAliases;\n }\n\n _universalAliases = [];\n\n // This package is currently always installed as it is included in the `expo` package.\n if (resolveFrom.silent(config.projectRoot, '@expo/vector-icons')) {\n debug('Enabling alias: react-native-vector-icons -> @expo/vector-icons');\n _universalAliases.push([/^react-native-vector-icons(\\/.*)?/, '@expo/vector-icons$1']);\n }\n if (isReactServerComponentsEnabled) {\n if (resolveFrom.silent(config.projectRoot, 'expo-router/rsc')) {\n debug('Enabling bridge alias: expo-router -> expo-router/rsc');\n _universalAliases.push([/^expo-router$/, 'expo-router/rsc']);\n // Bridge the internal entry point which is a standalone import to ensure package.json resolution works as expected.\n _universalAliases.push([/^expo-router\\/entry-classic$/, 'expo-router/rsc/entry']);\n }\n }\n return _universalAliases;\n }\n\n const preferredMainFields: { [key: string]: string[] } = {\n // Defaults from Expo Webpack. Most packages using `react-native` don't support web\n // in the `react-native` field, so we should prefer the `browser` field.\n // https://github.com/expo/router/issues/37\n web: ['browser', 'module', 'main'],\n };\n\n let tsConfigResolve =\n isTsconfigPathsEnabled && (tsconfig?.paths || tsconfig?.baseUrl != null)\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsconfig.baseUrl,\n })\n : null;\n\n // TODO: Move this to be a transform key for invalidation.\n if (!isExporting && isInteractive()) {\n if (isTsconfigPathsEnabled) {\n // TODO: We should track all the files that used imports and invalidate them\n // currently the user will need to save all the files that use imports to\n // use the new aliases.\n const configWatcher = new FileNotifier(config.projectRoot, [\n './tsconfig.json',\n './jsconfig.json',\n ]);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(config.projectRoot).then((tsConfigPaths) => {\n if (tsConfigPaths?.paths && !!Object.keys(tsConfigPaths.paths).length) {\n debug('Enabling tsconfig.json paths support');\n tsConfigResolve = resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsConfigPaths.paths ?? {},\n baseUrl: tsConfigPaths.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsConfigPaths.baseUrl,\n });\n } else {\n debug('Disabling tsconfig.json paths support');\n tsConfigResolve = null;\n }\n });\n });\n\n // TODO: This probably prevents the process from exiting.\n installExitHooks(() => {\n configWatcher.stopObserving();\n });\n } else {\n debug('Skipping tsconfig.json paths support');\n }\n }\n\n let nodejsSourceExtensions: string[] | null = null;\n\n const getStrictResolver: StrictResolverFactory = (\n { resolveRequest, ...context },\n platform\n ): StrictResolver => {\n return function doResolve(moduleName: string): Resolution {\n return resolver(context, moduleName, platform);\n };\n };\n\n function getOptionalResolver(context: ResolutionContext, platform: string | null) {\n const doResolve = getStrictResolver(context, platform);\n return function optionalResolve(moduleName: string): Resolution | null {\n try {\n return doResolve(moduleName);\n } catch (error) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n }\n return null;\n };\n }\n\n // TODO: This is a hack to get resolveWeak working.\n const idFactory = (config.serializer?.createModuleIdFactory?.() ??\n ((id: number | string, context: { platform: string; environment?: string }): number | string =>\n id)) as (\n id: number | string,\n context: { platform: string; environment?: string }\n ) => number | string;\n\n const getAssetRegistryModule = () => {\n const virtualModuleId = `\\0polyfill:assets-registry`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n ASSET_REGISTRY_SRC\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n } as const;\n };\n\n // If Node.js pass-through, then remap to a module like `module.exports = $$require_external(<module>)`.\n // If module should be shimmed, remap to an empty module.\n const externals: {\n match: (context: ResolutionContext, moduleName: string, platform: string | null) => boolean;\n replace: 'empty' | 'node' | 'weak';\n }[] = [\n {\n match: (context: ResolutionContext, moduleName: string) => {\n if (\n // Disable internal externals when exporting for production.\n context.customResolverOptions.exporting ||\n // These externals are only for Node.js environments.\n !isServerEnvironment(context.customResolverOptions?.environment)\n ) {\n return false;\n }\n\n if (context.customResolverOptions?.environment === 'react-server') {\n // Ensure these non-react-server modules are excluded when bundling for React Server Components in development.\n return /^(source-map-support(\\/.*)?|@babel\\/runtime\\/.+|debug|metro-runtime\\/src\\/modules\\/HMRClient|metro|acorn-loose|acorn|chalk|ws|ansi-styles|supports-color|color-convert|has-flag|utf-8-validate|color-name|react-refresh\\/runtime|@remix-run\\/node\\/.+)$/.test(\n moduleName\n );\n }\n\n // TODO: Windows doesn't support externals somehow.\n if (process.platform === 'win32') {\n return /^(source-map-support(\\/.*)?)$/.test(moduleName);\n }\n\n // Extern these modules in standard Node.js environments in development to prevent API routes side-effects\n // from leaking into the dev server process.\n return /^(source-map-support(\\/.*)?|react|@radix-ui\\/.+|@babel\\/runtime\\/.+|react-dom(\\/.+)?|debug|acorn-loose|acorn|css-in-js-utils\\/lib\\/.+|hyphenate-style-name|color|color-string|color-convert|color-name|fontfaceobserver|fast-deep-equal|query-string|escape-string-regexp|invariant|postcss-value-parser|memoize-one|nullthrows|strict-uri-encode|decode-uri-component|split-on-first|filter-obj|warn-once|simple-swizzle|is-arrayish|inline-style-prefixer\\/.+)$/.test(\n moduleName\n );\n },\n replace: 'node',\n },\n // Externals to speed up async split chunks by extern-ing common packages that appear in the root client chunk.\n {\n match: (context: ResolutionContext, moduleName: string, platform: string | null) => {\n if (\n // Disable internal externals when exporting for production.\n context.customResolverOptions.exporting ||\n // These externals are only for client environments.\n isServerEnvironment(context.customResolverOptions?.environment) ||\n // Only enable for client boundaries\n !context.customResolverOptions.clientboundary\n ) {\n return false;\n }\n\n // We don't support this in the resolver at the moment.\n if (moduleName.endsWith('/package.json')) {\n return false;\n }\n\n const isExternal = // Extern these modules in standard Node.js environments.\n /^(deprecated-react-native-prop-types|react|react\\/jsx-dev-runtime|scheduler|react-native|react-dom(\\/.+)?|metro-runtime(\\/.+)?)$/.test(\n moduleName\n ) ||\n // TODO: Add more\n /^@babel\\/runtime\\/helpers\\/(wrapNativeSuper)$/.test(moduleName);\n\n return isExternal;\n },\n replace: 'weak',\n },\n ];\n\n const metroConfigWithCustomResolver = withMetroResolvers(config, [\n // Mock out production react imports in development.\n function requestDevMockProdReact(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n // This resolution is dev-only to prevent bundling the production React packages in development.\n if (!context.dev) return null;\n\n if (\n // Match react-native renderers.\n (platform !== 'web' &&\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/]react-native[\\\\/]/) &&\n moduleName.match(/([\\\\/]ReactFabric|ReactNativeRenderer)-prod/)) ||\n // Match react production imports.\n (moduleName.match(/\\.production(\\.min)?\\.js$/) &&\n // Match if the import originated from a react package.\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/](react[-\\\\/]|scheduler[\\\\/])/))\n ) {\n debug(`Skipping production module: ${moduleName}`);\n // /Users/path/to/expo/node_modules/react/index.js ./cjs/react.production.min.js\n // /Users/path/to/expo/node_modules/react/jsx-dev-runtime.js ./cjs/react-jsx-dev-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n // /Users/path/to/expo/node_modules/react-refresh/runtime.js ./cjs/react-refresh-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/scheduler/index.native.js ./cjs/scheduler.native.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n return {\n type: 'empty',\n };\n }\n return null;\n },\n // tsconfig paths\n function requestTsconfigPaths(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n return (\n tsConfigResolve?.(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n getOptionalResolver(context, platform)\n ) ?? null\n );\n },\n\n // Node.js externals support\n function requestNodeExternals(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n const moduleId = isNodeExternal(moduleName);\n if (!moduleId) {\n return null;\n }\n\n if (\n // In browser runtimes, we want to either resolve a local node module by the same name, or shim the module to\n // prevent crashing when Node.js built-ins are imported.\n !isServer\n ) {\n // Perform optional resolve first. If the module doesn't exist (no module in the node_modules)\n // then we can mock the file to use an empty module.\n const result = getOptionalResolver(context, platform)(moduleName);\n\n if (!result && platform !== 'web') {\n // Preserve previous behavior where native throws an error on node.js internals.\n return null;\n }\n\n return (\n result ?? {\n // In this case, mock the file to use an empty module.\n type: 'empty',\n }\n );\n }\n const contents = `module.exports=$$require_external('node:${moduleId}');`;\n debug(`Virtualizing Node.js \"${moduleId}\"`);\n const virtualModuleId = `\\0node:${moduleId}`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n },\n\n // Custom externals support\n function requestCustomExternals(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n // We don't support this in the resolver at the moment.\n if (moduleName.endsWith('/package.json')) {\n return null;\n }\n // Skip applying JS externals for CSS files.\n if (/\\.(s?css|sass)$/.test(context.originModulePath)) {\n return null;\n }\n\n const environment = context.customResolverOptions?.environment;\n\n const strictResolve = getStrictResolver(context, platform);\n\n for (const external of externals) {\n if (external.match(context, moduleName, platform)) {\n if (external.replace === 'empty') {\n debug(`Redirecting external \"${moduleName}\" to \"${external.replace}\"`);\n return {\n type: external.replace,\n };\n } else if (external.replace === 'weak') {\n // TODO: Make this use require.resolveWeak again. Previously this was just resolving to the same path.\n const realModule = strictResolve(moduleName);\n const realPath = realModule.type === 'sourceFile' ? realModule.filePath : moduleName;\n const opaqueId = idFactory(realPath, {\n platform: platform!,\n environment,\n });\n\n const contents =\n typeof opaqueId === 'number'\n ? `module.exports=/*${moduleName}*/__r(${opaqueId})`\n : `module.exports=/*${moduleName}*/__r(${JSON.stringify(opaqueId)})`;\n // const contents = `module.exports=/*${moduleName}*/__r(require.resolveWeak('${moduleName}'))`;\n // const generatedModuleId = fastHashMemoized(contents);\n const virtualModuleId = `\\0weak:${opaqueId}`;\n debug('Virtualizing module:', moduleName, '->', virtualModuleId);\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n } else if (external.replace === 'node') {\n const contents = `module.exports=$$require_external('${moduleName}')`;\n const virtualModuleId = `\\0node:${moduleName}`;\n debug('Virtualizing Node.js (custom):', moduleName, '->', virtualModuleId);\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n } else {\n throw new CommandError(\n `Invalid external alias type: \"${external.replace}\" for module \"${moduleName}\" (platform: ${platform}, originModulePath: ${context.originModulePath})`\n );\n }\n }\n }\n return null;\n },\n\n // Basic moduleId aliases\n function requestAlias(context: ResolutionContext, moduleName: string, platform: string | null) {\n // Conditionally remap `react-native` to `react-native-web` on web in\n // a way that doesn't require Babel to resolve the alias.\n if (platform && platform in aliases && aliases[platform][moduleName]) {\n const redirectedModuleName = aliases[platform][moduleName];\n return getStrictResolver(context, platform)(redirectedModuleName);\n }\n\n for (const [matcher, alias] of getUniversalAliases()) {\n const match = moduleName.match(matcher);\n if (match) {\n const aliasedModule = alias.replace(\n /\\$(\\d+)/g,\n (_, index) => match[parseInt(index, 10)] ?? ''\n );\n const doResolve = getStrictResolver(context, platform);\n debug(`Alias \"${moduleName}\" to \"${aliasedModule}\"`);\n return doResolve(aliasedModule);\n }\n }\n\n return null;\n },\n\n // Polyfill for asset registry\n function requestStableAssetRegistry(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n if (/^@react-native\\/assets-registry\\/registry(\\.js)?$/.test(moduleName)) {\n return getAssetRegistryModule();\n }\n\n if (\n platform === 'web' &&\n context.originModulePath.match(/node_modules[\\\\/]react-native-web[\\\\/]/) &&\n moduleName.includes('/modules/AssetRegistry')\n ) {\n return getAssetRegistryModule();\n }\n\n return null;\n },\n\n createStickyModuleResolver(stickyModuleResolverInput, {\n getStrictResolver,\n }),\n\n // TODO: Reduce these as much as possible in the future.\n // Complex post-resolution rewrites.\n function requestPostRewrites(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n const doResolve = getStrictResolver(context, platform);\n\n const result = doResolve(moduleName);\n\n if (result.type !== 'sourceFile') {\n return result;\n }\n\n if (platform === 'web') {\n if (result.filePath.includes('node_modules')) {\n // Disallow importing confusing native modules on web\n if (\n [\n 'react-native/Libraries/ReactPrivate/ReactNativePrivateInitializeCore',\n 'react-native/Libraries/Utilities/codegenNativeCommands',\n 'react-native/Libraries/Utilities/codegenNativeComponent',\n ].some((matcher) =>\n // Support absolute and modules with .js extensions.\n moduleName.includes(matcher)\n )\n ) {\n throw new FailedToResolvePathError(\n `Importing native-only module \"${moduleName}\" on web from: ${context.originModulePath}`\n );\n }\n\n // Replace with static shims\n\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const shimFile = shouldCreateVirtualShim(normalName);\n if (shimFile) {\n const virtualId = `\\0shim:${normalName}`;\n const bundler = getMetroBundlerWithVirtualModules(getMetroBundler());\n if (!bundler.hasVirtualModule(virtualId)) {\n bundler.setVirtualModule(virtualId, fs.readFileSync(shimFile, 'utf8'));\n }\n debug(`Redirecting module \"${result.filePath}\" to shim`);\n\n return {\n ...result,\n filePath: virtualId,\n };\n }\n }\n } else {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n // react-native/Libraries/Core/InitializeCore\n const normal = normalizeSlashes(result.filePath);\n\n // Shim out React Native native runtime globals in server mode for native.\n if (isServer) {\n if (normal.endsWith('react-native/Libraries/Core/InitializeCore.js')) {\n debug('Shimming out InitializeCore for React Native in native SSR bundle');\n return {\n type: 'empty',\n };\n }\n }\n\n // When server components are enabled, redirect React Native's renderer to the canary build\n // this will enable the use hook and other requisite features from React 19.\n if (isReactCanaryEnabled && result.filePath.includes('node_modules')) {\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const canaryFile = shouldCreateVirtualCanary(normalName);\n if (canaryFile) {\n debug(`Redirecting React Native module \"${result.filePath}\" to canary build`);\n return {\n ...result,\n filePath: canaryFile,\n };\n }\n }\n }\n\n return result;\n },\n\n // If at this point, we haven't resolved a module yet, if it's a module specifier for a known dependency\n // of either `expo` or `expo-router`, attempt to resolve it from these origin modules instead\n createFallbackModuleResolver({\n projectRoot: config.projectRoot,\n originModuleNames: ['expo', 'expo-router'],\n getStrictResolver,\n }),\n ]);\n\n // Ensure we mutate the resolution context to include the custom resolver options for server and web.\n const metroConfigWithCustomContext = withMetroMutatedResolverContext(\n metroConfigWithCustomResolver,\n (\n immutableContext: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ): CustomResolutionContext => {\n const context: Mutable<CustomResolutionContext> = {\n ...immutableContext,\n preferNativePlatform: platform !== 'web',\n };\n\n // TODO: Remove this when we have React 19 in the expo/expo monorepo.\n if (\n isReactCanaryEnabled &&\n // Change the node modules path for react and react-dom to use the vendor in Expo CLI.\n /^(react|react\\/.*|react-dom|react-dom\\/.*)$/.test(moduleName)\n ) {\n // Modifying the origin module path changes the starting Node module resolution path to this folder\n context.originModulePath = canaryModulesPath;\n // Hierarchical lookup has to be enabled for this to work\n context.disableHierarchicalLookup = false;\n }\n\n if (isServerEnvironment(context.customResolverOptions?.environment)) {\n // Adjust nodejs source extensions to sort mjs after js, including platform variants.\n if (nodejsSourceExtensions === null) {\n nodejsSourceExtensions = getNodejsExtensions(context.sourceExts);\n }\n context.sourceExts = nodejsSourceExtensions;\n\n context.unstable_enablePackageExports = true;\n context.unstable_conditionsByPlatform = {};\n\n const isReactServerComponents =\n context.customResolverOptions?.environment === 'react-server';\n\n if (isReactServerComponents) {\n // NOTE: Align the behavior across server and client. This is a breaking change so we'll just roll it out with React Server Components.\n // This ensures that react-server and client code both resolve `module` and `main` in the same order.\n if (platform === 'web') {\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['module', 'main'];\n } else {\n // In Node.js + native, use the standard main fields.\n context.mainFields = ['react-native', 'module', 'main'];\n }\n } else {\n if (platform === 'web') {\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['main', 'module'];\n } else {\n // In Node.js + native, use the standard main fields.\n context.mainFields = ['react-native', 'main', 'module'];\n }\n }\n\n // Enable react-server import conditions.\n if (context.customResolverOptions?.environment === 'react-server') {\n context.unstable_conditionNames = ['node', 'react-server', 'workerd'];\n } else {\n context.unstable_conditionNames = ['node'];\n }\n } else {\n // Non-server changes\n\n if (!env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE && platform && platform in preferredMainFields) {\n context.mainFields = preferredMainFields[platform];\n }\n }\n\n return context;\n }\n );\n\n return withMetroErrorReportingResolver(metroConfigWithCustomContext);\n}\n\n/** @returns `true` if the incoming resolution should be swapped. */\nexport function shouldAliasModule(\n input: {\n platform: string | null;\n result: Resolution;\n },\n alias: { platform: string; output: string }\n): boolean {\n return (\n input.platform === alias.platform &&\n input.result?.type === 'sourceFile' &&\n typeof input.result?.filePath === 'string' &&\n normalizeSlashes(input.result.filePath).endsWith(alias.output)\n );\n}\n\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled,\n isStickyResolverEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n isNamedRequiresEnabled,\n isReactServerComponentsEnabled,\n getMetroBundler,\n }: {\n config: ConfigT;\n exp: ExpoConfig;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n isStickyResolverEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled: boolean;\n isReactServerComponentsEnabled: boolean;\n isNamedRequiresEnabled: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isNamedRequiresEnabled) {\n debug('Using Expo metro require runtime.');\n // Change the default metro-runtime to a custom one that supports bundle splitting.\n const metroDefaults: Mutable<\n typeof import('@expo/metro/metro-config/defaults/defaults')\n > = require('@expo/metro/metro-config/defaults/defaults');\n metroDefaults.moduleSystem = require.resolve('@expo/cli/build/metro-require/require');\n }\n\n if (!config.projectRoot) {\n // @ts-expect-error: read-only types\n config.projectRoot = projectRoot;\n }\n\n // Required for @expo/metro-runtime to format paths in the web LogBox.\n process.env.EXPO_PUBLIC_PROJECT_ROOT = process.env.EXPO_PUBLIC_PROJECT_ROOT ?? projectRoot;\n\n // This is used for running Expo CLI in development against projects outside the monorepo.\n if (!isDirectoryIn(__dirname, projectRoot)) {\n // TODO(@kitten): Remove ts-export-errors here and replace with cast for type safety\n if (!config.watchFolders) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders = [];\n }\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('metro-runtime/package.json'), '../..'));\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(\n path.join(require.resolve('@expo/metro-config/package.json'), '../..'),\n // For virtual modules\n path.join(require.resolve('expo/package.json'), '..')\n );\n if (isReactCanaryEnabled) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('@expo/cli/package.json'), '..'));\n }\n }\n\n // TODO: Remove this\n // @ts-expect-error: Invalidate the cache when the location of expo-router changes on-disk.\n config.transformer._expoRouterPath = resolveFrom.silent(projectRoot, 'expo-router');\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n .map(([platform]) => platform);\n\n if (Array.isArray(config.resolver.platforms)) {\n expoConfigPlatforms = [...new Set(expoConfigPlatforms.concat(config.resolver.platforms))];\n }\n\n // @ts-expect-error: typed as `readonly`.\n config.resolver.platforms = expoConfigPlatforms;\n\n config = withWebPolyfills(config, { getMetroBundler });\n\n let stickyModuleResolverInput: StickyModuleResolverInput | undefined;\n if (isStickyResolverEnabled) {\n stickyModuleResolverInput = await createStickyModuleResolverInput({\n platforms: expoConfigPlatforms,\n projectRoot,\n });\n }\n\n return withExtendedResolver(config, {\n stickyModuleResolverInput,\n tsconfig,\n isExporting,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isReactCanaryEnabled,\n isReactServerComponentsEnabled,\n getMetroBundler,\n });\n}\n\nfunction isDirectoryIn(targetPath: string, rootPath: string) {\n return targetPath.startsWith(rootPath) && targetPath.length >= rootPath.length;\n}\n"],"names":["getNodejsExtensions","shouldAliasModule","withExtendedResolver","withMetroMultiPlatformAsync","ASSET_REGISTRY_SRC","debug","require","withWebPolyfills","config","getMetroBundler","originalGetPolyfills","serializer","getPolyfills","bind","ctx","virtualEnvVarId","getMetroBundlerWithVirtualModules","setVirtualModule","virtualModuleId","platform","virtualModulesPolyfills","rnGetPolyfills","filter","x","includes","error","code","polyfills","resolve","normalizeSlashes","p","replace","srcExts","mjsExts","ext","test","nodejsSourceExtensions","jsIndex","reduce","index","i","splice","tsconfig","stickyModuleResolverInput","isTsconfigPathsEnabled","isFastResolverEnabled","isExporting","isReactCanaryEnabled","isReactServerComponentsEnabled","Log","warn","log","chalk","dim","defaultResolver","metroResolver","resolver","createFastResolver","preserveSymlinks","blockList","Array","isArray","aliases","web","canaryModulesPath","path","join","_universalAliases","getUniversalAliases","resolveFrom","silent","projectRoot","push","preferredMainFields","tsConfigResolve","paths","baseUrl","resolveWithTsConfigPaths","hasBaseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","getStrictResolver","resolveRequest","context","doResolve","moduleName","getOptionalResolver","optionalResolve","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","idFactory","createModuleIdFactory","id","getAssetRegistryModule","type","filePath","externals","match","customResolverOptions","exporting","isServerEnvironment","environment","process","clientboundary","endsWith","isExternal","metroConfigWithCustomResolver","withMetroResolvers","requestDevMockProdReact","dev","originModulePath","requestTsconfigPaths","requestNodeExternals","isServer","moduleId","isNodeExternal","result","contents","requestCustomExternals","strictResolve","external","realModule","realPath","opaqueId","JSON","stringify","CommandError","requestAlias","redirectedModuleName","matcher","alias","aliasedModule","_","parseInt","requestStableAssetRegistry","createStickyModuleResolver","requestPostRewrites","some","FailedToResolvePathError","normalName","shimFile","shouldCreateVirtualShim","virtualId","bundler","hasVirtualModule","fs","readFileSync","normal","canaryFile","shouldCreateVirtualCanary","createFallbackModuleResolver","originModuleNames","metroConfigWithCustomContext","withMetroMutatedResolverContext","immutableContext","preferNativePlatform","disableHierarchicalLookup","sourceExts","unstable_enablePackageExports","unstable_conditionsByPlatform","isReactServerComponents","mainFields","unstable_conditionNames","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","withMetroErrorReportingResolver","input","output","exp","platformBundlers","isStickyResolverEnabled","isNamedRequiresEnabled","metroDefaults","moduleSystem","EXPO_PUBLIC_PROJECT_ROOT","isDirectoryIn","__dirname","watchFolders","transformer","_expoRouterPath","expoConfigPlatforms","entries","platforms","map","Set","concat","createStickyModuleResolverInput","targetPath","rootPath","startsWith"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/withMetroMultiPlatform.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 type { ExpoConfig, Platform } from '@expo/config';\nimport type Bundler from '@expo/metro/metro/Bundler';\nimport type { ConfigT } from '@expo/metro/metro-config';\nimport type {\n Resolution,\n ResolutionContext,\n CustomResolutionContext,\n} from '@expo/metro/metro-resolver';\nimport { resolve as metroResolver } from '@expo/metro/metro-resolver';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { createFallbackModuleResolver } from './createExpoFallbackResolver';\nimport { createFastResolver, FailedToResolvePathError } from './createExpoMetroResolver';\nimport {\n createStickyModuleResolverInput,\n createStickyModuleResolver,\n StickyModuleResolverInput,\n} from './createExpoStickyResolver';\nimport { isNodeExternal, shouldCreateVirtualCanary, shouldCreateVirtualShim } from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { getMetroBundlerWithVirtualModules } from './metroVirtualModules';\nimport { withMetroErrorReportingResolver } from './withMetroErrorReportingResolver';\nimport { withMetroMutatedResolverContext, withMetroResolvers } from './withMetroResolvers';\nimport { Log } from '../../../log';\nimport { FileNotifier } from '../../../utils/FileNotifier';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\nimport { isInteractive } from '../../../utils/interactive';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { isServerEnvironment } from '../middleware/metroOptions';\nimport { PlatformBundlers } from '../platformBundlers';\n\ntype Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\nexport type StrictResolver = (moduleName: string) => Resolution;\nexport type StrictResolverFactory = (\n context: ResolutionContext,\n platform: string | null\n) => StrictResolver;\n\nconst ASSET_REGISTRY_SRC = `const assets=[];module.exports={registerAsset:s=>assets.push(s),getAssetByID:s=>assets[s-1]};`;\n\nconst debug = require('debug')('expo:start:server:metro:multi-platform') as typeof console.log;\n\nfunction withWebPolyfills(\n config: ConfigT,\n {\n getMetroBundler,\n }: {\n getMetroBundler: () => Bundler;\n }\n): ConfigT {\n const originalGetPolyfills = config.serializer.getPolyfills\n ? config.serializer.getPolyfills.bind(config.serializer)\n : () => [];\n\n const getPolyfills = (ctx: { platform?: string | null }): readonly string[] => {\n const virtualEnvVarId = `\\0polyfill:environment-variables`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualEnvVarId,\n (() => {\n return `//`;\n })()\n );\n\n const virtualModuleId = `\\0polyfill:external-require`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n (() => {\n if (ctx.platform === 'web') {\n return `global.$$require_external = typeof require !== \"undefined\" ? require : () => null;`;\n } else {\n // Wrap in try/catch to support Android.\n return 'try { global.$$require_external = typeof expo === \"undefined\" ? require : (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} } catch { global.$$require_external = (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} }';\n }\n })()\n );\n\n const virtualModulesPolyfills = [virtualModuleId, virtualEnvVarId];\n\n if (ctx.platform === 'web') {\n try {\n const rnGetPolyfills: () => string[] = require('react-native/rn-get-polyfills');\n return [\n ...virtualModulesPolyfills,\n // Ensure that the error-guard polyfill is included in the web polyfills to\n // make metro-runtime work correctly.\n // TODO: This module is pretty big for a function that simply re-throws an error that doesn't need to be caught.\n // NOTE(@kitten): This is technically the public API to get polyfills rather than resolving directly into\n // `@react-native/js-polyfills`. We should really just start vendoring these, but for now, this exclusion works\n ...rnGetPolyfills().filter((x: string) => !x.includes('/console')),\n ];\n } catch (error: any) {\n if ('code' in error && error.code === 'MODULE_NOT_FOUND') {\n // If react-native is not installed, because we're targeting web, we still continue\n // This should be rare, but we add it so we don't unnecessarily have a fixed peer dependency on react-native\n debug(\n 'Skipping react-native/rn-get-polyfills from getPolyfills. react-native is not installed.'\n );\n return virtualModulesPolyfills;\n } else {\n throw error;\n }\n }\n }\n\n // Generally uses `@expo/metro-config`'s `getPolyfills` function, unless overridden\n const polyfills = originalGetPolyfills(ctx);\n return [\n ...polyfills,\n ...virtualModulesPolyfills,\n // Removed on server platforms during the transform.\n require.resolve('expo/virtual/streams.js'),\n ];\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n getPolyfills,\n },\n };\n}\n\nfunction normalizeSlashes(p: string) {\n return p.replace(/\\\\/g, '/');\n}\n\nexport function getNodejsExtensions(srcExts: readonly string[]): string[] {\n const mjsExts = srcExts.filter((ext) => /mjs$/.test(ext));\n const nodejsSourceExtensions = srcExts.filter((ext) => !/mjs$/.test(ext));\n // find index of last `*.js` extension\n const jsIndex = nodejsSourceExtensions.reduce((index, ext, i) => {\n return /jsx?$/.test(ext) ? i : index;\n }, -1);\n\n // insert `*.mjs` extensions after `*.js` extensions\n nodejsSourceExtensions.splice(jsIndex + 1, 0, ...mjsExts);\n\n return nodejsSourceExtensions;\n}\n\n/**\n * Apply custom resolvers to do the following:\n * - Disable `.native.js` extensions on web.\n * - Alias `react-native` to `react-native-web` on web.\n * - Redirect `react-native-web/dist/modules/AssetRegistry/index.js` to `@react-native/assets/registry.js` on web.\n * - Add support for `tsconfig.json`/`jsconfig.json` aliases via `compilerOptions.paths`.\n * - Alias react-native renderer code to a vendored React canary build on native.\n */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n tsconfig,\n stickyModuleResolverInput,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n isReactServerComponentsEnabled,\n getMetroBundler,\n }: {\n tsconfig: TsConfigPaths | null;\n stickyModuleResolverInput?: StickyModuleResolverInput;\n isTsconfigPathsEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled?: boolean;\n isReactServerComponentsEnabled?: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isReactServerComponentsEnabled) {\n Log.warn(`React Server Components (beta) is enabled.`);\n }\n if (isReactCanaryEnabled) {\n Log.warn(`Experimental React 19 canary is enabled.`);\n }\n if (isFastResolverEnabled) {\n Log.log(chalk.dim`Fast resolver is enabled.`);\n }\n if (stickyModuleResolverInput) {\n Log.log(chalk.dim`Sticky resolver is enabled.`);\n }\n\n const defaultResolver = metroResolver;\n const resolver = isFastResolverEnabled\n ? createFastResolver({\n preserveSymlinks: true,\n blockList: !config.resolver?.blockList\n ? []\n : Array.isArray(config.resolver?.blockList)\n ? config.resolver?.blockList\n : [config.resolver?.blockList],\n })\n : defaultResolver;\n\n const aliases: { [key: string]: Record<string, string> } = {\n web: {\n 'react-native': 'react-native-web',\n 'react-native/index': 'react-native-web',\n 'react-native/Libraries/Image/resolveAssetSource': 'expo-asset/build/resolveAssetSource',\n },\n };\n\n // The vendored canary modules live inside /static/canary-full/node_modules\n // Adding the `index.js` allows us to add this path as `originModulePath` to\n // resolve the nested `node_modules` folder properly.\n const canaryModulesPath = path.join(\n require.resolve('@expo/cli/package.json'),\n '../static/canary-full/index.js'\n );\n\n let _universalAliases: [RegExp, string][] | null;\n\n function getUniversalAliases() {\n if (_universalAliases) {\n return _universalAliases;\n }\n\n _universalAliases = [];\n\n // This package is currently always installed as it is included in the `expo` package.\n if (resolveFrom.silent(config.projectRoot, '@expo/vector-icons')) {\n debug('Enabling alias: react-native-vector-icons -> @expo/vector-icons');\n _universalAliases.push([/^react-native-vector-icons(\\/.*)?/, '@expo/vector-icons$1']);\n }\n if (isReactServerComponentsEnabled) {\n if (resolveFrom.silent(config.projectRoot, 'expo-router/rsc')) {\n debug('Enabling bridge alias: expo-router -> expo-router/rsc');\n _universalAliases.push([/^expo-router$/, 'expo-router/rsc']);\n // Bridge the internal entry point which is a standalone import to ensure package.json resolution works as expected.\n _universalAliases.push([/^expo-router\\/entry-classic$/, 'expo-router/rsc/entry']);\n }\n }\n return _universalAliases;\n }\n\n const preferredMainFields: { [key: string]: string[] } = {\n // Defaults from Expo Webpack. Most packages using `react-native` don't support web\n // in the `react-native` field, so we should prefer the `browser` field.\n // https://github.com/expo/router/issues/37\n web: ['browser', 'module', 'main'],\n };\n\n let tsConfigResolve =\n isTsconfigPathsEnabled && (tsconfig?.paths || tsconfig?.baseUrl != null)\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsconfig.baseUrl,\n })\n : null;\n\n // TODO: Move this to be a transform key for invalidation.\n if (!isExporting && isInteractive()) {\n if (isTsconfigPathsEnabled) {\n // TODO: We should track all the files that used imports and invalidate them\n // currently the user will need to save all the files that use imports to\n // use the new aliases.\n const configWatcher = new FileNotifier(config.projectRoot, [\n './tsconfig.json',\n './jsconfig.json',\n ]);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(config.projectRoot).then((tsConfigPaths) => {\n if (tsConfigPaths?.paths && !!Object.keys(tsConfigPaths.paths).length) {\n debug('Enabling tsconfig.json paths support');\n tsConfigResolve = resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsConfigPaths.paths ?? {},\n baseUrl: tsConfigPaths.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsConfigPaths.baseUrl,\n });\n } else {\n debug('Disabling tsconfig.json paths support');\n tsConfigResolve = null;\n }\n });\n });\n\n // TODO: This probably prevents the process from exiting.\n installExitHooks(() => {\n configWatcher.stopObserving();\n });\n } else {\n debug('Skipping tsconfig.json paths support');\n }\n }\n\n let nodejsSourceExtensions: string[] | null = null;\n\n const getStrictResolver: StrictResolverFactory = (\n { resolveRequest, ...context },\n platform\n ): StrictResolver => {\n return function doResolve(moduleName: string): Resolution {\n return resolver(context, moduleName, platform);\n };\n };\n\n function getOptionalResolver(context: ResolutionContext, platform: string | null) {\n const doResolve = getStrictResolver(context, platform);\n return function optionalResolve(moduleName: string): Resolution | null {\n try {\n return doResolve(moduleName);\n } catch (error) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n }\n return null;\n };\n }\n\n // TODO: This is a hack to get resolveWeak working.\n const idFactory = (config.serializer?.createModuleIdFactory?.() ??\n ((id: number | string, context: { platform: string; environment?: string }): number | string =>\n id)) as (\n id: number | string,\n context: { platform: string; environment?: string }\n ) => number | string;\n\n const getAssetRegistryModule = () => {\n const virtualModuleId = `\\0polyfill:assets-registry`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n ASSET_REGISTRY_SRC\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n } as const;\n };\n\n // If Node.js pass-through, then remap to a module like `module.exports = $$require_external(<module>)`.\n // If module should be shimmed, remap to an empty module.\n const externals: {\n match: (context: ResolutionContext, moduleName: string, platform: string | null) => boolean;\n replace: 'empty' | 'node' | 'weak';\n }[] = [\n {\n match: (context: ResolutionContext, moduleName: string) => {\n if (\n // Disable internal externals when exporting for production.\n context.customResolverOptions.exporting ||\n // These externals are only for Node.js environments.\n !isServerEnvironment(context.customResolverOptions?.environment)\n ) {\n return false;\n }\n\n if (context.customResolverOptions?.environment === 'react-server') {\n // Ensure these non-react-server modules are excluded when bundling for React Server Components in development.\n return /^(source-map-support(\\/.*)?|@babel\\/runtime\\/.+|debug|metro-runtime\\/src\\/modules\\/HMRClient|metro|acorn-loose|acorn|chalk|ws|ansi-styles|supports-color|color-convert|has-flag|utf-8-validate|color-name|react-refresh\\/runtime|@remix-run\\/node\\/.+)$/.test(\n moduleName\n );\n }\n\n // TODO: Windows doesn't support externals somehow.\n if (process.platform === 'win32') {\n return /^(source-map-support(\\/.*)?)$/.test(moduleName);\n }\n\n // Extern these modules in standard Node.js environments in development to prevent API routes side-effects\n // from leaking into the dev server process.\n return /^(source-map-support(\\/.*)?|react|@radix-ui\\/.+|@babel\\/runtime\\/.+|react-dom(\\/.+)?|debug|acorn-loose|acorn|css-in-js-utils\\/lib\\/.+|hyphenate-style-name|color|color-string|color-convert|color-name|fontfaceobserver|fast-deep-equal|query-string|escape-string-regexp|invariant|postcss-value-parser|memoize-one|nullthrows|strict-uri-encode|decode-uri-component|split-on-first|filter-obj|warn-once|simple-swizzle|is-arrayish|inline-style-prefixer\\/.+)$/.test(\n moduleName\n );\n },\n replace: 'node',\n },\n // Externals to speed up async split chunks by extern-ing common packages that appear in the root client chunk.\n {\n match: (context: ResolutionContext, moduleName: string, platform: string | null) => {\n if (\n // Disable internal externals when exporting for production.\n context.customResolverOptions.exporting ||\n // These externals are only for client environments.\n isServerEnvironment(context.customResolverOptions?.environment) ||\n // Only enable for client boundaries\n !context.customResolverOptions.clientboundary\n ) {\n return false;\n }\n\n // We don't support this in the resolver at the moment.\n if (moduleName.endsWith('/package.json')) {\n return false;\n }\n\n const isExternal = // Extern these modules in standard Node.js environments.\n /^(deprecated-react-native-prop-types|react|react\\/jsx-dev-runtime|scheduler|react-native|react-dom(\\/.+)?|metro-runtime(\\/.+)?)$/.test(\n moduleName\n ) ||\n // TODO: Add more\n /^@babel\\/runtime\\/helpers\\/(wrapNativeSuper)$/.test(moduleName);\n\n return isExternal;\n },\n replace: 'weak',\n },\n ];\n\n const metroConfigWithCustomResolver = withMetroResolvers(config, [\n // Mock out production react imports in development.\n function requestDevMockProdReact(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n // This resolution is dev-only to prevent bundling the production React packages in development.\n if (!context.dev) return null;\n\n if (\n // Match react-native renderers.\n (platform !== 'web' &&\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/]react-native[\\\\/]/) &&\n moduleName.match(/([\\\\/]ReactFabric|ReactNativeRenderer)-prod/)) ||\n // Match react production imports.\n (moduleName.match(/\\.production(\\.min)?\\.js$/) &&\n // Match if the import originated from a react package.\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/](react[-\\\\/]|scheduler[\\\\/])/))\n ) {\n debug(`Skipping production module: ${moduleName}`);\n // /Users/path/to/expo/node_modules/react/index.js ./cjs/react.production.min.js\n // /Users/path/to/expo/node_modules/react/jsx-dev-runtime.js ./cjs/react-jsx-dev-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n // /Users/path/to/expo/node_modules/react-refresh/runtime.js ./cjs/react-refresh-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/scheduler/index.native.js ./cjs/scheduler.native.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n return {\n type: 'empty',\n };\n }\n return null;\n },\n // tsconfig paths\n function requestTsconfigPaths(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n return (\n tsConfigResolve?.(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n getOptionalResolver(context, platform)\n ) ?? null\n );\n },\n\n // Node.js externals support\n function requestNodeExternals(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n const moduleId = isNodeExternal(moduleName);\n if (!moduleId) {\n return null;\n }\n\n if (\n // In browser runtimes, we want to either resolve a local node module by the same name, or shim the module to\n // prevent crashing when Node.js built-ins are imported.\n !isServer\n ) {\n // Perform optional resolve first. If the module doesn't exist (no module in the node_modules)\n // then we can mock the file to use an empty module.\n const result = getOptionalResolver(context, platform)(moduleName);\n\n if (!result && platform !== 'web') {\n // Preserve previous behavior where native throws an error on node.js internals.\n return null;\n }\n\n return (\n result ?? {\n // In this case, mock the file to use an empty module.\n type: 'empty',\n }\n );\n }\n const contents = `module.exports=$$require_external('node:${moduleId}');`;\n debug(`Virtualizing Node.js \"${moduleId}\"`);\n const virtualModuleId = `\\0node:${moduleId}`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n },\n\n // Custom externals support\n function requestCustomExternals(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n // We don't support this in the resolver at the moment.\n if (moduleName.endsWith('/package.json')) {\n return null;\n }\n // Skip applying JS externals for CSS files.\n if (/\\.(s?css|sass)$/.test(context.originModulePath)) {\n return null;\n }\n\n const environment = context.customResolverOptions?.environment;\n\n const strictResolve = getStrictResolver(context, platform);\n\n for (const external of externals) {\n if (external.match(context, moduleName, platform)) {\n if (external.replace === 'empty') {\n debug(`Redirecting external \"${moduleName}\" to \"${external.replace}\"`);\n return {\n type: external.replace,\n };\n } else if (external.replace === 'weak') {\n // TODO: Make this use require.resolveWeak again. Previously this was just resolving to the same path.\n const realModule = strictResolve(moduleName);\n const realPath = realModule.type === 'sourceFile' ? realModule.filePath : moduleName;\n const opaqueId = idFactory(realPath, {\n platform: platform!,\n environment,\n });\n\n const contents =\n typeof opaqueId === 'number'\n ? `module.exports=/*${moduleName}*/__r(${opaqueId})`\n : `module.exports=/*${moduleName}*/__r(${JSON.stringify(opaqueId)})`;\n // const contents = `module.exports=/*${moduleName}*/__r(require.resolveWeak('${moduleName}'))`;\n // const generatedModuleId = fastHashMemoized(contents);\n const virtualModuleId = `\\0weak:${opaqueId}`;\n debug('Virtualizing module:', moduleName, '->', virtualModuleId);\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n } else if (external.replace === 'node') {\n const contents = `module.exports=$$require_external('${moduleName}')`;\n const virtualModuleId = `\\0node:${moduleName}`;\n debug('Virtualizing Node.js (custom):', moduleName, '->', virtualModuleId);\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n } else {\n throw new CommandError(\n `Invalid external alias type: \"${external.replace}\" for module \"${moduleName}\" (platform: ${platform}, originModulePath: ${context.originModulePath})`\n );\n }\n }\n }\n return null;\n },\n\n // Basic moduleId aliases\n function requestAlias(context: ResolutionContext, moduleName: string, platform: string | null) {\n // Conditionally remap `react-native` to `react-native-web` on web in\n // a way that doesn't require Babel to resolve the alias.\n if (platform && platform in aliases && aliases[platform][moduleName]) {\n const redirectedModuleName = aliases[platform][moduleName];\n return getStrictResolver(context, platform)(redirectedModuleName);\n }\n\n for (const [matcher, alias] of getUniversalAliases()) {\n const match = moduleName.match(matcher);\n if (match) {\n const aliasedModule = alias.replace(\n /\\$(\\d+)/g,\n (_, index) => match[parseInt(index, 10)] ?? ''\n );\n const doResolve = getStrictResolver(context, platform);\n debug(`Alias \"${moduleName}\" to \"${aliasedModule}\"`);\n return doResolve(aliasedModule);\n }\n }\n\n return null;\n },\n\n // Polyfill for asset registry\n function requestStableAssetRegistry(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n if (/^@react-native\\/assets-registry\\/registry(\\.js)?$/.test(moduleName)) {\n return getAssetRegistryModule();\n }\n\n if (\n platform === 'web' &&\n context.originModulePath.match(/node_modules[\\\\/]react-native-web[\\\\/]/) &&\n moduleName.includes('/modules/AssetRegistry')\n ) {\n return getAssetRegistryModule();\n }\n\n return null;\n },\n\n createStickyModuleResolver(stickyModuleResolverInput, {\n getStrictResolver,\n }),\n\n // TODO: Reduce these as much as possible in the future.\n // Complex post-resolution rewrites.\n function requestPostRewrites(\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n const doResolve = getStrictResolver(context, platform);\n\n const result = doResolve(moduleName);\n\n if (result.type !== 'sourceFile') {\n return result;\n }\n\n if (platform === 'web') {\n if (result.filePath.includes('node_modules')) {\n // Disallow importing confusing native modules on web\n if (\n [\n 'react-native/Libraries/ReactPrivate/ReactNativePrivateInitializeCore',\n 'react-native/Libraries/Utilities/codegenNativeCommands',\n 'react-native/Libraries/Utilities/codegenNativeComponent',\n ].some((matcher) =>\n // Support absolute and modules with .js extensions.\n moduleName.includes(matcher)\n )\n ) {\n throw new FailedToResolvePathError(\n `Importing native-only module \"${moduleName}\" on web from: ${path.relative(config.projectRoot, context.originModulePath)}`\n );\n }\n\n // Replace with static shims\n\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const shimFile = shouldCreateVirtualShim(normalName);\n if (shimFile) {\n const virtualId = `\\0shim:${normalName}`;\n const bundler = getMetroBundlerWithVirtualModules(getMetroBundler());\n if (!bundler.hasVirtualModule(virtualId)) {\n bundler.setVirtualModule(virtualId, fs.readFileSync(shimFile, 'utf8'));\n }\n debug(`Redirecting module \"${result.filePath}\" to shim`);\n\n return {\n ...result,\n filePath: virtualId,\n };\n }\n }\n } else {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n // react-native/Libraries/Core/InitializeCore\n const normal = normalizeSlashes(result.filePath);\n\n // Shim out React Native native runtime globals in server mode for native.\n if (isServer) {\n if (normal.endsWith('react-native/Libraries/Core/InitializeCore.js')) {\n debug('Shimming out InitializeCore for React Native in native SSR bundle');\n return {\n type: 'empty',\n };\n }\n }\n\n // When server components are enabled, redirect React Native's renderer to the canary build\n // this will enable the use hook and other requisite features from React 19.\n if (isReactCanaryEnabled && result.filePath.includes('node_modules')) {\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const canaryFile = shouldCreateVirtualCanary(normalName);\n if (canaryFile) {\n debug(`Redirecting React Native module \"${result.filePath}\" to canary build`);\n return {\n ...result,\n filePath: canaryFile,\n };\n }\n }\n }\n\n return result;\n },\n\n // If at this point, we haven't resolved a module yet, if it's a module specifier for a known dependency\n // of either `expo` or `expo-router`, attempt to resolve it from these origin modules instead\n createFallbackModuleResolver({\n projectRoot: config.projectRoot,\n originModuleNames: ['expo', 'expo-router'],\n getStrictResolver,\n }),\n ]);\n\n // Ensure we mutate the resolution context to include the custom resolver options for server and web.\n const metroConfigWithCustomContext = withMetroMutatedResolverContext(\n metroConfigWithCustomResolver,\n (\n immutableContext: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ): CustomResolutionContext => {\n const context: Mutable<CustomResolutionContext> = {\n ...immutableContext,\n preferNativePlatform: platform !== 'web',\n };\n\n // TODO: Remove this when we have React 19 in the expo/expo monorepo.\n if (\n isReactCanaryEnabled &&\n // Change the node modules path for react and react-dom to use the vendor in Expo CLI.\n /^(react|react\\/.*|react-dom|react-dom\\/.*)$/.test(moduleName)\n ) {\n // Modifying the origin module path changes the starting Node module resolution path to this folder\n context.originModulePath = canaryModulesPath;\n // Hierarchical lookup has to be enabled for this to work\n context.disableHierarchicalLookup = false;\n }\n\n if (isServerEnvironment(context.customResolverOptions?.environment)) {\n // Adjust nodejs source extensions to sort mjs after js, including platform variants.\n if (nodejsSourceExtensions === null) {\n nodejsSourceExtensions = getNodejsExtensions(context.sourceExts);\n }\n context.sourceExts = nodejsSourceExtensions;\n\n context.unstable_enablePackageExports = true;\n context.unstable_conditionsByPlatform = {};\n\n const isReactServerComponents =\n context.customResolverOptions?.environment === 'react-server';\n\n if (isReactServerComponents) {\n // NOTE: Align the behavior across server and client. This is a breaking change so we'll just roll it out with React Server Components.\n // This ensures that react-server and client code both resolve `module` and `main` in the same order.\n if (platform === 'web') {\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['module', 'main'];\n } else {\n // In Node.js + native, use the standard main fields.\n context.mainFields = ['react-native', 'module', 'main'];\n }\n } else {\n if (platform === 'web') {\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['main', 'module'];\n } else {\n // In Node.js + native, use the standard main fields.\n context.mainFields = ['react-native', 'main', 'module'];\n }\n }\n\n // Enable react-server import conditions.\n if (context.customResolverOptions?.environment === 'react-server') {\n context.unstable_conditionNames = ['node', 'react-server', 'workerd'];\n } else {\n context.unstable_conditionNames = ['node'];\n }\n } else {\n // Non-server changes\n\n if (!env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE && platform && platform in preferredMainFields) {\n context.mainFields = preferredMainFields[platform];\n }\n }\n\n return context;\n }\n );\n\n return withMetroErrorReportingResolver(metroConfigWithCustomContext);\n}\n\n/** @returns `true` if the incoming resolution should be swapped. */\nexport function shouldAliasModule(\n input: {\n platform: string | null;\n result: Resolution;\n },\n alias: { platform: string; output: string }\n): boolean {\n return (\n input.platform === alias.platform &&\n input.result?.type === 'sourceFile' &&\n typeof input.result?.filePath === 'string' &&\n normalizeSlashes(input.result.filePath).endsWith(alias.output)\n );\n}\n\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled,\n isStickyResolverEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n isNamedRequiresEnabled,\n isReactServerComponentsEnabled,\n getMetroBundler,\n }: {\n config: ConfigT;\n exp: ExpoConfig;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n isStickyResolverEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled: boolean;\n isReactServerComponentsEnabled: boolean;\n isNamedRequiresEnabled: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isNamedRequiresEnabled) {\n debug('Using Expo metro require runtime.');\n // Change the default metro-runtime to a custom one that supports bundle splitting.\n const metroDefaults: Mutable<\n typeof import('@expo/metro/metro-config/defaults/defaults')\n > = require('@expo/metro/metro-config/defaults/defaults');\n metroDefaults.moduleSystem = require.resolve('@expo/cli/build/metro-require/require');\n }\n\n if (!config.projectRoot) {\n // @ts-expect-error: read-only types\n config.projectRoot = projectRoot;\n }\n\n // Required for @expo/metro-runtime to format paths in the web LogBox.\n process.env.EXPO_PUBLIC_PROJECT_ROOT = process.env.EXPO_PUBLIC_PROJECT_ROOT ?? projectRoot;\n\n // This is used for running Expo CLI in development against projects outside the monorepo.\n if (!isDirectoryIn(__dirname, projectRoot)) {\n // TODO(@kitten): Remove ts-export-errors here and replace with cast for type safety\n if (!config.watchFolders) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders = [];\n }\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('metro-runtime/package.json'), '../..'));\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(\n path.join(require.resolve('@expo/metro-config/package.json'), '../..'),\n // For virtual modules\n path.join(require.resolve('expo/package.json'), '..')\n );\n if (isReactCanaryEnabled) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('@expo/cli/package.json'), '..'));\n }\n }\n\n // TODO: Remove this\n // @ts-expect-error: Invalidate the cache when the location of expo-router changes on-disk.\n config.transformer._expoRouterPath = resolveFrom.silent(projectRoot, 'expo-router');\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n .map(([platform]) => platform);\n\n if (Array.isArray(config.resolver.platforms)) {\n expoConfigPlatforms = [...new Set(expoConfigPlatforms.concat(config.resolver.platforms))];\n }\n\n // @ts-expect-error: typed as `readonly`.\n config.resolver.platforms = expoConfigPlatforms;\n\n config = withWebPolyfills(config, { getMetroBundler });\n\n let stickyModuleResolverInput: StickyModuleResolverInput | undefined;\n if (isStickyResolverEnabled) {\n stickyModuleResolverInput = await createStickyModuleResolverInput({\n platforms: expoConfigPlatforms,\n projectRoot,\n });\n }\n\n return withExtendedResolver(config, {\n stickyModuleResolverInput,\n tsconfig,\n isExporting,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isReactCanaryEnabled,\n isReactServerComponentsEnabled,\n getMetroBundler,\n });\n}\n\nfunction isDirectoryIn(targetPath: string, rootPath: string) {\n return targetPath.startsWith(rootPath) && targetPath.length >= rootPath.length;\n}\n"],"names":["getNodejsExtensions","shouldAliasModule","withExtendedResolver","withMetroMultiPlatformAsync","ASSET_REGISTRY_SRC","debug","require","withWebPolyfills","config","getMetroBundler","originalGetPolyfills","serializer","getPolyfills","bind","ctx","virtualEnvVarId","getMetroBundlerWithVirtualModules","setVirtualModule","virtualModuleId","platform","virtualModulesPolyfills","rnGetPolyfills","filter","x","includes","error","code","polyfills","resolve","normalizeSlashes","p","replace","srcExts","mjsExts","ext","test","nodejsSourceExtensions","jsIndex","reduce","index","i","splice","tsconfig","stickyModuleResolverInput","isTsconfigPathsEnabled","isFastResolverEnabled","isExporting","isReactCanaryEnabled","isReactServerComponentsEnabled","Log","warn","log","chalk","dim","defaultResolver","metroResolver","resolver","createFastResolver","preserveSymlinks","blockList","Array","isArray","aliases","web","canaryModulesPath","path","join","_universalAliases","getUniversalAliases","resolveFrom","silent","projectRoot","push","preferredMainFields","tsConfigResolve","paths","baseUrl","resolveWithTsConfigPaths","hasBaseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","getStrictResolver","resolveRequest","context","doResolve","moduleName","getOptionalResolver","optionalResolve","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","idFactory","createModuleIdFactory","id","getAssetRegistryModule","type","filePath","externals","match","customResolverOptions","exporting","isServerEnvironment","environment","process","clientboundary","endsWith","isExternal","metroConfigWithCustomResolver","withMetroResolvers","requestDevMockProdReact","dev","originModulePath","requestTsconfigPaths","requestNodeExternals","isServer","moduleId","isNodeExternal","result","contents","requestCustomExternals","strictResolve","external","realModule","realPath","opaqueId","JSON","stringify","CommandError","requestAlias","redirectedModuleName","matcher","alias","aliasedModule","_","parseInt","requestStableAssetRegistry","createStickyModuleResolver","requestPostRewrites","some","FailedToResolvePathError","relative","normalName","shimFile","shouldCreateVirtualShim","virtualId","bundler","hasVirtualModule","fs","readFileSync","normal","canaryFile","shouldCreateVirtualCanary","createFallbackModuleResolver","originModuleNames","metroConfigWithCustomContext","withMetroMutatedResolverContext","immutableContext","preferNativePlatform","disableHierarchicalLookup","sourceExts","unstable_enablePackageExports","unstable_conditionsByPlatform","isReactServerComponents","mainFields","unstable_conditionNames","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","withMetroErrorReportingResolver","input","output","exp","platformBundlers","isStickyResolverEnabled","isNamedRequiresEnabled","metroDefaults","moduleSystem","EXPO_PUBLIC_PROJECT_ROOT","isDirectoryIn","__dirname","watchFolders","transformer","_expoRouterPath","expoConfigPlatforms","entries","platforms","map","Set","concat","createStickyModuleResolverInput","targetPath","rootPath","startsWith"],"mappings":"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"}
@@ -33,7 +33,7 @@ class FetchClient {
33
33
  this.headers = {
34
34
  accept: 'application/json',
35
35
  'content-type': 'application/json',
36
- 'user-agent': `expo-cli/${"0.25.0"}`,
36
+ 'user-agent': `expo-cli/${"0.25.2"}`,
37
37
  authorization: 'Basic ' + _nodebuffer().Buffer.from(`${target}:`).toString('base64')
38
38
  };
39
39
  }
@@ -83,7 +83,7 @@ function createContext() {
83
83
  cpu: summarizeCpuInfo(),
84
84
  app: {
85
85
  name: 'expo/cli',
86
- version: "0.25.0"
86
+ version: "0.25.2"
87
87
  },
88
88
  ci: _ciinfo().isCI ? {
89
89
  name: _ciinfo().name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.25.0",
3
+ "version": "0.25.2",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -43,19 +43,20 @@
43
43
  "@0no-co/graphql.web": "^1.0.8",
44
44
  "@babel/runtime": "^7.20.0",
45
45
  "@expo/code-signing-certificates": "^0.0.5",
46
- "@expo/config": "~12.0.0",
47
- "@expo/config-plugins": "~11.0.0",
46
+ "@expo/config": "~12.0.2",
47
+ "@expo/config-plugins": "~11.0.2",
48
48
  "@expo/devcert": "^1.1.2",
49
- "@expo/env": "~2.0.0",
50
- "@expo/image-utils": "^0.8.0",
51
- "@expo/json-file": "^10.0.0",
49
+ "@expo/env": "~2.0.2",
50
+ "@expo/image-utils": "^0.8.2",
51
+ "@expo/json-file": "^10.0.2",
52
52
  "@expo/metro": "~0.1.1",
53
- "@expo/metro-config": "~0.21.0",
54
- "@expo/osascript": "^2.3.0",
55
- "@expo/package-manager": "^1.9.0",
56
- "@expo/plist": "^0.4.0",
57
- "@expo/prebuild-config": "^10.0.0",
58
- "@expo/server": "^0.7.0",
53
+ "@expo/metro-config": "~0.21.2",
54
+ "@expo/osascript": "^2.3.2",
55
+ "@expo/package-manager": "^1.9.2",
56
+ "@expo/plist": "^0.4.2",
57
+ "@expo/prebuild-config": "^10.0.2",
58
+ "@expo/schema-utils": "^0.1.2",
59
+ "@expo/server": "^0.7.2",
59
60
  "@expo/spawn-async": "^1.7.2",
60
61
  "@expo/ws-tunnel": "^1.0.1",
61
62
  "@expo/xcpretty": "^4.3.0",
@@ -154,7 +155,7 @@
154
155
  "@types/ws": "^8.5.4",
155
156
  "devtools-protocol": "^0.0.1113120",
156
157
  "expo-atlas": "^0.4.1",
157
- "expo-module-scripts": "^5.0.0",
158
+ "expo-module-scripts": "^5.0.2",
158
159
  "find-process": "^1.4.7",
159
160
  "jest-runner-tsd": "^6.0.0",
160
161
  "klaw-sync": "^6.0.0",
@@ -167,5 +168,5 @@
167
168
  "tree-kill": "^1.2.2",
168
169
  "tsd": "^0.28.1"
169
170
  },
170
- "gitHead": "cb7062e2c17d1fb09522834aaaac0e19b766df62"
171
+ "gitHead": "eaa9b645058cf2233fbb27bb21a19bc605c90a88"
171
172
  }
@@ -1,150 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "jsonSchemaDeref", {
6
- enumerable: true,
7
- get: function() {
8
- return jsonSchemaDeref;
9
- }
10
- });
11
- /** Return JSON schema ref if input is of `NodeRef` type */ const getRef = (node)=>node != null && typeof node === 'object' && '$ref' in node && typeof node.$ref === 'string' ? node.$ref : undefined;
12
- /** Parse a JSON schema ref into a path array, or return undefined */ const parseRefMaybe = (ref)=>{
13
- if (ref[0] !== '#') {
14
- return undefined;
15
- }
16
- const props = [];
17
- let startIndex = 1;
18
- let index = 1;
19
- let char;
20
- while(index < ref.length){
21
- while((char = ref.charCodeAt(index++)) && char !== 47 /*'/'*/ );
22
- const prop = ref.slice(startIndex, index - 1);
23
- startIndex = index;
24
- if (prop) props.push(prop);
25
- }
26
- return props.length ? props : undefined;
27
- };
28
- const NOT_FOUND_SYMBOL = Symbol();
29
- /** Get value at given JSON schema path or return `NOT_FOUND_SYMBOL` */ const getValueAtPath = (input, ref)=>{
30
- let node = input;
31
- for(let index = 0; index < ref.length; index++){
32
- const part = ref[index];
33
- if (node != null && typeof node === 'object' && part in node) {
34
- node = node[part];
35
- } else {
36
- node = NOT_FOUND_SYMBOL;
37
- break;
38
- }
39
- }
40
- return node;
41
- };
42
- /** Find all JSON schema refs recursively and add them to `refs` Map */ const findRefsRec = (node, refs, path)=>{
43
- if (node == null || typeof node !== 'object') {} else if (Array.isArray(node)) {
44
- for(let index = 0, l = node.length; index < l; index++){
45
- const value = node[index];
46
- const ref = getRef(value);
47
- if (ref) {
48
- const targetRef = parseRefMaybe(ref);
49
- if (targetRef) refs.set([
50
- ...path,
51
- index
52
- ], targetRef);
53
- } else if (value != null && typeof value === 'object') {
54
- path.push(index);
55
- findRefsRec(value, refs, path);
56
- path.pop();
57
- }
58
- }
59
- } else {
60
- const record = node;
61
- for(const key in record){
62
- const value = record[key];
63
- const ref = getRef(value);
64
- if (ref) {
65
- const targetRef = parseRefMaybe(ref);
66
- if (targetRef) refs.set([
67
- ...path,
68
- key
69
- ], targetRef);
70
- } else if (value != null && typeof value === 'object') {
71
- path.push(key);
72
- findRefsRec(value, refs, path);
73
- path.pop();
74
- }
75
- }
76
- }
77
- };
78
- /** Detect whether target (where we set the source value) is a nested path inside the source path */ const isSelfReferencingRefEntry = (target, source)=>{
79
- for(let index = 0; index < source.length; index++){
80
- if (source[index] !== target[index]) return false;
81
- }
82
- return true;
83
- };
84
- /** Return sorted refs entries. Longest target paths will be returned first */ const getSortedRefEntries = (refs)=>{
85
- const entries = [
86
- ...refs.entries()
87
- ].sort((a, b)=>b[1].length - a[1].length);
88
- // Filter out self-referenceing paths. If we set nested targets to source values, we'd
89
- // create unserializable circular references
90
- return entries.filter((entry)=>!isSelfReferencingRefEntry(entry[0], entry[1]));
91
- };
92
- function jsonSchemaDeref(input) {
93
- // Find all JSON schema refs paths
94
- const refs = new Map();
95
- findRefsRec(input, refs, []);
96
- // Shallow copy output
97
- const output = {
98
- ...input
99
- };
100
- // Process all ref entries with deepest targets first
101
- nextRef: for (const [target, source] of getSortedRefEntries(refs)){
102
- let inputNode = input;
103
- let outputNode = output;
104
- let targetIndex = 0;
105
- // For each path part on the target, traverse the output and clone the input
106
- // to not pollute it
107
- for(; targetIndex < target.length - 1; targetIndex++){
108
- const part = target[targetIndex];
109
- if (inputNode == null || typeof inputNode !== 'object' || !(part in inputNode)) {
110
- break;
111
- } else if (outputNode[part] === inputNode[part]) {
112
- // Copy the input on the output if references are equal
113
- outputNode[part] = Array.isArray(inputNode[part]) ? [
114
- ...inputNode[part]
115
- ] : {
116
- ...inputNode[part]
117
- };
118
- inputNode = inputNode[part];
119
- outputNode = outputNode[part];
120
- } else {
121
- break;
122
- }
123
- }
124
- // For each remaining part on the target, continue traversing the output
125
- for(; targetIndex < target.length - 1; targetIndex++){
126
- const part = target[targetIndex];
127
- if (outputNode == null || typeof outputNode !== 'object' || !(part in outputNode)) {
128
- continue nextRef;
129
- } else {
130
- outputNode = outputNode[part];
131
- }
132
- }
133
- // Get value from output
134
- let sourceValue = getValueAtPath(output, source);
135
- if (sourceValue === NOT_FOUND_SYMBOL) {
136
- // If no value was found, try to get a value from the input instead
137
- sourceValue = getValueAtPath(input, source);
138
- // Otherwise, skip this ref
139
- if (sourceValue === NOT_FOUND_SYMBOL) continue;
140
- }
141
- // Set the source value on the target path
142
- // The for-loops prior have made sure that the output has already been deeply
143
- // cloned and traversed for the entire path
144
- outputNode[target[target.length - 1]] = sourceValue;
145
- }
146
- // Return the output with resolved refs
147
- return output;
148
- }
149
-
150
- //# sourceMappingURL=jsonSchemaDeref.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/jsonSchemaDeref.ts"],"sourcesContent":["type RefPath = readonly (string | number)[];\n\ninterface NodeRef {\n $ref: string;\n}\n\n/** Return JSON schema ref if input is of `NodeRef` type */\nconst getRef = (node: NodeRef | unknown): string | undefined =>\n node != null && typeof node === 'object' && '$ref' in node && typeof node.$ref === 'string'\n ? node.$ref\n : undefined;\n\n/** Parse a JSON schema ref into a path array, or return undefined */\nconst parseRefMaybe = (ref: string): RefPath | undefined => {\n if (ref[0] !== '#') {\n return undefined;\n }\n const props = [];\n let startIndex = 1;\n let index = 1;\n let char: number;\n while (index < ref.length) {\n while ((char = ref.charCodeAt(index++)) && char !== 47 /*'/'*/);\n const prop = ref.slice(startIndex, index - 1);\n startIndex = index;\n if (prop) props.push(prop);\n }\n return props.length ? props : undefined;\n};\n\nconst NOT_FOUND_SYMBOL = Symbol();\n\n/** Get value at given JSON schema path or return `NOT_FOUND_SYMBOL` */\nconst getValueAtPath = (input: unknown, ref: RefPath): unknown | typeof NOT_FOUND_SYMBOL => {\n let node = input;\n for (let index = 0; index < ref.length; index++) {\n const part = ref[index];\n if (node != null && typeof node === 'object' && part in node) {\n node = (node as Record<string, unknown>)[part];\n } else {\n node = NOT_FOUND_SYMBOL;\n break;\n }\n }\n return node;\n};\n\n/** Find all JSON schema refs recursively and add them to `refs` Map */\nconst findRefsRec = (\n node: unknown,\n refs: Map<RefPath, RefPath>,\n path: (string | number)[]\n): void => {\n if (node == null || typeof node !== 'object') {\n } else if (Array.isArray(node)) {\n for (let index = 0, l = node.length; index < l; index++) {\n const value = node[index];\n const ref = getRef(value);\n if (ref) {\n const targetRef = parseRefMaybe(ref);\n if (targetRef) refs.set([...path, index], targetRef);\n } else if (value != null && typeof value === 'object') {\n path.push(index);\n findRefsRec(value, refs, path);\n path.pop();\n }\n }\n } else {\n const record = node as Record<string, unknown>;\n for (const key in record) {\n const value = record[key];\n const ref = getRef(value);\n if (ref) {\n const targetRef = parseRefMaybe(ref);\n if (targetRef) refs.set([...path, key], targetRef);\n } else if (value != null && typeof value === 'object') {\n path.push(key);\n findRefsRec(value, refs, path);\n path.pop();\n }\n }\n }\n};\n\n/** Detect whether target (where we set the source value) is a nested path inside the source path */\nconst isSelfReferencingRefEntry = (target: RefPath, source: RefPath) => {\n for (let index = 0; index < source.length; index++) {\n if (source[index] !== target[index]) return false;\n }\n return true;\n};\n\n/** Return sorted refs entries. Longest target paths will be returned first */\nconst getSortedRefEntries = (refs: Map<RefPath, RefPath>): readonly [RefPath, RefPath][] => {\n const entries = [...refs.entries()].sort((a, b) => b[1].length - a[1].length);\n // Filter out self-referenceing paths. If we set nested targets to source values, we'd\n // create unserializable circular references\n return entries.filter((entry) => !isSelfReferencingRefEntry(entry[0], entry[1]));\n};\n\n/** Dereference JSON schema pointers.\n *\n * @remarks\n * This is a minimal reimplementation of `json-schema-deref-sync` without\n * file reference, URL/web reference, and loader support.\n *\n * @see https://github.com/cvent/json-schema-deref-sync\n */\nexport function jsonSchemaDeref(input: any): any {\n // Find all JSON schema refs paths\n const refs = new Map<RefPath, RefPath>();\n findRefsRec(input, refs, []);\n // Shallow copy output\n const output = { ...input };\n // Process all ref entries with deepest targets first\n nextRef: for (const [target, source] of getSortedRefEntries(refs)) {\n let inputNode = input;\n let outputNode = output;\n let targetIndex = 0;\n // For each path part on the target, traverse the output and clone the input\n // to not pollute it\n for (; targetIndex < target.length - 1; targetIndex++) {\n const part = target[targetIndex];\n if (inputNode == null || typeof inputNode !== 'object' || !(part in inputNode)) {\n // If the part doesn't exist, we abort\n break;\n } else if (outputNode[part] === inputNode[part]) {\n // Copy the input on the output if references are equal\n outputNode[part] = Array.isArray(inputNode[part])\n ? [...inputNode[part]]\n : { ...inputNode[part] };\n inputNode = inputNode[part];\n outputNode = outputNode[part];\n } else {\n // If this part has already been copied, abort\n break;\n }\n }\n // For each remaining part on the target, continue traversing the output\n for (; targetIndex < target.length - 1; targetIndex++) {\n const part = target[targetIndex];\n if (outputNode == null || typeof outputNode !== 'object' || !(part in outputNode)) {\n // If the part doesn't exist, skip the entire ref\n continue nextRef;\n } else {\n outputNode = outputNode[part];\n }\n }\n // Get value from output\n let sourceValue = getValueAtPath(output, source);\n if (sourceValue === NOT_FOUND_SYMBOL) {\n // If no value was found, try to get a value from the input instead\n sourceValue = getValueAtPath(input, source);\n // Otherwise, skip this ref\n if (sourceValue === NOT_FOUND_SYMBOL) continue;\n }\n // Set the source value on the target path\n // The for-loops prior have made sure that the output has already been deeply\n // cloned and traversed for the entire path\n outputNode[target[target.length - 1]] = sourceValue;\n }\n // Return the output with resolved refs\n return output;\n}\n"],"names":["jsonSchemaDeref","getRef","node","$ref","undefined","parseRefMaybe","ref","props","startIndex","index","char","length","charCodeAt","prop","slice","push","NOT_FOUND_SYMBOL","Symbol","getValueAtPath","input","part","findRefsRec","refs","path","Array","isArray","l","value","targetRef","set","pop","record","key","isSelfReferencingRefEntry","target","source","getSortedRefEntries","entries","sort","a","b","filter","entry","Map","output","nextRef","inputNode","outputNode","targetIndex","sourceValue"],"mappings":"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"}