1 | {"version":3,"file":"startDevServerAsync.js","names":["_config","data","require","_devServer","_internal","startDevServerAsync","projectRoot","startOptions","assertValidProjectRoot","port","metroPort","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","ProjectSettings","setPackagerInfoAsync","expoServerPort","packagerPort","options","logger","ProjectUtils","getLogger","reset","resetCache","maxWorkers","projectConfig","getConfig","skipSDKVersionRequirement","unversioned","exp","sdkVersion","server","middleware","messageSocket","runMetroDevServerAsync","useExpoUpdatesManifest","forceManifestType","prependMiddleware","ExpoUpdatesManifestHandler","getManifestHandler","ManifestHandler","use","LoadingPageHandler","getLoadingPageHandler"],"sources":["../../src/start/startDevServerAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig, ProjectTarget } from '@expo/config';\nimport {\n MessageSocket,\n MetroDevServerOptions,\n prependMiddleware,\n runMetroDevServerAsync,\n} from '@expo/dev-server';\nimport http from 'http';\n\nimport {\n assertValidProjectRoot,\n ExpoUpdatesManifestHandler,\n getFreePortAsync,\n LoadingPageHandler,\n ManifestHandler,\n ProjectSettings,\n ProjectUtils,\n} from '../internal';\n\nexport type StartOptions = {\n metroPort?: number;\n webpackPort?: number;\n isWebSocketsEnabled?: boolean;\n isRemoteReloadingEnabled?: boolean;\n devClient?: boolean;\n reset?: boolean;\n nonInteractive?: boolean;\n nonPersistent?: boolean;\n maxWorkers?: number;\n webOnly?: boolean;\n target?: ProjectTarget;\n platforms?: ExpoConfig['platforms'];\n forceManifestType?: 'expo-updates' | 'classic';\n};\n\nexport async function startDevServerAsync(\n projectRoot: string,\n startOptions: StartOptions\n): Promise<[http.Server, any, MessageSocket]> {\n assertValidProjectRoot(projectRoot);\n\n let port: number;\n\n if (startOptions.metroPort != null) {\n // If the manually defined port is busy then an error should be thrown\n port = startOptions.metroPort;\n } else {\n port = startOptions.devClient\n ? Number(process.env.RCT_METRO_PORT) || 8081\n : await getFreePortAsync(startOptions.metroPort || 19000);\n }\n await ProjectSettings.setPackagerInfoAsync(projectRoot, {\n expoServerPort: port,\n packagerPort: port,\n });\n\n const options: MetroDevServerOptions = {\n port,\n logger: ProjectUtils.getLogger(projectRoot),\n };\n if (startOptions.reset) {\n options.resetCache = true;\n }\n if (startOptions.maxWorkers != null) {\n options.maxWorkers = startOptions.maxWorkers;\n }\n\n // TODO: reduce getConfig calls\n const projectConfig = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n\n // Use the unversioned metro config.\n options.unversioned =\n !projectConfig.exp.sdkVersion || projectConfig.exp.sdkVersion === 'UNVERSIONED';\n\n const { server, middleware, messageSocket } = await runMetroDevServerAsync(projectRoot, options);\n\n const useExpoUpdatesManifest = startOptions.forceManifestType === 'expo-updates';\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n prependMiddleware(\n middleware,\n useExpoUpdatesManifest\n ? ExpoUpdatesManifestHandler.getManifestHandler(projectRoot)\n : ManifestHandler.getManifestHandler(projectRoot)\n );\n\n middleware.use(LoadingPageHandler.getLoadingPageHandler(projectRoot));\n\n return [server, middleware, messageSocket];\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;AAQA,SAAAG,UAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,SAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AA0BO,eAAeI,mBAAmBA,CACvCC,WAAmB,EACnBC,YAA0B,EACkB;EAC5C,IAAAC,kCAAsB,EAACF,WAAW,CAAC;EAEnC,IAAIG,IAAY;EAEhB,IAAIF,YAAY,CAACG,SAAS,IAAI,IAAI,EAAE;IAClC;IACAD,IAAI,GAAGF,YAAY,CAACG,SAAS;EAC/B,CAAC,MAAM;IACLD,IAAI,GAAGF,YAAY,CAACI,SAAS,GACzBC,MAAM,CAACC,OAAO,CAACC,GAAG,CAACC,cAAc,CAAC,IAAI,IAAI,GAC1C,MAAM,IAAAC,4BAAgB,EAACT,YAAY,CAACG,SAAS,IAAI,KAAK,CAAC;EAC7D;EACA,MAAMO,2BAAe,CAACC,oBAAoB,CAACZ,WAAW,EAAE;IACtDa,cAAc,EAAEV,IAAI;IACpBW,YAAY,EAAEX;EAChB,CAAC,CAAC;EAEF,MAAMY,OAA8B,GAAG;IACrCZ,IAAI;IACJa,MAAM,EAAEC,wBAAY,CAACC,SAAS,CAAClB,WAAW;EAC5C,CAAC;EACD,IAAIC,YAAY,CAACkB,KAAK,EAAE;IACtBJ,OAAO,CAACK,UAAU,GAAG,IAAI;EAC3B;EACA,IAAInB,YAAY,CAACoB,UAAU,IAAI,IAAI,EAAE;IACnCN,OAAO,CAACM,UAAU,GAAGpB,YAAY,CAACoB,UAAU;EAC9C;;EAEA;EACA,MAAMC,aAAa,GAAG,IAAAC,mBAAS,EAACvB,WAAW,EAAE;IAAEwB,yBAAyB,EAAE;EAAK,CAAC,CAAC;;EAEjF;EACAT,OAAO,CAACU,WAAW,GACjB,CAACH,aAAa,CAACI,GAAG,CAACC,UAAU,IAAIL,aAAa,CAACI,GAAG,CAACC,UAAU,KAAK,aAAa;EAEjF,MAAM;IAAEC,MAAM;IAAEC,UAAU;IAAEC;EAAc,CAAC,GAAG,MAAM,IAAAC,mCAAsB,EAAC/B,WAAW,EAAEe,OAAO,CAAC;EAEhG,MAAMiB,sBAAsB,GAAG/B,YAAY,CAACgC,iBAAiB,KAAK,cAAc;EAChF;EACA;EACA;EACA;EACA;EACA;EACA,IAAAC,8BAAiB,EACfL,UAAU,EACVG,sBAAsB,GAClBG,sCAA0B,CAACC,kBAAkB,CAACpC,WAAW,CAAC,GAC1DqC,2BAAe,CAACD,kBAAkB,CAACpC,WAAW,CACpD,CAAC;EAED6B,UAAU,CAACS,GAAG,CAACC,8BAAkB,CAACC,qBAAqB,CAACxC,WAAW,CAAC,CAAC;EAErE,OAAO,CAAC4B,MAAM,EAAEC,UAAU,EAAEC,aAAa,CAAC;AAC5C"} |