@expo/cli 55.0.9 → 55.0.11

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 (43) hide show
  1. package/build/bin/cli +5 -1
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/events/builder.js +6 -0
  4. package/build/src/events/builder.js.map +1 -0
  5. package/build/src/events/index.js +132 -0
  6. package/build/src/events/index.js.map +1 -0
  7. package/build/src/events/stream.js +303 -0
  8. package/build/src/events/stream.js.map +1 -0
  9. package/build/src/events/types.js +6 -0
  10. package/build/src/events/types.js.map +1 -0
  11. package/build/src/export/exportAssets.js +10 -9
  12. package/build/src/export/exportAssets.js.map +1 -1
  13. package/build/src/run/android/resolveGradlePropsAsync.js +22 -9
  14. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
  15. package/build/src/start/interface/interactiveActions.js +15 -13
  16. package/build/src/start/interface/interactiveActions.js.map +1 -1
  17. package/build/src/start/platforms/ios/devicectl.js +27 -5
  18. package/build/src/start/platforms/ios/devicectl.js.map +1 -1
  19. package/build/src/start/server/DevToolsPluginManager.js +10 -1
  20. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  21. package/build/src/start/server/metro/MetroBundlerDevServer.js +27 -3
  22. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  23. package/build/src/start/server/metro/MetroTerminalReporter.js +181 -79
  24. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  25. package/build/src/start/server/metro/instantiateMetro.js +53 -14
  26. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  27. package/build/src/start/server/metro/metroErrorInterface.js +3 -5
  28. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  29. package/build/src/start/server/metro/runServer-fork.js +4 -1
  30. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  31. package/build/src/start/server/metro/withMetroMultiPlatform.js +1 -2
  32. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  33. package/build/src/start/startAsync.js +4 -2
  34. package/build/src/start/startAsync.js.map +1 -1
  35. package/build/src/utils/env.js +3 -0
  36. package/build/src/utils/env.js.map +1 -1
  37. package/build/src/utils/interactive.js +2 -1
  38. package/build/src/utils/interactive.js.map +1 -1
  39. package/build/src/utils/nodeEnv.js +29 -2
  40. package/build/src/utils/nodeEnv.js.map +1 -1
  41. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  42. package/build/src/utils/telemetry/utils/context.js +1 -1
  43. package/package.json +11 -12
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/nodeEnv.ts"],"sourcesContent":["import * as env from '@expo/env';\nimport path from 'node:path';\n\ntype EnvOutput = Record<string, string | undefined>;\n\n// TODO(@kitten): We assign this here to run server-side code bundled by metro\n// It's not isolated into a worker thread yet\ndeclare namespace globalThis {\n let __DEV__: boolean | undefined;\n}\n\n/**\n * Set the environment to production or development\n * lots of tools use this to determine if they should run in a dev mode.\n */\nexport function setNodeEnv(mode: 'development' | 'production') {\n process.env.NODE_ENV = process.env.NODE_ENV || mode;\n process.env.BABEL_ENV = process.env.BABEL_ENV || process.env.NODE_ENV;\n globalThis.__DEV__ = process.env.NODE_ENV !== 'production';\n}\n\ninterface LoadEnvFilesOptions {\n force?: boolean;\n silent?: boolean;\n mode?: string;\n}\n\nlet prevEnvKeys: Set<string> | undefined;\n\n/**\n * Load the dotenv files into the current `process.env` scope.\n * Note, this requires `NODE_ENV` being set through `setNodeEnv`.\n */\nexport function loadEnvFiles(projectRoot: string, options?: LoadEnvFilesOptions) {\n const params = {\n ...options,\n force: !!options?.force,\n silent: !!options?.silent,\n mode: process.env.NODE_ENV,\n systemEnv: process.env,\n };\n\n const envInfo = env.loadProjectEnv(projectRoot, params);\n const envOutput: EnvOutput = {};\n if (envInfo.result === 'loaded') {\n prevEnvKeys = new Set();\n for (const key of envInfo.loaded) {\n envOutput[key] = envInfo.env[key] ?? undefined;\n prevEnvKeys.add(key);\n }\n }\n\n env.logLoadedEnv(envInfo, params);\n return process.env;\n}\n\nexport function getEnvFiles(projectRoot: string) {\n return env\n .getEnvFiles({ mode: process.env.NODE_ENV })\n .map((fileName) => path.join(projectRoot, fileName));\n}\n\nexport function reloadEnvFiles(projectRoot: string) {\n const isEnabled = env.isEnabled();\n if (isEnabled) {\n const params = {\n force: true,\n silent: true,\n mode: process.env.NODE_ENV,\n systemEnv: process.env,\n };\n\n // We use a global tracker to allow overwrites of env vars we set ourselves\n const envInfo = env.parseProjectEnv(projectRoot, params);\n const envOutput: EnvOutput = {};\n for (const key in envInfo.env) {\n const value = envInfo.env[key];\n if (process.env[key] !== value) {\n if (\n typeof process.env[key] === 'undefined' ||\n ((!prevEnvKeys || prevEnvKeys.has(key)) && process.env[key] !== value)\n ) {\n (prevEnvKeys ||= new Set()).add(key);\n process.env[key] = envInfo.env[key];\n envOutput[key] = value ?? undefined;\n }\n }\n }\n }\n}\n"],"names":["getEnvFiles","loadEnvFiles","reloadEnvFiles","setNodeEnv","mode","process","env","NODE_ENV","BABEL_ENV","globalThis","__DEV__","prevEnvKeys","projectRoot","options","params","force","silent","systemEnv","envInfo","loadProjectEnv","envOutput","result","Set","key","loaded","undefined","add","logLoadedEnv","map","fileName","path","join","isEnabled","parseProjectEnv","value","has"],"mappings":";;;;;;;;;;;IAwDgBA,WAAW;eAAXA;;IAvBAC,YAAY;eAAZA;;IA6BAC,cAAc;eAAdA;;IA/CAC,UAAU;eAAVA;;;;iEAfK;;;;;;;gEACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcV,SAASA,WAAWC,IAAkC;IAC3DC,QAAQC,GAAG,CAACC,QAAQ,GAAGF,QAAQC,GAAG,CAACC,QAAQ,IAAIH;IAC/CC,QAAQC,GAAG,CAACE,SAAS,GAAGH,QAAQC,GAAG,CAACE,SAAS,IAAIH,QAAQC,GAAG,CAACC,QAAQ;IACrEE,WAAWC,OAAO,GAAGL,QAAQC,GAAG,CAACC,QAAQ,KAAK;AAChD;AAQA,IAAII;AAMG,SAASV,aAAaW,WAAmB,EAAEC,OAA6B;IAC7E,MAAMC,SAAS;QACb,GAAGD,OAAO;QACVE,OAAO,CAAC,EAACF,2BAAAA,QAASE,KAAK;QACvBC,QAAQ,CAAC,EAACH,2BAAAA,QAASG,MAAM;QACzBZ,MAAMC,QAAQC,GAAG,CAACC,QAAQ;QAC1BU,WAAWZ,QAAQC,GAAG;IACxB;IAEA,MAAMY,UAAUZ,OAAIa,cAAc,CAACP,aAAaE;IAChD,MAAMM,YAAuB,CAAC;IAC9B,IAAIF,QAAQG,MAAM,KAAK,UAAU;QAC/BV,cAAc,IAAIW;QAClB,KAAK,MAAMC,OAAOL,QAAQM,MAAM,CAAE;YAChCJ,SAAS,CAACG,IAAI,GAAGL,QAAQZ,GAAG,CAACiB,IAAI,IAAIE;YACrCd,YAAYe,GAAG,CAACH;QAClB;IACF;IAEAjB,OAAIqB,YAAY,CAACT,SAASJ;IAC1B,OAAOT,QAAQC,GAAG;AACpB;AAEO,SAASN,YAAYY,WAAmB;IAC7C,OAAON,OACJN,WAAW,CAAC;QAAEI,MAAMC,QAAQC,GAAG,CAACC,QAAQ;IAAC,GACzCqB,GAAG,CAAC,CAACC,WAAaC,mBAAI,CAACC,IAAI,CAACnB,aAAaiB;AAC9C;AAEO,SAAS3B,eAAeU,WAAmB;IAChD,MAAMoB,YAAY1B,OAAI0B,SAAS;IAC/B,IAAIA,WAAW;QACb,MAAMlB,SAAS;YACbC,OAAO;YACPC,QAAQ;YACRZ,MAAMC,QAAQC,GAAG,CAACC,QAAQ;YAC1BU,WAAWZ,QAAQC,GAAG;QACxB;QAEA,2EAA2E;QAC3E,MAAMY,UAAUZ,OAAI2B,eAAe,CAACrB,aAAaE;QACjD,MAAMM,YAAuB,CAAC;QAC9B,IAAK,MAAMG,OAAOL,QAAQZ,GAAG,CAAE;YAC7B,MAAM4B,QAAQhB,QAAQZ,GAAG,CAACiB,IAAI;YAC9B,IAAIlB,QAAQC,GAAG,CAACiB,IAAI,KAAKW,OAAO;gBAC9B,IACE,OAAO7B,QAAQC,GAAG,CAACiB,IAAI,KAAK,eAC3B,AAAC,CAAA,CAACZ,eAAeA,YAAYwB,GAAG,CAACZ,IAAG,KAAMlB,QAAQC,GAAG,CAACiB,IAAI,KAAKW,OAChE;oBACCvB,CAAAA,gBAAgB,IAAIW,KAAI,EAAGI,GAAG,CAACH;oBAChClB,QAAQC,GAAG,CAACiB,IAAI,GAAGL,QAAQZ,GAAG,CAACiB,IAAI;oBACnCH,SAAS,CAACG,IAAI,GAAGW,SAAST;gBAC5B;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/utils/nodeEnv.ts"],"sourcesContent":["import * as env from '@expo/env';\nimport path from 'node:path';\n\nimport { events, shouldReduceLogs } from '../events';\n\ntype EnvOutput = Record<string, string | undefined>;\n\n// TODO(@kitten): We assign this here to run server-side code bundled by metro\n// It's not isolated into a worker thread yet\ndeclare namespace globalThis {\n let __DEV__: boolean | undefined;\n}\n\n// prettier-ignore\nexport const event = events('env', (t) => [\n t.event<'mode', {\n nodeEnv: string;\n babelEnv: string;\n mode: 'development' | 'production';\n }>(),\n t.event<'load', {\n mode: string | undefined;\n files: string[];\n env: Record<string, string | undefined>;\n }>(),\n]);\n\n/**\n * Set the environment to production or development\n * lots of tools use this to determine if they should run in a dev mode.\n */\nexport function setNodeEnv(mode: 'development' | 'production') {\n process.env.NODE_ENV = process.env.NODE_ENV || mode;\n process.env.BABEL_ENV = process.env.BABEL_ENV || process.env.NODE_ENV;\n globalThis.__DEV__ = process.env.NODE_ENV !== 'production';\n\n event('mode', {\n nodeEnv: process.env.NODE_ENV,\n babelEnv: process.env.BABEL_ENV,\n mode,\n });\n}\n\ninterface LoadEnvFilesOptions {\n force?: boolean;\n silent?: boolean;\n mode?: string;\n}\n\nlet prevEnvKeys: Set<string> | undefined;\n\n/**\n * Load the dotenv files into the current `process.env` scope.\n * Note, this requires `NODE_ENV` being set through `setNodeEnv`.\n */\nexport function loadEnvFiles(projectRoot: string, options?: LoadEnvFilesOptions) {\n const params = {\n ...options,\n silent: !!options?.silent || shouldReduceLogs(),\n force: !!options?.force,\n mode: process.env.NODE_ENV,\n systemEnv: process.env,\n };\n\n const envInfo = env.loadProjectEnv(projectRoot, params);\n const envOutput: EnvOutput = {};\n if (envInfo.result === 'loaded') {\n prevEnvKeys = new Set();\n for (const key of envInfo.loaded) {\n envOutput[key] = envInfo.env[key] ?? undefined;\n prevEnvKeys.add(key);\n }\n }\n\n if (envInfo.result === 'loaded') {\n event('load', {\n mode: params.mode,\n files: envInfo.files.map((file) => event.path(file)),\n env: envOutput,\n });\n }\n\n if (!params.silent) {\n env.logLoadedEnv(envInfo, params);\n }\n return process.env;\n}\n\nexport function getEnvFiles(projectRoot: string) {\n return env\n .getEnvFiles({ mode: process.env.NODE_ENV })\n .map((fileName) => path.join(projectRoot, fileName));\n}\n\nexport function reloadEnvFiles(projectRoot: string) {\n const isEnabled = env.isEnabled();\n if (isEnabled) {\n const params = {\n force: true,\n silent: true,\n mode: process.env.NODE_ENV,\n systemEnv: process.env,\n };\n\n // We use a global tracker to allow overwrites of env vars we set ourselves\n const envInfo = env.parseProjectEnv(projectRoot, params);\n const envOutput: EnvOutput = {};\n for (const key in envInfo.env) {\n const value = envInfo.env[key];\n if (process.env[key] !== value) {\n if (\n typeof process.env[key] === 'undefined' ||\n ((!prevEnvKeys || prevEnvKeys.has(key)) && process.env[key] !== value)\n ) {\n (prevEnvKeys ||= new Set()).add(key);\n process.env[key] = envInfo.env[key];\n envOutput[key] = value ?? undefined;\n }\n }\n }\n\n event('load', {\n mode: params.mode,\n files: envInfo.files.map((file) => event.path(file)),\n env: envOutput,\n });\n }\n}\n"],"names":["event","getEnvFiles","loadEnvFiles","reloadEnvFiles","setNodeEnv","events","t","mode","process","env","NODE_ENV","BABEL_ENV","globalThis","__DEV__","nodeEnv","babelEnv","prevEnvKeys","projectRoot","options","params","silent","shouldReduceLogs","force","systemEnv","envInfo","loadProjectEnv","envOutput","result","Set","key","loaded","undefined","add","files","map","file","path","logLoadedEnv","fileName","join","isEnabled","parseProjectEnv","value","has"],"mappings":"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"}
@@ -26,7 +26,7 @@ class FetchClient {
26
26
  this.headers = {
27
27
  accept: 'application/json',
28
28
  'content-type': 'application/json',
29
- 'user-agent': `expo-cli/${"55.0.9"}`,
29
+ 'user-agent': `expo-cli/${"55.0.11"}`,
30
30
  authorization: 'Basic ' + _nodebuffer().Buffer.from(`${target}:`).toString('base64')
31
31
  };
32
32
  }
