@expo/cli 0.12.0 → 0.13.0

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 (90) hide show
  1. package/build/bin/cli +2 -2
  2. package/build/src/export/createBundles.js +0 -30
  3. package/build/src/export/createBundles.js.map +1 -1
  4. package/build/src/export/embed/exportEmbedAsync.js +2 -0
  5. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  6. package/build/src/export/exportApp.js +28 -10
  7. package/build/src/export/exportApp.js.map +1 -1
  8. package/build/src/export/exportAssets.js +2 -2
  9. package/build/src/export/exportAssets.js.map +1 -1
  10. package/build/src/export/exportHermes.js +204 -0
  11. package/build/src/export/exportHermes.js.map +1 -0
  12. package/build/src/export/exportStaticAsync.js +7 -3
  13. package/build/src/export/exportStaticAsync.js.map +1 -1
  14. package/build/src/export/favicon.js +7 -7
  15. package/build/src/export/favicon.js.map +1 -1
  16. package/build/src/export/fork-bundleAsync.js +9 -11
  17. package/build/src/export/fork-bundleAsync.js.map +1 -1
  18. package/build/src/export/persistMetroAssets.js +118 -0
  19. package/build/src/export/persistMetroAssets.js.map +1 -0
  20. package/build/src/export/saveAssets.js.map +1 -1
  21. package/build/src/install/index.js +1 -0
  22. package/build/src/install/index.js.map +1 -1
  23. package/build/src/install/installAsync.js +1 -0
  24. package/build/src/install/installAsync.js.map +1 -1
  25. package/build/src/install/resolveOptions.js +7 -4
  26. package/build/src/install/resolveOptions.js.map +1 -1
  27. package/build/src/prebuild/index.js +2 -0
  28. package/build/src/prebuild/index.js.map +1 -1
  29. package/build/src/prebuild/prebuildAsync.js +2 -1
  30. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  31. package/build/src/prebuild/resolveOptions.js +4 -2
  32. package/build/src/prebuild/resolveOptions.js.map +1 -1
  33. package/build/src/run/android/runAndroidAsync.js +5 -0
  34. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  35. package/build/src/run/ios/runIosAsync.js +5 -0
  36. package/build/src/run/ios/runIosAsync.js.map +1 -1
  37. package/build/src/start/interface/interactiveActions.js +3 -3
  38. package/build/src/start/interface/interactiveActions.js.map +1 -1
  39. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  40. package/build/src/start/server/getStaticRenderFunctions.js +1 -10
  41. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  42. package/build/src/start/server/metro/MetroBundlerDevServer.js +15 -11
  43. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  44. package/build/src/start/server/metro/MetroTerminalReporter.js +1 -1
  45. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  46. package/build/src/start/server/metro/instantiateMetro.js +29 -9
  47. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  48. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  49. package/build/src/start/server/metro/resolveFromProject.js +13 -0
  50. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  51. package/build/src/start/server/metro/withMetroMultiPlatform.js +14 -0
  52. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  53. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +1 -1
  54. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  55. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +3 -3
  56. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  57. package/build/src/start/server/middleware/inspector/JsInspector.js +69 -0
  58. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -0
  59. package/build/src/start/server/middleware/inspector/LaunchBrowser.js +57 -0
  60. package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -0
  61. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +13 -0
  62. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -0
  63. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +79 -0
  64. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -0
  65. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +78 -0
  66. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -0
  67. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +121 -0
  68. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -0
  69. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +64 -0
  70. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -0
  71. package/build/src/start/server/middleware/inspector/middlwareMutations.js +19 -0
  72. package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -0
  73. package/build/src/start/server/middleware/mutations.js +19 -0
  74. package/build/src/start/server/middleware/mutations.js.map +1 -0
  75. package/build/src/start/server/middleware/remoteDevtoolsCorsMiddleware.js +31 -0
  76. package/build/src/start/server/middleware/remoteDevtoolsCorsMiddleware.js.map +1 -0
  77. package/build/src/start/server/middleware/remoteDevtoolsSecurityHeadersMiddleware.js +17 -0
  78. package/build/src/start/server/middleware/remoteDevtoolsSecurityHeadersMiddleware.js.map +1 -0
  79. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  80. package/build/src/start/server/middleware/suppressErrorMiddleware.js +16 -0
  81. package/build/src/start/server/middleware/suppressErrorMiddleware.js.map +1 -0
  82. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +9 -82
  83. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  84. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  85. package/build/src/utils/codesigning.js.map +1 -1
  86. package/build/src/utils/port.js +45 -17
  87. package/build/src/utils/port.js.map +1 -1
  88. package/package.json +13 -10
  89. package/build/src/start/server/middleware/createDevServerMiddleware.js +0 -24
  90. package/build/src/start/server/middleware/createDevServerMiddleware.js.map +0 -1
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.getFreePortAsync = getFreePortAsync;
6
+ exports.ensurePortAvailabilityAsync = ensurePortAvailabilityAsync;
6
7
  exports.choosePortAsync = choosePortAsync;
