@expo/cli 0.1.5 → 0.2.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.
Files changed (192) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/build/bin/cli +83 -4
  3. package/build/bin/cli.map +1 -1
  4. package/build/src/api/getNativeModuleVersions.js.map +1 -1
  5. package/build/src/api/rest/wrapFetchWithOffline.js +2 -23
  6. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  7. package/build/src/customize/customizeAsync.js +40 -0
  8. package/build/src/customize/customizeAsync.js.map +1 -0
  9. package/build/src/customize/generate.js +77 -0
  10. package/build/src/customize/generate.js.map +1 -0
  11. package/build/src/customize/index.js +41 -0
  12. package/build/src/customize/index.js.map +1 -0
  13. package/build/src/customize/resolveOptions.js +18 -0
  14. package/build/src/customize/resolveOptions.js.map +1 -0
  15. package/build/src/customize/templates.js +118 -0
  16. package/build/src/customize/templates.js.map +1 -0
  17. package/build/src/export/createMetadataJson.js +10 -7
  18. package/build/src/export/createMetadataJson.js.map +1 -1
  19. package/build/src/export/exportApp.js +32 -0
  20. package/build/src/export/exportApp.js.map +1 -1
  21. package/build/src/export/exportAssets.js +2 -3
  22. package/build/src/export/exportAssets.js.map +1 -1
  23. package/build/src/export/fork-bundleAsync.js +52 -35
  24. package/build/src/export/fork-bundleAsync.js.map +1 -1
  25. package/build/src/export/index.js +14 -10
  26. package/build/src/export/index.js.map +1 -1
  27. package/build/src/export/printBundleSizes.js +27 -48
  28. package/build/src/export/printBundleSizes.js.map +1 -1
  29. package/build/src/export/resolveOptions.js +44 -5
  30. package/build/src/export/resolveOptions.js.map +1 -1
  31. package/build/src/export/saveAssets.js +2 -1
  32. package/build/src/export/saveAssets.js.map +1 -1
  33. package/build/src/export/web/exportWebAsync.js +37 -0
  34. package/build/src/export/web/exportWebAsync.js.map +1 -0
  35. package/build/src/export/web/index.js +66 -0
  36. package/build/src/export/web/index.js.map +1 -0
  37. package/build/src/export/web/resolveOptions.js +13 -0
  38. package/build/src/export/web/resolveOptions.js.map +1 -0
  39. package/build/src/export/writeContents.js.map +1 -1
  40. package/build/src/install/checkPackages.js +2 -1
  41. package/build/src/install/checkPackages.js.map +1 -1
  42. package/build/src/install/index.js +1 -0
  43. package/build/src/install/index.js.map +1 -1
  44. package/build/src/install/installAsync.js +13 -5
  45. package/build/src/install/installAsync.js.map +1 -1
  46. package/build/src/install/resolveOptions.js +12 -65
  47. package/build/src/install/resolveOptions.js.map +1 -1
  48. package/build/src/install/utils/autoAddConfigPlugins.js +5 -26
  49. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  50. package/build/src/log.js.map +1 -1
  51. package/build/src/prebuild/copyTemplateFiles.js +5 -23
  52. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  53. package/build/src/prebuild/index.js +18 -12
  54. package/build/src/prebuild/index.js.map +1 -1
  55. package/build/src/prebuild/prebuildAsync.js +11 -12
  56. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  57. package/build/src/prebuild/resolveOptions.js +17 -0
  58. package/build/src/prebuild/resolveOptions.js.map +1 -1
  59. package/build/src/prebuild/resolveTemplate.js +2 -1
  60. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  61. package/build/src/prebuild/updatePackageJson.js +5 -5
  62. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  63. package/build/src/run/android/resolveInstallApkName.js +5 -26
  64. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  65. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +2 -0
  66. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  67. package/build/src/start/doctor/apple/XcodePrerequisite.js +2 -0
  68. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  69. package/build/src/start/doctor/dependencies/bundledNativeModules.js +3 -2
  70. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
  71. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +7 -13
  72. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  73. package/build/src/start/doctor/dependencies/getMissingPackages.js +3 -24
  74. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  75. package/build/src/start/doctor/dependencies/getVersionedPackages.js +2 -23
  76. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  77. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +17 -9
  78. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  79. package/build/src/start/doctor/ngrok/ExternalModule.js +2 -1
  80. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  81. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +4 -3
  82. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  83. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +29 -31
  84. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  85. package/build/src/start/interface/KeyPressHandler.js +2 -0
  86. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  87. package/build/src/start/interface/interactiveActions.js +5 -5
  88. package/build/src/start/interface/interactiveActions.js.map +1 -1
  89. package/build/src/start/interface/startInterface.js +3 -2
  90. package/build/src/start/interface/startInterface.js.map +1 -1
  91. package/build/src/start/platforms/ExpoGoInstaller.js +2 -1
  92. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  93. package/build/src/start/platforms/PlatformManager.js +4 -24
  94. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  95. package/build/src/start/platforms/android/ADBServer.js +17 -32
  96. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  97. package/build/src/start/platforms/android/AndroidSdk.js +41 -0
  98. package/build/src/start/platforms/android/AndroidSdk.js.map +1 -0
  99. package/build/src/start/platforms/android/activateWindow.js +4 -4
  100. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  101. package/build/src/start/platforms/android/adb.js +8 -3
  102. package/build/src/start/platforms/android/adb.js.map +1 -1
  103. package/build/src/start/platforms/android/adbReverse.js +3 -2
  104. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  105. package/build/src/start/platforms/android/gradle.js +2 -2
  106. package/build/src/start/platforms/android/gradle.js.map +1 -1
  107. package/build/src/start/platforms/ios/getBestSimulator.js +4 -4
  108. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  109. package/build/src/start/platforms/ios/xcrun.js +2 -23
  110. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  111. package/build/src/start/project/devices.js +2 -0
  112. package/build/src/start/project/devices.js.map +1 -1
  113. package/build/src/start/server/AsyncNgrok.js +6 -5
  114. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  115. package/build/src/start/server/BundlerDevServer.js +15 -8
  116. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  117. package/build/src/start/server/DevServerManager.js +15 -5
  118. package/build/src/start/server/DevServerManager.js.map +1 -1
  119. package/build/src/start/server/DevelopmentSession.js +4 -0
  120. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  121. package/build/src/start/server/UrlCreator.js +10 -3
  122. package/build/src/start/server/UrlCreator.js.map +1 -1
  123. package/build/src/start/server/metro/MetroBundlerDevServer.js +9 -0
  124. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  125. package/build/src/start/server/metro/TerminalReporter.js +5 -0
  126. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  127. package/build/src/start/server/metro/instantiateMetro.js +11 -2
  128. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  129. package/build/src/start/server/metro/resolveFromProject.js +8 -0
  130. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  131. package/build/src/start/server/metro/withMetroMultiPlatform.js +115 -0
  132. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -0
  133. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  134. package/build/src/start/server/middleware/ExpoMiddleware.js +9 -4
  135. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  136. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +24 -0
  137. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -0
  138. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +2 -0
  139. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  140. package/build/src/start/server/middleware/ManifestMiddleware.js +57 -6
  141. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  142. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +6 -1
  143. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  144. package/build/src/start/server/middleware/ServeStaticMiddleware.js +62 -0
  145. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -0
  146. package/build/src/start/server/platformBundlers.js +18 -0
  147. package/build/src/start/server/platformBundlers.js.map +1 -0
  148. package/build/src/start/server/webTemplate.js +68 -0
  149. package/build/src/start/server/webTemplate.js.map +1 -0
  150. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +59 -19
  151. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  152. package/build/src/start/server/webpack/compile.js +64 -0
  153. package/build/src/start/server/webpack/compile.js.map +1 -0
  154. package/build/src/start/startAsync.js +21 -17
  155. package/build/src/start/startAsync.js.map +1 -1
  156. package/build/src/utils/FileNotifier.js +5 -2
  157. package/build/src/utils/FileNotifier.js.map +1 -1
  158. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  159. package/build/src/utils/downloadAppAsync.js +3 -2
  160. package/build/src/utils/downloadAppAsync.js.map +1 -1
  161. package/build/src/utils/downloadExpoGoAsync.js +7 -32
  162. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  163. package/build/src/utils/editor.js +3 -2
  164. package/build/src/utils/editor.js.map +1 -1
  165. package/build/src/utils/env.js +3 -0
  166. package/build/src/utils/env.js.map +1 -1
  167. package/build/src/utils/exit.js +4 -25
  168. package/build/src/utils/exit.js.map +1 -1
  169. package/build/src/utils/getRunningProcess.js +6 -2
  170. package/build/src/utils/getRunningProcess.js.map +1 -1
  171. package/build/src/utils/nodeModules.js +13 -102
  172. package/build/src/utils/nodeModules.js.map +1 -1
  173. package/build/src/utils/npm.js +3 -24
  174. package/build/src/utils/npm.js.map +1 -1
  175. package/build/src/utils/ora.js +1 -13
  176. package/build/src/utils/ora.js.map +1 -1
  177. package/build/src/utils/progress.js +46 -0
  178. package/build/src/utils/progress.js.map +1 -1
  179. package/build/src/utils/prompts.js +4 -4
  180. package/build/src/utils/prompts.js.map +1 -1
  181. package/build/src/utils/tar.js +3 -0
  182. package/build/src/utils/tar.js.map +1 -1
  183. package/build/src/utils/validateApplicationId.js +9 -2
  184. package/build/src/utils/validateApplicationId.js.map +1 -1
  185. package/build/src/utils/variadic.js +47 -0
  186. package/build/src/utils/variadic.js.map +1 -0
  187. package/package.json +13 -8
  188. package/static/template/babel.config.js +6 -0
  189. package/static/template/index.html +117 -0
  190. package/static/template/metro.config.js +4 -0
  191. package/static/template/serve.json +13 -0
  192. package/static/template/webpack.config.js +7 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import { createSymbolicateMiddleware } from '@expo/dev-server/build/webpack/symbolicateMiddleware';\nimport chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'fs';\nimport http from 'http';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getIpAddress } from '../../../utils/ip';\nimport { choosePortAsync } from '../../../utils/port';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\n\ntype AnyCompiler = webpack.Compiler | webpack.MultiCompiler;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n // A custom message websocket broadcaster used to send messages to a React Native runtime.\n private customMessageSocketBroadcaster:\n | undefined\n | ((message: string, data?: Record<string, any>) => void);\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // Allow any message on native\n if (this.customMessageSocketBroadcaster) {\n this.customMessageSocketBroadcaster(method, params);\n return;\n }\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n\n private async attachNativeDevServerMiddlewareToDevServer({\n server,\n middleware,\n attachToServer,\n logger,\n }: { server: http.Server } & Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>>) {\n const { attachInspectorProxy, LogReporter } = await import('@expo/dev-server');\n\n // Hook up the React Native WebSockets to the Webpack dev server.\n const { messageSocket, debuggerProxy, eventsSocket } = attachToServer(server);\n\n this.customMessageSocketBroadcaster = messageSocket.broadcast;\n\n const logReporter = new LogReporter(logger);\n logReporter.reportEvent = eventsSocket.reportEvent;\n\n const { inspectorProxy } = attachInspectorProxy(this.projectRoot, {\n middleware,\n server,\n });\n\n return {\n messageSocket,\n eventsSocket,\n debuggerProxy,\n logReporter,\n inspectorProxy,\n };\n }\n\n isTargetingNative(): boolean {\n // Temporary hack while we implement multi-bundler dev server proxy.\n return ['ios', 'android'].includes(process.env.EXPO_WEBPACK_PLATFORM || '');\n }\n\n isTargetingWeb(): boolean {\n return true;\n }\n\n private async createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n }: {\n port: number;\n compiler: AnyCompiler;\n options: BundlerStartOptions;\n }) {\n if (!this.isTargetingNative()) {\n return null;\n }\n\n const { createDevServerMiddleware } = await import('../middleware/createDevServerMiddleware');\n\n const nativeMiddleware = createDevServerMiddleware(this.projectRoot, {\n port,\n watchFolders: [this.projectRoot],\n });\n // Add manifest middleware to the other middleware.\n // TODO: Move this in to expo/dev-server.\n\n const middleware = await this.getManifestMiddlewareAsync(options);\n\n nativeMiddleware.middleware.use(middleware).use(\n '/symbolicate',\n createSymbolicateMiddleware({\n projectRoot: this.projectRoot,\n compiler,\n logger: nativeMiddleware.logger,\n })\n );\n return nativeMiddleware;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n const { resetDevServer, https, port, mode } = options;\n\n this.urlCreator = this.getUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n Log.debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n Log.debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n let nativeMiddleware: Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>> | null =\n null;\n if (config.devServer?.before) {\n // Create the middleware required for interacting with a native runtime (Expo Go, or a development build).\n nativeMiddleware = await this.createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n });\n // Inject the native manifest middleware.\n const originalBefore = config.devServer.before.bind(config.devServer.before);\n config.devServer.before = (\n app: Application,\n server: WebpackDevServer,\n compiler: webpack.Compiler\n ) => {\n originalBefore(app, server, compiler);\n\n if (nativeMiddleware?.middleware) {\n app.use(nativeMiddleware.middleware);\n }\n };\n }\n const { attachNativeDevServerMiddlewareToDevServer } = this;\n\n const server = new WebpackDevServer(\n // @ts-expect-error: type mismatch -- Webpack types aren't great.\n compiler,\n config.devServer\n );\n // Launch WebpackDevServer.\n server.listen(port, env.WEB_HOST, function (this: http.Server, error) {\n if (nativeMiddleware) {\n attachNativeDevServerMiddlewareToDevServer({\n server: this,\n ...nativeMiddleware,\n });\n }\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = getIpAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: nativeMiddleware?.middleware,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: BundlerStartOptions,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n setMode(env.mode ?? 'development');\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n // @ts-expect-error: types appear to be broken\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n}\n\nfunction setMode(mode: 'development' | 'production' | 'test' | 'none'): void {\n process.env.BABEL_ENV = mode;\n process.env.NODE_ENV = mode;\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n\nasync function clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n}\n"],"names":["getProjectWebpackConfigFilePath","path","Log","assertIsWebpackDevServer","value","sockWrite","CommandError","constructor","name","WebpackBundlerDevServer","BundlerDevServer","broadcastMessage","method","params","instance","server","customMessageSocketBroadcaster","hackyConvertedMessage","sockets","attachNativeDevServerMiddlewareToDevServer","middleware","attachToServer","logger","attachInspectorProxy","LogReporter","messageSocket","debuggerProxy","eventsSocket","broadcast","logReporter","reportEvent","inspectorProxy","projectRoot","isTargetingNative","includes","process","env","EXPO_WEBPACK_PLATFORM","isTargetingWeb","createNativeDevServerMiddleware","port","compiler","options","createDevServerMiddleware","nativeMiddleware","watchFolders","getManifestMiddlewareAsync","use","createSymbolicateMiddleware","getAvailablePortAsync","defaultPort","choosePortAsync","host","WEB_HOST","error","message","startImplementationAsync","config","webpack","importWebpackFromProject","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","mode","urlCreator","getUrlCreator","location","scheme","debug","clearWebProjectCacheAsync","ensureEnvironmentSupportsTLSAsync","catch","loadConfigAsync","log","chalk","devServer","before","originalBefore","bind","app","listen","originalClose","close","callback","err","_host","getIpAddress","protocol","url","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","isImageEditingEnabled","info","setMode","projectWebpackConfig","webpackConfig","require","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","BABEL_ENV","NODE_ENV","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","join","fs","promises","rm","recursive","force"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import { createSymbolicateMiddleware } from '@expo/dev-server/build/webpack/symbolicateMiddleware';\nimport chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'fs';\nimport http from 'http';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getIpAddress } from '../../../utils/ip';\nimport { choosePortAsync } from '../../../utils/port';\nimport { createProgressBar } from '../../../utils/progress';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { compileAsync } from './compile';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\n\nconst debug = require('debug')('expo:start:server:webpack:devServer') as typeof console.log;\n\ntype AnyCompiler = webpack.Compiler | webpack.MultiCompiler;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n // A custom message websocket broadcaster used to send messages to a React Native runtime.\n private customMessageSocketBroadcaster:\n | undefined\n | ((message: string, data?: Record<string, any>) => void);\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // Allow any message on native\n if (this.customMessageSocketBroadcaster) {\n this.customMessageSocketBroadcaster(method, params);\n return;\n }\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n\n private async attachNativeDevServerMiddlewareToDevServer({\n server,\n middleware,\n attachToServer,\n logger,\n }: { server: http.Server } & Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>>) {\n const { attachInspectorProxy, LogReporter } = await import('@expo/dev-server');\n\n // Hook up the React Native WebSockets to the Webpack dev server.\n const { messageSocket, debuggerProxy, eventsSocket } = attachToServer(server);\n\n this.customMessageSocketBroadcaster = messageSocket.broadcast;\n\n const logReporter = new LogReporter(logger);\n logReporter.reportEvent = eventsSocket.reportEvent;\n\n const { inspectorProxy } = attachInspectorProxy(this.projectRoot, {\n middleware,\n server,\n });\n\n return {\n messageSocket,\n eventsSocket,\n debuggerProxy,\n logReporter,\n inspectorProxy,\n };\n }\n\n isTargetingNative(): boolean {\n // Temporary hack while we implement multi-bundler dev server proxy.\n return ['ios', 'android'].includes(process.env.EXPO_WEBPACK_PLATFORM || '');\n }\n\n private async createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n }: {\n port: number;\n compiler: AnyCompiler;\n options: BundlerStartOptions;\n }) {\n if (!this.isTargetingNative()) {\n return null;\n }\n\n const { createDevServerMiddleware } = await import('../middleware/createDevServerMiddleware');\n\n const nativeMiddleware = createDevServerMiddleware(this.projectRoot, {\n port,\n watchFolders: [this.projectRoot],\n });\n // Add manifest middleware to the other middleware.\n // TODO: Move this in to expo/dev-server.\n\n const middleware = await this.getManifestMiddlewareAsync(options);\n\n nativeMiddleware.middleware.use(middleware).use(\n '/symbolicate',\n createSymbolicateMiddleware({\n projectRoot: this.projectRoot,\n compiler,\n logger: nativeMiddleware.logger,\n })\n );\n return nativeMiddleware;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async bundleAsync({ mode, clear }: { mode: 'development' | 'production'; clear: boolean }) {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n\n if (clear) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n const config = await this.loadConfigAsync({\n isImageEditingEnabled: true,\n mode,\n });\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const bar = createProgressBar(chalk`{bold Web} Bundling Javascript [:bar] :percent`, {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n // NOTE(EvanBacon): Add a progress bar to the webpack logger if defined (e.g. not in CI).\n if (bar != null) {\n config.plugins.push(\n new webpack.ProgressPlugin((percent: number) => {\n bar?.update(percent);\n if (percent === 1) {\n bar?.terminate();\n }\n })\n );\n }\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n try {\n await compileAsync(compiler);\n } catch (error: any) {\n Log.error(chalk.red('Failed to compile'));\n throw error;\n } finally {\n bar?.terminate();\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n const { resetDevServer, https, port, mode } = options;\n\n this.urlCreator = this.getUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n let nativeMiddleware: Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>> | null =\n null;\n if (config.devServer?.before) {\n // Create the middleware required for interacting with a native runtime (Expo Go, or a development build).\n nativeMiddleware = await this.createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n });\n // Inject the native manifest middleware.\n const originalBefore = config.devServer.before.bind(config.devServer.before);\n config.devServer.before = (\n app: Application,\n server: WebpackDevServer,\n compiler: webpack.Compiler\n ) => {\n originalBefore(app, server, compiler);\n\n if (nativeMiddleware?.middleware) {\n app.use(nativeMiddleware.middleware);\n }\n };\n }\n const { attachNativeDevServerMiddlewareToDevServer } = this;\n\n const server = new WebpackDevServer(\n // @ts-expect-error: type mismatch -- Webpack types aren't great.\n compiler,\n config.devServer\n );\n // Launch WebpackDevServer.\n server.listen(port, env.WEB_HOST, function (this: http.Server, error) {\n if (nativeMiddleware) {\n attachNativeDevServerMiddlewareToDevServer({\n server: this,\n ...nativeMiddleware,\n });\n }\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = getIpAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: nativeMiddleware?.middleware,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: Pick<BundlerStartOptions, 'mode' | 'isImageEditingEnabled' | 'https'>,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n setMode(env.mode ?? 'development');\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n // @ts-expect-error: types appear to be broken\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n\n protected async clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n ): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n }\n}\n\nfunction setMode(mode: 'development' | 'production' | 'test' | 'none'): void {\n process.env.BABEL_ENV = mode;\n process.env.NODE_ENV = mode;\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n"],"names":["getProjectWebpackConfigFilePath","path","Log","debug","require","assertIsWebpackDevServer","value","sockWrite","CommandError","constructor","name","WebpackBundlerDevServer","BundlerDevServer","broadcastMessage","method","params","instance","server","customMessageSocketBroadcaster","hackyConvertedMessage","sockets","attachNativeDevServerMiddlewareToDevServer","middleware","attachToServer","logger","attachInspectorProxy","LogReporter","messageSocket","debuggerProxy","eventsSocket","broadcast","logReporter","reportEvent","inspectorProxy","projectRoot","isTargetingNative","includes","process","env","EXPO_WEBPACK_PLATFORM","createNativeDevServerMiddleware","port","compiler","options","createDevServerMiddleware","nativeMiddleware","watchFolders","getManifestMiddlewareAsync","use","createSymbolicateMiddleware","getAvailablePortAsync","defaultPort","choosePortAsync","host","WEB_HOST","error","message","bundleAsync","mode","clear","webpack","importWebpackFromProject","clearWebProjectCacheAsync","config","loadConfigAsync","isImageEditingEnabled","plugins","bar","createProgressBar","chalk","width","total","complete","incomplete","push","ProgressPlugin","percent","update","terminate","compileAsync","red","startImplementationAsync","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","urlCreator","getUrlCreator","location","scheme","ensureEnvironmentSupportsTLSAsync","catch","log","devServer","before","originalBefore","bind","app","listen","originalClose","close","callback","err","_host","getIpAddress","protocol","url","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","info","setMode","projectWebpackConfig","webpackConfig","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","join","fs","promises","rm","recursive","force","BABEL_ENV","NODE_ENV"],"mappings":"AAAA;;;;QAoZgBA,+BAA+B,GAA/BA,+BAA+B;AApZH,IAAA,sBAAsD,WAAtD,sDAAsD,CAAA;AAChF,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEV,IAAA,GAAI,kCAAJ,IAAI,EAAA;AAEPC,IAAAA,IAAI,mCAAM,MAAM,EAAZ;AACQ,IAAA,YAAc,kCAAd,cAAc,EAAA;AAI1BC,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACK,IAAA,IAAoB,WAApB,oBAAoB,CAAA;AACX,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AACvB,IAAA,GAAmB,WAAnB,mBAAmB,CAAA;AAChB,IAAA,KAAqB,WAArB,qBAAqB,CAAA;AACnB,IAAA,SAAyB,WAAzB,yBAAyB,CAAA;AACF,IAAA,QAAuB,WAAvB,uBAAuB,CAAA;AACP,IAAA,iBAAqB,WAArB,qBAAqB,CAAA;AACjE,IAAA,QAAW,WAAX,WAAW,CAAA;AAKjC,IAAA,mBAAsB,WAAtB,sBAAsB,CAAA;AACqB,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,qCAAqC,CAAC,AAAsB,AAAC;AAU5F,SAASC,wBAAwB,CAACC,KAAU,EAAqC;IAC/E,IAAI,CAACA,CAAAA,KAAK,QAAW,GAAhBA,KAAAA,CAAgB,GAAhBA,KAAK,CAAEC,SAAS,CAAA,EAAE;YAI2BD,GAAiB;YAAjBA,IAAuB;QAHvE,MAAM,IAAIE,OAAY,aAAA,CACpB,SAAS,EACTF,KAAK,GACD,sCAAsC,GAAG,CAACA,CAAAA,IAAuB,GAAvBA,CAAAA,GAAiB,GAAjBA,KAAK,CAACG,WAAW,SAAM,GAAvBH,KAAAA,CAAuB,GAAvBA,GAAiB,CAAEI,IAAI,YAAvBJ,IAAuB,GAAIA,KAAK,CAAC,GAC3E,qCAAqC,CAC1C,CAAC;KACH;CACF;AAEM,MAAMK,uBAAuB,SAASC,iBAAgB,iBAAA;IAC3D,IAAIF,IAAI,GAAW;QACjB,OAAO,SAAS,CAAC;KAClB;IAOD,AAAOG,gBAAgB,CACrBC,MAAwD,EACxDC,MAA4B,EACtB;YAKmB,GAAa;QAJtC,IAAI,CAAC,IAAI,CAACC,QAAQ,EAAE;YAClB,OAAO;SACR;QAEDX,wBAAwB,CAAC,CAAA,GAAa,GAAb,IAAI,CAACW,QAAQ,SAAQ,GAArB,KAAA,CAAqB,GAArB,GAAa,CAAEC,MAAM,CAAC,CAAC;QAEhD,8BAA8B;QAC9B,IAAI,IAAI,CAACC,8BAA8B,EAAE;YACvC,IAAI,CAACA,8BAA8B,CAACJ,MAAM,EAAEC,MAAM,CAAC,CAAC;YACpD,OAAO;SACR;QAED,2CAA2C;QAC3C,wGAAwG;QACxG,gFAAgF;QAChF,MAAMI,qBAAqB,GAAGL,MAAM,KAAK,QAAQ,GAAG,iBAAiB,GAAGA,MAAM,AAAC;QAE/E,IAAI,CAACE,QAAQ,CAACC,MAAM,CAACV,SAAS,CAAC,IAAI,CAACS,QAAQ,CAACC,MAAM,CAACG,OAAO,EAAED,qBAAqB,EAAEJ,MAAM,CAAC,CAAC;KAC7F;IAED,MAAcM,0CAA0C,CAAC,EACvDJ,MAAM,CAAA,EACNK,UAAU,CAAA,EACVC,cAAc,CAAA,EACdC,MAAM,CAAA,EACqF,EAAE;QAC7F,MAAM,EAAEC,oBAAoB,CAAA,EAAEC,WAAW,CAAA,EAAE,GAAG,MAAM;mDAAO,kBAAkB;UAAC,AAAC;QAE/E,iEAAiE;QACjE,MAAM,EAAEC,aAAa,CAAA,EAAEC,aAAa,CAAA,EAAEC,YAAY,CAAA,EAAE,GAAGN,cAAc,CAACN,MAAM,CAAC,AAAC;QAE9E,IAAI,CAACC,8BAA8B,GAAGS,aAAa,CAACG,SAAS,CAAC;QAE9D,MAAMC,WAAW,GAAG,IAAIL,WAAW,CAACF,MAAM,CAAC,AAAC;QAC5CO,WAAW,CAACC,WAAW,GAAGH,YAAY,CAACG,WAAW,CAAC;QAEnD,MAAM,EAAEC,cAAc,CAAA,EAAE,GAAGR,oBAAoB,CAAC,IAAI,CAACS,WAAW,EAAE;YAChEZ,UAAU;YACVL,MAAM;SACP,CAAC,AAAC;QAEH,OAAO;YACLU,aAAa;YACbE,YAAY;YACZD,aAAa;YACbG,WAAW;YACXE,cAAc;SACf,CAAC;KACH;IAEDE,iBAAiB,GAAY;QAC3B,oEAAoE;QACpE,OAAO;YAAC,KAAK;YAAE,SAAS;SAAC,CAACC,QAAQ,CAACC,OAAO,CAACC,GAAG,CAACC,qBAAqB,IAAI,EAAE,CAAC,CAAC;KAC7E;IAED,MAAcC,+BAA+B,CAAC,EAC5CC,IAAI,CAAA,EACJC,QAAQ,CAAA,EACRC,OAAO,CAAA,EAKR,EAAE;QACD,IAAI,CAAC,IAAI,CAACR,iBAAiB,EAAE,EAAE;YAC7B,OAAO,IAAI,CAAC;SACb;QAED,MAAM,EAAES,yBAAyB,CAAA,EAAE,GAAG,MAAM;mDAAO,yCAAyC;UAAC,AAAC;QAE9F,MAAMC,gBAAgB,GAAGD,yBAAyB,CAAC,IAAI,CAACV,WAAW,EAAE;YACnEO,IAAI;YACJK,YAAY,EAAE;gBAAC,IAAI,CAACZ,WAAW;aAAC;SACjC,CAAC,AAAC;QACH,mDAAmD;QACnD,yCAAyC;QAEzC,MAAMZ,UAAU,GAAG,MAAM,IAAI,CAACyB,0BAA0B,CAACJ,OAAO,CAAC,AAAC;QAElEE,gBAAgB,CAACvB,UAAU,CAAC0B,GAAG,CAAC1B,UAAU,CAAC,CAAC0B,GAAG,CAC7C,cAAc,EACdC,CAAAA,GAAAA,sBAA2B,AAIzB,CAAA,4BAJyB,CAAC;YAC1Bf,WAAW,EAAE,IAAI,CAACA,WAAW;YAC7BQ,QAAQ;YACRlB,MAAM,EAAEqB,gBAAgB,CAACrB,MAAM;SAChC,CAAC,CACH,CAAC;QACF,OAAOqB,gBAAgB,CAAC;KACzB;IAED,MAAcK,qBAAqB,CAACP,OAAiC,EAAmB;QACtF,IAAI;gBACkBA,GAAoB;YAAxC,MAAMQ,WAAW,GAAGR,CAAAA,GAAoB,GAApBA,OAAO,QAAa,GAApBA,KAAAA,CAAoB,GAApBA,OAAO,CAAEQ,WAAW,YAApBR,GAAoB,GAAI,KAAK,AAAC;YAClD,MAAMF,IAAI,GAAG,MAAMW,CAAAA,GAAAA,KAAe,AAGhC,CAAA,gBAHgC,CAAC,IAAI,CAAClB,WAAW,EAAE;gBACnDiB,WAAW;gBACXE,IAAI,EAAEf,IAAG,IAAA,CAACgB,QAAQ;aACnB,CAAC,AAAC;YACH,IAAI,CAACb,IAAI,EAAE;gBACT,MAAM,IAAIjC,OAAY,aAAA,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE2C,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;aAC/E;YACD,OAAOV,IAAI,CAAC;SACb,CAAC,OAAOc,KAAK,EAAO;YACnB,MAAM,IAAI/C,OAAY,aAAA,CAAC,eAAe,EAAE+C,KAAK,CAACC,OAAO,CAAC,CAAC;SACxD;KACF;IAED,MAAMC,WAAW,CAAC,EAAEC,IAAI,CAAA,EAAEC,KAAK,CAAA,EAA0D,EAAE;QACzF,gCAAgC;QAChC,MAAMC,OAAO,GAAGC,CAAAA,GAAAA,mBAAwB,AAAkB,CAAA,yBAAlB,CAAC,IAAI,CAAC3B,WAAW,CAAC,AAAC;QAE3D,IAAIyB,KAAK,EAAE;YACT,MAAM,IAAI,CAACG,yBAAyB,CAAC,IAAI,CAAC5B,WAAW,EAAEwB,IAAI,CAAC,CAAC;SAC9D;QAED,MAAMK,MAAM,GAAG,MAAM,IAAI,CAACC,eAAe,CAAC;YACxCC,qBAAqB,EAAE,IAAI;YAC3BP,IAAI;SACL,CAAC,AAAC;QAEH,IAAI,CAACK,MAAM,CAACG,OAAO,EAAE;YACnBH,MAAM,CAACG,OAAO,GAAG,EAAE,CAAC;SACrB;QAED,MAAMC,GAAG,GAAGC,CAAAA,GAAAA,SAAiB,AAM3B,CAAA,kBAN2B,CAACC,MAAK,QAAA,CAAC,8CAA8C,CAAC,EAAE;YACnFC,KAAK,EAAE,EAAE;YACTC,KAAK,EAAE,GAAG;YACVZ,KAAK,EAAE,IAAI;YACXa,QAAQ,EAAE,GAAG;YACbC,UAAU,EAAE,GAAG;SAChB,CAAC,AAAC;QAEH,yFAAyF;QACzF,IAAIN,GAAG,IAAI,IAAI,EAAE;YACfJ,MAAM,CAACG,OAAO,CAACQ,IAAI,CACjB,IAAId,OAAO,CAACe,cAAc,CAAC,CAACC,OAAe,GAAK;gBAC9CT,GAAG,QAAQ,GAAXA,KAAAA,CAAW,GAAXA,GAAG,CAAEU,MAAM,CAACD,OAAO,CAAC,AApM9B,CAoM+B;gBACrB,IAAIA,OAAO,KAAK,CAAC,EAAE;oBACjBT,GAAG,QAAW,GAAdA,KAAAA,CAAc,GAAdA,GAAG,CAAEW,SAAS,EAAE,AAtM5B,CAsM6B;iBAClB;aACF,CAAC,CACH,CAAC;SACH;QAED,qEAAqE;QACrE,MAAMpC,QAAQ,GAAGkB,OAAO,CAACG,MAAM,CAAC,AAAC;QAEjC,IAAI;YACF,MAAMgB,CAAAA,GAAAA,QAAY,AAAU,CAAA,aAAV,CAACrC,QAAQ,CAAC,CAAC;SAC9B,CAAC,OAAOa,KAAK,EAAO;YACnBrD,GAAG,CAACqD,KAAK,CAACc,MAAK,QAAA,CAACW,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC1C,MAAMzB,KAAK,CAAC;SACb,QAAS;YACRY,GAAG,QAAW,GAAdA,KAAAA,CAAc,GAAdA,GAAG,CAAEW,SAAS,EAAE,AArNtB,CAqNuB;SAClB;KACF;IAED,MAAgBG,wBAAwB,CACtCtC,OAA4B,EACA;YAyCxBoB,GAAgB;QAxCpB,gCAAgC;QAChC,MAAMH,OAAO,GAAGC,CAAAA,GAAAA,mBAAwB,AAAkB,CAAA,yBAAlB,CAAC,IAAI,CAAC3B,WAAW,CAAC,AAAC;QAC3D,MAAMgD,gBAAgB,GAAGC,CAAAA,GAAAA,mBAAiC,AAAkB,CAAA,kCAAlB,CAAC,IAAI,CAACjD,WAAW,CAAC,AAAC;QAE7E,MAAM,IAAI,CAACkD,SAAS,EAAE,CAAC;QAEvBzC,OAAO,CAACF,IAAI,GAAG,MAAM,IAAI,CAACS,qBAAqB,CAAC;YAC9CC,WAAW,EAAER,OAAO,CAACF,IAAI;SAC1B,CAAC,CAAC;QACH,MAAM,EAAE4C,cAAc,CAAA,EAAEC,KAAK,CAAA,EAAE7C,IAAI,CAAA,EAAEiB,IAAI,CAAA,EAAE,GAAGf,OAAO,AAAC;QAEtD,IAAI,CAAC4C,UAAU,GAAG,IAAI,CAACC,aAAa,CAAC;YACnC/C,IAAI;YACJgD,QAAQ,EAAE;gBACRC,MAAM,EAAEJ,KAAK,GAAG,OAAO,GAAG,MAAM;aACjC;SACF,CAAC,CAAC;QAEHnF,KAAK,CAAC,4BAA4B,GAAGsC,IAAI,CAAC,CAAC;QAE3C,IAAI4C,cAAc,EAAE;YAClB,MAAM,IAAI,CAACvB,yBAAyB,CAAC,IAAI,CAAC5B,WAAW,EAAEwB,IAAI,CAAC,CAAC;SAC9D;QAED,IAAI4B,KAAK,EAAE;YACTnF,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACjD,MAAMwF,CAAAA,GAAAA,IAAiC,AAAkB,CAAA,kCAAlB,CAAC,IAAI,CAACzD,WAAW,CAAC,CAAC0D,KAAK,CAAC,CAACrC,KAAK,GAAK;gBACzErD,GAAG,CAACqD,KAAK,CAAC,CAAC,iCAAiC,EAAEA,KAAK,CAAC,CAAC,CAAC,CAAC;aACxD,CAAC,CAAC;SACJ;QAED,MAAMQ,MAAM,GAAG,MAAM,IAAI,CAACC,eAAe,CAACrB,OAAO,CAAC,AAAC;QAEnDzC,GAAG,CAAC2F,GAAG,CAACxB,MAAK,QAAA,CAAC,yBAAyB,EAAE5B,IAAI,CAAC,eAAe,EAAEiB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE9E,qEAAqE;QACrE,MAAMhB,SAAQ,GAAGkB,OAAO,CAACG,MAAM,CAAC,AAAC;QAEjC,IAAIlB,gBAAgB,GAClB,IAAI,AAAC;QACP,IAAIkB,CAAAA,GAAgB,GAAhBA,MAAM,CAAC+B,SAAS,SAAQ,GAAxB/B,KAAAA,CAAwB,GAAxBA,GAAgB,CAAEgC,MAAM,EAAE;YAC5B,0GAA0G;YAC1GlD,gBAAgB,GAAG,MAAM,IAAI,CAACL,+BAA+B,CAAC;gBAC5DC,IAAI;gBACJC,QAAQ,EAARA,SAAQ;gBACRC,OAAO;aACR,CAAC,CAAC;YACH,yCAAyC;YACzC,MAAMqD,cAAc,GAAGjC,MAAM,CAAC+B,SAAS,CAACC,MAAM,CAACE,IAAI,CAAClC,MAAM,CAAC+B,SAAS,CAACC,MAAM,CAAC,AAAC;YAC7EhC,MAAM,CAAC+B,SAAS,CAACC,MAAM,GAAG,CACxBG,GAAgB,EAChBjF,MAAwB,EACxByB,QAA0B,GACvB;gBACHsD,cAAc,CAACE,GAAG,EAAEjF,MAAM,EAAEyB,QAAQ,CAAC,CAAC;gBAEtC,IAAIG,gBAAgB,QAAY,GAA5BA,KAAAA,CAA4B,GAA5BA,gBAAgB,CAAEvB,UAAU,EAAE;oBAChC4E,GAAG,CAAClD,GAAG,CAACH,gBAAgB,CAACvB,UAAU,CAAC,CAAC;iBACtC;aACF,CAAC;SACH;QACD,MAAM,EAAED,0CAA0C,CAAA,EAAE,GAAG,IAAI,AAAC;QAE5D,MAAMJ,OAAM,GAAG,IAAIiE,gBAAgB,CACjC,iEAAiE;QACjExC,SAAQ,EACRqB,MAAM,CAAC+B,SAAS,CACjB,AAAC;QACF,2BAA2B;QAC3B7E,OAAM,CAACkF,MAAM,CAAC1D,IAAI,EAAEH,IAAG,IAAA,CAACgB,QAAQ,EAAE,SAA6BC,KAAK,EAAE;YACpE,IAAIV,gBAAgB,EAAE;gBACpBxB,0CAA0C,CAAC;oBACzCJ,MAAM,EAAE,IAAI;oBACZ,GAAG4B,gBAAgB;iBACpB,CAAC,CAAC;aACJ;YACD,IAAIU,KAAK,EAAE;gBACTrD,GAAG,CAACqD,KAAK,CAACA,KAAK,CAACC,OAAO,CAAC,CAAC;aAC1B;SACF,CAAC,CAAC;QAEH,qEAAqE;QACrE,MAAM4C,aAAa,GAAGnF,OAAM,CAACoF,KAAK,CAACJ,IAAI,CAAChF,OAAM,CAAC,AAAC;QAEhDA,OAAM,CAACoF,KAAK,GAAG,CAACC,QAAgC,GAAK;YACnD,OAAOF,aAAa,CAAC,CAACG,GAAW,GAAK;gBACpC,IAAI,CAACvF,QAAQ,GAAG,IAAI,CAAC;gBACrBsF,QAAQ,QAAO,GAAfA,KAAAA,CAAe,GAAfA,QAAQ,CAAGC,GAAG,CAAC,AAnTvB,CAmTwB;aACjB,CAAC,CAAC;SACJ,CAAC;QAEF,MAAMC,KAAK,GAAGC,CAAAA,GAAAA,GAAY,AAAE,CAAA,aAAF,EAAE,AAAC;QAC7B,MAAMC,QAAQ,GAAGpB,KAAK,GAAG,OAAO,GAAG,MAAM,AAAC;QAE1C,OAAO;YACL,kBAAkB;YAClBrE,MAAM,EAANA,OAAM;YACN,WAAW;YACXwE,QAAQ,EAAE;gBACRkB,GAAG,EAAE,CAAC,EAAED,QAAQ,CAAC,GAAG,EAAEF,KAAK,CAAC,CAAC,EAAE/D,IAAI,CAAC,CAAC;gBACrCA,IAAI;gBACJiE,QAAQ;gBACRrD,IAAI,EAAEmD,KAAK;aACZ;YACDlF,UAAU,EAAEuB,gBAAgB,QAAY,GAA5BA,KAAAA,CAA4B,GAA5BA,gBAAgB,CAAEvB,UAAU;YACxC,6BAA6B;YAC7BK,aAAa,EAAE;gBACbG,SAAS,EAAE,IAAI,CAACjB,gBAAgB;aACjC;SACF,CAAC;KACH;IAED,oDAAoD,CACpD+F,wBAAwB,GAAkB;YAGtC,GAGC;QALH,4DAA4D;QAC5D,OACE,CAAA,GAGC,GAHD,IAAI,CAACC,kBAAkB,EAAE,CAACC,MAAM,CAC9B,CAACC,IAAI,EAAEC,QAAQ,GAAKD,IAAI,IAAIE,YAAW,QAAA,CAACC,MAAM,CAAC,IAAI,CAAChF,WAAW,EAAE8E,QAAQ,CAAC;QAAA,EAC1E,IAAI,CACL,YAHD,GAGC,GAAI,IAAI,CACT;KACH;IAED,MAAMhD,eAAe,CACnBrB,OAA8E,EAC9EwE,IAAe,EACgB;QAC/B,sCAAsC;QAEtC,MAAM7E,GAAG,GAAG;YACVJ,WAAW,EAAE,IAAI,CAACA,WAAW;YAC7BkF,GAAG,EAAE,CAAC,CAACzE,OAAO,CAACsB,qBAAqB;YACpC,8CAA8C;YAC9CzC,MAAM,EAAE;gBACN6F,IAAI,IAAG,EAAE;aACV;YACD3D,IAAI,EAAEf,OAAO,CAACe,IAAI;YAClB4B,KAAK,EAAE3C,OAAO,CAAC2C,KAAK;SACrB,AAAC;YACMhD,KAAQ;QAAhBgF,OAAO,CAAChF,CAAAA,KAAQ,GAARA,GAAG,CAACoB,IAAI,YAARpB,KAAQ,GAAI,aAAa,CAAC,CAAC;QACnC,4DAA4D;QAC5D,MAAMiF,oBAAoB,GAAG,IAAI,CAACX,wBAAwB,EAAE,AAAC;QAC7D,IAAI7C,MAAM,AAAsB,AAAC;QACjC,IAAIwD,oBAAoB,EAAE;YACxB,MAAMC,aAAa,GAAGpH,OAAO,CAACmH,oBAAoB,CAAC,AAAC;YACpD,IAAI,OAAOC,aAAa,KAAK,UAAU,EAAE;gBACvCzD,MAAM,GAAG,MAAMyD,aAAa,CAAClF,GAAG,EAAE6E,IAAI,CAAC,CAAC;aACzC,MAAM;gBACLpD,MAAM,GAAGyD,aAAa,CAAC;aACxB;SACF,MAAM;YACL,+CAA+C;YAC/C,MAAMC,sBAAsB,GAAGC,CAAAA,GAAAA,mBAAkC,AAAkB,CAAA,mCAAlB,CAAC,IAAI,CAACxF,WAAW,CAAC,AAAC;YACpF,8CAA8C;YAC9C6B,MAAM,GAAG,MAAM0D,sBAAsB,CAACnF,GAAG,EAAE6E,IAAI,CAAC,CAAC;SAClD;QACD,OAAOpD,MAAM,CAAC;KACf;IAED,AAAU8C,kBAAkB,GAAa;QACvC,OAAO;YAAC,qBAAqB;SAAC,CAAC;KAChC;IAED,MAAgB/C,yBAAyB,CACvC5B,WAAmB,EACnBwB,IAAY,GAAG,aAAa,EACb;QACfxD,GAAG,CAAC2F,GAAG,CAACxB,MAAK,QAAA,CAACsD,GAAG,CAAC,CAAC,iBAAiB,EAAEjE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAElE,MAAMkE,GAAG,GAAG,MAAMC,CAAAA,GAAAA,QAAwC,AAAa,CAAA,yCAAb,CAAC3F,WAAW,CAAC,AAAC;QACxE,MAAM4F,WAAW,GAAG7H,IAAI,CAAC8H,IAAI,CAACH,GAAG,EAAE,WAAW,EAAElE,IAAI,CAAC,AAAC;QACtD,IAAI;YACF,MAAMsE,GAAE,QAAA,CAACC,QAAQ,CAACC,EAAE,CAACJ,WAAW,EAAE;gBAAEK,SAAS,EAAE,IAAI;gBAAEC,KAAK,EAAE,IAAI;aAAE,CAAC,CAAC;SACrE,CAAC,OAAO7E,KAAK,EAAO;YACnBrD,GAAG,CAACqD,KAAK,CAAC,CAAC,gBAAgB,EAAEG,IAAI,CAAC,sBAAsB,EAAEH,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC5E;KACF;CACF;QA9VY7C,uBAAuB,GAAvBA,uBAAuB;AAgWpC,SAAS2G,OAAO,CAAC5D,IAAoD,EAAQ;IAC3ErB,OAAO,CAACC,GAAG,CAAC+F,SAAS,GAAG3E,IAAI,CAAC;IAC7BrB,OAAO,CAACC,GAAG,CAACgG,QAAQ,GAAG5E,IAAI,CAAC;CAC7B;AAEM,SAAS1D,+BAA+B,CAACkC,WAAmB,EAAE;IACnE,OAAO+E,YAAW,QAAA,CAACC,MAAM,CAAChF,WAAW,EAAE,qBAAqB,CAAC,CAAC;CAC/D"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.compileAsync = compileAsync;
