xdl
Version:
The Expo Development Library
1 lines • 10.7 kB
Source Map (JSON)
{"version":3,"file":"startAsync.js","names":["_config","data","require","_devServer","_internal","_watchBabelConfig","serverInstance","messageSocket","webpackDevServer","broadcastMessage","method","params","broadcast","startWebpackAsync","projectRoot","exp","getConfig","options","Webpack","startAsync","port","webpackPort","skipSDKVersionRequirement","verbose","_exp$sdkVersion","assertValidProjectRoot","Analytics","logEvent","developerTool","Config","sdkVersion","watchBabelConfigForProject","webOnly","Env","shouldUseDevServer","devClient","startDevServerAsync","startExpoServerAsync","startReactNativeServerAsync","hostType","ProjectSettings","readAsync","ConnectionStatus","isOffline","startTunnelsAsync","e","ProjectUtils","logError","message","target","DevSession","startSession","stopDevServerAsync","Promise","resolve","reject","closeJsInspector","close","error","stopInternalAsync","stopSession","all","stopAsync","stopExpoServerAsync","stopReactNativeServerAsync","stopTunnelsAsync","Android","maybeStopAdbDaemonAsync","forceQuitAsync","packagerPid","ngrokPid","readPackagerInfoAsync","process","kill","setPackagerInfoAsync","expoServerPort","packagerPort","expoServerNgrokUrl","packagerNgrokUrl","webpackServerPort","result","race","setTimeout"],"sources":["../../src/start/startAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { closeJsInspector, MessageSocket } from '@expo/dev-server';\nimport { Server } from 'http';\n\nimport { WebpackDevServerResults } from '../Webpack';\nimport {\n Analytics,\n Android,\n assertValidProjectRoot,\n Config,\n ConnectionStatus,\n DevSession,\n Env,\n ProjectSettings,\n ProjectUtils,\n startDevServerAsync,\n StartDevServerOptions,\n startExpoServerAsync,\n startReactNativeServerAsync,\n startTunnelsAsync,\n stopExpoServerAsync,\n stopReactNativeServerAsync,\n stopTunnelsAsync,\n Webpack,\n} from '../internal';\nimport { watchBabelConfigForProject } from './watchBabelConfig';\n\nlet serverInstance: Server | null = null;\nlet messageSocket: MessageSocket | null = null;\nlet webpackDevServer: WebpackDevServerResults | null = null;\n\n/**\n * Sends a message over web sockets to any connected device,\n * does nothing when the dev server is not running.\n *\n * @param method name of the command. In RN projects `reload`, and `devMenu` are available. In Expo Go, `sendDevCommand` is available.\n * @param params\n */\nexport function broadcastMessage(\n method: 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any> | undefined\n) {\n if (webpackDevServer) {\n webpackDevServer.messageSocket.broadcast(method, params);\n }\n if (messageSocket) {\n messageSocket.broadcast(method, params);\n }\n}\n\nexport async function startWebpackAsync(\n projectRoot: string,\n {\n exp = getConfig(projectRoot).exp,\n ...options\n }: StartDevServerOptions & { exp?: ExpoConfig } = {}\n) {\n webpackDevServer = await Webpack.startAsync(projectRoot, {\n ...options,\n port: options.webpackPort,\n });\n}\n\nexport async function startAsync(\n projectRoot: string,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n ...options\n }: StartDevServerOptions & { exp?: ExpoConfig } = {},\n verbose: boolean = true\n): Promise<ExpoConfig> {\n assertValidProjectRoot(projectRoot);\n\n Analytics.logEvent('Start Project', {\n developerTool: Config.developerTool,\n sdkVersion: exp.sdkVersion ?? null,\n });\n\n watchBabelConfigForProject(projectRoot);\n\n if (options.webOnly) {\n await startWebpackAsync(projectRoot, { exp, ...options });\n } else if (Env.shouldUseDevServer(exp) || options.devClient) {\n [serverInstance, , messageSocket] = await startDevServerAsync(projectRoot, options);\n } else {\n await startExpoServerAsync(projectRoot);\n await startReactNativeServerAsync({ projectRoot, exp, options, verbose });\n }\n\n const { hostType } = await ProjectSettings.readAsync(projectRoot);\n\n if (!ConnectionStatus.isOffline() && hostType === 'tunnel') {\n try {\n await startTunnelsAsync(projectRoot);\n } catch (e: any) {\n ProjectUtils.logError(projectRoot, 'expo', `Error starting ngrok: ${e.message}`);\n }\n }\n\n const target = !options.webOnly ? 'native' : 'web';\n // This is used to make Expo Go open the project in either Expo Go, or the web browser.\n // Must come after ngrok (`startTunnelsAsync`) setup.\n DevSession.startSession(projectRoot, exp, target);\n return exp;\n}\n\nasync function stopDevServerAsync() {\n return new Promise<void>((resolve, reject) => {\n if (serverInstance) {\n closeJsInspector();\n serverInstance.close(error => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n }\n });\n}\n\nasync function stopInternalAsync(projectRoot: string): Promise<void> {\n DevSession.stopSession();\n\n await Promise.all([\n Webpack.stopAsync(projectRoot),\n stopDevServerAsync(),\n stopExpoServerAsync(projectRoot),\n stopReactNativeServerAsync(projectRoot),\n async () => {\n if (!ConnectionStatus.isOffline()) {\n try {\n await stopTunnelsAsync(projectRoot);\n } catch (e: any) {\n ProjectUtils.logError(projectRoot, 'expo', `Error stopping ngrok: ${e.message}`);\n }\n }\n },\n await Android.maybeStopAdbDaemonAsync(),\n ]);\n}\n\nasync function forceQuitAsync(projectRoot: string) {\n // find RN packager and ngrok pids, attempt to kill them manually\n const { packagerPid, ngrokPid } = await ProjectSettings.readPackagerInfoAsync(projectRoot);\n if (packagerPid) {\n try {\n process.kill(packagerPid);\n } catch {}\n }\n if (ngrokPid) {\n try {\n process.kill(ngrokPid);\n } catch {}\n }\n await ProjectSettings.setPackagerInfoAsync(projectRoot, {\n expoServerPort: null,\n packagerPort: null,\n packagerPid: null,\n expoServerNgrokUrl: null,\n packagerNgrokUrl: null,\n ngrokPid: null,\n webpackServerPort: null,\n });\n}\n\nexport async function stopAsync(projectRoot: string): Promise<void> {\n try {\n const result = await Promise.race([\n stopInternalAsync(projectRoot),\n new Promise(resolve => setTimeout(resolve, 2000, 'stopFailed')),\n ]);\n if (result === 'stopFailed') {\n await forceQuitAsync(projectRoot);\n }\n } catch (error: any) {\n await forceQuitAsync(projectRoot);\n throw error;\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,WAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,UAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAIA,SAAAG,UAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,SAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAoBA,SAAAI,kBAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,iBAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,IAAIK,cAA6B,GAAG,IAAI;AACxC,IAAIC,aAAmC,GAAG,IAAI;AAC9C,IAAIC,gBAAgD,GAAG,IAAI;;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAC9BC,MAA+C,EAC/CC,MAAwC,EACxC;EACA,IAAIH,gBAAgB,EAAE;IACpBA,gBAAgB,CAACD,aAAa,CAACK,SAAS,CAACF,MAAM,EAAEC,MAAM,CAAC;EAC1D;EACA,IAAIJ,aAAa,EAAE;IACjBA,aAAa,CAACK,SAAS,CAACF,MAAM,EAAEC,MAAM,CAAC;EACzC;AACF;AAEO,eAAeE,iBAAiBA,CACrCC,WAAmB,EACnB;EACEC,GAAG,GAAG,IAAAC,mBAAS,EAACF,WAAW,CAAC,CAACC,GAAG;EAChC,GAAGE;AACyC,CAAC,GAAG,CAAC,CAAC,EACpD;EACAT,gBAAgB,GAAG,MAAMU,mBAAO,CAACC,UAAU,CAACL,WAAW,EAAE;IACvD,GAAGG,OAAO;IACVG,IAAI,EAAEH,OAAO,CAACI;EAChB,CAAC,CAAC;AACJ;AAEO,eAAeF,UAAUA,CAC9BL,WAAmB,EACnB;EACEC,GAAG,GAAG,IAAAC,mBAAS,EAACF,WAAW,EAAE;IAAEQ,yBAAyB,EAAE;EAAK,CAAC,CAAC,CAACP,GAAG;EACrE,GAAGE;AACyC,CAAC,GAAG,CAAC,CAAC,EACpDM,OAAgB,GAAG,IAAI,EACF;EAAA,IAAAC,eAAA;EACrB,IAAAC,kCAAsB,EAACX,WAAW,CAAC;EAEnCY,qBAAS,CAACC,QAAQ,CAAC,eAAe,EAAE;IAClCC,aAAa,EAAEC,kBAAM,CAACD,aAAa;IACnCE,UAAU,GAAAN,eAAA,GAAET,GAAG,CAACe,UAAU,cAAAN,eAAA,cAAAA,eAAA,GAAI;EAChC,CAAC,CAAC;EAEF,IAAAO,8CAA0B,EAACjB,WAAW,CAAC;EAEvC,IAAIG,OAAO,CAACe,OAAO,EAAE;IACnB,MAAMnB,iBAAiB,CAACC,WAAW,EAAE;MAAEC,GAAG;MAAE,GAAGE;IAAQ,CAAC,CAAC;EAC3D,CAAC,MAAM,IAAIgB,eAAG,CAACC,kBAAkB,CAACnB,GAAG,CAAC,IAAIE,OAAO,CAACkB,SAAS,EAAE;IAC3D,CAAC7B,cAAc,GAAIC,aAAa,CAAC,GAAG,MAAM,IAAA6B,+BAAmB,EAACtB,WAAW,EAAEG,OAAO,CAAC;EACrF,CAAC,MAAM;IACL,MAAM,IAAAoB,gCAAoB,EAACvB,WAAW,CAAC;IACvC,MAAM,IAAAwB,uCAA2B,EAAC;MAAExB,WAAW;MAAEC,GAAG;MAAEE,OAAO;MAAEM;IAAQ,CAAC,CAAC;EAC3E;EAEA,MAAM;IAAEgB;EAAS,CAAC,GAAG,MAAMC,2BAAe,CAACC,SAAS,CAAC3B,WAAW,CAAC;EAEjE,IAAI,CAAC4B,4BAAgB,CAACC,SAAS,CAAC,CAAC,IAAIJ,QAAQ,KAAK,QAAQ,EAAE;IAC1D,IAAI;MACF,MAAM,IAAAK,6BAAiB,EAAC9B,WAAW,CAAC;IACtC,CAAC,CAAC,OAAO+B,CAAM,EAAE;MACfC,wBAAY,CAACC,QAAQ,CAACjC,WAAW,EAAE,MAAM,EAAG,yBAAwB+B,CAAC,CAACG,OAAQ,EAAC,CAAC;IAClF;EACF;EAEA,MAAMC,MAAM,GAAG,CAAChC,OAAO,CAACe,OAAO,GAAG,QAAQ,GAAG,KAAK;EAClD;EACA;EACAkB,sBAAU,CAACC,YAAY,CAACrC,WAAW,EAAEC,GAAG,EAAEkC,MAAM,CAAC;EACjD,OAAOlC,GAAG;AACZ;AAEA,eAAeqC,kBAAkBA,CAAA,EAAG;EAClC,OAAO,IAAIC,OAAO,CAAO,CAACC,OAAO,EAAEC,MAAM,KAAK;IAC5C,IAAIjD,cAAc,EAAE;MAClB,IAAAkD,6BAAgB,EAAC,CAAC;MAClBlD,cAAc,CAACmD,KAAK,CAACC,KAAK,IAAI;QAC5B,IAAIA,KAAK,EAAE;UACTH,MAAM,CAACG,KAAK,CAAC;QACf,CAAC,MAAM;UACLJ,OAAO,CAAC,CAAC;QACX;MACF,CAAC,CAAC;IACJ;EACF,CAAC,CAAC;AACJ;AAEA,eAAeK,iBAAiBA,CAAC7C,WAAmB,EAAiB;EACnEoC,sBAAU,CAACU,WAAW,CAAC,CAAC;EAExB,MAAMP,OAAO,CAACQ,GAAG,CAAC,CAChB3C,mBAAO,CAAC4C,SAAS,CAAChD,WAAW,CAAC,EAC9BsC,kBAAkB,CAAC,CAAC,EACpB,IAAAW,+BAAmB,EAACjD,WAAW,CAAC,EAChC,IAAAkD,sCAA0B,EAAClD,WAAW,CAAC,EACvC,YAAY;IACV,IAAI,CAAC4B,4BAAgB,CAACC,SAAS,CAAC,CAAC,EAAE;MACjC,IAAI;QACF,MAAM,IAAAsB,4BAAgB,EAACnD,WAAW,CAAC;MACrC,CAAC,CAAC,OAAO+B,CAAM,EAAE;QACfC,wBAAY,CAACC,QAAQ,CAACjC,WAAW,EAAE,MAAM,EAAG,yBAAwB+B,CAAC,CAACG,OAAQ,EAAC,CAAC;MAClF;IACF;EACF,CAAC,EACD,MAAMkB,mBAAO,CAACC,uBAAuB,CAAC,CAAC,CACxC,CAAC;AACJ;AAEA,eAAeC,cAAcA,CAACtD,WAAmB,EAAE;EACjD;EACA,MAAM;IAAEuD,WAAW;IAAEC;EAAS,CAAC,GAAG,MAAM9B,2BAAe,CAAC+B,qBAAqB,CAACzD,WAAW,CAAC;EAC1F,IAAIuD,WAAW,EAAE;IACf,IAAI;MACFG,OAAO,CAACC,IAAI,CAACJ,WAAW,CAAC;IAC3B,CAAC,CAAC,MAAM,CAAC;EACX;EACA,IAAIC,QAAQ,EAAE;IACZ,IAAI;MACFE,OAAO,CAACC,IAAI,CAACH,QAAQ,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC;EACX;EACA,MAAM9B,2BAAe,CAACkC,oBAAoB,CAAC5D,WAAW,EAAE;IACtD6D,cAAc,EAAE,IAAI;IACpBC,YAAY,EAAE,IAAI;IAClBP,WAAW,EAAE,IAAI;IACjBQ,kBAAkB,EAAE,IAAI;IACxBC,gBAAgB,EAAE,IAAI;IACtBR,QAAQ,EAAE,IAAI;IACdS,iBAAiB,EAAE;EACrB,CAAC,CAAC;AACJ;AAEO,eAAejB,SAASA,CAAChD,WAAmB,EAAiB;EAClE,IAAI;IACF,MAAMkE,MAAM,GAAG,MAAM3B,OAAO,CAAC4B,IAAI,CAAC,CAChCtB,iBAAiB,CAAC7C,WAAW,CAAC,EAC9B,IAAIuC,OAAO,CAACC,OAAO,IAAI4B,UAAU,CAAC5B,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAChE,CAAC;IACF,IAAI0B,MAAM,KAAK,YAAY,EAAE;MAC3B,MAAMZ,cAAc,CAACtD,WAAW,CAAC;IACnC;EACF,CAAC,CAAC,OAAO4C,KAAU,EAAE;IACnB,MAAMU,cAAc,CAACtD,WAAW,CAAC;IACjC,MAAM4C,KAAK;EACb;AACF"}