7
8
  exports.resolvePortAsync = resolvePortAsync;
8
9
  var _chalk = _interopRequireDefault(require("chalk"));
@@ -48,21 +49,46 @@ async function getFreePortAsync(rangeStart) {
48
49
  }
49
50
  return port;
50
51
  }
52
+ async function ensurePortAvailabilityAsync(projectRoot, { port }) {
53
+ const freePort = await (0, _freeportAsync).default(port, {
54
+ hostnames: [
55
+ null
56
+ ]
57
+ });
58
+ // Check if port has become busy during the build.
59
+ if (freePort === port) {
60
+ return true;
61
+ }
62
+ const isBusy = await isBusyPortRunningSameProcessAsync(projectRoot, {
63
+ port
64
+ });
65
+ if (!isBusy) {
66
+ throw new _errors.CommandError(`Port "${port}" became busy running another process while the app was compiling. Re-run command to use a new port.`);
67
+ }
68
+ // Log that the dev server will not be started and that the logs will appear in another window.
69
+ Log.log("\u203A The dev server for this app is already running in another window. Logs will appear there.");
70
+ return false;
71
+ }
72
+ function isRestrictedPort(port) {
73
+ if (process.platform !== "win32" && port < 1024) {
74
+ const isRoot = process.getuid && process.getuid() === 0;
75
+ return !isRoot;
76
+ }
77
+ return false;
78
+ }
79
+ async function isBusyPortRunningSameProcessAsync(projectRoot, { port }) {
80
+ const { getRunningProcess } = require("./getRunningProcess");
81
+ const runningProcess = isRestrictedPort(port) ? null : getRunningProcess(port);
82
+ if (runningProcess) {
83
+ if (runningProcess.directory === projectRoot) {
84
+ return true;
85
+ } else {
86
+ return false;
87
+ }
88
+ }
89
+ return null;
90
+ }
51
91
  async function choosePortAsync(projectRoot, { defaultPort , host , reuseExistingPort }) {
52
- const [{ getRunningProcess }, { confirmAsync }, isRoot, Log1] = await Promise.all([
53
- Promise.resolve().then(function() {
54
- return _interopRequireWildcard(require("./getRunningProcess"));
55
- }),
56
- Promise.resolve().then(function() {
57
- return _interopRequireWildcard(require("./prompts"));
58
- }),
59
- Promise.resolve().then(function() {
60
- return _interopRequireWildcard(require("is-root"));
61
- }),
62
- Promise.resolve().then(function() {
63
- return _interopRequireWildcard(require("../log"));
64
- }),
65
- ]);
66
92
  try {
67
93
  const port = await (0, _freeportAsync).default(defaultPort, {
68
94
  hostnames: [
@@ -72,8 +98,9 @@ async function choosePortAsync(projectRoot, { defaultPort , host , reuseExisting
72
98
  if (port === defaultPort) {
73
99
  return port;
74
100
  }
75
- const isRestricted = process.platform !== "win32" && defaultPort < 1024 && !isRoot.default();
101
+ const isRestricted = isRestrictedPort(port);
76
102
  let message = isRestricted ? `Admin permissions are required to run a server on a port below 1024` : `Port ${_chalk.default.bold(defaultPort)} is`;
103
+ const { getRunningProcess } = require("./getRunningProcess");
77
104
  const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);
78
105
  if (runningProcess) {
79
106
  const pidTag = _chalk.default.gray(`(pid ${runningProcess.pid})`);
@@ -89,7 +116,8 @@ async function choosePortAsync(projectRoot, { defaultPort , host , reuseExisting
89
116
  } else {
90
117
  message += " being used by another process";
91
118
  }
92
- Log1.log(`\u203A ${message}`);
119
+ Log.log(`\u203A ${message}`);
120
+ const { confirmAsync } = require("./prompts");
93
121
  const change = await confirmAsync({
94
122
  message: `Use port ${port} instead?`,
95
123
  initial: true
@@ -99,7 +127,7 @@ async function choosePortAsync(projectRoot, { defaultPort , host , reuseExisting
99
127
  if (error.code === "ABORTED") {
100
128
  throw error;
101
129
  } else if (error.code === "NON_INTERACTIVE") {
102
- Log1.warn(_chalk.default.yellow(error.message));
130
+ Log.warn(_chalk.default.yellow(error.message));
103
131
  return null;
104
132
  }
105
133
  throw error;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/port.ts"],"sourcesContent":["import chalk from 'chalk';\nimport freeportAsync from 'freeport-async';\n\nimport { env } from './env';\nimport { CommandError } from './errors';\nimport * as Log from '../log';\n\n/** Get a free port or assert a CLI command error. */\nexport async function getFreePortAsync(rangeStart: number): Promise<number> {\n const port = await freeportAsync(rangeStart, { hostnames: [null, 'localhost'] });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', 'No available port found');\n }\n\n return port;\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function choosePortAsync(\n projectRoot: string,\n {\n defaultPort,\n host,\n reuseExistingPort,\n }: {\n defaultPort: number;\n host?: string;\n reuseExistingPort?: boolean;\n }\n): Promise<number | null> {\n const [{ getRunningProcess }, { confirmAsync }, isRoot, Log] = await Promise.all([\n import('./getRunningProcess'),\n import('./prompts'),\n import('is-root'),\n import('../log'),\n ]);\n\n try {\n const port = await freeportAsync(defaultPort, { hostnames: [host ?? null] });\n if (port === defaultPort) {\n return port;\n }\n\n const isRestricted = process.platform !== 'win32' && defaultPort < 1024 && !isRoot.default();\n\n let message = isRestricted\n ? `Admin permissions are required to run a server on a port below 1024`\n : `Port ${chalk.bold(defaultPort)} is`;\n\n const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);\n\n if (runningProcess) {\n const pidTag = chalk.gray(`(pid ${runningProcess.pid})`);\n if (runningProcess.directory === projectRoot) {\n message += ` running this app in another window`;\n if (reuseExistingPort) {\n return null;\n }\n } else {\n message += ` running ${chalk.cyan(runningProcess.command)} in another window`;\n }\n message += '\\n' + chalk.gray(` ${runningProcess.directory} ${pidTag}`);\n } else {\n message += ' being used by another process';\n }\n\n Log.log(`\\u203A ${message}`);\n const change = await confirmAsync({\n message: `Use port ${port} instead?`,\n initial: true,\n });\n return change ? port : null;\n } catch (error: any) {\n if (error.code === 'ABORTED') {\n throw error;\n } else if (error.code === 'NON_INTERACTIVE') {\n Log.warn(chalk.yellow(error.message));\n return null;\n }\n throw error;\n }\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function resolvePortAsync(\n projectRoot: string,\n {\n /** Should opt to reuse a port that is running the same project in another window. */\n reuseExistingPort,\n /** Preferred port. */\n defaultPort,\n /** Backup port for when the default isn't available. */\n fallbackPort,\n }: {\n reuseExistingPort?: boolean;\n defaultPort?: string | number;\n fallbackPort?: number;\n } = {}\n): Promise<number | null> {\n let port: number;\n if (typeof defaultPort === 'string') {\n port = parseInt(defaultPort, 10);\n } else if (typeof defaultPort === 'number') {\n port = defaultPort;\n } else {\n port = env.RCT_METRO_PORT || fallbackPort || 8081;\n }\n\n // Only check the port when the bundler is running.\n const resolvedPort = await choosePortAsync(projectRoot, {\n defaultPort: port,\n reuseExistingPort,\n });\n if (resolvedPort == null) {\n Log.log('\\u203A Skipping dev server');\n // Skip bundling if the port is null\n } else {\n // Use the new or resolved port\n process.env.RCT_METRO_PORT = String(resolvedPort);\n }\n\n return resolvedPort;\n}\n"],"names":["getFreePortAsync","choosePortAsync","resolvePortAsync","Log","rangeStart","port","freeportAsync","hostnames","CommandError","projectRoot","defaultPort","host","reuseExistingPort","getRunningProcess","confirmAsync","isRoot","Promise","all","isRestricted","process","platform","default","message","chalk","bold","runningProcess","pidTag","gray","pid","directory","cyan","command","log","change","initial","error","code","warn","yellow","fallbackPort","parseInt","env","RCT_METRO_PORT","resolvedPort","String"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/port.ts"],"sourcesContent":["import chalk from 'chalk';\nimport freeportAsync from 'freeport-async';\n\nimport { env } from './env';\nimport { CommandError } from './errors';\nimport * as Log from '../log';\n\n/** Get a free port or assert a CLI command error. */\nexport async function getFreePortAsync(rangeStart: number): Promise<number> {\n const port = await freeportAsync(rangeStart, { hostnames: [null, 'localhost'] });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', 'No available port found');\n }\n\n return port;\n}\n\n/** @return `true` if the port can still be used to start the dev server, `false` if the dev server should be skipped, and asserts if the port is now taken. */\nexport async function ensurePortAvailabilityAsync(\n projectRoot: string,\n { port }: { port: number }\n): Promise<boolean> {\n const freePort = await freeportAsync(port, { hostnames: [null] });\n // Check if port has become busy during the build.\n if (freePort === port) {\n return true;\n }\n\n const isBusy = await isBusyPortRunningSameProcessAsync(projectRoot, { port });\n if (!isBusy) {\n throw new CommandError(\n `Port \"${port}\" became busy running another process while the app was compiling. Re-run command to use a new port.`\n );\n }\n\n // Log that the dev server will not be started and that the logs will appear in another window.\n Log.log(\n '› The dev server for this app is already running in another window. Logs will appear there.'\n );\n return false;\n}\n\nfunction isRestrictedPort(port: number) {\n if (process.platform !== 'win32' && port < 1024) {\n const isRoot = process.getuid && process.getuid() === 0;\n return !isRoot;\n }\n return false;\n}\n\nasync function isBusyPortRunningSameProcessAsync(projectRoot: string, { port }: { port: number }) {\n const { getRunningProcess } =\n require('./getRunningProcess') as typeof import('./getRunningProcess');\n\n const runningProcess = isRestrictedPort(port) ? null : getRunningProcess(port);\n if (runningProcess) {\n if (runningProcess.directory === projectRoot) {\n return true;\n } else {\n return false;\n }\n }\n\n return null;\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function choosePortAsync(\n projectRoot: string,\n {\n defaultPort,\n host,\n reuseExistingPort,\n }: {\n defaultPort: number;\n host?: string;\n reuseExistingPort?: boolean;\n }\n): Promise<number | null> {\n try {\n const port = await freeportAsync(defaultPort, { hostnames: [host ?? null] });\n if (port === defaultPort) {\n return port;\n }\n\n const isRestricted = isRestrictedPort(port);\n\n let message = isRestricted\n ? `Admin permissions are required to run a server on a port below 1024`\n : `Port ${chalk.bold(defaultPort)} is`;\n\n const { getRunningProcess } =\n require('./getRunningProcess') as typeof import('./getRunningProcess');\n const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);\n\n if (runningProcess) {\n const pidTag = chalk.gray(`(pid ${runningProcess.pid})`);\n if (runningProcess.directory === projectRoot) {\n message += ` running this app in another window`;\n if (reuseExistingPort) {\n return null;\n }\n } else {\n message += ` running ${chalk.cyan(runningProcess.command)} in another window`;\n }\n message += '\\n' + chalk.gray(` ${runningProcess.directory} ${pidTag}`);\n } else {\n message += ' being used by another process';\n }\n\n Log.log(`\\u203A ${message}`);\n const { confirmAsync } = require('./prompts') as typeof import('./prompts');\n const change = await confirmAsync({\n message: `Use port ${port} instead?`,\n initial: true,\n });\n return change ? port : null;\n } catch (error: any) {\n if (error.code === 'ABORTED') {\n throw error;\n } else if (error.code === 'NON_INTERACTIVE') {\n Log.warn(chalk.yellow(error.message));\n return null;\n }\n throw error;\n }\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function resolvePortAsync(\n projectRoot: string,\n {\n /** Should opt to reuse a port that is running the same project in another window. */\n reuseExistingPort,\n /** Preferred port. */\n defaultPort,\n /** Backup port for when the default isn't available. */\n fallbackPort,\n }: {\n reuseExistingPort?: boolean;\n defaultPort?: string | number;\n fallbackPort?: number;\n } = {}\n): Promise<number | null> {\n let port: number;\n if (typeof defaultPort === 'string') {\n port = parseInt(defaultPort, 10);\n } else if (typeof defaultPort === 'number') {\n port = defaultPort;\n } else {\n port = env.RCT_METRO_PORT || fallbackPort || 8081;\n }\n\n // Only check the port when the bundler is running.\n const resolvedPort = await choosePortAsync(projectRoot, {\n defaultPort: port,\n reuseExistingPort,\n });\n if (resolvedPort == null) {\n Log.log('\\u203A Skipping dev server');\n // Skip bundling if the port is null\n } else {\n // Use the new or resolved port\n process.env.RCT_METRO_PORT = String(resolvedPort);\n }\n\n return resolvedPort;\n}\n"],"names":["getFreePortAsync","ensurePortAvailabilityAsync","choosePortAsync","resolvePortAsync","Log","rangeStart","port","freeportAsync","hostnames","CommandError","projectRoot","freePort","isBusy","isBusyPortRunningSameProcessAsync","log","isRestrictedPort","process","platform","isRoot","getuid","getRunningProcess","require","runningProcess","directory","defaultPort","host","reuseExistingPort","isRestricted","message","chalk","bold","pidTag","gray","pid","cyan","command","confirmAsync","change","initial","error","code","warn","yellow","fallbackPort","parseInt","env","RCT_METRO_PORT","resolvedPort","String"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -40,14 +40,13 @@
40
40
  "@babel/runtime": "^7.20.0",
41
41
  "@expo/code-signing-certificates": "0.0.5",
42
42
  "@expo/config": "~8.3.0",
43
- "@expo/config-plugins": "~7.4.0",
44
- "@expo/dev-server": "0.7.0",
43
+ "@expo/config-plugins": "~7.5.0",
45
44
  "@expo/devcert": "^1.0.0",
46
45
  "@expo/env": "~0.1.0",
47
46
  "@expo/json-file": "^8.2.37",
48
- "@expo/metro-config": "~0.12.0",
47
+ "@expo/metro-config": "~0.13.0",
49
48
  "@expo/osascript": "^2.0.31",
50
- "@expo/package-manager": "~1.0.0",
49
+ "@expo/package-manager": "^1.1.1",
51
50
  "@expo/plist": "^0.0.20",
52
51
  "@expo/prebuild-config": "6.4.0",
53
52
  "@expo/rudder-sdk-node": "1.1.1",
@@ -73,12 +72,11 @@
73
72
  "graphql-tag": "^2.10.1",
74
73
  "https-proxy-agent": "^5.0.1",
75
74
  "internal-ip": "4.3.0",
76
- "is-root": "^2.1.0",
77
75
  "js-yaml": "^3.13.1",
78
76
  "json-schema-deref-sync": "^0.13.0",
79
77
  "md5hex": "^1.0.0",
80
78
  "minimatch": "^3.0.4",
81
- "minipass": "3.1.6",
79
+ "minipass": "3.3.6",
82
80
  "node-fetch": "^2.6.7",
83
81
  "node-forge": "^1.3.1",
84
82
  "npm-package-arg": "^7.0.0",
@@ -100,7 +98,12 @@
100
98
  "text-table": "^0.2.0",
101
99
  "url-join": "4.0.0",
102
100
  "wrap-ansi": "^7.0.0",
103
- "ws": "^8.12.1"
101
+ "ws": "^8.12.1",
102
+ "connect": "^3.7.0",
103
+ "is-docker": "^2.0.0",
104
+ "is-wsl": "^2.1.1",
105
+ "open": "^8.3.0",
106
+ "temp-dir": "^2.0.0"
104
107
  },
105
108
  "taskr": {
106
109
  "requires": [
@@ -121,13 +124,13 @@
121
124
  "@tsconfig/node14": "^1.0.1",
122
125
  "@types/accepts": "^1.3.5",
123
126
  "@types/cacache": "^15.0.1",
127
+ "@types/connect": "^3.4.33",
124
128
  "@types/debug": "^4.1.7",
125
129
  "@types/execa": "^0.9.0",
126
130
  "@types/form-data": "^2.2.0",
127
131
  "@types/getenv": "^1.0.0",
128
132
  "@types/js-yaml": "^3.12.2",
129
133
  "@types/klaw-sync": "^6.0.0",
130
- "@types/minipass": "^3.1.2",
131
134
  "@types/npm-package-arg": "^6.1.0",
132
135
  "@types/progress": "^2.0.5",
133
136
  "@types/prompts": "^2.0.6",
@@ -153,5 +156,5 @@
153
156
  "jest-runner-tsd": "^6.0.0",
154
157
  "tsd": "^0.28.1"
155
158
  },
156
- "gitHead": "79607a7325f47aa17c36d266100d09a4ff2cc544"
159
+ "gitHead": "ee2c866ba3c7fbc35ff2a3e896041cf15d3bd7c5"
157
160
  }
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- exports.createDevServerMiddleware = createDevServerMiddleware;
6
- var _devServer = require("@expo/dev-server");
7
- function createDevServerMiddleware(projectRoot, { watchFolders , port }) {
8
- const shim = function() {};
9
- return (0, _devServer).createDevServerMiddleware(projectRoot, {
10
- // Attach a fake logger to the expo `/logs` middleware so we can collect devices for analytics.
11
- // We utilize the WebSocket logs now so we don't need to print anything.
12
- // TODO: Migrate to a system that uses WebSockets so we can detect when a device disconnects.
13
- logger: {
14
- info: shim,
15
- warn: shim,
16
- error: shim,
17
- debug: shim
18
- },
19
- port,
20
- watchFolders
21
- });
22
- }
23
-
24
- //# sourceMappingURL=createDevServerMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/createDevServerMiddleware.ts"],"sourcesContent":["import { createDevServerMiddleware as originalCreate } from '@expo/dev-server';\n\nexport function createDevServerMiddleware(\n projectRoot: string,\n {\n watchFolders,\n port,\n }: {\n watchFolders: readonly string[];\n port: number;\n }\n) {\n const shim = function () {};\n\n return originalCreate(projectRoot, {\n // Attach a fake logger to the expo `/logs` middleware so we can collect devices for analytics.\n // We utilize the WebSocket logs now so we don't need to print anything.\n // TODO: Migrate to a system that uses WebSockets so we can detect when a device disconnects.\n logger: {\n info: shim,\n warn: shim,\n error: shim,\n debug: shim,\n } as any,\n port,\n watchFolders,\n });\n}\n"],"names":["createDevServerMiddleware","projectRoot","watchFolders","port","shim","originalCreate","logger","info","warn","error","debug"],"mappings":"AAAA;;;;QAEgBA,yBAAyB,GAAzBA,yBAAyB;AAFmB,IAAA,UAAkB,WAAlB,kBAAkB,CAAA;AAEvE,SAASA,yBAAyB,CACvCC,WAAmB,EACnB,EACEC,YAAY,CAAA,EACZC,IAAI,CAAA,EAIL,EACD;IACA,MAAMC,IAAI,GAAG,WAAY,EAAE,AAAC;IAE5B,OAAOC,CAAAA,GAAAA,UAAc,AAYnB,CAAA,0BAZmB,CAACJ,WAAW,EAAE;QACjC,+FAA+F;QAC/F,wEAAwE;QACxE,6FAA6F;QAC7FK,MAAM,EAAE;YACNC,IAAI,EAAEH,IAAI;YACVI,IAAI,EAAEJ,IAAI;YACVK,KAAK,EAAEL,IAAI;YACXM,KAAK,EAAEN,IAAI;SACZ;QACDD,IAAI;QACJD,YAAY;KACb,CAAC,CAAC;CACJ"}