@@ -83,7 +83,7 @@ function createContext() {
83
83
  cpu: summarizeCpuInfo(),
84
84
  app: {
85
85
  name: 'expo/cli',
86
- version: "55.0.9"
86
+ version: "55.0.11"
87
87
  },
88
88
  ci: _ciinfo().isCI ? {
89
89
  name: _ciinfo().name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "55.0.9",
3
+ "version": "55.0.11",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -41,21 +41,21 @@
41
41
  "homepage": "https://github.com/expo/expo/tree/main/packages/@expo/cli",
42
42
  "dependencies": {
43
43
  "@expo/code-signing-certificates": "^0.0.6",
44
- "@expo/config": "~55.0.6",
45
- "@expo/config-plugins": "~55.0.5",
44
+ "@expo/config": "~55.0.8",
45
+ "@expo/config-plugins": "~55.0.6",
46
46
  "@expo/devcert": "^1.2.1",
47
47
  "@expo/env": "~2.1.1",
48
48
  "@expo/image-utils": "^0.8.12",
49
49
  "@expo/json-file": "^10.0.12",
50
50
  "@expo/log-box": "55.0.7",
51
51
  "@expo/metro": "~54.2.0",
52
- "@expo/metro-config": "~55.0.6",
52
+ "@expo/metro-config": "~55.0.8",
53
53
  "@expo/osascript": "^2.4.2",
54
54
  "@expo/package-manager": "^1.10.3",
55
55
  "@expo/plist": "^0.5.2",
56
- "@expo/prebuild-config": "^55.0.5",
57
- "@expo/require-utils": "^55.0.0",
58
- "@expo/router-server": "^55.0.6",
56
+ "@expo/prebuild-config": "^55.0.7",
57
+ "@expo/require-utils": "^55.0.2",
58
+ "@expo/router-server": "^55.0.8",
59
59
  "@expo/schema-utils": "^55.0.2",
60
60
  "@expo/spawn-async": "^1.7.2",
61
61
  "@expo/ws-tunnel": "^1.0.1",
@@ -72,17 +72,16 @@
72
72
  "connect": "^3.7.0",
73
73
  "debug": "^4.3.4",
74
74
  "dnssd-advertise": "^1.1.3",
75
- "expo-server": "^55.0.4",
75
+ "expo-server": "^55.0.5",
76
76
  "fetch-nodeshim": "^0.4.6",
77
77
  "getenv": "^2.0.0",
78
78
  "glob": "^13.0.0",
79
79
  "lan-network": "^0.2.0",
80
- "minimatch": "^9.0.0",
81
80
  "multitars": "^0.2.3",
82
81
  "node-forge": "^1.3.3",
83
82
  "npm-package-arg": "^11.0.0",
84
83
  "ora": "^3.4.0",
85
- "picomatch": "^3.0.1",
84
+ "picomatch": "^4.0.3",
86
85
  "pretty-format": "^29.7.0",
87
86
  "progress": "^2.0.3",
88
87
  "prompts": "^2.3.2",
@@ -134,7 +133,7 @@
134
133
  "@types/klaw-sync": "^6.0.0",
135
134
  "@types/node": "^22.14.0",
136
135
  "@types/npm-package-arg": "^6.1.0",
137
- "@types/picomatch": "^2.3.3",
136
+ "@types/picomatch": "^4.0.2",
138
137
  "@types/progress": "^2.0.5",
139
138
  "@types/prompts": "^2.0.6",
140
139
  "@types/resolve": "^1.20.2",
@@ -159,5 +158,5 @@
159
158
  "tree-kill": "^1.2.2",
160
159
  "tsd": "^0.28.1"
161
160
  },
162
- "gitHead": "aeb65063e482533ed1119f736555bcca5af2af94"
161
+ "gitHead": "b183e5cbd95eb6ee54a878291c7077d8d63e4850"
163
162
  }