@expo/cli 55.0.3 → 56.0.0-canary-20260128-67ce8d5
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 +3 -1
- package/build/bin/cli.map +1 -1
- package/build/src/start/interface/interactiveActions.js +2 -1
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +1 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +1 -1
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +4 -4
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +144 -33
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +2 -2
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +1 -13
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +53 -0
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +3 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +14 -9
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +2 -62
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/utils/build-cache-providers/index.js +1 -1
- package/build/src/utils/build-cache-providers/index.js.map +1 -1
- package/build/src/utils/env.js +28 -0
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/freeport.js +21 -5
- package/build/src/utils/freeport.js.map +1 -1
- package/build/src/utils/interactive.js +1 -1
- package/build/src/utils/interactive.js.map +1 -1
- package/build/src/utils/jsonl.js +243 -0
- package/build/src/utils/jsonl.js.map +1 -0
- package/build/src/utils/port.js +4 -4
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/progress.js +5 -0
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
- package/build/src/utils/telemetry/utils/context.js +1 -1
- package/build/src/utils/url.js +4 -8
- package/build/src/utils/url.js.map +1 -1
- package/package.json +19 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\nimport process from 'node:process';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Disable all network requests */\n get EXPO_OFFLINE() {\n return boolish('EXPO_OFFLINE', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** Disable detaching telemetry to separate process */\n get EXPO_NO_TELEMETRY_DETACH() {\n return boolish('EXPO_NO_TELEMETRY_DETACH', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', true);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Disable the app select redirect page. */\n get EXPO_NO_REDIRECT_PAGE() {\n return boolish('EXPO_NO_REDIRECT_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN', '');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * **Experimental** - Disable using `exp.direct` as the hostname for\n * `--tunnel` connections. This enables **https://** forwarding which\n * can be used to test universal links on iOS.\n *\n * This may cause issues with `expo-linking` and Expo Go.\n *\n * Select the exact subdomain by passing a string value that is not one of: `true`, `false`, `1`, `0`.\n */\n get EXPO_TUNNEL_SUBDOMAIN(): string | boolean {\n const subdomain = string('EXPO_TUNNEL_SUBDOMAIN', '');\n if (['0', 'false', ''].includes(subdomain)) {\n return false;\n } else if (['1', 'true'].includes(subdomain)) {\n return true;\n }\n return subdomain;\n }\n\n /**\n * Force Expo CLI to use the [`resolver.resolverMainFields`](https://facebook.github.io/metro/docs/configuration/#resolvermainfields) from the project `metro.config.js` for all platforms.\n *\n * By default, Expo CLI will use `['browser', 'module', 'main']` (default for Webpack) for web and the user-defined main fields for other platforms.\n */\n get EXPO_METRO_NO_MAIN_FIELD_OVERRIDE(): boolean {\n return boolish('EXPO_METRO_NO_MAIN_FIELD_OVERRIDE', false);\n }\n\n /**\n * HTTP/HTTPS proxy to connect to for network requests. Configures [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent).\n */\n get HTTP_PROXY(): string {\n return process.env.HTTP_PROXY || process.env.http_proxy || '';\n }\n\n /**\n * Instructs a different Metro config to be loaded.\n * The path, according to metro-config, should be a path relative to the current working directory.\n * This flag is internal and was added for external tools.\n * @internal\n */\n get EXPO_OVERRIDE_METRO_CONFIG(): string | undefined {\n return process.env.EXPO_OVERRIDE_METRO_CONFIG?.trim() || undefined;\n }\n\n /**\n * Use the network inspector by overriding the metro inspector proxy with a custom version.\n * @deprecated This has been replaced by `@react-native/dev-middleware` and is now unused.\n */\n get EXPO_NO_INSPECTOR_PROXY(): boolean {\n return boolish('EXPO_NO_INSPECTOR_PROXY', false);\n }\n\n /** Disable lazy bundling in Metro bundler. */\n get EXPO_NO_METRO_LAZY() {\n return boolish('EXPO_NO_METRO_LAZY', false);\n }\n\n /**\n * Enable the unstable inverse dependency stack trace for Metro bundling errors.\n * @deprecated This will be removed in the future.\n */\n get EXPO_METRO_UNSTABLE_ERRORS() {\n return boolish('EXPO_METRO_UNSTABLE_ERRORS', true);\n }\n\n /** Enable the experimental sticky resolver for Metro (Uses Expo Autolinking results and applies them to Metro's resolution)\n * @deprecated Replaced by `exp.experiments.autolinkingModuleResolution`\n */\n get EXPO_USE_STICKY_RESOLVER() {\n return boolish('EXPO_USE_STICKY_RESOLVER', false);\n }\n\n /** Disable Environment Variable injection in client bundles. */\n get EXPO_NO_CLIENT_ENV_VARS(): boolean {\n return boolish('EXPO_NO_CLIENT_ENV_VARS', false);\n }\n\n /** Set the default `user` that should be passed to `--user` with ADB commands. Used for installing APKs on Android devices with multiple profiles. Defaults to `0`. */\n get EXPO_ADB_USER(): string {\n return string('EXPO_ADB_USER', '0');\n }\n\n /** Used internally to enable E2E utilities. This behavior is not stable to external users. */\n get __EXPO_E2E_TEST(): boolean {\n return boolish('__EXPO_E2E_TEST', false);\n }\n\n /** Unstable: Force single-bundle exports in production. */\n get EXPO_NO_BUNDLE_SPLITTING(): boolean {\n return boolish('EXPO_NO_BUNDLE_SPLITTING', false);\n }\n\n /**\n * Enable Atlas to gather bundle information during development or export.\n * Note, because this used to be an experimental feature, both `EXPO_ATLAS` and `EXPO_UNSTABLE_ATLAS` are supported.\n */\n get EXPO_ATLAS() {\n return boolish('EXPO_ATLAS', boolish('EXPO_UNSTABLE_ATLAS', false));\n }\n\n /** Unstable: Enable tree shaking for Metro. */\n get EXPO_UNSTABLE_TREE_SHAKING() {\n return boolish('EXPO_UNSTABLE_TREE_SHAKING', false);\n }\n\n /** Unstable: Enable eager bundling where transformation runs uncached after the entire bundle has been created. This is required for production tree shaking and less optimized for development bundling. */\n get EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH() {\n return boolish('EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH', false);\n }\n\n /** Enable the use of Expo's custom metro require implementation. The custom require supports better debugging, tree shaking, and React Server Components. */\n get EXPO_USE_METRO_REQUIRE() {\n return boolish('EXPO_USE_METRO_REQUIRE', false);\n }\n\n /** Internal key used to pass eager bundle data from the CLI to the native run scripts during `npx expo run` commands. */\n get __EXPO_EAGER_BUNDLE_OPTIONS() {\n return string('__EXPO_EAGER_BUNDLE_OPTIONS', '');\n }\n\n /** Disable server deployment during production builds (during `expo export:embed`). This is useful for testing API routes and server components against a local server. */\n get EXPO_NO_DEPLOY(): boolean {\n return boolish('EXPO_NO_DEPLOY', false);\n }\n\n /** Enable hydration during development when rendering Expo Web */\n get EXPO_WEB_DEV_HYDRATE(): boolean {\n return boolish('EXPO_WEB_DEV_HYDRATE', false);\n }\n\n /** Enable experimental React Server Functions support. */\n get EXPO_UNSTABLE_SERVER_FUNCTIONS(): boolean {\n return boolish('EXPO_UNSTABLE_SERVER_FUNCTIONS', false);\n }\n\n /** Enable unstable/experimental mode where React Native Web isn't required to run Expo apps on web. */\n get EXPO_NO_REACT_NATIVE_WEB(): boolean {\n return boolish('EXPO_NO_REACT_NATIVE_WEB', false);\n }\n\n /** Enable unstable/experimental support for deploying the native server in `npx expo run` commands. */\n get EXPO_UNSTABLE_DEPLOY_SERVER(): boolean {\n return boolish('EXPO_UNSTABLE_DEPLOY_SERVER', false);\n }\n\n /** Is running in EAS Build. This is set by EAS: https://docs.expo.dev/eas/environment-variables/ */\n get EAS_BUILD(): boolean {\n return boolish('EAS_BUILD', false);\n }\n\n /** Disable the React Native Directory compatibility check for new architecture when installing packages */\n get EXPO_NO_NEW_ARCH_COMPAT_CHECK(): boolean {\n return boolish('EXPO_NO_NEW_ARCH_COMPAT_CHECK', false);\n }\n\n /** Disable the dependency validation when installing other dependencies and starting the project */\n get EXPO_NO_DEPENDENCY_VALIDATION(): boolean {\n // Default to disabling when running in a web container (stackblitz, bolt, etc).\n const isWebContainer = process.versions.webcontainer != null;\n return boolish('EXPO_NO_DEPENDENCY_VALIDATION', isWebContainer);\n }\n\n /** Force Expo CLI to run in webcontainer mode, this has impact on which URL Expo is using by default */\n get EXPO_FORCE_WEBCONTAINER_ENV(): boolean {\n return boolish('EXPO_FORCE_WEBCONTAINER_ENV', false);\n }\n\n /** Force Expo CLI to run in webcontainer mode, this has impact on which URL Expo is using by default */\n get EXPO_UNSTABLE_WEB_MODAL(): boolean {\n return boolish('EXPO_UNSTABLE_WEB_MODAL', false);\n }\n\n /** Disable by falsy value live binding in experimental import export support. Enabled by default. */\n get EXPO_UNSTABLE_LIVE_BINDINGS(): boolean {\n return boolish('EXPO_UNSTABLE_LIVE_BINDINGS', true);\n }\n\n /**\n * Enable the experimental MCP integration or further specify the MCP server URL.\n */\n get EXPO_UNSTABLE_MCP_SERVER(): string {\n const value = string('EXPO_UNSTABLE_MCP_SERVER', '');\n if (value === '1' || value.toLowerCase() === 'true') {\n return this.EXPO_STAGING ? 'staging-mcp.expo.dev' : 'mcp.expo.dev';\n }\n return value;\n }\n\n /** Enable Expo Log Box for iOS and Android (Web is enabled by default) */\n get EXPO_UNSTABLE_LOG_BOX(): boolean {\n return boolish('EXPO_UNSTABLE_LOG_BOX', false);\n }\n\n /**\n * Enable Bonjour advertising of the Expo CLI on local networks\n */\n get EXPO_UNSTABLE_BONJOUR(): boolean {\n return boolish('EXPO_UNSTABLE_BONJOUR', false);\n }\n}\n\nexport const env = new Env();\n\nexport function envIsWebcontainer() {\n // See: https://github.com/unjs/std-env/blob/4b1e03c4efce58249858efc2cc5f5eac727d0adb/src/providers.ts#L134-L143\n return (\n env.EXPO_FORCE_WEBCONTAINER_ENV ||\n (process.env.SHELL === '/bin/jsh' && !!process.versions.webcontainer)\n );\n}\n"],"names":["env","envIsWebcontainer","Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_OFFLINE","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_NO_TELEMETRY_DETACH","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_NO_REDIRECT_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_PACKAGER_PROXY_URL","EXPO_TUNNEL_SUBDOMAIN","subdomain","includes","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","HTTP_PROXY","process","http_proxy","EXPO_OVERRIDE_METRO_CONFIG","trim","undefined","EXPO_NO_INSPECTOR_PROXY","EXPO_NO_METRO_LAZY","EXPO_METRO_UNSTABLE_ERRORS","EXPO_USE_STICKY_RESOLVER","EXPO_NO_CLIENT_ENV_VARS","EXPO_ADB_USER","__EXPO_E2E_TEST","EXPO_NO_BUNDLE_SPLITTING","EXPO_ATLAS","EXPO_UNSTABLE_TREE_SHAKING","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","EXPO_USE_METRO_REQUIRE","__EXPO_EAGER_BUNDLE_OPTIONS","EXPO_NO_DEPLOY","EXPO_WEB_DEV_HYDRATE","EXPO_UNSTABLE_SERVER_FUNCTIONS","EXPO_NO_REACT_NATIVE_WEB","EXPO_UNSTABLE_DEPLOY_SERVER","EAS_BUILD","EXPO_NO_NEW_ARCH_COMPAT_CHECK","EXPO_NO_DEPENDENCY_VALIDATION","isWebContainer","versions","webcontainer","EXPO_FORCE_WEBCONTAINER_ENV","EXPO_UNSTABLE_WEB_MODAL","EXPO_UNSTABLE_LIVE_BINDINGS","EXPO_UNSTABLE_MCP_SERVER","value","toLowerCase","EXPO_UNSTABLE_LOG_BOX","EXPO_UNSTABLE_BONJOUR","SHELL"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\nimport process from 'node:process';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Disable all network requests */\n get EXPO_OFFLINE() {\n return boolish('EXPO_OFFLINE', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** Disable detaching telemetry to separate process */\n get EXPO_NO_TELEMETRY_DETACH() {\n return boolish('EXPO_NO_TELEMETRY_DETACH', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', true);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Disable the app select redirect page. */\n get EXPO_NO_REDIRECT_PAGE() {\n return boolish('EXPO_NO_REDIRECT_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN', '');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * **Experimental** - Disable using `exp.direct` as the hostname for\n * `--tunnel` connections. This enables **https://** forwarding which\n * can be used to test universal links on iOS.\n *\n * This may cause issues with `expo-linking` and Expo Go.\n *\n * Select the exact subdomain by passing a string value that is not one of: `true`, `false`, `1`, `0`.\n */\n get EXPO_TUNNEL_SUBDOMAIN(): string | boolean {\n const subdomain = string('EXPO_TUNNEL_SUBDOMAIN', '');\n if (['0', 'false', ''].includes(subdomain)) {\n return false;\n } else if (['1', 'true'].includes(subdomain)) {\n return true;\n }\n return subdomain;\n }\n\n /**\n * Force Expo CLI to use the [`resolver.resolverMainFields`](https://facebook.github.io/metro/docs/configuration/#resolvermainfields) from the project `metro.config.js` for all platforms.\n *\n * By default, Expo CLI will use `['browser', 'module', 'main']` (default for Webpack) for web and the user-defined main fields for other platforms.\n */\n get EXPO_METRO_NO_MAIN_FIELD_OVERRIDE(): boolean {\n return boolish('EXPO_METRO_NO_MAIN_FIELD_OVERRIDE', false);\n }\n\n /**\n * HTTP/HTTPS proxy to connect to for network requests. Configures [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent).\n */\n get HTTP_PROXY(): string {\n return process.env.HTTP_PROXY || process.env.http_proxy || '';\n }\n\n /**\n * Instructs a different Metro config to be loaded.\n * The path, according to metro-config, should be a path relative to the current working directory.\n * This flag is internal and was added for external tools.\n * @internal\n */\n get EXPO_OVERRIDE_METRO_CONFIG(): string | undefined {\n return process.env.EXPO_OVERRIDE_METRO_CONFIG?.trim() || undefined;\n }\n\n /**\n * Use the network inspector by overriding the metro inspector proxy with a custom version.\n * @deprecated This has been replaced by `@react-native/dev-middleware` and is now unused.\n */\n get EXPO_NO_INSPECTOR_PROXY(): boolean {\n return boolish('EXPO_NO_INSPECTOR_PROXY', false);\n }\n\n /** Disable lazy bundling in Metro bundler. */\n get EXPO_NO_METRO_LAZY() {\n return boolish('EXPO_NO_METRO_LAZY', false);\n }\n\n /**\n * Enable the unstable inverse dependency stack trace for Metro bundling errors.\n * @deprecated This will be removed in the future.\n */\n get EXPO_METRO_UNSTABLE_ERRORS() {\n return boolish('EXPO_METRO_UNSTABLE_ERRORS', true);\n }\n\n /**\n * Override the Metro cache stores directory. When set, this takes precedence over\n * any `cacheStores` configuration in metro.config.js.\n */\n get EXPO_METRO_CACHE_STORES_DIR(): string {\n return string('EXPO_METRO_CACHE_STORES_DIR', '');\n }\n\n /** Enable the experimental sticky resolver for Metro (Uses Expo Autolinking results and applies them to Metro's resolution)\n * @deprecated Replaced by `exp.experiments.autolinkingModuleResolution`\n */\n get EXPO_USE_STICKY_RESOLVER() {\n return boolish('EXPO_USE_STICKY_RESOLVER', false);\n }\n\n /** Disable Environment Variable injection in client bundles. */\n get EXPO_NO_CLIENT_ENV_VARS(): boolean {\n return boolish('EXPO_NO_CLIENT_ENV_VARS', false);\n }\n\n /** Set the default `user` that should be passed to `--user` with ADB commands. Used for installing APKs on Android devices with multiple profiles. Defaults to `0`. */\n get EXPO_ADB_USER(): string {\n return string('EXPO_ADB_USER', '0');\n }\n\n /** Used internally to enable E2E utilities. This behavior is not stable to external users. */\n get __EXPO_E2E_TEST(): boolean {\n return boolish('__EXPO_E2E_TEST', false);\n }\n\n /** Unstable: Force single-bundle exports in production. */\n get EXPO_NO_BUNDLE_SPLITTING(): boolean {\n return boolish('EXPO_NO_BUNDLE_SPLITTING', false);\n }\n\n /**\n * Enable Atlas to gather bundle information during development or export.\n * Note, because this used to be an experimental feature, both `EXPO_ATLAS` and `EXPO_UNSTABLE_ATLAS` are supported.\n */\n get EXPO_ATLAS() {\n return boolish('EXPO_ATLAS', boolish('EXPO_UNSTABLE_ATLAS', false));\n }\n\n /** Unstable: Enable tree shaking for Metro. */\n get EXPO_UNSTABLE_TREE_SHAKING() {\n return boolish('EXPO_UNSTABLE_TREE_SHAKING', false);\n }\n\n /** Unstable: Enable eager bundling where transformation runs uncached after the entire bundle has been created. This is required for production tree shaking and less optimized for development bundling. */\n get EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH() {\n return boolish('EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH', false);\n }\n\n /** Enable the use of Expo's custom metro require implementation. The custom require supports better debugging, tree shaking, and React Server Components. */\n get EXPO_USE_METRO_REQUIRE() {\n return boolish('EXPO_USE_METRO_REQUIRE', false);\n }\n\n /** Internal key used to pass eager bundle data from the CLI to the native run scripts during `npx expo run` commands. */\n get __EXPO_EAGER_BUNDLE_OPTIONS() {\n return string('__EXPO_EAGER_BUNDLE_OPTIONS', '');\n }\n\n /** Disable server deployment during production builds (during `expo export:embed`). This is useful for testing API routes and server components against a local server. */\n get EXPO_NO_DEPLOY(): boolean {\n return boolish('EXPO_NO_DEPLOY', false);\n }\n\n /** Enable hydration during development when rendering Expo Web */\n get EXPO_WEB_DEV_HYDRATE(): boolean {\n return boolish('EXPO_WEB_DEV_HYDRATE', false);\n }\n\n /** Enable experimental React Server Functions support. */\n get EXPO_UNSTABLE_SERVER_FUNCTIONS(): boolean {\n return boolish('EXPO_UNSTABLE_SERVER_FUNCTIONS', false);\n }\n\n /** Enable unstable/experimental mode where React Native Web isn't required to run Expo apps on web. */\n get EXPO_NO_REACT_NATIVE_WEB(): boolean {\n return boolish('EXPO_NO_REACT_NATIVE_WEB', false);\n }\n\n /** Enable unstable/experimental support for deploying the native server in `npx expo run` commands. */\n get EXPO_UNSTABLE_DEPLOY_SERVER(): boolean {\n return boolish('EXPO_UNSTABLE_DEPLOY_SERVER', false);\n }\n\n /** Is running in EAS Build. This is set by EAS: https://docs.expo.dev/eas/environment-variables/ */\n get EAS_BUILD(): boolean {\n return boolish('EAS_BUILD', false);\n }\n\n /** Disable the React Native Directory compatibility check for new architecture when installing packages */\n get EXPO_NO_NEW_ARCH_COMPAT_CHECK(): boolean {\n return boolish('EXPO_NO_NEW_ARCH_COMPAT_CHECK', false);\n }\n\n /** Disable the dependency validation when installing other dependencies and starting the project */\n get EXPO_NO_DEPENDENCY_VALIDATION(): boolean {\n // Default to disabling when running in a web container (stackblitz, bolt, etc).\n const isWebContainer = process.versions.webcontainer != null;\n return boolish('EXPO_NO_DEPENDENCY_VALIDATION', isWebContainer);\n }\n\n /** Force Expo CLI to run in webcontainer mode, this has impact on which URL Expo is using by default */\n get EXPO_FORCE_WEBCONTAINER_ENV(): boolean {\n return boolish('EXPO_FORCE_WEBCONTAINER_ENV', false);\n }\n\n /** Force Expo CLI to run in webcontainer mode, this has impact on which URL Expo is using by default */\n get EXPO_UNSTABLE_WEB_MODAL(): boolean {\n return boolish('EXPO_UNSTABLE_WEB_MODAL', false);\n }\n\n /** Disable by falsy value live binding in experimental import export support. Enabled by default. */\n get EXPO_UNSTABLE_LIVE_BINDINGS(): boolean {\n return boolish('EXPO_UNSTABLE_LIVE_BINDINGS', true);\n }\n\n /**\n * Enable the experimental MCP integration or further specify the MCP server URL.\n */\n get EXPO_UNSTABLE_MCP_SERVER(): string {\n const value = string('EXPO_UNSTABLE_MCP_SERVER', '');\n if (value === '1' || value.toLowerCase() === 'true') {\n return this.EXPO_STAGING ? 'staging-mcp.expo.dev' : 'mcp.expo.dev';\n }\n return value;\n }\n\n/** Enable Expo Log Box for iOS and Android (Web is enabled by default) */\n get EXPO_UNSTABLE_LOG_BOX(): boolean {\n return boolish('EXPO_UNSTABLE_LOG_BOX', false);\n }\n\n /**\n * Enable Bonjour advertising of the Expo CLI on local networks\n */\n get EXPO_UNSTABLE_BONJOUR(): boolean {\n return boolish('EXPO_UNSTABLE_BONJOUR', false);\n }\n\n /**\n * Enable JSONL output mode for machine-readable output\n * If set to a string, it will be used as a path for the JSONL output.\n * If set to a boolish value, it will be used as a flag\n * to enable/disable JSONL output in stdout.\n */\n get EXPO_UNSTABLE_JSONL_OUTPUT(): boolean | string {\n const value = string('EXPO_UNSTABLE_JSONL_OUTPUT', '');\n const valueNormalized = value.toLowerCase();\n if (['0', 'false', ''].includes(valueNormalized)) {\n return false;\n } else if (['1', 'true'].includes(valueNormalized)) {\n return true;\n }\n return value;\n }\n}\n\nexport const env = new Env();\n\nexport function envIsWebcontainer() {\n // See: https://github.com/unjs/std-env/blob/4b1e03c4efce58249858efc2cc5f5eac727d0adb/src/providers.ts#L134-L143\n return (\n env.EXPO_FORCE_WEBCONTAINER_ENV ||\n (process.env.SHELL === '/bin/jsh' && !!process.versions.webcontainer)\n );\n}\n"],"names":["env","envIsWebcontainer","Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_OFFLINE","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_NO_TELEMETRY_DETACH","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_NO_REDIRECT_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_PACKAGER_PROXY_URL","EXPO_TUNNEL_SUBDOMAIN","subdomain","includes","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","HTTP_PROXY","process","http_proxy","EXPO_OVERRIDE_METRO_CONFIG","trim","undefined","EXPO_NO_INSPECTOR_PROXY","EXPO_NO_METRO_LAZY","EXPO_METRO_UNSTABLE_ERRORS","EXPO_METRO_CACHE_STORES_DIR","EXPO_USE_STICKY_RESOLVER","EXPO_NO_CLIENT_ENV_VARS","EXPO_ADB_USER","__EXPO_E2E_TEST","EXPO_NO_BUNDLE_SPLITTING","EXPO_ATLAS","EXPO_UNSTABLE_TREE_SHAKING","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","EXPO_USE_METRO_REQUIRE","__EXPO_EAGER_BUNDLE_OPTIONS","EXPO_NO_DEPLOY","EXPO_WEB_DEV_HYDRATE","EXPO_UNSTABLE_SERVER_FUNCTIONS","EXPO_NO_REACT_NATIVE_WEB","EXPO_UNSTABLE_DEPLOY_SERVER","EAS_BUILD","EXPO_NO_NEW_ARCH_COMPAT_CHECK","EXPO_NO_DEPENDENCY_VALIDATION","isWebContainer","versions","webcontainer","EXPO_FORCE_WEBCONTAINER_ENV","EXPO_UNSTABLE_WEB_MODAL","EXPO_UNSTABLE_LIVE_BINDINGS","EXPO_UNSTABLE_MCP_SERVER","value","toLowerCase","EXPO_UNSTABLE_LOG_BOX","EXPO_UNSTABLE_BONJOUR","EXPO_UNSTABLE_JSONL_OUTPUT","valueNormalized","SHELL"],"mappings":"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"}
|
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
freePortAsync: function() {
|
|
13
|
+
return freePortAsync;
|
|
14
|
+
},
|
|
15
|
+
testPortAsync: function() {
|
|
8
16
|
return testPortAsync;
|
|
9
17
|
}
|
|
10
18
|
});
|
|
@@ -45,10 +53,18 @@ async function testPortAsync(port, hostnames) {
|
|
|
45
53
|
}
|
|
46
54
|
for (const host of hostnames){
|
|
47
55
|
if (!await testHostPortAsync(port, host)) {
|
|
48
|
-
return
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
async function freePortAsync(portStart, hostnames) {
|
|
62
|
+
for(let port = portStart; port <= 65535; port++){
|
|
63
|
+
if (await testPortAsync(port, hostnames)) {
|
|
64
|
+
return port;
|
|
49
65
|
}
|
|
50
66
|
}
|
|
51
|
-
return
|
|
67
|
+
return null;
|
|
52
68
|
}
|
|
53
69
|
|
|
54
70
|
//# sourceMappingURL=freeport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/freeport.ts"],"sourcesContent":["import net from 'node:net';\n\nasync function testHostPortAsync(port: number, host: string | null): Promise<boolean> {\n return new Promise((resolve) => {\n const server = net.createServer();\n server.listen({ port, host }, () => {\n server.once('close', () => {\n setTimeout(() => resolve(true), 0);\n });\n server.close();\n });\n server.once('error', (_error) => {\n setTimeout(() => resolve(false), 0);\n });\n });\n}\n\nexport async function testPortAsync(
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/freeport.ts"],"sourcesContent":["import net from 'node:net';\n\nasync function testHostPortAsync(port: number, host: string | null): Promise<boolean> {\n return new Promise((resolve) => {\n const server = net.createServer();\n server.listen({ port, host }, () => {\n server.once('close', () => {\n setTimeout(() => resolve(true), 0);\n });\n server.close();\n });\n server.once('error', (_error) => {\n setTimeout(() => resolve(false), 0);\n });\n });\n}\n\nexport async function testPortAsync(port: number, hostnames?: (string | null)[]): Promise<boolean> {\n if (!hostnames?.length) {\n hostnames = [null];\n }\n for (const host of hostnames) {\n if (!(await testHostPortAsync(port, host))) {\n return false;\n }\n }\n return true;\n}\n\nexport async function freePortAsync(\n portStart: number,\n hostnames?: (string | null)[]\n): Promise<number | null> {\n for (let port = portStart; port <= 65_535; port++) {\n if (await testPortAsync(port, hostnames)) {\n return port;\n }\n }\n return null;\n}\n"],"names":["freePortAsync","testPortAsync","testHostPortAsync","port","host","Promise","resolve","server","net","createServer","listen","once","setTimeout","close","_error","hostnames","length","portStart"],"mappings":";;;;;;;;;;;IA6BsBA,aAAa;eAAbA;;IAZAC,aAAa;eAAbA;;;;gEAjBN;;;;;;;;;;;AAEhB,eAAeC,kBAAkBC,IAAY,EAAEC,IAAmB;IAChE,OAAO,IAAIC,QAAQ,CAACC;QAClB,MAAMC,SAASC,kBAAG,CAACC,YAAY;QAC/BF,OAAOG,MAAM,CAAC;YAAEP;YAAMC;QAAK,GAAG;YAC5BG,OAAOI,IAAI,CAAC,SAAS;gBACnBC,WAAW,IAAMN,QAAQ,OAAO;YAClC;YACAC,OAAOM,KAAK;QACd;QACAN,OAAOI,IAAI,CAAC,SAAS,CAACG;YACpBF,WAAW,IAAMN,QAAQ,QAAQ;QACnC;IACF;AACF;AAEO,eAAeL,cAAcE,IAAY,EAAEY,SAA6B;IAC7E,IAAI,EAACA,6BAAAA,UAAWC,MAAM,GAAE;QACtBD,YAAY;YAAC;SAAK;IACpB;IACA,KAAK,MAAMX,QAAQW,UAAW;QAC5B,IAAI,CAAE,MAAMb,kBAAkBC,MAAMC,OAAQ;YAC1C,OAAO;QACT;IACF;IACA,OAAO;AACT;AAEO,eAAeJ,cACpBiB,SAAiB,EACjBF,SAA6B;IAE7B,IAAK,IAAIZ,OAAOc,WAAWd,QAAQ,OAAQA,OAAQ;QACjD,IAAI,MAAMF,cAAcE,MAAMY,YAAY;YACxC,OAAOZ;QACT;IACF;IACA,OAAO;AACT"}
|
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "isInteractive", {
|
|
|
10
10
|
});
|
|
11
11
|
const _env = require("./env");
|
|
12
12
|
function isInteractive() {
|
|
13
|
-
return !_env.env.CI && process.stdout.isTTY;
|
|
13
|
+
return !_env.env.CI && !_env.env.EXPO_UNSTABLE_JSONL_OUTPUT && process.stdout.isTTY;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
//# sourceMappingURL=interactive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/interactive.ts"],"sourcesContent":["import { env } from './env';\n\n/** @returns `true` if the process is interactive. */\nexport function isInteractive(): boolean {\n return !env.CI && process.stdout.isTTY;\n}\n"],"names":["isInteractive","env","CI","process","stdout","isTTY"],"mappings":";;;;+BAGgBA;;;eAAAA;;;qBAHI;AAGb,SAASA;IACd,OAAO,CAACC,QAAG,CAACC,EAAE,IAAIC,QAAQC,MAAM,CAACC,KAAK;
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/interactive.ts"],"sourcesContent":["import { env } from './env';\n\n/** @returns `true` if the process is interactive. */\nexport function isInteractive(): boolean {\n return !env.CI && !env.EXPO_UNSTABLE_JSONL_OUTPUT && process.stdout.isTTY;\n}\n"],"names":["isInteractive","env","CI","EXPO_UNSTABLE_JSONL_OUTPUT","process","stdout","isTTY"],"mappings":";;;;+BAGgBA;;;eAAAA;;;qBAHI;AAGb,SAASA;IACd,OAAO,CAACC,QAAG,CAACC,EAAE,IAAI,CAACD,QAAG,CAACE,0BAA0B,IAAIC,QAAQC,MAAM,CAACC,KAAK;AAC3E"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
JsonlReporter: function() {
|
|
13
|
+
return JsonlReporter;
|
|
14
|
+
},
|
|
15
|
+
getJsonlReporter: function() {
|
|
16
|
+
return getJsonlReporter;
|
|
17
|
+
},
|
|
18
|
+
installJsonlInterceptor: function() {
|
|
19
|
+
return installJsonlInterceptor;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
function _nodefs() {
|
|
23
|
+
const data = /*#__PURE__*/ _interop_require_wildcard(require("node:fs"));
|
|
24
|
+
_nodefs = function() {
|
|
25
|
+
return data;
|
|
26
|
+
};
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
function _nodepath() {
|
|
30
|
+
const data = /*#__PURE__*/ _interop_require_wildcard(require("node:path"));
|
|
31
|
+
_nodepath = function() {
|
|
32
|
+
return data;
|
|
33
|
+
};
|
|
34
|
+
return data;
|
|
35
|
+
}
|
|
36
|
+
const _ansi = require("./ansi");
|
|
37
|
+
const _env = require("./env");
|
|
38
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
39
|
+
if (typeof WeakMap !== "function") return null;
|
|
40
|
+
var cacheBabelInterop = new WeakMap();
|
|
41
|
+
var cacheNodeInterop = new WeakMap();
|
|
42
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
43
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
44
|
+
})(nodeInterop);
|
|
45
|
+
}
|
|
46
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
47
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
48
|
+
return obj;
|
|
49
|
+
}
|
|
50
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
51
|
+
return {
|
|
52
|
+
default: obj
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
56
|
+
if (cache && cache.has(obj)) {
|
|
57
|
+
return cache.get(obj);
|
|
58
|
+
}
|
|
59
|
+
var newObj = {
|
|
60
|
+
__proto__: null
|
|
61
|
+
};
|
|
62
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
63
|
+
for(var key in obj){
|
|
64
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
65
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
66
|
+
if (desc && (desc.get || desc.set)) {
|
|
67
|
+
Object.defineProperty(newObj, key, desc);
|
|
68
|
+
} else {
|
|
69
|
+
newObj[key] = obj[key];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
newObj.default = obj;
|
|
74
|
+
if (cache) {
|
|
75
|
+
cache.set(obj, newObj);
|
|
76
|
+
}
|
|
77
|
+
return newObj;
|
|
78
|
+
}
|
|
79
|
+
// Save original write functions BEFORE any patching
|
|
80
|
+
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
81
|
+
/** Get the output file path if EXPO_UNSTABLE_JSONL_OUTPUT is a path string */ function getOutputFilePath() {
|
|
82
|
+
const value = _env.env.EXPO_UNSTABLE_JSONL_OUTPUT;
|
|
83
|
+
if (typeof value === 'string') {
|
|
84
|
+
try {
|
|
85
|
+
_nodefs().mkdirSync(_nodepath().dirname(value), {
|
|
86
|
+
recursive: true
|
|
87
|
+
});
|
|
88
|
+
_nodefs().writeFileSync(value, '');
|
|
89
|
+
} catch (error) {
|
|
90
|
+
// Silently ignore, the process will error on write if the directory does not exist
|
|
91
|
+
}
|
|
92
|
+
return _nodepath().resolve(value);
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
class JsonlReporter {
|
|
97
|
+
constructor(){
|
|
98
|
+
this.outputFilePath = getOutputFilePath();
|
|
99
|
+
}
|
|
100
|
+
get isEnabled() {
|
|
101
|
+
return !!_env.env.EXPO_UNSTABLE_JSONL_OUTPUT;
|
|
102
|
+
}
|
|
103
|
+
/** Get the output file path (null if writing to stdout) */ getOutputFilePath() {
|
|
104
|
+
return this.outputFilePath;
|
|
105
|
+
}
|
|
106
|
+
/** Emit a JSONL event to stdout or file */ emit(event) {
|
|
107
|
+
const eventWithTimestamp = {
|
|
108
|
+
...event,
|
|
109
|
+
timestamp: Date.now()
|
|
110
|
+
};
|
|
111
|
+
const line = JSON.stringify(eventWithTimestamp) + '\n';
|
|
112
|
+
if (this.outputFilePath) {
|
|
113
|
+
// Append to file
|
|
114
|
+
// TODO: Consider using async queue to write to file
|
|
115
|
+
_nodefs().appendFileSync(this.outputFilePath, line);
|
|
116
|
+
} else {
|
|
117
|
+
// Write to stdout using the original (unpatched) write function
|
|
118
|
+
originalStdoutWrite(line);
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
/** Emit stdout output */ emitStdout(value) {
|
|
123
|
+
return this.emit({
|
|
124
|
+
type: 'stdout',
|
|
125
|
+
value: (0, _ansi.stripAnsi)(value) ?? ''
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/** Emit stderr output */ emitStderr(value) {
|
|
129
|
+
return this.emit({
|
|
130
|
+
type: 'stderr',
|
|
131
|
+
value: (0, _ansi.stripAnsi)(value) ?? ''
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/** Emit console log from client or server */ emitConsole(options) {
|
|
135
|
+
return this.emit({
|
|
136
|
+
type: `console.${options.level}`,
|
|
137
|
+
source: options.source,
|
|
138
|
+
platform: options.platform,
|
|
139
|
+
value: Array.isArray(options.value) ? // but to be safe, we stringify the array. Eventually we would like to send the as-is.
|
|
140
|
+
// To get more detailed logs.
|
|
141
|
+
options.value.map((item)=>String(item)).join(' ') : String(options.value)
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/** Emit console log from server */ emitServerLog(options) {
|
|
145
|
+
return this.emitConsole({
|
|
146
|
+
level: options.level ?? 'log',
|
|
147
|
+
source: 'server',
|
|
148
|
+
value: options.value
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/** Emit bundling started event */ emitBundlingStarted(options) {
|
|
152
|
+
return this.emit({
|
|
153
|
+
type: 'bundling.started',
|
|
154
|
+
id: options.id,
|
|
155
|
+
platform: options.platform,
|
|
156
|
+
path: options.path,
|
|
157
|
+
environment: options.environment
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/** Emit bundling progress event */ emitBundlingProgress(options) {
|
|
161
|
+
return this.emit({
|
|
162
|
+
type: 'bundling.progress',
|
|
163
|
+
id: options.id,
|
|
164
|
+
progress: options.progress,
|
|
165
|
+
files: {
|
|
166
|
+
total: options.total,
|
|
167
|
+
current: options.current
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/** Emit bundling done event */ emitBundlingDone(options) {
|
|
172
|
+
return this.emit({
|
|
173
|
+
type: 'bundling.done',
|
|
174
|
+
id: options.id,
|
|
175
|
+
duration: options.duration,
|
|
176
|
+
modules: {
|
|
177
|
+
total: options.totalModules
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/** Emit bundling error event */ emitBundlingError(options) {
|
|
182
|
+
return this.emit({
|
|
183
|
+
type: 'bundling.error',
|
|
184
|
+
id: options.id,
|
|
185
|
+
value: (0, _ansi.stripAnsi)(options.value) ?? '',
|
|
186
|
+
duration: options.duration
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
let reporterInstance = null;
|
|
191
|
+
function getJsonlReporter() {
|
|
192
|
+
if (!reporterInstance) {
|
|
193
|
+
if (_env.env.EXPO_UNSTABLE_JSONL_OUTPUT) {
|
|
194
|
+
reporterInstance = new JsonlReporter();
|
|
195
|
+
} else {
|
|
196
|
+
// Use noop reporter
|
|
197
|
+
reporterInstance = {
|
|
198
|
+
get isEnabled () {
|
|
199
|
+
return false;
|
|
200
|
+
},
|
|
201
|
+
getOutputFilePath: ()=>null,
|
|
202
|
+
emit: ()=>false,
|
|
203
|
+
emitStdout: ()=>false,
|
|
204
|
+
emitStderr: ()=>false,
|
|
205
|
+
emitConsole: ()=>false,
|
|
206
|
+
emitServerLog: ()=>false,
|
|
207
|
+
emitBundlingStarted: ()=>false,
|
|
208
|
+
emitBundlingProgress: ()=>false,
|
|
209
|
+
emitBundlingDone: ()=>false,
|
|
210
|
+
emitBundlingError: ()=>false
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return reporterInstance;
|
|
215
|
+
}
|
|
216
|
+
function installJsonlInterceptor() {
|
|
217
|
+
if (!_env.env.EXPO_UNSTABLE_JSONL_OUTPUT) return;
|
|
218
|
+
const reporter = getJsonlReporter();
|
|
219
|
+
const outputFilePath = reporter.getOutputFilePath();
|
|
220
|
+
// If writing to a file, print a message to stdout to inform users
|
|
221
|
+
if (outputFilePath) {
|
|
222
|
+
originalStdoutWrite(`JSONL output is being written to: ${outputFilePath}\n`);
|
|
223
|
+
}
|
|
224
|
+
// Patch stdout
|
|
225
|
+
process.stdout.write = (chunk, encoding, callback)=>{
|
|
226
|
+
const str = typeof chunk === 'string' ? chunk : chunk.toString();
|
|
227
|
+
reporter.emitStdout(str);
|
|
228
|
+
// Call callback if provided (for stream compatibility)
|
|
229
|
+
if (typeof encoding === 'function') encoding();
|
|
230
|
+
else if (typeof callback === 'function') callback();
|
|
231
|
+
return true;
|
|
232
|
+
};
|
|
233
|
+
// Patch stderr
|
|
234
|
+
process.stderr.write = (chunk, encoding, callback)=>{
|
|
235
|
+
const str = typeof chunk === 'string' ? chunk : chunk.toString();
|
|
236
|
+
reporter.emitStderr(str);
|
|
237
|
+
if (typeof encoding === 'function') encoding();
|
|
238
|
+
else if (typeof callback === 'function') callback();
|
|
239
|
+
return true;
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
//# sourceMappingURL=jsonl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/jsonl.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { stripAnsi } from './ansi';\nimport { env } from './env';\n\n// Save original write functions BEFORE any patching\nconst originalStdoutWrite = process.stdout.write.bind(process.stdout);\n\n/** Get the output file path if EXPO_UNSTABLE_JSONL_OUTPUT is a path string */\nfunction getOutputFilePath(): string | null {\n const value = env.EXPO_UNSTABLE_JSONL_OUTPUT;\n if (typeof value === 'string') {\n try {\n fs.mkdirSync(path.dirname(value), { recursive: true });\n fs.writeFileSync(value, '');\n } catch (error) {\n // Silently ignore, the process will error on write if the directory does not exist\n }\n return path.resolve(value);\n }\n return null;\n}\n\n/** Base event */\nexport interface JsonlEvent {\n type: string;\n timestamp: number; // Unix timestamp in milliseconds\n}\n\n/** Console output from JS runtime */\nexport interface JsonlConsoleEvent extends JsonlEvent {\n type:\n | 'console.log'\n | 'console.error'\n | 'console.warn'\n | 'console.debug'\n | 'console.info'\n | 'console.trace'\n | 'console.group'\n | 'console.groupCollapsed'\n | 'console.groupEnd';\n source: 'server' | 'client';\n platform?: 'ios' | 'android' | 'web'; // Extracted from bundle URL in stack traces\n value: string;\n}\n\n/** Generic stdout/stderr output from CLI */\nexport interface JsonlStdEvent extends JsonlEvent {\n type: 'stdout' | 'stderr';\n value: string;\n}\n\n/** Bundling started */\nexport interface JsonlBundlingStartedEvent extends JsonlEvent {\n type: 'bundling.started';\n id: string;\n platform: 'ios' | 'android' | 'web' | string;\n path: string;\n environment?: 'client' | 'node' | 'react-server'; // For SSR, API routes, RSC\n}\n\n/** Bundling progress */\nexport interface JsonlBundlingProgressEvent extends JsonlEvent {\n type: 'bundling.progress';\n id: string;\n progress: number; // 0-1\n files: {\n total: number;\n current: number;\n };\n}\n\n/** Bundling completed successfully */\nexport interface JsonlBundlingDoneEvent extends JsonlEvent {\n type: 'bundling.done';\n id: string;\n duration: number | undefined; // milliseconds\n modules: {\n total: number;\n };\n}\n\n/** Bundling error (combined failure + error details) */\nexport interface JsonlBundlingErrorEvent extends JsonlEvent {\n type: 'bundling.error';\n id?: string;\n value: string; // Error message\n duration?: number; // milliseconds (if available)\n}\n\nexport type JsonlEventType =\n | JsonlConsoleEvent\n | JsonlStdEvent\n | JsonlBundlingStartedEvent\n | JsonlBundlingProgressEvent\n | JsonlBundlingDoneEvent\n | JsonlBundlingErrorEvent;\n\n/** Payload type for emit method (without timestamp) */\ntype JsonlEventPayload =\n | Omit<JsonlConsoleEvent, 'timestamp'>\n | Omit<JsonlStdEvent, 'timestamp'>\n | Omit<JsonlBundlingStartedEvent, 'timestamp'>\n | Omit<JsonlBundlingProgressEvent, 'timestamp'>\n | Omit<JsonlBundlingDoneEvent, 'timestamp'>\n | Omit<JsonlBundlingErrorEvent, 'timestamp'>;\n\nexport class JsonlReporter {\n private outputFilePath: string | null;\n\n constructor() {\n this.outputFilePath = getOutputFilePath();\n }\n\n get isEnabled(): boolean {\n return !!env.EXPO_UNSTABLE_JSONL_OUTPUT;\n }\n\n /** Get the output file path (null if writing to stdout) */\n getOutputFilePath(): string | null {\n return this.outputFilePath;\n }\n\n /** Emit a JSONL event to stdout or file */\n public emit(event: JsonlEventPayload): boolean {\n const eventWithTimestamp = { ...event, timestamp: Date.now() };\n const line = JSON.stringify(eventWithTimestamp) + '\\n';\n\n if (this.outputFilePath) {\n // Append to file\n // TODO: Consider using async queue to write to file\n fs.appendFileSync(this.outputFilePath, line);\n } else {\n // Write to stdout using the original (unpatched) write function\n originalStdoutWrite(line);\n }\n return true;\n }\n\n /** Emit stdout output */\n public emitStdout(value: string): boolean {\n return this.emit({ type: 'stdout', value: stripAnsi(value) ?? '' });\n }\n\n /** Emit stderr output */\n public emitStderr(value: string): boolean {\n return this.emit({ type: 'stderr', value: stripAnsi(value) ?? '' });\n }\n\n /** Emit console log from client or server */\n public emitConsole(options: {\n level:\n | 'log'\n | 'error'\n | 'warn'\n | 'debug'\n | 'info'\n | 'trace'\n | 'group'\n | 'groupCollapsed'\n | 'groupEnd';\n source: 'server' | 'client';\n platform?: 'ios' | 'android' | 'web';\n value: string | any[];\n }): boolean {\n return this.emit({\n type: `console.${options.level}`,\n source: options.source,\n platform: options.platform,\n value: Array.isArray(options.value)\n ? // Due to serialization on the client side, these will mostly be arrays of strings\n // but to be safe, we stringify the array. Eventually we would like to send the as-is.\n // To get more detailed logs.\n options.value.map((item: unknown) => String(item)).join(' ')\n : String(options.value),\n });\n }\n\n /** Emit console log from server */\n public emitServerLog(options: {\n level: 'info' | 'warn' | 'error' | undefined;\n value: string | any[];\n }): boolean {\n return this.emitConsole({\n level: options.level ?? 'log',\n source: 'server',\n value: options.value,\n });\n }\n\n /** Emit bundling started event */\n public emitBundlingStarted(options: {\n id: string;\n platform: string;\n path: string;\n environment?: 'client' | 'node' | 'react-server';\n }): boolean {\n return this.emit({\n type: 'bundling.started',\n id: options.id,\n platform: options.platform,\n path: options.path,\n environment: options.environment,\n });\n }\n\n /** Emit bundling progress event */\n public emitBundlingProgress(options: {\n id: string;\n progress: number;\n total: number;\n current: number;\n }): boolean {\n return this.emit({\n type: 'bundling.progress',\n id: options.id,\n progress: options.progress,\n files: {\n total: options.total,\n current: options.current,\n },\n });\n }\n\n /** Emit bundling done event */\n public emitBundlingDone(options: {\n id: string;\n duration: number | undefined;\n totalModules: number;\n }): boolean {\n return this.emit({\n type: 'bundling.done',\n id: options.id,\n duration: options.duration,\n modules: {\n total: options.totalModules,\n },\n });\n }\n\n /** Emit bundling error event */\n public emitBundlingError(options: {\n id: string | undefined;\n value: string;\n duration?: number;\n filename?: string;\n lineNumber?: number;\n column?: number;\n }): boolean {\n return this.emit({\n type: 'bundling.error',\n id: options.id,\n value: stripAnsi(options.value) ?? '',\n duration: options.duration,\n });\n }\n}\n\nlet reporterInstance: JsonlReporter | null = null;\n\n/** Get the singleton JSONL reporter instance */\nexport function getJsonlReporter(): JsonlReporter {\n if (!reporterInstance) {\n if (env.EXPO_UNSTABLE_JSONL_OUTPUT) {\n reporterInstance = new JsonlReporter();\n } else {\n // Use noop reporter\n reporterInstance = {\n get isEnabled(): boolean {\n return false;\n },\n getOutputFilePath: () => null,\n emit: () => false,\n emitStdout: () => false,\n emitStderr: () => false,\n emitConsole: () => false,\n emitServerLog: () => false,\n emitBundlingStarted: () => false,\n emitBundlingProgress: () => false,\n emitBundlingDone: () => false,\n emitBundlingError: () => false,\n } as unknown as JsonlReporter;\n }\n }\n return reporterInstance;\n}\n\n/** Install JSONL interceptor to patch process.stdout.write and process.stderr.write */\nexport function installJsonlInterceptor(): void {\n if (!env.EXPO_UNSTABLE_JSONL_OUTPUT) return;\n\n const reporter = getJsonlReporter();\n const outputFilePath = reporter.getOutputFilePath();\n\n // If writing to a file, print a message to stdout to inform users\n if (outputFilePath) {\n originalStdoutWrite(`JSONL output is being written to: ${outputFilePath}\\n`);\n }\n\n // Patch stdout\n process.stdout.write = (chunk: any, encoding?: any, callback?: any) => {\n const str = typeof chunk === 'string' ? chunk : chunk.toString();\n reporter.emitStdout(str);\n\n // Call callback if provided (for stream compatibility)\n if (typeof encoding === 'function') encoding();\n else if (typeof callback === 'function') callback();\n return true;\n };\n\n // Patch stderr\n process.stderr.write = (chunk: any, encoding?: any, callback?: any) => {\n const str = typeof chunk === 'string' ? chunk : chunk.toString();\n reporter.emitStderr(str);\n\n if (typeof encoding === 'function') encoding();\n else if (typeof callback === 'function') callback();\n return true;\n };\n}\n"],"names":["JsonlReporter","getJsonlReporter","installJsonlInterceptor","originalStdoutWrite","process","stdout","write","bind","getOutputFilePath","value","env","EXPO_UNSTABLE_JSONL_OUTPUT","fs","mkdirSync","path","dirname","recursive","writeFileSync","error","resolve","constructor","outputFilePath","isEnabled","emit","event","eventWithTimestamp","timestamp","Date","now","line","JSON","stringify","appendFileSync","emitStdout","type","stripAnsi","emitStderr","emitConsole","options","level","source","platform","Array","isArray","map","item","String","join","emitServerLog","emitBundlingStarted","id","environment","emitBundlingProgress","progress","files","total","current","emitBundlingDone","duration","modules","totalModules","emitBundlingError","reporterInstance","reporter","chunk","encoding","callback","str","toString","stderr"],"mappings":"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"}
|
package/build/src/utils/port.js
CHANGED
|
@@ -80,7 +80,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
80
80
|
return newObj;
|
|
81
81
|
}
|
|
82
82
|
async function getFreePortAsync(rangeStart) {
|
|
83
|
-
const port = await (0, _freeport.
|
|
83
|
+
const port = await (0, _freeport.freePortAsync)(rangeStart, [
|
|
84
84
|
null,
|
|
85
85
|
'localhost'
|
|
86
86
|
]);
|
|
@@ -90,11 +90,11 @@ async function getFreePortAsync(rangeStart) {
|
|
|
90
90
|
return port;
|
|
91
91
|
}
|
|
92
92
|
async function ensurePortAvailabilityAsync(projectRoot, { port }) {
|
|
93
|
-
const
|
|
93
|
+
const isFreePort = await (0, _freeport.testPortAsync)(port, [
|
|
94
94
|
null
|
|
95
95
|
]);
|
|
96
96
|
// Check if port has become busy during the build.
|
|
97
|
-
if (
|
|
97
|
+
if (isFreePort) {
|
|
98
98
|
return true;
|
|
99
99
|
}
|
|
100
100
|
const isBusy = await isBusyPortRunningSameProcessAsync(projectRoot, {
|
|
@@ -128,7 +128,7 @@ async function isBusyPortRunningSameProcessAsync(projectRoot, { port }) {
|
|
|
128
128
|
}
|
|
129
129
|
async function choosePortAsync(projectRoot, { defaultPort, host, reuseExistingPort }) {
|
|
130
130
|
try {
|
|
131
|
-
const port = await (0, _freeport.
|
|
131
|
+
const port = await (0, _freeport.freePortAsync)(defaultPort, [
|
|
132
132
|
host ?? null
|
|
133
133
|
]);
|
|
134
134
|
if (port === defaultPort || defaultPort === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/port.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { env } from './env';\nimport { CommandError } from './errors';\nimport { testPortAsync } from './freeport';\nimport * as Log from '../log';\n\n/** Get a free port or assert a CLI command error. */\nexport async function getFreePortAsync(rangeStart: number): Promise<number> {\n const port = await
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/port.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { env } from './env';\nimport { CommandError } from './errors';\nimport { testPortAsync, freePortAsync } from './freeport';\nimport * as Log from '../log';\n\n/** Get a free port or assert a CLI command error. */\nexport async function getFreePortAsync(rangeStart: number): Promise<number> {\n const port = await freePortAsync(rangeStart, [null, 'localhost']);\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', 'No available port found');\n }\n\n return port;\n}\n\n/** @return `true` if the port can still be used to start the dev server, `false` if the dev server should be skipped, and asserts if the port is now taken. */\nexport async function ensurePortAvailabilityAsync(\n projectRoot: string,\n { port }: { port: number }\n): Promise<boolean> {\n const isFreePort = await testPortAsync(port, [null]);\n // Check if port has become busy during the build.\n if (isFreePort) {\n return true;\n }\n\n const isBusy = await isBusyPortRunningSameProcessAsync(projectRoot, { port });\n if (!isBusy) {\n throw new CommandError(\n `Port \"${port}\" became busy running another process while the app was compiling. Re-run command to use a new port.`\n );\n }\n\n // Log that the dev server will not be started and that the logs will appear in another window.\n Log.log(\n '› The dev server for this app is already running in another window. Logs will appear there.'\n );\n return false;\n}\n\nfunction isRestrictedPort(port: number) {\n if (process.platform !== 'win32' && port < 1024) {\n const isRoot = process.getuid && process.getuid() === 0;\n return !isRoot;\n }\n return false;\n}\n\nasync function isBusyPortRunningSameProcessAsync(projectRoot: string, { port }: { port: number }) {\n const { getRunningProcess } =\n require('./getRunningProcess') as typeof import('./getRunningProcess');\n\n const runningProcess = isRestrictedPort(port) ? null : getRunningProcess(port);\n if (runningProcess) {\n if (runningProcess.directory === projectRoot) {\n return true;\n } else {\n return false;\n }\n }\n\n return null;\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function choosePortAsync(\n projectRoot: string,\n {\n defaultPort,\n host,\n reuseExistingPort,\n }: {\n defaultPort: number;\n host?: string;\n reuseExistingPort?: boolean;\n }\n): Promise<number | null> {\n try {\n const port = await freePortAsync(defaultPort, [host ?? null]);\n if (port === defaultPort || defaultPort === 0) {\n return port;\n }\n\n const isRestricted = port && isRestrictedPort(port);\n\n let message = isRestricted\n ? `Admin permissions are required to run a server on a port below 1024`\n : `Port ${chalk.bold(defaultPort)} is`;\n\n const { getRunningProcess } =\n require('./getRunningProcess') as typeof import('./getRunningProcess');\n const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);\n\n if (runningProcess) {\n const pidTag = chalk.gray(`(pid ${runningProcess.pid})`);\n if (runningProcess.directory === projectRoot) {\n message += ` running this app in another window`;\n if (reuseExistingPort) {\n return null;\n }\n } else {\n message += ` running ${chalk.cyan(runningProcess.command)} in another window`;\n }\n message += '\\n' + chalk.gray(` ${runningProcess.directory} ${pidTag}`);\n } else {\n message += ' being used by another process';\n }\n\n Log.log(`\\u203A ${message}`);\n const { confirmAsync } = require('./prompts') as typeof import('./prompts');\n const change = await confirmAsync({\n message: `Use port ${port} instead?`,\n initial: true,\n });\n return change ? port : null;\n } catch (error: any) {\n if (error.code === 'ABORTED') {\n throw error;\n } else if (error.code === 'NON_INTERACTIVE') {\n Log.warn(chalk.yellow(error.message));\n return null;\n }\n throw error;\n }\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function resolvePortAsync(\n projectRoot: string,\n {\n /** Should opt to reuse a port that is running the same project in another window. */\n reuseExistingPort,\n /** Preferred port. */\n defaultPort,\n /** Backup port for when the default isn't available. */\n fallbackPort,\n }: {\n reuseExistingPort?: boolean;\n defaultPort?: string | number;\n fallbackPort?: number;\n } = {}\n): Promise<number | null> {\n let port: number;\n if (typeof defaultPort === 'string') {\n port = parseInt(defaultPort, 10);\n } else if (typeof defaultPort === 'number') {\n port = defaultPort;\n } else {\n port = env.RCT_METRO_PORT || fallbackPort || 8081;\n }\n\n // Only check the port when the bundler is running.\n const resolvedPort = await choosePortAsync(projectRoot, {\n defaultPort: port,\n reuseExistingPort,\n });\n if (resolvedPort == null) {\n Log.log('\\u203A Skipping dev server');\n // Skip bundling if the port is null\n } else {\n // Use the new or resolved port\n process.env.RCT_METRO_PORT = String(resolvedPort);\n }\n\n return resolvedPort;\n}\n"],"names":["choosePortAsync","ensurePortAvailabilityAsync","getFreePortAsync","resolvePortAsync","rangeStart","port","freePortAsync","CommandError","projectRoot","isFreePort","testPortAsync","isBusy","isBusyPortRunningSameProcessAsync","Log","log","isRestrictedPort","process","platform","isRoot","getuid","getRunningProcess","require","runningProcess","directory","defaultPort","host","reuseExistingPort","isRestricted","message","chalk","bold","pidTag","gray","pid","cyan","command","confirmAsync","change","initial","error","code","warn","yellow","fallbackPort","parseInt","env","RCT_METRO_PORT","resolvedPort","String"],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ function _progress() {
|
|
|
26
26
|
};
|
|
27
27
|
return data;
|
|
28
28
|
}
|
|
29
|
+
const _env = require("./env");
|
|
29
30
|
function _interop_require_default(obj) {
|
|
30
31
|
return obj && obj.__esModule ? obj : {
|
|
31
32
|
default: obj
|
|
@@ -39,6 +40,10 @@ function getProgressBar() {
|
|
|
39
40
|
return currentProgress;
|
|
40
41
|
}
|
|
41
42
|
function createProgressBar(barFormat, options) {
|
|
43
|
+
// Disable progress bars in JSONL mode
|
|
44
|
+
if (_env.env.EXPO_UNSTABLE_JSONL_OUTPUT) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
42
47
|
if (process.stderr.clearLine == null) {
|
|
43
48
|
return null;
|
|
44
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/progress.ts"],"sourcesContent":["import ProgressBar from 'progress';\n\nlet currentProgress: ProgressBar | null = null;\n\nexport function setProgressBar(bar: ProgressBar | null): void {\n currentProgress = bar;\n}\n\nexport function getProgressBar(): ProgressBar | null {\n return currentProgress;\n}\n\nexport function createProgressBar(barFormat: string, options: ProgressBar.ProgressBarOptions) {\n if (process.stderr.clearLine == null) {\n return null;\n }\n\n const bar = new ProgressBar(barFormat, options);\n\n const logReal = console.log;\n const infoReal = console.info;\n const warnReal = console.warn;\n const errorReal = console.error;\n\n const wrapNativeLogs = (): void => {\n // TODO(@kitten): This was a spread-passthrough since this code was added, but typings indicate\n // this isn't correct and we're discarding output here. If we could have a better stdout redirection\n // in the future here, that'd be preferable\n console.log = (...args: any[]) => bar.interrupt(...(args as [string]));\n console.info = (...args: any[]) => bar.interrupt(...(args as [string]));\n console.warn = (...args: any[]) => bar.interrupt(...(args as [string]));\n console.error = (...args: any[]) => bar.interrupt(...(args as [string]));\n };\n\n const resetNativeLogs = (): void => {\n console.log = logReal;\n console.info = infoReal;\n console.warn = warnReal;\n console.error = errorReal;\n };\n\n const originalTerminate = bar.terminate.bind(bar);\n bar.terminate = () => {\n resetNativeLogs();\n setProgressBar(null);\n originalTerminate();\n };\n\n wrapNativeLogs();\n setProgressBar(bar);\n return bar;\n}\n"],"names":["createProgressBar","getProgressBar","setProgressBar","currentProgress","bar","barFormat","options","process","stderr","clearLine","ProgressBar","logReal","console","log","infoReal","info","warnReal","warn","errorReal","error","wrapNativeLogs","args","interrupt","resetNativeLogs","originalTerminate","terminate","bind"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/progress.ts"],"sourcesContent":["import ProgressBar from 'progress';\n\nimport { env } from './env';\n\nlet currentProgress: ProgressBar | null = null;\n\nexport function setProgressBar(bar: ProgressBar | null): void {\n currentProgress = bar;\n}\n\nexport function getProgressBar(): ProgressBar | null {\n return currentProgress;\n}\n\nexport function createProgressBar(barFormat: string, options: ProgressBar.ProgressBarOptions) {\n // Disable progress bars in JSONL mode\n if (env.EXPO_UNSTABLE_JSONL_OUTPUT) {\n return null;\n }\n\n if (process.stderr.clearLine == null) {\n return null;\n }\n\n const bar = new ProgressBar(barFormat, options);\n\n const logReal = console.log;\n const infoReal = console.info;\n const warnReal = console.warn;\n const errorReal = console.error;\n\n const wrapNativeLogs = (): void => {\n // TODO(@kitten): This was a spread-passthrough since this code was added, but typings indicate\n // this isn't correct and we're discarding output here. If we could have a better stdout redirection\n // in the future here, that'd be preferable\n console.log = (...args: any[]) => bar.interrupt(...(args as [string]));\n console.info = (...args: any[]) => bar.interrupt(...(args as [string]));\n console.warn = (...args: any[]) => bar.interrupt(...(args as [string]));\n console.error = (...args: any[]) => bar.interrupt(...(args as [string]));\n };\n\n const resetNativeLogs = (): void => {\n console.log = logReal;\n console.info = infoReal;\n console.warn = warnReal;\n console.error = errorReal;\n };\n\n const originalTerminate = bar.terminate.bind(bar);\n bar.terminate = () => {\n resetNativeLogs();\n setProgressBar(null);\n originalTerminate();\n };\n\n wrapNativeLogs();\n setProgressBar(bar);\n return bar;\n}\n"],"names":["createProgressBar","getProgressBar","setProgressBar","currentProgress","bar","barFormat","options","env","EXPO_UNSTABLE_JSONL_OUTPUT","process","stderr","clearLine","ProgressBar","logReal","console","log","infoReal","info","warnReal","warn","errorReal","error","wrapNativeLogs","args","interrupt","resetNativeLogs","originalTerminate","terminate","bind"],"mappings":";;;;;;;;;;;IAcgBA,iBAAiB;eAAjBA;;IAJAC,cAAc;eAAdA;;IAJAC,cAAc;eAAdA;;;;gEANQ;;;;;;qBAEJ;;;;;;AAEpB,IAAIC,kBAAsC;AAEnC,SAASD,eAAeE,GAAuB;IACpDD,kBAAkBC;AACpB;AAEO,SAASH;IACd,OAAOE;AACT;AAEO,SAASH,kBAAkBK,SAAiB,EAAEC,OAAuC;IAC1F,sCAAsC;IACtC,IAAIC,QAAG,CAACC,0BAA0B,EAAE;QAClC,OAAO;IACT;IAEA,IAAIC,QAAQC,MAAM,CAACC,SAAS,IAAI,MAAM;QACpC,OAAO;IACT;IAEA,MAAMP,MAAM,IAAIQ,CAAAA,WAAU,SAAC,CAACP,WAAWC;IAEvC,MAAMO,UAAUC,QAAQC,GAAG;IAC3B,MAAMC,WAAWF,QAAQG,IAAI;IAC7B,MAAMC,WAAWJ,QAAQK,IAAI;IAC7B,MAAMC,YAAYN,QAAQO,KAAK;IAE/B,MAAMC,iBAAiB;QACrB,+FAA+F;QAC/F,oGAAoG;QACpG,2CAA2C;QAC3CR,QAAQC,GAAG,GAAG,CAAC,GAAGQ,OAAgBnB,IAAIoB,SAAS,IAAKD;QACpDT,QAAQG,IAAI,GAAG,CAAC,GAAGM,OAAgBnB,IAAIoB,SAAS,IAAKD;QACrDT,QAAQK,IAAI,GAAG,CAAC,GAAGI,OAAgBnB,IAAIoB,SAAS,IAAKD;QACrDT,QAAQO,KAAK,GAAG,CAAC,GAAGE,OAAgBnB,IAAIoB,SAAS,IAAKD;IACxD;IAEA,MAAME,kBAAkB;QACtBX,QAAQC,GAAG,GAAGF;QACdC,QAAQG,IAAI,GAAGD;QACfF,QAAQK,IAAI,GAAGD;QACfJ,QAAQO,KAAK,GAAGD;IAClB;IAEA,MAAMM,oBAAoBtB,IAAIuB,SAAS,CAACC,IAAI,CAACxB;IAC7CA,IAAIuB,SAAS,GAAG;QACdF;QACAvB,eAAe;QACfwB;IACF;IAEAJ;IACApB,eAAeE;IACf,OAAOA;AACT"}
|
|
@@ -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/${"
|
|
36
|
+
'user-agent': `expo-cli/${"56.0.0-canary-20260128-67ce8d5"}`,
|
|
37
37
|
authorization: 'Basic ' + _nodebuffer().Buffer.from(`${target}:`).toString('base64')
|
|
38
38
|
};
|
|
39
39
|
}
|
package/build/src/utils/url.js
CHANGED
|
@@ -15,12 +15,12 @@ _export(exports, {
|
|
|
15
15
|
isUrlOk: function() {
|
|
16
16
|
return isUrlOk;
|
|
17
17
|
},
|
|
18
|
+
parseUrl: function() {
|
|
19
|
+
return parseUrl;
|
|
20
|
+
},
|
|
18
21
|
stripExtension: function() {
|
|
19
22
|
return stripExtension;
|
|
20
23
|
},
|
|
21
|
-
stripPort: function() {
|
|
22
|
-
return stripPort;
|
|
23
|
-
},
|
|
24
24
|
validateUrl: function() {
|
|
25
25
|
return validateUrl;
|
|
26
26
|
}
|
|
@@ -71,11 +71,7 @@ function validateUrl(urlString, { protocols, requireProtocol } = {}) {
|
|
|
71
71
|
return false;
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
function
|
|
75
|
-
var _coerceUrl;
|
|
76
|
-
return ((_coerceUrl = coerceUrl(host)) == null ? void 0 : _coerceUrl.hostname) ?? null;
|
|
77
|
-
}
|
|
78
|
-
function coerceUrl(urlString) {
|
|
74
|
+
function parseUrl(urlString) {
|
|
79
75
|
if (!urlString) {
|
|
80
76
|
return null;
|
|
81
77
|
}
|