6
+ var _chalk = _interopRequireDefault(require("chalk"));
7
+ var _util = require("util");
8
+ var Log = _interopRequireWildcard(require("../../../log"));
9
+ var _errors = require("../../../utils/errors");
10
+ var _formatWebpackMessages = require("./formatWebpackMessages");
11
+ function _interopRequireDefault(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ function _interopRequireWildcard(obj) {
17
+ if (obj && obj.__esModule) {
18
+ return obj;
19
+ } else {
20
+ var newObj = {};
21
+ if (obj != null) {
22
+ for(var key in obj){
23
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
24
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
25
+ if (desc.get || desc.set) {
26
+ Object.defineProperty(newObj, key, desc);
27
+ } else {
28
+ newObj[key] = obj[key];
29
+ }
30
+ }
31
+ }
32
+ }
33
+ newObj.default = obj;
34
+ return newObj;
35
+ }
36
+ }
37
+ async function compileAsync(compiler) {
38
+ const stats = await (0, _util).promisify(compiler.run.bind(compiler))();
39
+ const { errors , warnings } = (0, _formatWebpackMessages).formatWebpackMessages(stats.toJson({
40
+ all: false,
41
+ warnings: true,
42
+ errors: true
43
+ }));
44
+ if (errors == null ? void 0 : errors.length) {
45
+ // Only keep the first error. Others are often indicative
46
+ // of the same problem, but confuse the reader with noise.
47
+ if (errors.length > 1) {
48
+ errors.length = 1;
49
+ }
50
+ throw new _errors.CommandError("WEBPACK_BUNDLE", errors.join("\n\n"));
51
+ }
52
+ if (warnings == null ? void 0 : warnings.length) {
53
+ Log.warn(_chalk.default.yellow("Compiled with warnings\n"));
54
+ Log.warn(warnings.join("\n\n"));
55
+ } else {
56
+ Log.log(_chalk.default.green("Compiled successfully"));
57
+ }
58
+ return {
59
+ errors,
60
+ warnings
61
+ };
62
+ }
63
+
64
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/compile.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { promisify } from 'util';\nimport type webpack from 'webpack';\n\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\nimport { formatWebpackMessages } from './formatWebpackMessages';\n\n/** Run the `webpack` compiler and format errors/warnings. */\nexport async function compileAsync(compiler: webpack.Compiler) {\n const stats = await promisify(compiler.run.bind(compiler))();\n const { errors, warnings } = formatWebpackMessages(\n stats.toJson({ all: false, warnings: true, errors: true })\n );\n if (errors?.length) {\n // Only keep the first error. Others are often indicative\n // of the same problem, but confuse the reader with noise.\n if (errors.length > 1) {\n errors.length = 1;\n }\n throw new CommandError('WEBPACK_BUNDLE', errors.join('\\n\\n'));\n }\n if (warnings?.length) {\n Log.warn(chalk.yellow('Compiled with warnings\\n'));\n Log.warn(warnings.join('\\n\\n'));\n } else {\n Log.log(chalk.green('Compiled successfully'));\n }\n\n return { errors, warnings };\n}\n"],"names":["compileAsync","Log","compiler","stats","promisify","run","bind","errors","warnings","formatWebpackMessages","toJson","all","length","CommandError","join","warn","chalk","yellow","log","green"],"mappings":"AAAA;;;;QASsBA,YAAY,GAAZA,YAAY;AAThB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACC,IAAA,KAAM,WAAN,MAAM,CAAA;AAGpBC,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACc,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AACd,IAAA,sBAAyB,WAAzB,yBAAyB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGxD,eAAeD,YAAY,CAACE,QAA0B,EAAE;IAC7D,MAAMC,KAAK,GAAG,MAAMC,CAAAA,GAAAA,KAAS,AAA6B,CAAA,UAA7B,CAACF,QAAQ,CAACG,GAAG,CAACC,IAAI,CAACJ,QAAQ,CAAC,CAAC,EAAE,AAAC;IAC7D,MAAM,EAAEK,MAAM,CAAA,EAAEC,QAAQ,CAAA,EAAE,GAAGC,CAAAA,GAAAA,sBAAqB,AAEjD,CAAA,sBAFiD,CAChDN,KAAK,CAACO,MAAM,CAAC;QAAEC,GAAG,EAAE,KAAK;QAAEH,QAAQ,EAAE,IAAI;QAAED,MAAM,EAAE,IAAI;KAAE,CAAC,CAC3D,AAAC;IACF,IAAIA,MAAM,QAAQ,GAAdA,KAAAA,CAAc,GAAdA,MAAM,CAAEK,MAAM,EAAE;QAClB,yDAAyD;QACzD,0DAA0D;QAC1D,IAAIL,MAAM,CAACK,MAAM,GAAG,CAAC,EAAE;YACrBL,MAAM,CAACK,MAAM,GAAG,CAAC,CAAC;SACnB;QACD,MAAM,IAAIC,OAAY,aAAA,CAAC,gBAAgB,EAAEN,MAAM,CAACO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/D;IACD,IAAIN,QAAQ,QAAQ,GAAhBA,KAAAA,CAAgB,GAAhBA,QAAQ,CAAEI,MAAM,EAAE;QACpBX,GAAG,CAACc,IAAI,CAACC,MAAK,QAAA,CAACC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACnDhB,GAAG,CAACc,IAAI,CAACP,QAAQ,CAACM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACjC,MAAM;QACLb,GAAG,CAACiB,GAAG,CAACF,MAAK,QAAA,CAACG,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;KAC/C;IAED,OAAO;QAAEZ,MAAM;QAAEC,QAAQ;KAAE,CAAC;CAC7B"}
@@ -18,6 +18,7 @@ var _startInterface = require("./interface/startInterface");
18
18
  var _resolveOptions = require("./resolveOptions");
19
19
  var _devServerManager = require("./server/DevServerManager");
20
20
  var _openPlatforms = require("./server/openPlatforms");
21
+ var _platformBundlers = require("./server/platformBundlers");
21
22
  function _interopRequireDefault(obj) {
22
23
  return obj && obj.__esModule ? obj : {
23
24
  default: obj
@@ -44,7 +45,7 @@ function _interopRequireWildcard(obj) {
44
45
  return newObj;
45
46
  }
46
47
  }
47
- async function getMultiBundlerStartOptions(projectRoot, { forceManifestType , ...options }, settings) {
48
+ async function getMultiBundlerStartOptions(projectRoot, { forceManifestType , ...options }, settings, platformBundlers) {
48
49
  var _privateKeyPath;
49
50
  const commonOptions = {
50
51
  mode: options.dev ? "development" : "production",
@@ -61,25 +62,27 @@ async function getMultiBundlerStartOptions(projectRoot, { forceManifestType , ..
61
62
  }
62
63
  };
63
64
  const multiBundlerSettings = await (0, _resolveOptions).resolvePortsAsync(projectRoot, options, settings);
64
- const multiBundlerStartOptions = [];
65
- if (options.web || settings.webOnly) {
66
- multiBundlerStartOptions.push({
67
- type: "webpack",
68
- options: {
69
- ...commonOptions,
70
- port: multiBundlerSettings.webpackPort
71
- }
72
- });
65
+ const optionalBundlers = {
66
+ ...platformBundlers
67
+ };
68
+ // In the default case, we don't want to start multiple bundlers since this is
69
+ // a bit slower. Our priority (for legacy) is native platforms.
70
+ if (!options.web) {
71
+ delete optionalBundlers["web"];
73
72
  }
74
- if (!settings.webOnly) {
75
- multiBundlerStartOptions.push({
76
- type: "metro",
73
+ const bundlers = [
74
+ ...new Set(Object.values(optionalBundlers))
75
+ ];
76
+ const multiBundlerStartOptions = bundlers.map((bundler)=>{
77
+ const port = bundler === "webpack" ? multiBundlerSettings.webpackPort : multiBundlerSettings.metroPort;
78
+ return {
79
+ type: bundler,
77
80
  options: {
78
81
  ...commonOptions,
79
- port: multiBundlerSettings.metroPort
82
+ port
80
83
  }
81
- });
82
- }
84
+ };
85
+ });
83
86
  return [
84
87
  commonOptions,
85
88
  multiBundlerStartOptions
@@ -88,13 +91,14 @@ async function getMultiBundlerStartOptions(projectRoot, { forceManifestType , ..
88
91
  async function startAsync(projectRoot, options, settings) {
89
92
  Log.log(_chalk.default.gray(`Starting project at ${projectRoot}`));
90
93
  const { exp , pkg } = (0, _profile).profile(_config.getConfig)(projectRoot);
94
+ const platformBundlers = (0, _platformBundlers).getPlatformBundlers(exp);
91
95
  if (!options.forceManifestType) {
92
96
  var ref;
93
97
  const easUpdatesUrlRegex = /^https:\/\/(staging-)?u\.expo\.dev/;
94
98
  const isEasUpdatesUrl = ((ref = exp.updates) == null ? void 0 : ref.url) ? easUpdatesUrlRegex.test(exp.updates.url) : false;
95
99
  options.forceManifestType = isEasUpdatesUrl ? "expo-updates" : "classic";
96
100
  }
97
- const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(projectRoot, options, settings);
101
+ const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(projectRoot, options, settings, platformBundlers);
98
102
  const devServerManager = new _devServerManager.DevServerManager(projectRoot, defaultOptions);
99
103
  // Validations
100
104
  if (options.web || settings.webOnly) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/start/startAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport getDevClientProperties from '../utils/analytics/getDevClientProperties';\nimport { logEvent } from '../utils/analytics/rudderstackClient';\nimport { env } from '../utils/env';\nimport { installExitHooks } from '../utils/exit';\nimport { profile } from '../utils/profile';\nimport { validateDependenciesVersionsAsync } from './doctor/dependencies/validateDependenciesVersions';\nimport { TypeScriptProjectPrerequisite } from './doctor/typescript/TypeScriptProjectPrerequisite';\nimport { WebSupportProjectPrerequisite } from './doctor/web/WebSupportProjectPrerequisite';\nimport { startInterfaceAsync } from './interface/startInterface';\nimport { Options, resolvePortsAsync } from './resolveOptions';\nimport { BundlerStartOptions } from './server/BundlerDevServer';\nimport { DevServerManager, MultiBundlerStartOptions } from './server/DevServerManager';\nimport { openPlatformsAsync } from './server/openPlatforms';\n\nasync function getMultiBundlerStartOptions(\n projectRoot: string,\n { forceManifestType, ...options }: Options,\n settings: { webOnly?: boolean }\n): Promise<[BundlerStartOptions, MultiBundlerStartOptions]> {\n const commonOptions: BundlerStartOptions = {\n mode: options.dev ? 'development' : 'production',\n devClient: options.devClient,\n forceManifestType,\n privateKeyPath: options.privateKeyPath ?? undefined,\n https: options.https,\n maxWorkers: options.maxWorkers,\n resetDevServer: options.clear,\n minify: options.minify,\n location: {\n hostType: options.host,\n scheme: options.scheme,\n },\n };\n const multiBundlerSettings = await resolvePortsAsync(projectRoot, options, settings);\n\n const multiBundlerStartOptions: MultiBundlerStartOptions = [];\n\n if (options.web || settings.webOnly) {\n multiBundlerStartOptions.push({\n type: 'webpack',\n options: {\n ...commonOptions,\n port: multiBundlerSettings.webpackPort,\n },\n });\n }\n\n if (!settings.webOnly) {\n multiBundlerStartOptions.push({\n type: 'metro',\n options: {\n ...commonOptions,\n port: multiBundlerSettings.metroPort,\n },\n });\n }\n\n return [commonOptions, multiBundlerStartOptions];\n}\n\nexport async function startAsync(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean }\n) {\n Log.log(chalk.gray(`Starting project at ${projectRoot}`));\n\n const { exp, pkg } = profile(getConfig)(projectRoot);\n\n if (!options.forceManifestType) {\n const easUpdatesUrlRegex = /^https:\\/\\/(staging-)?u\\.expo\\.dev/;\n const isEasUpdatesUrl = exp.updates?.url ? easUpdatesUrlRegex.test(exp.updates.url) : false;\n options.forceManifestType = isEasUpdatesUrl ? 'expo-updates' : 'classic';\n }\n\n const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(\n projectRoot,\n options,\n settings\n );\n\n const devServerManager = new DevServerManager(projectRoot, defaultOptions);\n\n // Validations\n\n if (options.web || settings.webOnly) {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n }\n\n await devServerManager.ensureProjectPrerequisiteAsync(TypeScriptProjectPrerequisite);\n\n if (!settings.webOnly && !options.devClient) {\n await profile(validateDependenciesVersionsAsync)(projectRoot, exp, pkg);\n }\n\n // Some tracking thing\n\n if (options.devClient) {\n track(projectRoot, exp);\n }\n\n await profile(devServerManager.startAsync.bind(devServerManager))(startOptions);\n\n // Open project on devices.\n await profile(openPlatformsAsync)(devServerManager, options);\n\n // Present the Terminal UI.\n if (!env.CI) {\n await profile(startInterfaceAsync)(devServerManager, {\n platforms: exp.platforms ?? ['ios', 'android', 'web'],\n });\n } else {\n // Display the server location in CI...\n const url = devServerManager.getDefaultDevServer()?.getDevServerUrl();\n if (url) {\n Log.log(chalk`Waiting on {underline ${url}}`);\n }\n }\n\n // Final note about closing the server.\n const logLocation = settings.webOnly ? 'in the browser console' : 'below';\n Log.log(\n chalk`Logs for your project will appear ${logLocation}.${\n env.CI ? '' : chalk.dim(` Press Ctrl+C to exit.`)\n }`\n );\n}\n\nfunction track(projectRoot: string, exp: ExpoConfig) {\n logEvent('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n installExitHooks(() => {\n logEvent('dev client start command', {\n status: 'finished',\n ...getDevClientProperties(projectRoot, exp),\n });\n // UnifiedAnalytics.flush();\n });\n}\n"],"names":["startAsync","Log","getMultiBundlerStartOptions","projectRoot","forceManifestType","options","settings","commonOptions","mode","dev","devClient","privateKeyPath","undefined","https","maxWorkers","resetDevServer","clear","minify","location","hostType","host","scheme","multiBundlerSettings","resolvePortsAsync","multiBundlerStartOptions","web","webOnly","push","type","port","webpackPort","metroPort","log","chalk","gray","exp","pkg","profile","getConfig","easUpdatesUrlRegex","isEasUpdatesUrl","updates","url","test","defaultOptions","startOptions","devServerManager","DevServerManager","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","TypeScriptProjectPrerequisite","validateDependenciesVersionsAsync","track","bind","openPlatformsAsync","env","CI","startInterfaceAsync","platforms","getDefaultDevServer","getDevServerUrl","logLocation","dim","logEvent","status","getDevClientProperties","installExitHooks"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/start/startAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport getDevClientProperties from '../utils/analytics/getDevClientProperties';\nimport { logEvent } from '../utils/analytics/rudderstackClient';\nimport { env } from '../utils/env';\nimport { installExitHooks } from '../utils/exit';\nimport { profile } from '../utils/profile';\nimport { validateDependenciesVersionsAsync } from './doctor/dependencies/validateDependenciesVersions';\nimport { TypeScriptProjectPrerequisite } from './doctor/typescript/TypeScriptProjectPrerequisite';\nimport { WebSupportProjectPrerequisite } from './doctor/web/WebSupportProjectPrerequisite';\nimport { startInterfaceAsync } from './interface/startInterface';\nimport { Options, resolvePortsAsync } from './resolveOptions';\nimport { BundlerStartOptions } from './server/BundlerDevServer';\nimport { DevServerManager, MultiBundlerStartOptions } from './server/DevServerManager';\nimport { openPlatformsAsync } from './server/openPlatforms';\nimport { getPlatformBundlers, PlatformBundlers } from './server/platformBundlers';\n\nasync function getMultiBundlerStartOptions(\n projectRoot: string,\n { forceManifestType, ...options }: Options,\n settings: { webOnly?: boolean },\n platformBundlers: PlatformBundlers\n): Promise<[BundlerStartOptions, MultiBundlerStartOptions]> {\n const commonOptions: BundlerStartOptions = {\n mode: options.dev ? 'development' : 'production',\n devClient: options.devClient,\n forceManifestType,\n privateKeyPath: options.privateKeyPath ?? undefined,\n https: options.https,\n maxWorkers: options.maxWorkers,\n resetDevServer: options.clear,\n minify: options.minify,\n location: {\n hostType: options.host,\n scheme: options.scheme,\n },\n };\n const multiBundlerSettings = await resolvePortsAsync(projectRoot, options, settings);\n\n const optionalBundlers: Partial<PlatformBundlers> = { ...platformBundlers };\n // In the default case, we don't want to start multiple bundlers since this is\n // a bit slower. Our priority (for legacy) is native platforms.\n if (!options.web) {\n delete optionalBundlers['web'];\n }\n\n const bundlers = [...new Set(Object.values(optionalBundlers))];\n const multiBundlerStartOptions = bundlers.map((bundler) => {\n const port =\n bundler === 'webpack' ? multiBundlerSettings.webpackPort : multiBundlerSettings.metroPort;\n return {\n type: bundler,\n options: {\n ...commonOptions,\n port,\n },\n };\n });\n\n return [commonOptions, multiBundlerStartOptions];\n}\n\nexport async function startAsync(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean }\n) {\n Log.log(chalk.gray(`Starting project at ${projectRoot}`));\n\n const { exp, pkg } = profile(getConfig)(projectRoot);\n\n const platformBundlers = getPlatformBundlers(exp);\n\n if (!options.forceManifestType) {\n const easUpdatesUrlRegex = /^https:\\/\\/(staging-)?u\\.expo\\.dev/;\n const isEasUpdatesUrl = exp.updates?.url ? easUpdatesUrlRegex.test(exp.updates.url) : false;\n options.forceManifestType = isEasUpdatesUrl ? 'expo-updates' : 'classic';\n }\n\n const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(\n projectRoot,\n options,\n settings,\n platformBundlers\n );\n\n const devServerManager = new DevServerManager(projectRoot, defaultOptions);\n\n // Validations\n\n if (options.web || settings.webOnly) {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n }\n\n await devServerManager.ensureProjectPrerequisiteAsync(TypeScriptProjectPrerequisite);\n\n if (!settings.webOnly && !options.devClient) {\n await profile(validateDependenciesVersionsAsync)(projectRoot, exp, pkg);\n }\n\n // Some tracking thing\n\n if (options.devClient) {\n track(projectRoot, exp);\n }\n\n await profile(devServerManager.startAsync.bind(devServerManager))(startOptions);\n\n // Open project on devices.\n await profile(openPlatformsAsync)(devServerManager, options);\n\n // Present the Terminal UI.\n if (!env.CI) {\n await profile(startInterfaceAsync)(devServerManager, {\n platforms: exp.platforms ?? ['ios', 'android', 'web'],\n });\n } else {\n // Display the server location in CI...\n const url = devServerManager.getDefaultDevServer()?.getDevServerUrl();\n if (url) {\n Log.log(chalk`Waiting on {underline ${url}}`);\n }\n }\n\n // Final note about closing the server.\n const logLocation = settings.webOnly ? 'in the browser console' : 'below';\n Log.log(\n chalk`Logs for your project will appear ${logLocation}.${\n env.CI ? '' : chalk.dim(` Press Ctrl+C to exit.`)\n }`\n );\n}\n\nfunction track(projectRoot: string, exp: ExpoConfig) {\n logEvent('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n installExitHooks(() => {\n logEvent('dev client start command', {\n status: 'finished',\n ...getDevClientProperties(projectRoot, exp),\n });\n // UnifiedAnalytics.flush();\n });\n}\n"],"names":["startAsync","Log","getMultiBundlerStartOptions","projectRoot","forceManifestType","options","settings","platformBundlers","commonOptions","mode","dev","devClient","privateKeyPath","undefined","https","maxWorkers","resetDevServer","clear","minify","location","hostType","host","scheme","multiBundlerSettings","resolvePortsAsync","optionalBundlers","web","bundlers","Set","Object","values","multiBundlerStartOptions","map","bundler","port","webpackPort","metroPort","type","log","chalk","gray","exp","pkg","profile","getConfig","getPlatformBundlers","easUpdatesUrlRegex","isEasUpdatesUrl","updates","url","test","defaultOptions","startOptions","devServerManager","DevServerManager","webOnly","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","TypeScriptProjectPrerequisite","validateDependenciesVersionsAsync","track","bind","openPlatformsAsync","env","CI","startInterfaceAsync","platforms","getDefaultDevServer","getDevServerUrl","logLocation","dim","logEvent","status","getDevClientProperties","installExitHooks"],"mappings":"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"}
@@ -34,10 +34,12 @@ function _interopRequireWildcard(obj) {
34
34
  return newObj;
35
35
  }
36
36
  }
37
+ const debug = require("debug")("expo:utils:fileNotifier");
37
38
  class FileNotifier {
38
- constructor(projectRoot, moduleIds){
39
+ constructor(projectRoot, moduleIds, settings = {}){
39
40
  this.projectRoot = projectRoot;
40
41
  this.moduleIds = moduleIds;
42
+ this.settings = settings;
41
43
  this.watchFile = (0, _fn).memoize(this.startWatchingFile.bind(this));
42
44
  }
43
45
  /** Get the file in the project. */ resolveFilePath() {
@@ -52,6 +54,7 @@ class FileNotifier {
52
54
  startObserving() {
53
55
  const configPath = this.resolveFilePath();
54
56
  if (configPath) {
57
+ debug(`Observing ${configPath}`);
55
58
  return this.watchFile(configPath);
56
59
  }
57
60
  return configPath;
@@ -60,7 +63,7 @@ class FileNotifier {
60
63
  const configName = _path.default.relative(this.projectRoot, filePath);
61
64
  (0, _fs).watchFile(filePath, (cur, prev)=>{
62
65
  if (prev.size || cur.size) {
63
- Log.log(`\u203A Detected a change in ${_chalk.default.bold(configName)}. Restart the server to see the new results.`);
66
+ Log.log(`\u203A Detected a change in ${_chalk.default.bold(configName)}. Restart the server to see the new results.` + (this.settings.additionalWarning || ""));
64
67
  }
65
68
  });
66
69
  return filePath;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/FileNotifier.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { watchFile } from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport * as Log from '../log';\nimport { memoize } from './fn';\n\n/** Observes and reports file changes. */\nexport class FileNotifier {\n constructor(\n /** Project root to resolve the module IDs relative to. */\n private projectRoot: string,\n /** List of module IDs sorted by priority. Only the first file that exists will be observed. */\n private moduleIds: string[]\n ) {}\n\n /** Get the file in the project. */\n private resolveFilePath(): string | null {\n for (const moduleId of this.moduleIds) {\n const filePath = resolveFrom.silent(this.projectRoot, moduleId);\n if (filePath) {\n return filePath;\n }\n }\n return null;\n }\n\n public startObserving() {\n const configPath = this.resolveFilePath();\n if (configPath) {\n return this.watchFile(configPath);\n }\n return configPath;\n }\n\n /** Watch the file and warn to reload the CLI if it changes. */\n public watchFile = memoize(this.startWatchingFile.bind(this));\n\n private startWatchingFile(filePath: string): string {\n const configName = path.relative(this.projectRoot, filePath);\n watchFile(filePath, (cur: any, prev: any) => {\n if (prev.size || cur.size) {\n Log.log(\n `\\u203A Detected a change in ${chalk.bold(\n configName\n )}. Restart the server to see the new results.`\n );\n }\n });\n return filePath;\n }\n}\n"],"names":["Log","FileNotifier","constructor","projectRoot","moduleIds","watchFile","memoize","startWatchingFile","bind","resolveFilePath","moduleId","filePath","resolveFrom","silent","startObserving","configPath","configName","path","relative","cur","prev","size","log","chalk","bold"],"mappings":"AAAA;;;;AAAkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACC,IAAA,GAAI,WAAJ,IAAI,CAAA;AACb,IAAA,KAAM,kCAAN,MAAM,EAAA;AACC,IAAA,YAAc,kCAAd,cAAc,EAAA;AAE1BA,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACS,IAAA,GAAM,WAAN,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGvB,MAAMC,YAAY;IACvBC,YAEUC,WAAmB,EAEnBC,SAAmB,CAC3B;aAHQD,WAAmB,GAAnBA,WAAmB;aAEnBC,SAAmB,GAAnBA,SAAmB;aAuBtBC,SAAS,GAAGC,CAAAA,GAAAA,GAAO,AAAmC,CAAA,QAAnC,CAAC,IAAI,CAACC,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;KAtBzD;IAEJ,mCAAmC,CACnC,AAAQC,eAAe,GAAkB;QACvC,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAACN,SAAS,CAAE;YACrC,MAAMO,QAAQ,GAAGC,YAAW,QAAA,CAACC,MAAM,CAAC,IAAI,CAACV,WAAW,EAAEO,QAAQ,CAAC,AAAC;YAChE,IAAIC,QAAQ,EAAE;gBACZ,OAAOA,QAAQ,CAAC;aACjB;SACF;QACD,OAAO,IAAI,CAAC;KACb;IAED,AAAOG,cAAc,GAAG;QACtB,MAAMC,UAAU,GAAG,IAAI,CAACN,eAAe,EAAE,AAAC;QAC1C,IAAIM,UAAU,EAAE;YACd,OAAO,IAAI,CAACV,SAAS,CAACU,UAAU,CAAC,CAAC;SACnC;QACD,OAAOA,UAAU,CAAC;KACnB;IAKD,AAAQR,iBAAiB,CAACI,QAAgB,EAAU;QAClD,MAAMK,UAAU,GAAGC,KAAI,QAAA,CAACC,QAAQ,CAAC,IAAI,CAACf,WAAW,EAAEQ,QAAQ,CAAC,AAAC;QAC7DN,CAAAA,GAAAA,GAAS,AAQP,CAAA,UARO,CAACM,QAAQ,EAAE,CAACQ,GAAQ,EAAEC,IAAS,GAAK;YAC3C,IAAIA,IAAI,CAACC,IAAI,IAAIF,GAAG,CAACE,IAAI,EAAE;gBACzBrB,GAAG,CAACsB,GAAG,CACL,CAAC,4BAA4B,EAAEC,MAAK,QAAA,CAACC,IAAI,CACvCR,UAAU,CACX,CAAC,4CAA4C,CAAC,CAChD,CAAC;aACH;SACF,CAAC,CAAC;QACH,OAAOL,QAAQ,CAAC;KACjB;CACF;QA3CYV,YAAY,GAAZA,YAAY"}
1
+ {"version":3,"sources":["../../../src/utils/FileNotifier.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { watchFile } from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport * as Log from '../log';\nimport { memoize } from './fn';\n\nconst debug = require('debug')('expo:utils:fileNotifier') as typeof console.log;\n\n/** Observes and reports file changes. */\nexport class FileNotifier {\n constructor(\n /** Project root to resolve the module IDs relative to. */\n private projectRoot: string,\n /** List of module IDs sorted by priority. Only the first file that exists will be observed. */\n private moduleIds: string[],\n private settings: {\n /** An additional warning message to add to the notice. */\n additionalWarning?: string;\n } = {}\n ) {}\n\n /** Get the file in the project. */\n private resolveFilePath(): string | null {\n for (const moduleId of this.moduleIds) {\n const filePath = resolveFrom.silent(this.projectRoot, moduleId);\n if (filePath) {\n return filePath;\n }\n }\n return null;\n }\n\n public startObserving() {\n const configPath = this.resolveFilePath();\n if (configPath) {\n debug(`Observing ${configPath}`);\n return this.watchFile(configPath);\n }\n return configPath;\n }\n\n /** Watch the file and warn to reload the CLI if it changes. */\n public watchFile = memoize(this.startWatchingFile.bind(this));\n\n private startWatchingFile(filePath: string): string {\n const configName = path.relative(this.projectRoot, filePath);\n watchFile(filePath, (cur: any, prev: any) => {\n if (prev.size || cur.size) {\n Log.log(\n `\\u203A Detected a change in ${chalk.bold(\n configName\n )}. Restart the server to see the new results.` + (this.settings.additionalWarning || '')\n );\n }\n });\n return filePath;\n }\n}\n"],"names":["Log","debug","require","FileNotifier","constructor","projectRoot","moduleIds","settings","watchFile","memoize","startWatchingFile","bind","resolveFilePath","moduleId","filePath","resolveFrom","silent","startObserving","configPath","configName","path","relative","cur","prev","size","log","chalk","bold","additionalWarning"],"mappings":"AAAA;;;;AAAkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACC,IAAA,GAAI,WAAJ,IAAI,CAAA;AACb,IAAA,KAAM,kCAAN,MAAM,EAAA;AACC,IAAA,YAAc,kCAAd,cAAc,EAAA;AAE1BA,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACS,IAAA,GAAM,WAAN,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9B,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,AAAsB,AAAC;AAGzE,MAAMC,YAAY;IACvBC,YAEUC,WAAmB,EAEnBC,SAAmB,EACnBC,QAGP,GAAG,EAAE,CACN;aAPQF,WAAmB,GAAnBA,WAAmB;aAEnBC,SAAmB,GAAnBA,SAAmB;aACnBC,QAGP,GAHOA,QAGP;aAwBIC,SAAS,GAAGC,CAAAA,GAAAA,GAAO,AAAmC,CAAA,QAAnC,CAAC,IAAI,CAACC,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;KAvBzD;IAEJ,mCAAmC,CACnC,AAAQC,eAAe,GAAkB;QACvC,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAACP,SAAS,CAAE;YACrC,MAAMQ,QAAQ,GAAGC,YAAW,QAAA,CAACC,MAAM,CAAC,IAAI,CAACX,WAAW,EAAEQ,QAAQ,CAAC,AAAC;YAChE,IAAIC,QAAQ,EAAE;gBACZ,OAAOA,QAAQ,CAAC;aACjB;SACF;QACD,OAAO,IAAI,CAAC;KACb;IAED,AAAOG,cAAc,GAAG;QACtB,MAAMC,UAAU,GAAG,IAAI,CAACN,eAAe,EAAE,AAAC;QAC1C,IAAIM,UAAU,EAAE;YACdjB,KAAK,CAAC,CAAC,UAAU,EAAEiB,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,IAAI,CAACV,SAAS,CAACU,UAAU,CAAC,CAAC;SACnC;QACD,OAAOA,UAAU,CAAC;KACnB;IAKD,AAAQR,iBAAiB,CAACI,QAAgB,EAAU;QAClD,MAAMK,UAAU,GAAGC,KAAI,QAAA,CAACC,QAAQ,CAAC,IAAI,CAAChB,WAAW,EAAES,QAAQ,CAAC,AAAC;QAC7DN,CAAAA,GAAAA,GAAS,AAQP,CAAA,UARO,CAACM,QAAQ,EAAE,CAACQ,GAAQ,EAAEC,IAAS,GAAK;YAC3C,IAAIA,IAAI,CAACC,IAAI,IAAIF,GAAG,CAACE,IAAI,EAAE;gBACzBxB,GAAG,CAACyB,GAAG,CACL,CAAC,4BAA4B,EAAEC,MAAK,QAAA,CAACC,IAAI,CACvCR,UAAU,CACX,CAAC,4CAA4C,CAAC,GAAG,CAAC,IAAI,CAACZ,QAAQ,CAACqB,iBAAiB,IAAI,EAAE,CAAC,CAC1F,CAAC;aACH;SACF,CAAC,CAAC;QACH,OAAOd,QAAQ,CAAC;KACjB;CACF;QAhDYX,YAAY,GAAZA,YAAY"}
@@ -80,7 +80,7 @@ function logEvent(event, properties = {}) {
80
80
  ensureIdentified();
81
81
  const { userId , deviceId } = identifyData != null ? identifyData : {};
82
82
  const commonEventProperties = {
83
- source_version: "0.1.5",
83
+ source_version: "0.2.2",
84
84
  source: "expo"
85
85
  };
86
86
  const identity = {
@@ -121,7 +121,7 @@ function getContext() {
121
121
  },
122
122
  app: {
123
123
  name: "expo",
124
- version: "0.1.5"
124
+ version: "0.2.2"
125
125
  },
126
126
  ci: ciInfo.isCI ? {
127
127
  name: ciInfo.name,
@@ -11,7 +11,6 @@ var _tempy = _interopRequireDefault(require("tempy"));
11
11
  var _util = require("util");
12
12
  var _client = require("../api/rest/client");
13
13
  var _wrapFetchWithProgress = require("../api/rest/wrapFetchWithProgress");
14
- var _log = require("../log");
15
14
  var _dir = require("./dir");
16
15
  var _errors = require("./errors");
17
16
  var _tar = require("./tar");
@@ -20,6 +19,7 @@ function _interopRequireDefault(obj) {
20
19
  default: obj
21
20
  };
22
21
  }
22
+ const debug = require("debug")("expo:utils:downloadAppAsync");
23
23
  const TIMER_DURATION = 30000;
24
24
  const pipeline = (0, _util).promisify(_stream.Stream.pipeline);
25
25
  async function downloadAsync({ url , outputPath , cacheDirectory , onProgress }) {
@@ -33,6 +33,7 @@ async function downloadAsync({ url , outputPath , cacheDirectory , onProgress }
33
33
  cacheDirectory
34
34
  });
35
35
  }
36
+ debug(`Downloading ${url} to ${outputPath}`);
36
37
  const res = await (0, _wrapFetchWithProgress).wrapFetchWithProgress(fetchInstance)(url, {
37
38
  timeout: TIMER_DURATION,
38
39
  onProgress
@@ -57,7 +58,7 @@ async function downloadAppAsync({ url , outputPath , extract =false , cacheDirec
57
58
  cacheDirectory,
58
59
  onProgress
59
60
  });
60
- _log.Log.debug(`Extracting ${tmpPath} to ${outputPath}`);
61
+ debug(`Extracting ${tmpPath} to ${outputPath}`);
61
62
  await (0, _dir).ensureDirectoryAsync(outputPath);
62
63
  await (0, _tar).extractAsync(tmpPath, outputPath);
63
64
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/downloadAppAsync.ts"],"sourcesContent":["import fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport { Stream } from 'stream';\nimport temporary from 'tempy';\nimport { promisify } from 'util';\n\nimport { createCachedFetch } from '../api/rest/client';\nimport { FetchLike, ProgressCallback } from '../api/rest/client.types';\nimport { wrapFetchWithProgress } from '../api/rest/wrapFetchWithProgress';\nimport { Log } from '../log';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { extractAsync } from './tar';\n\nconst TIMER_DURATION = 30000;\n\nconst pipeline = promisify(Stream.pipeline);\n\nasync function downloadAsync({\n url,\n outputPath,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}) {\n let fetchInstance: FetchLike = fetch;\n if (cacheDirectory) {\n // Reconstruct the cached fetch since caching could be disabled.\n fetchInstance = createCachedFetch({\n // We'll use a 1 week cache for versions so older values get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n // Users can also nuke their `~/.expo` directory to clear the cache.\n cacheDirectory,\n });\n }\n\n const res = await wrapFetchWithProgress(fetchInstance)(url, {\n timeout: TIMER_DURATION,\n onProgress,\n });\n if (!res.ok) {\n throw new CommandError(\n 'FILE_DOWNLOAD',\n `Unexpected response: ${res.statusText}. From url: ${url}`\n );\n }\n return pipeline(res.body, fs.createWriteStream(outputPath));\n}\n\nexport async function downloadAppAsync({\n url,\n outputPath,\n extract = false,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n extract?: boolean;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}): Promise<void> {\n if (extract) {\n // For iOS we download the ipa to a file then pass that file into the extractor.\n // In the future we should just pipe the `res.body -> tar.extract` directly.\n // I tried this and it created some weird errors where observing the data stream\n // would corrupt the file causing tar to fail with `TAR_BAD_ARCHIVE`.\n const tmpPath = temporary.file({ name: path.basename(outputPath) });\n await downloadAsync({ url, outputPath: tmpPath, cacheDirectory, onProgress });\n Log.debug(`Extracting ${tmpPath} to ${outputPath}`);\n await ensureDirectoryAsync(outputPath);\n await extractAsync(tmpPath, outputPath);\n } else {\n await ensureDirectoryAsync(path.dirname(outputPath));\n await downloadAsync({ url, outputPath, cacheDirectory, onProgress });\n }\n}\n"],"names":["downloadAppAsync","TIMER_DURATION","pipeline","promisify","Stream","downloadAsync","url","outputPath","cacheDirectory","onProgress","fetchInstance","fetch","createCachedFetch","ttl","res","wrapFetchWithProgress","timeout","ok","CommandError","statusText","body","fs","createWriteStream","extract","tmpPath","temporary","file","name","path","basename","Log","debug","ensureDirectoryAsync","extractAsync","dirname"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/downloadAppAsync.ts"],"sourcesContent":["import fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport { Stream } from 'stream';\nimport temporary from 'tempy';\nimport { promisify } from 'util';\n\nimport { createCachedFetch } from '../api/rest/client';\nimport { FetchLike, ProgressCallback } from '../api/rest/client.types';\nimport { wrapFetchWithProgress } from '../api/rest/wrapFetchWithProgress';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { extractAsync } from './tar';\n\nconst debug = require('debug')('expo:utils:downloadAppAsync') as typeof console.log;\n\nconst TIMER_DURATION = 30000;\n\nconst pipeline = promisify(Stream.pipeline);\n\nasync function downloadAsync({\n url,\n outputPath,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}) {\n let fetchInstance: FetchLike = fetch;\n if (cacheDirectory) {\n // Reconstruct the cached fetch since caching could be disabled.\n fetchInstance = createCachedFetch({\n // We'll use a 1 week cache for versions so older values get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n // Users can also nuke their `~/.expo` directory to clear the cache.\n cacheDirectory,\n });\n }\n\n debug(`Downloading ${url} to ${outputPath}`);\n const res = await wrapFetchWithProgress(fetchInstance)(url, {\n timeout: TIMER_DURATION,\n onProgress,\n });\n if (!res.ok) {\n throw new CommandError(\n 'FILE_DOWNLOAD',\n `Unexpected response: ${res.statusText}. From url: ${url}`\n );\n }\n return pipeline(res.body, fs.createWriteStream(outputPath));\n}\n\nexport async function downloadAppAsync({\n url,\n outputPath,\n extract = false,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n extract?: boolean;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}): Promise<void> {\n if (extract) {\n // For iOS we download the ipa to a file then pass that file into the extractor.\n // In the future we should just pipe the `res.body -> tar.extract` directly.\n // I tried this and it created some weird errors where observing the data stream\n // would corrupt the file causing tar to fail with `TAR_BAD_ARCHIVE`.\n const tmpPath = temporary.file({ name: path.basename(outputPath) });\n await downloadAsync({ url, outputPath: tmpPath, cacheDirectory, onProgress });\n debug(`Extracting ${tmpPath} to ${outputPath}`);\n await ensureDirectoryAsync(outputPath);\n await extractAsync(tmpPath, outputPath);\n } else {\n await ensureDirectoryAsync(path.dirname(outputPath));\n await downloadAsync({ url, outputPath, cacheDirectory, onProgress });\n }\n}\n"],"names":["downloadAppAsync","debug","require","TIMER_DURATION","pipeline","promisify","Stream","downloadAsync","url","outputPath","cacheDirectory","onProgress","fetchInstance","fetch","createCachedFetch","ttl","res","wrapFetchWithProgress","timeout","ok","CommandError","statusText","body","fs","createWriteStream","extract","tmpPath","temporary","file","name","path","basename","ensureDirectoryAsync","extractAsync","dirname"],"mappings":"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"}
@@ -5,39 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  exports.downloadExpoGoAsync = downloadExpoGoAsync;
6
6
  var _getUserState = require("@expo/config/build/getUserState");
7
7
  var _path = _interopRequireDefault(require("path"));
8
- var _progress = _interopRequireDefault(require("progress"));
9
8
  var _getVersions = require("../api/getVersions");
10
- var Log = _interopRequireWildcard(require("../log"));
11
9
  var _downloadAppAsync = require("./downloadAppAsync");
12
10
  var _errors = require("./errors");
13
11
  var _profile = require("./profile");
14
- var _progress1 = require("./progress");
12
+ var _progress = require("./progress");
15
13
  function _interopRequireDefault(obj) {
16
14
  return obj && obj.__esModule ? obj : {
17
15
  default: obj
18
16
  };
19
17
  }
20
- function _interopRequireWildcard(obj) {
21
- if (obj && obj.__esModule) {
22
- return obj;
23
- } else {
24
- var newObj = {};
25
- if (obj != null) {
26
- for(var key in obj){
27
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
28
- var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
29
- if (desc.get || desc.set) {
30
- Object.defineProperty(newObj, key, desc);
31
- } else {
32
- newObj[key] = obj[key];
33
- }
34
- }
35
- }
36
- }
37
- newObj.default = obj;
38
- return newObj;
39
- }
40
- }
18
+ const debug = require("debug")("expo:utils:downloadExpoGo");
41
19
  const platformSettings = {
42
20
  ios: {
43
21
  versionsKey: "iosClientUrl",
@@ -54,29 +32,27 @@ const platformSettings = {
54
32
  };
55
33
  async function downloadExpoGoAsync(platform, { url , sdkVersion }) {
56
34
  const { getFilePath , versionsKey , shouldExtractResults } = platformSettings[platform];
57
- const bar = new _progress.default("Downloading the Expo Go app [:bar] :percent :etas", {
35
+ const bar = (0, _progress).createProgressBar("Downloading the Expo Go app [:bar] :percent :etas", {
58
36
  width: 64,
59
37
  total: 100,
60
38
  clear: true,
61
39
  complete: "=",
62
40
  incomplete: " "
63
41
  });
64
- // TODO: Auto track progress
65
- (0, _progress1).setProgressBar(bar);
66
42
  if (!url) {
67
43
  if (!sdkVersion) {
68
44
  throw new _errors.CommandError(`Unable to determine which Expo Go version to install (platform: ${platform})`);
69
45
  }
70
46
  const versions = await (0, _getVersions).getReleasedVersionsAsync();
71
47
  const version = versions[sdkVersion];
72
- Log.debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);
48
+ debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);
73
49
  url = version[versionsKey];
74
50
  }
75
51
  const filename = _path.default.parse(url).name;
76
52
  try {
77
53
  const outputPath = getFilePath(filename);
78
- Log.debug(`Downloading Expo Go from "${url}" to "${outputPath}".`);
79
- Log.debug(`The requested copy of Expo Go might already be cached in: "${(0, _getUserState).getExpoHomeDirectory()}". You can disable the cache with EXPO_NO_CACHE=1`);
54
+ debug(`Downloading Expo Go from "${url}" to "${outputPath}".`);
55
+ debug(`The requested copy of Expo Go might already be cached in: "${(0, _getUserState).getExpoHomeDirectory()}". You can disable the cache with EXPO_NO_CACHE=1`);
80
56
  await (0, _profile).profile(_downloadAppAsync.downloadAppAsync)({
81
57
  url,
82
58
  // Save all encrypted cache data to `~/.expo/expo-go`
@@ -91,8 +67,7 @@ async function downloadExpoGoAsync(platform, { url , sdkVersion }) {
91
67
  });
92
68
  return outputPath;
93
69
  } finally{
94
- bar.terminate();
95
- (0, _progress1).setProgressBar(null);
70
+ bar == null ? void 0 : bar.terminate();
96
71
  }
97
72
  }
98
73
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/downloadExpoGoAsync.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport path from 'path';\nimport ProgressBar from 'progress';\n\nimport { getReleasedVersionsAsync, SDKVersion } from '../api/getVersions';\nimport * as Log from '../log';\nimport { downloadAppAsync } from './downloadAppAsync';\nimport { CommandError } from './errors';\nimport { profile } from './profile';\nimport { setProgressBar } from './progress';\n\nconst platformSettings: Record<\n string,\n {\n shouldExtractResults: boolean;\n versionsKey: keyof SDKVersion;\n getFilePath: (filename: string) => string;\n }\n> = {\n ios: {\n versionsKey: 'iosClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'ios-simulator-app-cache', `${filename}.app`),\n shouldExtractResults: true,\n },\n android: {\n versionsKey: 'androidClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'android-apk-cache', `${filename}.apk`),\n shouldExtractResults: false,\n },\n};\n\n/** Download the Expo Go app from the Expo servers (if only it was this easy for every app). */\nexport async function downloadExpoGoAsync(\n platform: keyof typeof platformSettings,\n {\n url,\n sdkVersion,\n }: {\n url?: string;\n sdkVersion?: string;\n }\n): Promise<string> {\n const { getFilePath, versionsKey, shouldExtractResults } = platformSettings[platform];\n\n const bar = new ProgressBar('Downloading the Expo Go app [:bar] :percent :etas', {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n // TODO: Auto track progress\n setProgressBar(bar);\n\n if (!url) {\n if (!sdkVersion) {\n throw new CommandError(\n `Unable to determine which Expo Go version to install (platform: ${platform})`\n );\n }\n const versions = await getReleasedVersionsAsync();\n const version = versions[sdkVersion];\n Log.debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);\n url = version[versionsKey] as string;\n }\n\n const filename = path.parse(url).name;\n\n try {\n const outputPath = getFilePath(filename);\n Log.debug(`Downloading Expo Go from \"${url}\" to \"${outputPath}\".`);\n Log.debug(\n `The requested copy of Expo Go might already be cached in: \"${getExpoHomeDirectory()}\". You can disable the cache with EXPO_NO_CACHE=1`\n );\n await profile(downloadAppAsync)({\n url,\n // Save all encrypted cache data to `~/.expo/expo-go`\n cacheDirectory: 'expo-go',\n outputPath,\n extract: shouldExtractResults,\n onProgress({ progress }) {\n if (bar) {\n bar.tick(1, progress);\n }\n },\n });\n return outputPath;\n } finally {\n bar.terminate();\n setProgressBar(null);\n }\n}\n"],"names":["downloadExpoGoAsync","Log","platformSettings","ios","versionsKey","getFilePath","filename","path","join","getExpoHomeDirectory","shouldExtractResults","android","platform","url","sdkVersion","bar","ProgressBar","width","total","clear","complete","incomplete","setProgressBar","CommandError","versions","getReleasedVersionsAsync","version","debug","parse","name","outputPath","profile","downloadAppAsync","cacheDirectory","extract","onProgress","progress","tick","terminate"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/downloadExpoGoAsync.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport path from 'path';\n\nimport { getReleasedVersionsAsync, SDKVersion } from '../api/getVersions';\nimport { downloadAppAsync } from './downloadAppAsync';\nimport { CommandError } from './errors';\nimport { profile } from './profile';\nimport { createProgressBar } from './progress';\n\nconst debug = require('debug')('expo:utils:downloadExpoGo') as typeof console.log;\n\nconst platformSettings: Record<\n string,\n {\n shouldExtractResults: boolean;\n versionsKey: keyof SDKVersion;\n getFilePath: (filename: string) => string;\n }\n> = {\n ios: {\n versionsKey: 'iosClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'ios-simulator-app-cache', `${filename}.app`),\n shouldExtractResults: true,\n },\n android: {\n versionsKey: 'androidClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'android-apk-cache', `${filename}.apk`),\n shouldExtractResults: false,\n },\n};\n\n/** Download the Expo Go app from the Expo servers (if only it was this easy for every app). */\nexport async function downloadExpoGoAsync(\n platform: keyof typeof platformSettings,\n {\n url,\n sdkVersion,\n }: {\n url?: string;\n sdkVersion?: string;\n }\n): Promise<string> {\n const { getFilePath, versionsKey, shouldExtractResults } = platformSettings[platform];\n\n const bar = createProgressBar('Downloading the Expo Go app [:bar] :percent :etas', {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n if (!url) {\n if (!sdkVersion) {\n throw new CommandError(\n `Unable to determine which Expo Go version to install (platform: ${platform})`\n );\n }\n const versions = await getReleasedVersionsAsync();\n const version = versions[sdkVersion];\n debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);\n url = version[versionsKey] as string;\n }\n\n const filename = path.parse(url).name;\n\n try {\n const outputPath = getFilePath(filename);\n debug(`Downloading Expo Go from \"${url}\" to \"${outputPath}\".`);\n debug(\n `The requested copy of Expo Go might already be cached in: \"${getExpoHomeDirectory()}\". You can disable the cache with EXPO_NO_CACHE=1`\n );\n await profile(downloadAppAsync)({\n url,\n // Save all encrypted cache data to `~/.expo/expo-go`\n cacheDirectory: 'expo-go',\n outputPath,\n extract: shouldExtractResults,\n onProgress({ progress }) {\n if (bar) {\n bar.tick(1, progress);\n }\n },\n });\n return outputPath;\n } finally {\n bar?.terminate();\n }\n}\n"],"names":["downloadExpoGoAsync","debug","require","platformSettings","ios","versionsKey","getFilePath","filename","path","join","getExpoHomeDirectory","shouldExtractResults","android","platform","url","sdkVersion","bar","createProgressBar","width","total","clear","complete","incomplete","CommandError","versions","getReleasedVersionsAsync","version","parse","name","outputPath","profile","downloadAppAsync","cacheDirectory","extract","onProgress","progress","tick","terminate"],"mappings":"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"}
@@ -33,6 +33,7 @@ function _interopRequireWildcard(obj) {
33
33
  return newObj;
34
34
  }
35
35
  }
36
+ const debug = require("debug")("expo:utils:editor");
36
37
  function guessEditor() {
37
38
  try {
38
39
  return _envEditor.default.defaultEditor();
@@ -42,7 +43,7 @@ function guessEditor() {
42
43
  }
43
44
  async function openInEditorAsync(path) {
44
45
  const editor = guessEditor();
45
- Log.debug(`Opening ${path} in ${editor == null ? void 0 : editor.name} (bin: ${editor == null ? void 0 : editor.binary}, id: ${editor == null ? void 0 : editor.id})`);
46
+ debug(`Opening ${path} in ${editor == null ? void 0 : editor.name} (bin: ${editor == null ? void 0 : editor.binary}, id: ${editor == null ? void 0 : editor.id})`);
46
47
  if (editor) {
47
48
  try {
48
49
  await (0, _spawnAsync).default(editor.binary, [
@@ -50,7 +51,7 @@ async function openInEditorAsync(path) {
50
51
  ]);
51
52
  return true;
52
53
  } catch (error) {
53
- Log.debug(`Failed to auto open path in editor (path: ${path}, binary: ${editor.binary}):`, error);
54
+ debug(`Failed to auto open path in editor (path: ${path}, binary: ${editor.binary}):`, error);
54
55
  }
55
56
  }
56
57
  Log.error('Could not open editor, you can set it by defining the $EDITOR environment variable with the binary of your editor. (e.g. "vscode" or "atom")');