@expo/cli 0.18.7 → 0.18.8

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.
package/build/bin/cli CHANGED
@@ -120,7 +120,7 @@ const args = (0, _arg().default)({
120
120
  });
121
121
  if (args["--version"]) {
122
122
  // Version is added in the build script.
123
- console.log("0.18.7");
123
+ console.log("0.18.8");
124
124
  process.exit(0);
125
125
  }
126
126
  if (args["--non-interactive"]) {
@@ -67,8 +67,7 @@ const expoLogin = async (argv)=>{
67
67
  `-u, --username <string> Username`,
68
68
  `-p, --password <string> Password`,
69
69
  `--otp <string> One-time password from your 2FA device`,
70
- // hiding from help until SSO is public
71
- // `-s, --sso Log in with SSO`,
70
+ `-s, --sso Log in with SSO`,
72
71
  `-h, --help Usage info`,
73
72
  ].join("\n"));
74
73
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/login/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from '../../bin/cli';\nimport { assertArgs, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoLogin: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--username': String,\n '--password': String,\n '--otp': String,\n '--sso': Boolean,\n // Aliases\n '-h': '--help',\n '-u': '--username',\n '-p': '--password',\n '-s': '--sso',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Log in to an Expo account`,\n `npx expo login`,\n [\n `-u, --username <string> Username`,\n `-p, --password <string> Password`,\n `--otp <string> One-time password from your 2FA device`,\n // hiding from help until SSO is public\n // `-s, --sso Log in with SSO`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const { showLoginPromptAsync } = await import('../api/user/actions.js');\n return showLoginPromptAsync({\n // Parsed options\n username: args['--username'],\n password: args['--password'],\n otp: args['--otp'],\n sso: !!args['--sso'],\n }).catch(logCmdError);\n};\n"],"names":["expoLogin","argv","args","assertArgs","Boolean","String","printHelp","join","showLoginPromptAsync","username","password","otp","sso","catch","logCmdError"],"mappings":"AAAA;;;;;+BAKaA,WAAS;;aAATA,SAAS;;sBAHgB,eAAe;wBACzB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,SAAS,GAAY,OAAOC,IAAI,GAAK;IAChD,MAAMC,IAAI,GAAGC,IAAAA,KAAU,WAAA,EACrB;QACE,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,YAAY,EAAEC,MAAM;QACpB,YAAY,EAAEA,MAAM;QACpB,OAAO,EAAEA,MAAM;QACf,OAAO,EAAED,OAAO;QAChB,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;KACd,EACDH,IAAI,CACL,AAAC;IAEF,IAAIC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBI,IAAAA,KAAS,UAAA,EACP,CAAC,yBAAyB,CAAC,EAC3B,CAAC,cAAc,CAAC,EAChB;YACE,CAAC,iCAAiC,CAAC;YACnC,CAAC,iCAAiC,CAAC;YACnC,CAAC,+DAA+D,CAAC;YACjE,uCAAuC;YACvC,8CAA8C;YAC9C,CAAC,mCAAmC,CAAC;SACtC,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,MAAM,EAAEC,oBAAoB,CAAA,EAAE,GAAG,MAAM,iEAAA,OAAM,CAAC,wBAAwB,GAAC,AAAC;IACxE,OAAOA,oBAAoB,CAAC;QAC1B,iBAAiB;QACjBC,QAAQ,EAAEP,IAAI,CAAC,YAAY,CAAC;QAC5BQ,QAAQ,EAAER,IAAI,CAAC,YAAY,CAAC;QAC5BS,GAAG,EAAET,IAAI,CAAC,OAAO,CAAC;QAClBU,GAAG,EAAE,CAAC,CAACV,IAAI,CAAC,OAAO,CAAC;KACrB,CAAC,CAACW,KAAK,CAACC,OAAW,YAAA,CAAC,CAAC;AACxB,CAAC,AAAC"}
1
+ {"version":3,"sources":["../../../src/login/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from '../../bin/cli';\nimport { assertArgs, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoLogin: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--username': String,\n '--password': String,\n '--otp': String,\n '--sso': Boolean,\n // Aliases\n '-h': '--help',\n '-u': '--username',\n '-p': '--password',\n '-s': '--sso',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Log in to an Expo account`,\n `npx expo login`,\n [\n `-u, --username <string> Username`,\n `-p, --password <string> Password`,\n `--otp <string> One-time password from your 2FA device`,\n `-s, --sso Log in with SSO`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const { showLoginPromptAsync } = await import('../api/user/actions.js');\n return showLoginPromptAsync({\n // Parsed options\n username: args['--username'],\n password: args['--password'],\n otp: args['--otp'],\n sso: !!args['--sso'],\n }).catch(logCmdError);\n};\n"],"names":["expoLogin","argv","args","assertArgs","Boolean","String","printHelp","join","showLoginPromptAsync","username","password","otp","sso","catch","logCmdError"],"mappings":"AAAA;;;;;+BAKaA,WAAS;;aAATA,SAAS;;sBAHgB,eAAe;wBACzB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,SAAS,GAAY,OAAOC,IAAI,GAAK;IAChD,MAAMC,IAAI,GAAGC,IAAAA,KAAU,WAAA,EACrB;QACE,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,YAAY,EAAEC,MAAM;QACpB,YAAY,EAAEA,MAAM;QACpB,OAAO,EAAEA,MAAM;QACf,OAAO,EAAED,OAAO;QAChB,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;KACd,EACDH,IAAI,CACL,AAAC;IAEF,IAAIC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBI,IAAAA,KAAS,UAAA,EACP,CAAC,yBAAyB,CAAC,EAC3B,CAAC,cAAc,CAAC,EAChB;YACE,CAAC,iCAAiC,CAAC;YACnC,CAAC,iCAAiC,CAAC;YACnC,CAAC,+DAA+D,CAAC;YACjE,CAAC,wCAAwC,CAAC;YAC1C,CAAC,mCAAmC,CAAC;SACtC,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,MAAM,EAAEC,oBAAoB,CAAA,EAAE,GAAG,MAAM,iEAAA,OAAM,CAAC,wBAAwB,GAAC,AAAC;IACxE,OAAOA,oBAAoB,CAAC;QAC1B,iBAAiB;QACjBC,QAAQ,EAAEP,IAAI,CAAC,YAAY,CAAC;QAC5BQ,QAAQ,EAAER,IAAI,CAAC,YAAY,CAAC;QAC5BS,GAAG,EAAET,IAAI,CAAC,OAAO,CAAC;QAClBU,GAAG,EAAE,CAAC,CAACV,IAAI,CAAC,OAAO,CAAC;KACrB,CAAC,CAACW,KAAK,CAACC,OAAW,YAAA,CAAC,CAAC;AACxB,CAAC,AAAC"}
@@ -20,6 +20,13 @@ function _interopRequireDefault(obj) {
20
20
  default: obj
21
21
  };
22
22
  }
23
+ // Supported ABIs for Android. see https://developer.android.com/ndk/guides/abis
24
+ const VALID_ARCHITECTURES = [
25
+ "armeabi-v7a",
26
+ "arm64-v8a",
27
+ "x86",
28
+ "x86_64"
29
+ ];
23
30
  function assertVariant(variant) {
24
31
  if (variant && typeof variant !== "string") {
25
32
  throw new _errors.CommandError("BAD_ARGS", "--variant must be a string");
@@ -50,7 +57,8 @@ async function getConnectedDeviceABIS(buildType, device, allArch) {
50
57
  return "";
51
58
  }
52
59
  const abis = await (0, _adb.getDeviceABIsAsync)(device);
53
- return abis.filter((abi, i, arr)=>arr.indexOf(abi) === i).join(",");
60
+ const validAbis = abis.filter((abi)=>VALID_ARCHITECTURES.includes(abi));
61
+ return validAbis.filter((abi, i, arr)=>arr.indexOf(abi) === i).join(",");
54
62
  }
55
63
 
56
64
  //# sourceMappingURL=resolveGradlePropsAsync.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/run/android/resolveGradlePropsAsync.ts"],"sourcesContent":["import path from 'path';\n\nimport { Device, getDeviceABIsAsync } from '../../start/platforms/android/adb';\nimport { CommandError } from '../../utils/errors';\n\nexport type GradleProps = {\n /** Directory for the APK based on the `variant`. */\n apkVariantDirectory: string;\n /** Name of the app, used in the `apkVariantDirectory`. */\n appName: string;\n /** First section of the provided `variant`, indicates the last part of the file name for the output APK. */\n buildType: string;\n /** Used to assemble the APK, also included in the output APK filename. */\n flavors?: string[];\n /** Architectures to build for. */\n architectures?: string;\n};\n\nfunction assertVariant(variant?: string) {\n if (variant && typeof variant !== 'string') {\n throw new CommandError('BAD_ARGS', '--variant must be a string');\n }\n return variant ?? 'debug';\n}\n\nexport async function resolveGradlePropsAsync(\n projectRoot: string,\n options: { variant?: string; allArch?: boolean },\n device: Device\n): Promise<GradleProps> {\n const variant = assertVariant(options.variant);\n // NOTE(EvanBacon): Why would this be different? Can we get the different name?\n const appName = 'app';\n\n const apkDirectory = path.join(projectRoot, 'android', appName, 'build', 'outputs', 'apk');\n\n // buildDeveloperTrust -> build, developer, trust (where developer, and trust are flavors).\n // This won't work for non-standard flavor names like \"myFlavor\" would be treated as \"my\", \"flavor\".\n const [buildType, ...flavors] = variant.split(/(?=[A-Z])/).map((v) => v.toLowerCase());\n const apkVariantDirectory = path.join(apkDirectory, ...flavors, buildType);\n const architectures = await getConnectedDeviceABIS(buildType, device, options.allArch);\n\n return {\n appName,\n buildType,\n flavors,\n apkVariantDirectory,\n architectures,\n };\n}\n\nasync function getConnectedDeviceABIS(\n buildType: string,\n device: Device,\n allArch?: boolean\n): Promise<string> {\n // Follow the same behavior as iOS, only enable this for debug builds\n if (allArch || buildType !== 'debug') {\n return '';\n }\n\n const abis = await getDeviceABIsAsync(device);\n return abis.filter((abi, i, arr) => arr.indexOf(abi) === i).join(',');\n}\n"],"names":["resolveGradlePropsAsync","assertVariant","variant","CommandError","projectRoot","options","device","appName","apkDirectory","path","join","buildType","flavors","split","map","v","toLowerCase","apkVariantDirectory","architectures","getConnectedDeviceABIS","allArch","abis","getDeviceABIsAsync","filter","abi","i","arr","indexOf"],"mappings":"AAAA;;;;+BAyBsBA,yBAAuB;;aAAvBA,uBAAuB;;;8DAzB5B,MAAM;;;;;;qBAEoB,mCAAmC;wBACjD,oBAAoB;;;;;;AAejD,SAASC,aAAa,CAACC,OAAgB,EAAE;IACvC,IAAIA,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;QAC1C,MAAM,IAAIC,OAAY,aAAA,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACnE,CAAC;IACD,OAAOD,OAAO,WAAPA,OAAO,GAAI,OAAO,CAAC;AAC5B,CAAC;AAEM,eAAeF,uBAAuB,CAC3CI,WAAmB,EACnBC,OAAgD,EAChDC,MAAc,EACQ;IACtB,MAAMJ,OAAO,GAAGD,aAAa,CAACI,OAAO,CAACH,OAAO,CAAC,AAAC;IAC/C,+EAA+E;IAC/E,MAAMK,OAAO,GAAG,KAAK,AAAC;IAEtB,MAAMC,YAAY,GAAGC,KAAI,EAAA,QAAA,CAACC,IAAI,CAACN,WAAW,EAAE,SAAS,EAAEG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,AAAC;IAE3F,2FAA2F;IAC3F,oGAAoG;IACpG,MAAM,CAACI,SAAS,EAAE,GAAGC,OAAO,CAAC,GAAGV,OAAO,CAACW,KAAK,aAAa,CAACC,GAAG,CAAC,CAACC,CAAC,GAAKA,CAAC,CAACC,WAAW,EAAE,CAAC,AAAC;IACvF,MAAMC,mBAAmB,GAAGR,KAAI,EAAA,QAAA,CAACC,IAAI,CAACF,YAAY,KAAKI,OAAO,EAAED,SAAS,CAAC,AAAC;IAC3E,MAAMO,aAAa,GAAG,MAAMC,sBAAsB,CAACR,SAAS,EAAEL,MAAM,EAAED,OAAO,CAACe,OAAO,CAAC,AAAC;IAEvF,OAAO;QACLb,OAAO;QACPI,SAAS;QACTC,OAAO;QACPK,mBAAmB;QACnBC,aAAa;KACd,CAAC;AACJ,CAAC;AAED,eAAeC,sBAAsB,CACnCR,SAAiB,EACjBL,MAAc,EACdc,OAAiB,EACA;IACjB,qEAAqE;IACrE,IAAIA,OAAO,IAAIT,SAAS,KAAK,OAAO,EAAE;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAMU,IAAI,GAAG,MAAMC,IAAAA,IAAkB,mBAAA,EAAChB,MAAM,CAAC,AAAC;IAC9C,OAAOe,IAAI,CAACE,MAAM,CAAC,CAACC,GAAG,EAAEC,CAAC,EAAEC,GAAG,GAAKA,GAAG,CAACC,OAAO,CAACH,GAAG,CAAC,KAAKC,CAAC,CAAC,CAACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"sources":["../../../../src/run/android/resolveGradlePropsAsync.ts"],"sourcesContent":["import path from 'path';\n\nimport { Device, getDeviceABIsAsync } from '../../start/platforms/android/adb';\nimport { CommandError } from '../../utils/errors';\n\n// Supported ABIs for Android. see https://developer.android.com/ndk/guides/abis\nconst VALID_ARCHITECTURES = ['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'];\n\nexport type GradleProps = {\n /** Directory for the APK based on the `variant`. */\n apkVariantDirectory: string;\n /** Name of the app, used in the `apkVariantDirectory`. */\n appName: string;\n /** First section of the provided `variant`, indicates the last part of the file name for the output APK. */\n buildType: string;\n /** Used to assemble the APK, also included in the output APK filename. */\n flavors?: string[];\n /** Architectures to build for. */\n architectures?: string;\n};\n\nfunction assertVariant(variant?: string) {\n if (variant && typeof variant !== 'string') {\n throw new CommandError('BAD_ARGS', '--variant must be a string');\n }\n return variant ?? 'debug';\n}\n\nexport async function resolveGradlePropsAsync(\n projectRoot: string,\n options: { variant?: string; allArch?: boolean },\n device: Device\n): Promise<GradleProps> {\n const variant = assertVariant(options.variant);\n // NOTE(EvanBacon): Why would this be different? Can we get the different name?\n const appName = 'app';\n\n const apkDirectory = path.join(projectRoot, 'android', appName, 'build', 'outputs', 'apk');\n\n // buildDeveloperTrust -> build, developer, trust (where developer, and trust are flavors).\n // This won't work for non-standard flavor names like \"myFlavor\" would be treated as \"my\", \"flavor\".\n const [buildType, ...flavors] = variant.split(/(?=[A-Z])/).map((v) => v.toLowerCase());\n const apkVariantDirectory = path.join(apkDirectory, ...flavors, buildType);\n const architectures = await getConnectedDeviceABIS(buildType, device, options.allArch);\n\n return {\n appName,\n buildType,\n flavors,\n apkVariantDirectory,\n architectures,\n };\n}\n\nasync function getConnectedDeviceABIS(\n buildType: string,\n device: Device,\n allArch?: boolean\n): Promise<string> {\n // Follow the same behavior as iOS, only enable this for debug builds\n if (allArch || buildType !== 'debug') {\n return '';\n }\n\n const abis = await getDeviceABIsAsync(device);\n\n const validAbis = abis.filter((abi) => VALID_ARCHITECTURES.includes(abi));\n return validAbis.filter((abi, i, arr) => arr.indexOf(abi) === i).join(',');\n}\n"],"names":["resolveGradlePropsAsync","VALID_ARCHITECTURES","assertVariant","variant","CommandError","projectRoot","options","device","appName","apkDirectory","path","join","buildType","flavors","split","map","v","toLowerCase","apkVariantDirectory","architectures","getConnectedDeviceABIS","allArch","abis","getDeviceABIsAsync","validAbis","filter","abi","includes","i","arr","indexOf"],"mappings":"AAAA;;;;+BA4BsBA,yBAAuB;;aAAvBA,uBAAuB;;;8DA5B5B,MAAM;;;;;;qBAEoB,mCAAmC;wBACjD,oBAAoB;;;;;;AAEjD,gFAAgF;AAChF,MAAMC,mBAAmB,GAAG;IAAC,aAAa;IAAE,WAAW;IAAE,KAAK;IAAE,QAAQ;CAAC,AAAC;AAe1E,SAASC,aAAa,CAACC,OAAgB,EAAE;IACvC,IAAIA,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;QAC1C,MAAM,IAAIC,OAAY,aAAA,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACnE,CAAC;IACD,OAAOD,OAAO,WAAPA,OAAO,GAAI,OAAO,CAAC;AAC5B,CAAC;AAEM,eAAeH,uBAAuB,CAC3CK,WAAmB,EACnBC,OAAgD,EAChDC,MAAc,EACQ;IACtB,MAAMJ,OAAO,GAAGD,aAAa,CAACI,OAAO,CAACH,OAAO,CAAC,AAAC;IAC/C,+EAA+E;IAC/E,MAAMK,OAAO,GAAG,KAAK,AAAC;IAEtB,MAAMC,YAAY,GAAGC,KAAI,EAAA,QAAA,CAACC,IAAI,CAACN,WAAW,EAAE,SAAS,EAAEG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,AAAC;IAE3F,2FAA2F;IAC3F,oGAAoG;IACpG,MAAM,CAACI,SAAS,EAAE,GAAGC,OAAO,CAAC,GAAGV,OAAO,CAACW,KAAK,aAAa,CAACC,GAAG,CAAC,CAACC,CAAC,GAAKA,CAAC,CAACC,WAAW,EAAE,CAAC,AAAC;IACvF,MAAMC,mBAAmB,GAAGR,KAAI,EAAA,QAAA,CAACC,IAAI,CAACF,YAAY,KAAKI,OAAO,EAAED,SAAS,CAAC,AAAC;IAC3E,MAAMO,aAAa,GAAG,MAAMC,sBAAsB,CAACR,SAAS,EAAEL,MAAM,EAAED,OAAO,CAACe,OAAO,CAAC,AAAC;IAEvF,OAAO;QACLb,OAAO;QACPI,SAAS;QACTC,OAAO;QACPK,mBAAmB;QACnBC,aAAa;KACd,CAAC;AACJ,CAAC;AAED,eAAeC,sBAAsB,CACnCR,SAAiB,EACjBL,MAAc,EACdc,OAAiB,EACA;IACjB,qEAAqE;IACrE,IAAIA,OAAO,IAAIT,SAAS,KAAK,OAAO,EAAE;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAMU,IAAI,GAAG,MAAMC,IAAAA,IAAkB,mBAAA,EAAChB,MAAM,CAAC,AAAC;IAE9C,MAAMiB,SAAS,GAAGF,IAAI,CAACG,MAAM,CAAC,CAACC,GAAG,GAAKzB,mBAAmB,CAAC0B,QAAQ,CAACD,GAAG,CAAC,CAAC,AAAC;IAC1E,OAAOF,SAAS,CAACC,MAAM,CAAC,CAACC,GAAG,EAAEE,CAAC,EAAEC,GAAG,GAAKA,GAAG,CAACC,OAAO,CAACJ,GAAG,CAAC,KAAKE,CAAC,CAAC,CAACjB,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC"}
@@ -102,6 +102,8 @@ var DeviceABI;
102
102
  DeviceABI["arm64"] = "arm64";
103
103
  DeviceABI["x64"] = "x64";
104
104
  DeviceABI["x86"] = "x86";
105
+ DeviceABI["x8664"] = "x86_64";
106
+ DeviceABI["arm64v8a"] = "arm64-v8a";
105
107
  DeviceABI["armeabiV7a"] = "armeabi-v7a";
106
108
  DeviceABI["armeabi"] = "armeabi";
107
109
  DeviceABI["universal"] = "universal";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/platforms/android/adb.ts"],"sourcesContent":["import chalk from 'chalk';\nimport os from 'os';\n\nimport { ADBServer } from './ADBServer';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { learnMore } from '../../../utils/link';\n\nconst debug = require('debug')('expo:start:platforms:android:adb') as typeof console.log;\n\nexport enum DeviceABI {\n // The arch specific android target platforms are soft-deprecated.\n // Instead of using TargetPlatform as a combination arch + platform\n // the code will be updated to carry arch information in [DarwinArch]\n // and [AndroidArch].\n arm = 'arm',\n arm64 = 'arm64',\n x64 = 'x64',\n x86 = 'x86',\n armeabiV7a = 'armeabi-v7a',\n armeabi = 'armeabi',\n universal = 'universal',\n}\n\n/** Represents a connected Android device. */\nexport type Device = {\n /** Process ID. */\n pid?: string;\n /** Name of the device, also used as the ID for opening devices. */\n name: string;\n /** Is emulator or connected device. */\n type: 'emulator' | 'device';\n /** Is the device booted (emulator). */\n isBooted: boolean;\n /** Is device authorized for developing. https://expo.fyi/authorize-android-device */\n isAuthorized: boolean;\n};\n\ntype DeviceContext = Pick<Device, 'pid'>;\n\ntype DeviceProperties = Record<string, string>;\n\nconst CANT_START_ACTIVITY_ERROR = 'Activity not started, unable to resolve Intent';\n// http://developer.android.com/ndk/guides/abis.html\nconst PROP_CPU_NAME = 'ro.product.cpu.abi';\n\nconst PROP_CPU_ABI_LIST_NAME = 'ro.product.cpu.abilist';\n\n// Can sometimes be null\n// http://developer.android.com/ndk/guides/abis.html\nconst PROP_BOOT_ANIMATION_STATE = 'init.svc.bootanim';\n\nlet _server: ADBServer | null;\n\n/** Return the lazily loaded ADB server instance. */\nexport function getServer() {\n _server ??= new ADBServer();\n return _server;\n}\n\n/** Logs an FYI message about authorizing your device. */\nexport function logUnauthorized(device: Device) {\n Log.warn(\n `\\nThis computer is not authorized for developing on ${chalk.bold(device.name)}. ${chalk.dim(\n learnMore('https://expo.fyi/authorize-android-device')\n )}`\n );\n}\n\n/** Returns true if the provided package name is installed on the provided Android device. */\nexport async function isPackageInstalledAsync(\n device: DeviceContext,\n androidPackage: string\n): Promise<boolean> {\n const packages = await getServer().runAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'pm',\n 'list',\n 'packages',\n '--user',\n env.EXPO_ADB_USER,\n androidPackage\n )\n );\n\n const lines = packages.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line === `package:${androidPackage}`) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.launchActivity Activity to launch `[application identifier]/.[main activity name]`, ex: `com.bacon.app/.MainActivity`\n */\nexport async function launchActivityAsync(\n device: DeviceContext,\n {\n launchActivity,\n }: {\n launchActivity: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'am',\n 'start',\n // FLAG_ACTIVITY_SINGLE_TOP -- If set, the activity will not be launched if it is already running at the top of the history stack.\n '-f',\n '0x20000000',\n // Activity to open first: com.bacon.app/.MainActivity\n '-n',\n launchActivity\n )\n );\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.applicationId package name to launch.\n */\nexport async function openAppIdAsync(\n device: DeviceContext,\n {\n applicationId,\n }: {\n applicationId: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'monkey',\n '-p',\n applicationId,\n '-c',\n 'android.intent.category.LAUNCHER',\n '1'\n )\n );\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.url URL to launch.\n */\nexport async function openUrlAsync(\n device: DeviceContext,\n {\n url,\n }: {\n url: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'am',\n 'start',\n '-a',\n 'android.intent.action.VIEW',\n '-d',\n // ADB requires ampersands to be escaped.\n url.replace(/&/g, String.raw`\\&`)\n )\n );\n}\n\n/** Runs a generic command watches for common errors in order to throw with an expected code. */\nasync function openAsync(args: string[]): Promise<string> {\n const results = await getServer().runAsync(args);\n if (\n results.includes(CANT_START_ACTIVITY_ERROR) ||\n results.match(/Error: Activity class .* does not exist\\./g)\n ) {\n throw new CommandError('APP_NOT_INSTALLED', results.substring(results.indexOf('Error: ')));\n }\n return results;\n}\n\n/** Uninstall an app given its Android package name. */\nexport async function uninstallAsync(\n device: DeviceContext,\n { appId }: { appId: string }\n): Promise<string> {\n return await getServer().runAsync(\n adbArgs(device.pid, 'uninstall', '--user', env.EXPO_ADB_USER, appId)\n );\n}\n\n/** Get package info from an app based on its Android package name. */\nexport async function getPackageInfoAsync(\n device: DeviceContext,\n { appId }: { appId: string }\n): Promise<string> {\n return await getServer().runAsync(adbArgs(device.pid, 'shell', 'dumpsys', 'package', appId));\n}\n\n/** Install an app on a connected device. */\nexport async function installAsync(device: DeviceContext, { filePath }: { filePath: string }) {\n // TODO: Handle the `INSTALL_FAILED_INSUFFICIENT_STORAGE` error.\n return await getServer().runAsync(\n adbArgs(device.pid, 'install', '-r', '-d', '--user', env.EXPO_ADB_USER, filePath)\n );\n}\n\n/** Format ADB args with process ID. */\nexport function adbArgs(pid: Device['pid'], ...options: string[]): string[] {\n const args = [];\n if (pid) {\n args.push('-s', pid);\n }\n\n return args.concat(options);\n}\n\n// TODO: This is very expensive for some operations.\nexport async function getAttachedDevicesAsync(): Promise<Device[]> {\n const output = await getServer().runAsync(['devices', '-l']);\n\n const splitItems = output\n .trim()\n .replace(/\\n$/, '')\n .split(os.EOL)\n // Filter ADB trace logs from the output, e.g.\n // adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:393] adb_query: host:devices-l\n // 03-04 12:29:44.557 16415 16415 D adb : commandline.cpp:1646 Using server socket: tcp:172.27.192.1:5037\n // 03-04 12:29:44.557 16415 16415 D adb : adb_client.cpp:160 _adb_connect: host:version\n .filter((line) => !line.match(/\\.cpp:[0-9]+/));\n\n // First line is `\"List of devices attached\"`, remove it\n // @ts-ignore: todo\n const attachedDevices: {\n props: string[];\n type: Device['type'];\n isAuthorized: Device['isAuthorized'];\n }[] = splitItems\n .slice(1, splitItems.length)\n .map((line) => {\n // unauthorized: ['FA8251A00719', 'unauthorized', 'usb:338690048X', 'transport_id:5']\n // authorized: ['FA8251A00719', 'device', 'usb:336592896X', 'product:walleye', 'model:Pixel_2', 'device:walleye', 'transport_id:4']\n // emulator: ['emulator-5554', 'offline', 'transport_id:1']\n const props = line.split(' ').filter(Boolean);\n\n const isAuthorized = props[1] !== 'unauthorized';\n const type = line.includes('emulator') ? 'emulator' : 'device';\n return { props, type, isAuthorized };\n })\n .filter(({ props: [pid] }) => !!pid);\n\n const devicePromises = attachedDevices.map<Promise<Device>>(async (props) => {\n const {\n type,\n props: [pid, ...deviceInfo],\n isAuthorized,\n } = props;\n\n let name: string | null = null;\n\n if (type === 'device') {\n if (isAuthorized) {\n // Possibly formatted like `model:Pixel_2`\n // Transform to `Pixel_2`\n const modelItem = deviceInfo.find((info) => info.includes('model:'));\n if (modelItem) {\n name = modelItem.replace('model:', '');\n }\n }\n // unauthorized devices don't have a name available to read\n if (!name) {\n // Device FA8251A00719\n name = `Device ${pid}`;\n }\n } else {\n // Given an emulator pid, get the emulator name which can be used to start the emulator later.\n name = (await getAdbNameForDeviceIdAsync({ pid })) ?? '';\n }\n\n return {\n pid,\n name,\n type,\n isAuthorized,\n isBooted: true,\n };\n });\n\n return Promise.all(devicePromises);\n}\n\n/**\n * Return the Emulator name for an emulator ID, this can be used to determine if an emulator is booted.\n *\n * @param device.pid a value like `emulator-5554` from `abd devices`\n */\nexport async function getAdbNameForDeviceIdAsync(device: DeviceContext): Promise<string | null> {\n const results = await getServer().runAsync(adbArgs(device.pid, 'emu', 'avd', 'name'));\n\n if (results.match(/could not connect to TCP port .*: Connection refused/)) {\n // Can also occur when the emulator does not exist.\n throw new CommandError('EMULATOR_NOT_FOUND', results);\n }\n\n return sanitizeAdbDeviceName(results) ?? null;\n}\n\nexport async function isDeviceBootedAsync({\n name,\n}: { name?: string } = {}): Promise<Device | null> {\n const devices = await getAttachedDevicesAsync();\n\n if (!name) {\n return devices[0] ?? null;\n }\n\n return devices.find((device) => device.name === name) ?? null;\n}\n\n/**\n * Returns true when a device's splash screen animation has stopped.\n * This can be used to detect when a device is fully booted and ready to use.\n *\n * @param pid\n */\nexport async function isBootAnimationCompleteAsync(pid?: string): Promise<boolean> {\n try {\n const props = await getPropertyDataForDeviceAsync({ pid }, PROP_BOOT_ANIMATION_STATE);\n return !!props[PROP_BOOT_ANIMATION_STATE].match(/stopped/);\n } catch {\n return false;\n }\n}\n\n/** Get a list of ABIs for the provided device. */\nexport async function getDeviceABIsAsync(\n device: Pick<Device, 'name' | 'pid'>\n): Promise<DeviceABI[]> {\n const cpuAbiList = (await getPropertyDataForDeviceAsync(device, PROP_CPU_ABI_LIST_NAME))[\n PROP_CPU_ABI_LIST_NAME\n ];\n\n if (cpuAbiList) {\n return cpuAbiList.trim().split(',') as DeviceABI[];\n }\n\n const abi = (await getPropertyDataForDeviceAsync(device, PROP_CPU_NAME))[\n PROP_CPU_NAME\n ] as DeviceABI;\n return [abi];\n}\n\nexport async function getPropertyDataForDeviceAsync(\n device: DeviceContext,\n prop?: string\n): Promise<DeviceProperties> {\n // @ts-ignore\n const propCommand = adbArgs(...[device.pid, 'shell', 'getprop', prop].filter(Boolean));\n try {\n // Prevent reading as UTF8.\n const results = await getServer().getFileOutputAsync(propCommand);\n // Like:\n // [wifi.direct.interface]: [p2p-dev-wlan0]\n // [wifi.interface]: [wlan0]\n\n if (prop) {\n debug(`Property data: (device pid: ${device.pid}, prop: ${prop}, data: ${results})`);\n return {\n [prop]: results,\n };\n }\n const props = parseAdbDeviceProperties(results);\n\n debug(`Parsed data:`, props);\n\n return props;\n } catch (error: any) {\n // TODO: Ensure error has message and not stderr\n throw new CommandError(`Failed to get properties for device (${device.pid}): ${error.message}`);\n }\n}\n\nfunction parseAdbDeviceProperties(devicePropertiesString: string) {\n const properties: DeviceProperties = {};\n const propertyExp = /\\[(.*?)\\]: \\[(.*?)\\]/gm;\n for (const match of devicePropertiesString.matchAll(propertyExp)) {\n properties[match[1]] = match[2];\n }\n return properties;\n}\n\n/**\n * Sanitize the ADB device name to only get the actual device name.\n * On Windows, we need to do \\r, \\n, and \\r\\n filtering to get the name.\n */\nexport function sanitizeAdbDeviceName(deviceName: string) {\n return deviceName\n .trim()\n .split(/[\\r\\n]+/)\n .shift();\n}\n"],"names":["getServer","logUnauthorized","isPackageInstalledAsync","launchActivityAsync","openAppIdAsync","openUrlAsync","uninstallAsync","getPackageInfoAsync","installAsync","adbArgs","getAttachedDevicesAsync","getAdbNameForDeviceIdAsync","isDeviceBootedAsync","isBootAnimationCompleteAsync","getDeviceABIsAsync","getPropertyDataForDeviceAsync","sanitizeAdbDeviceName","debug","require","DeviceABI","arm","arm64","x64","x86","armeabiV7a","armeabi","universal","CANT_START_ACTIVITY_ERROR","PROP_CPU_NAME","PROP_CPU_ABI_LIST_NAME","PROP_BOOT_ANIMATION_STATE","_server","ADBServer","device","Log","warn","chalk","bold","name","dim","learnMore","androidPackage","packages","runAsync","pid","env","EXPO_ADB_USER","lines","split","i","length","line","trim","launchActivity","openAsync","applicationId","url","replace","String","raw","args","results","includes","match","CommandError","substring","indexOf","appId","filePath","options","push","concat","output","splitItems","os","EOL","filter","attachedDevices","slice","map","props","Boolean","isAuthorized","type","devicePromises","deviceInfo","modelItem","find","info","isBooted","Promise","all","devices","cpuAbiList","abi","prop","propCommand","getFileOutputAsync","parseAdbDeviceProperties","error","message","devicePropertiesString","properties","propertyExp","matchAll","deviceName","shift"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/platforms/android/adb.ts"],"sourcesContent":["import chalk from 'chalk';\nimport os from 'os';\n\nimport { ADBServer } from './ADBServer';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { learnMore } from '../../../utils/link';\n\nconst debug = require('debug')('expo:start:platforms:android:adb') as typeof console.log;\n\nexport enum DeviceABI {\n // The arch specific android target platforms are soft-deprecated.\n // Instead of using TargetPlatform as a combination arch + platform\n // the code will be updated to carry arch information in [DarwinArch]\n // and [AndroidArch].\n arm = 'arm',\n arm64 = 'arm64',\n x64 = 'x64',\n x86 = 'x86',\n x8664 = 'x86_64',\n arm64v8a = 'arm64-v8a',\n armeabiV7a = 'armeabi-v7a',\n armeabi = 'armeabi',\n universal = 'universal',\n}\n\n/** Represents a connected Android device. */\nexport type Device = {\n /** Process ID. */\n pid?: string;\n /** Name of the device, also used as the ID for opening devices. */\n name: string;\n /** Is emulator or connected device. */\n type: 'emulator' | 'device';\n /** Is the device booted (emulator). */\n isBooted: boolean;\n /** Is device authorized for developing. https://expo.fyi/authorize-android-device */\n isAuthorized: boolean;\n};\n\ntype DeviceContext = Pick<Device, 'pid'>;\n\ntype DeviceProperties = Record<string, string>;\n\nconst CANT_START_ACTIVITY_ERROR = 'Activity not started, unable to resolve Intent';\n// http://developer.android.com/ndk/guides/abis.html\nconst PROP_CPU_NAME = 'ro.product.cpu.abi';\n\nconst PROP_CPU_ABI_LIST_NAME = 'ro.product.cpu.abilist';\n\n// Can sometimes be null\n// http://developer.android.com/ndk/guides/abis.html\nconst PROP_BOOT_ANIMATION_STATE = 'init.svc.bootanim';\n\nlet _server: ADBServer | null;\n\n/** Return the lazily loaded ADB server instance. */\nexport function getServer() {\n _server ??= new ADBServer();\n return _server;\n}\n\n/** Logs an FYI message about authorizing your device. */\nexport function logUnauthorized(device: Device) {\n Log.warn(\n `\\nThis computer is not authorized for developing on ${chalk.bold(device.name)}. ${chalk.dim(\n learnMore('https://expo.fyi/authorize-android-device')\n )}`\n );\n}\n\n/** Returns true if the provided package name is installed on the provided Android device. */\nexport async function isPackageInstalledAsync(\n device: DeviceContext,\n androidPackage: string\n): Promise<boolean> {\n const packages = await getServer().runAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'pm',\n 'list',\n 'packages',\n '--user',\n env.EXPO_ADB_USER,\n androidPackage\n )\n );\n\n const lines = packages.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line === `package:${androidPackage}`) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.launchActivity Activity to launch `[application identifier]/.[main activity name]`, ex: `com.bacon.app/.MainActivity`\n */\nexport async function launchActivityAsync(\n device: DeviceContext,\n {\n launchActivity,\n }: {\n launchActivity: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'am',\n 'start',\n // FLAG_ACTIVITY_SINGLE_TOP -- If set, the activity will not be launched if it is already running at the top of the history stack.\n '-f',\n '0x20000000',\n // Activity to open first: com.bacon.app/.MainActivity\n '-n',\n launchActivity\n )\n );\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.applicationId package name to launch.\n */\nexport async function openAppIdAsync(\n device: DeviceContext,\n {\n applicationId,\n }: {\n applicationId: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'monkey',\n '-p',\n applicationId,\n '-c',\n 'android.intent.category.LAUNCHER',\n '1'\n )\n );\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.url URL to launch.\n */\nexport async function openUrlAsync(\n device: DeviceContext,\n {\n url,\n }: {\n url: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'am',\n 'start',\n '-a',\n 'android.intent.action.VIEW',\n '-d',\n // ADB requires ampersands to be escaped.\n url.replace(/&/g, String.raw`\\&`)\n )\n );\n}\n\n/** Runs a generic command watches for common errors in order to throw with an expected code. */\nasync function openAsync(args: string[]): Promise<string> {\n const results = await getServer().runAsync(args);\n if (\n results.includes(CANT_START_ACTIVITY_ERROR) ||\n results.match(/Error: Activity class .* does not exist\\./g)\n ) {\n throw new CommandError('APP_NOT_INSTALLED', results.substring(results.indexOf('Error: ')));\n }\n return results;\n}\n\n/** Uninstall an app given its Android package name. */\nexport async function uninstallAsync(\n device: DeviceContext,\n { appId }: { appId: string }\n): Promise<string> {\n return await getServer().runAsync(\n adbArgs(device.pid, 'uninstall', '--user', env.EXPO_ADB_USER, appId)\n );\n}\n\n/** Get package info from an app based on its Android package name. */\nexport async function getPackageInfoAsync(\n device: DeviceContext,\n { appId }: { appId: string }\n): Promise<string> {\n return await getServer().runAsync(adbArgs(device.pid, 'shell', 'dumpsys', 'package', appId));\n}\n\n/** Install an app on a connected device. */\nexport async function installAsync(device: DeviceContext, { filePath }: { filePath: string }) {\n // TODO: Handle the `INSTALL_FAILED_INSUFFICIENT_STORAGE` error.\n return await getServer().runAsync(\n adbArgs(device.pid, 'install', '-r', '-d', '--user', env.EXPO_ADB_USER, filePath)\n );\n}\n\n/** Format ADB args with process ID. */\nexport function adbArgs(pid: Device['pid'], ...options: string[]): string[] {\n const args = [];\n if (pid) {\n args.push('-s', pid);\n }\n\n return args.concat(options);\n}\n\n// TODO: This is very expensive for some operations.\nexport async function getAttachedDevicesAsync(): Promise<Device[]> {\n const output = await getServer().runAsync(['devices', '-l']);\n\n const splitItems = output\n .trim()\n .replace(/\\n$/, '')\n .split(os.EOL)\n // Filter ADB trace logs from the output, e.g.\n // adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:393] adb_query: host:devices-l\n // 03-04 12:29:44.557 16415 16415 D adb : commandline.cpp:1646 Using server socket: tcp:172.27.192.1:5037\n // 03-04 12:29:44.557 16415 16415 D adb : adb_client.cpp:160 _adb_connect: host:version\n .filter((line) => !line.match(/\\.cpp:[0-9]+/));\n\n // First line is `\"List of devices attached\"`, remove it\n // @ts-ignore: todo\n const attachedDevices: {\n props: string[];\n type: Device['type'];\n isAuthorized: Device['isAuthorized'];\n }[] = splitItems\n .slice(1, splitItems.length)\n .map((line) => {\n // unauthorized: ['FA8251A00719', 'unauthorized', 'usb:338690048X', 'transport_id:5']\n // authorized: ['FA8251A00719', 'device', 'usb:336592896X', 'product:walleye', 'model:Pixel_2', 'device:walleye', 'transport_id:4']\n // emulator: ['emulator-5554', 'offline', 'transport_id:1']\n const props = line.split(' ').filter(Boolean);\n\n const isAuthorized = props[1] !== 'unauthorized';\n const type = line.includes('emulator') ? 'emulator' : 'device';\n return { props, type, isAuthorized };\n })\n .filter(({ props: [pid] }) => !!pid);\n\n const devicePromises = attachedDevices.map<Promise<Device>>(async (props) => {\n const {\n type,\n props: [pid, ...deviceInfo],\n isAuthorized,\n } = props;\n\n let name: string | null = null;\n\n if (type === 'device') {\n if (isAuthorized) {\n // Possibly formatted like `model:Pixel_2`\n // Transform to `Pixel_2`\n const modelItem = deviceInfo.find((info) => info.includes('model:'));\n if (modelItem) {\n name = modelItem.replace('model:', '');\n }\n }\n // unauthorized devices don't have a name available to read\n if (!name) {\n // Device FA8251A00719\n name = `Device ${pid}`;\n }\n } else {\n // Given an emulator pid, get the emulator name which can be used to start the emulator later.\n name = (await getAdbNameForDeviceIdAsync({ pid })) ?? '';\n }\n\n return {\n pid,\n name,\n type,\n isAuthorized,\n isBooted: true,\n };\n });\n\n return Promise.all(devicePromises);\n}\n\n/**\n * Return the Emulator name for an emulator ID, this can be used to determine if an emulator is booted.\n *\n * @param device.pid a value like `emulator-5554` from `abd devices`\n */\nexport async function getAdbNameForDeviceIdAsync(device: DeviceContext): Promise<string | null> {\n const results = await getServer().runAsync(adbArgs(device.pid, 'emu', 'avd', 'name'));\n\n if (results.match(/could not connect to TCP port .*: Connection refused/)) {\n // Can also occur when the emulator does not exist.\n throw new CommandError('EMULATOR_NOT_FOUND', results);\n }\n\n return sanitizeAdbDeviceName(results) ?? null;\n}\n\nexport async function isDeviceBootedAsync({\n name,\n}: { name?: string } = {}): Promise<Device | null> {\n const devices = await getAttachedDevicesAsync();\n\n if (!name) {\n return devices[0] ?? null;\n }\n\n return devices.find((device) => device.name === name) ?? null;\n}\n\n/**\n * Returns true when a device's splash screen animation has stopped.\n * This can be used to detect when a device is fully booted and ready to use.\n *\n * @param pid\n */\nexport async function isBootAnimationCompleteAsync(pid?: string): Promise<boolean> {\n try {\n const props = await getPropertyDataForDeviceAsync({ pid }, PROP_BOOT_ANIMATION_STATE);\n return !!props[PROP_BOOT_ANIMATION_STATE].match(/stopped/);\n } catch {\n return false;\n }\n}\n\n/** Get a list of ABIs for the provided device. */\nexport async function getDeviceABIsAsync(\n device: Pick<Device, 'name' | 'pid'>\n): Promise<DeviceABI[]> {\n const cpuAbiList = (await getPropertyDataForDeviceAsync(device, PROP_CPU_ABI_LIST_NAME))[\n PROP_CPU_ABI_LIST_NAME\n ];\n\n if (cpuAbiList) {\n return cpuAbiList.trim().split(',') as DeviceABI[];\n }\n\n const abi = (await getPropertyDataForDeviceAsync(device, PROP_CPU_NAME))[\n PROP_CPU_NAME\n ] as DeviceABI;\n return [abi];\n}\n\nexport async function getPropertyDataForDeviceAsync(\n device: DeviceContext,\n prop?: string\n): Promise<DeviceProperties> {\n // @ts-ignore\n const propCommand = adbArgs(...[device.pid, 'shell', 'getprop', prop].filter(Boolean));\n try {\n // Prevent reading as UTF8.\n const results = await getServer().getFileOutputAsync(propCommand);\n // Like:\n // [wifi.direct.interface]: [p2p-dev-wlan0]\n // [wifi.interface]: [wlan0]\n\n if (prop) {\n debug(`Property data: (device pid: ${device.pid}, prop: ${prop}, data: ${results})`);\n return {\n [prop]: results,\n };\n }\n const props = parseAdbDeviceProperties(results);\n\n debug(`Parsed data:`, props);\n\n return props;\n } catch (error: any) {\n // TODO: Ensure error has message and not stderr\n throw new CommandError(`Failed to get properties for device (${device.pid}): ${error.message}`);\n }\n}\n\nfunction parseAdbDeviceProperties(devicePropertiesString: string) {\n const properties: DeviceProperties = {};\n const propertyExp = /\\[(.*?)\\]: \\[(.*?)\\]/gm;\n for (const match of devicePropertiesString.matchAll(propertyExp)) {\n properties[match[1]] = match[2];\n }\n return properties;\n}\n\n/**\n * Sanitize the ADB device name to only get the actual device name.\n * On Windows, we need to do \\r, \\n, and \\r\\n filtering to get the name.\n */\nexport function sanitizeAdbDeviceName(deviceName: string) {\n return deviceName\n .trim()\n .split(/[\\r\\n]+/)\n .shift();\n}\n"],"names":["getServer","logUnauthorized","isPackageInstalledAsync","launchActivityAsync","openAppIdAsync","openUrlAsync","uninstallAsync","getPackageInfoAsync","installAsync","adbArgs","getAttachedDevicesAsync","getAdbNameForDeviceIdAsync","isDeviceBootedAsync","isBootAnimationCompleteAsync","getDeviceABIsAsync","getPropertyDataForDeviceAsync","sanitizeAdbDeviceName","debug","require","DeviceABI","arm","arm64","x64","x86","x8664","arm64v8a","armeabiV7a","armeabi","universal","CANT_START_ACTIVITY_ERROR","PROP_CPU_NAME","PROP_CPU_ABI_LIST_NAME","PROP_BOOT_ANIMATION_STATE","_server","ADBServer","device","Log","warn","chalk","bold","name","dim","learnMore","androidPackage","packages","runAsync","pid","env","EXPO_ADB_USER","lines","split","i","length","line","trim","launchActivity","openAsync","applicationId","url","replace","String","raw","args","results","includes","match","CommandError","substring","indexOf","appId","filePath","options","push","concat","output","splitItems","os","EOL","filter","attachedDevices","slice","map","props","Boolean","isAuthorized","type","devicePromises","deviceInfo","modelItem","find","info","isBooted","Promise","all","devices","cpuAbiList","abi","prop","propCommand","getFileOutputAsync","parseAdbDeviceProperties","error","message","devicePropertiesString","properties","propertyExp","matchAll","deviceName","shift"],"mappings":"AAAA;;;;;;;;;;;;IA0DgBA,SAAS,MAATA,SAAS;IAMTC,eAAe,MAAfA,eAAe;IASTC,uBAAuB,MAAvBA,uBAAuB;IA+BvBC,mBAAmB,MAAnBA,mBAAmB;IA4BnBC,cAAc,MAAdA,cAAc;IA0BdC,YAAY,MAAZA,YAAY;IAoCZC,cAAc,MAAdA,cAAc;IAUdC,mBAAmB,MAAnBA,mBAAmB;IAQnBC,YAAY,MAAZA,YAAY;IAQlBC,OAAO,MAAPA,OAAO;IAUDC,uBAAuB,MAAvBA,uBAAuB;IA8EvBC,0BAA0B,MAA1BA,0BAA0B;IAW1BC,mBAAmB,MAAnBA,mBAAmB;IAkBnBC,4BAA4B,MAA5BA,4BAA4B;IAU5BC,kBAAkB,MAAlBA,kBAAkB;IAiBlBC,6BAA6B,MAA7BA,6BAA6B;IA2CnCC,qBAAqB,MAArBA,qBAAqB;;;8DAvZnB,OAAO;;;;;;;8DACV,IAAI;;;;;;2BAEO,aAAa;2DAClB,cAAc;qBACf,oBAAoB;wBACX,uBAAuB;sBAC1B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/C,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,kCAAkC,CAAC,AAAsB,AAAC;IAElF,SAcN;UAdWC,SAAS;IAATA,SAAS,CACnB,kEAAkE;IAClE,mEAAmE;IACnE,qEAAqE;IACrE,qBAAqB;IACrBC,KAAG,IAAHA,KAAG;IALOD,SAAS,CAMnBE,OAAK,IAALA,OAAK;IANKF,SAAS,CAOnBG,KAAG,IAAHA,KAAG;IAPOH,SAAS,CAQnBI,KAAG,IAAHA,KAAG;IAROJ,SAAS,CASnBK,OAAK,IAAG,QAAQ;IATNL,SAAS,CAUnBM,UAAQ,IAAG,WAAW;IAVZN,SAAS,CAWnBO,YAAU,IAAG,aAAa;IAXhBP,SAAS,CAYnBQ,SAAO,IAAPA,SAAO;IAZGR,SAAS,CAanBS,WAAS,IAATA,WAAS;GAbCT,SAAS,KAATA,SAAS;AAkCrB,MAAMU,yBAAyB,GAAG,gDAAgD,AAAC;AACnF,oDAAoD;AACpD,MAAMC,aAAa,GAAG,oBAAoB,AAAC;AAE3C,MAAMC,sBAAsB,GAAG,wBAAwB,AAAC;AAExD,wBAAwB;AACxB,oDAAoD;AACpD,MAAMC,yBAAyB,GAAG,mBAAmB,AAAC;AAEtD,IAAIC,OAAO,AAAkB,AAAC;AAGvB,SAASjC,SAAS,GAAG;IAC1BiC,OAAO,WAAPA,OAAO,GAAPA,OAAO,GAAK,IAAIC,UAAS,UAAA,EAAE,CAAC;IAC5B,OAAOD,OAAO,CAAC;AACjB,CAAC;AAGM,SAAShC,eAAe,CAACkC,MAAc,EAAE;IAC9CC,IAAG,CAACC,IAAI,CACN,CAAC,oDAAoD,EAAEC,MAAK,EAAA,QAAA,CAACC,IAAI,CAACJ,MAAM,CAACK,IAAI,CAAC,CAAC,EAAE,EAAEF,MAAK,EAAA,QAAA,CAACG,GAAG,CAC1FC,IAAAA,KAAS,UAAA,EAAC,2CAA2C,CAAC,CACvD,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAGM,eAAexC,uBAAuB,CAC3CiC,MAAqB,EACrBQ,cAAsB,EACJ;IAClB,MAAMC,QAAQ,GAAG,MAAM5C,SAAS,EAAE,CAAC6C,QAAQ,CACzCpC,OAAO,CACL0B,MAAM,CAACW,GAAG,EACV,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,EACRC,IAAG,IAAA,CAACC,aAAa,EACjBL,cAAc,CACf,CACF,AAAC;IAEF,MAAMM,KAAK,GAAGL,QAAQ,CAACM,KAAK,SAAS,AAAC;IACtC,IAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACG,MAAM,EAAED,CAAC,EAAE,CAAE;QACrC,MAAME,IAAI,GAAGJ,KAAK,CAACE,CAAC,CAAC,CAACG,IAAI,EAAE,AAAC;QAC7B,IAAID,IAAI,KAAK,CAAC,QAAQ,EAAEV,cAAc,CAAC,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMM,eAAexC,mBAAmB,CACvCgC,MAAqB,EACrB,EACEoB,cAAc,CAAA,EAGf,EACD;IACA,OAAOC,SAAS,CACd/C,OAAO,CACL0B,MAAM,CAACW,GAAG,EACV,OAAO,EACP,IAAI,EACJ,OAAO,EACP,kIAAkI;IAClI,IAAI,EACJ,YAAY,EACZ,sDAAsD;IACtD,IAAI,EACJS,cAAc,CACf,CACF,CAAC;AACJ,CAAC;AAMM,eAAenD,cAAc,CAClC+B,MAAqB,EACrB,EACEsB,aAAa,CAAA,EAGd,EACD;IACA,OAAOD,SAAS,CACd/C,OAAO,CACL0B,MAAM,CAACW,GAAG,EACV,OAAO,EACP,QAAQ,EACR,IAAI,EACJW,aAAa,EACb,IAAI,EACJ,kCAAkC,EAClC,GAAG,CACJ,CACF,CAAC;AACJ,CAAC;AAMM,eAAepD,YAAY,CAChC8B,MAAqB,EACrB,EACEuB,GAAG,CAAA,EAGJ,EACD;IACA,OAAOF,SAAS,CACd/C,OAAO,CACL0B,MAAM,CAACW,GAAG,EACV,OAAO,EACP,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,4BAA4B,EAC5B,IAAI,EACJ,yCAAyC;IACzCY,GAAG,CAACC,OAAO,OAAOC,MAAM,CAACC,GAAG,CAAC,EAAE,CAAC,CAAC,CAClC,CACF,CAAC;AACJ,CAAC;AAED,8FAA8F,GAC9F,eAAeL,SAAS,CAACM,IAAc,EAAmB;IACxD,MAAMC,OAAO,GAAG,MAAM/D,SAAS,EAAE,CAAC6C,QAAQ,CAACiB,IAAI,CAAC,AAAC;IACjD,IACEC,OAAO,CAACC,QAAQ,CAACnC,yBAAyB,CAAC,IAC3CkC,OAAO,CAACE,KAAK,8CAA8C,EAC3D;QACA,MAAM,IAAIC,OAAY,aAAA,CAAC,mBAAmB,EAAEH,OAAO,CAACI,SAAS,CAACJ,OAAO,CAACK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAOL,OAAO,CAAC;AACjB,CAAC;AAGM,eAAezD,cAAc,CAClC6B,MAAqB,EACrB,EAAEkC,KAAK,CAAA,EAAqB,EACX;IACjB,OAAO,MAAMrE,SAAS,EAAE,CAAC6C,QAAQ,CAC/BpC,OAAO,CAAC0B,MAAM,CAACW,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAEC,IAAG,IAAA,CAACC,aAAa,EAAEqB,KAAK,CAAC,CACrE,CAAC;AACJ,CAAC;AAGM,eAAe9D,mBAAmB,CACvC4B,MAAqB,EACrB,EAAEkC,KAAK,CAAA,EAAqB,EACX;IACjB,OAAO,MAAMrE,SAAS,EAAE,CAAC6C,QAAQ,CAACpC,OAAO,CAAC0B,MAAM,CAACW,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAEuB,KAAK,CAAC,CAAC,CAAC;AAC/F,CAAC;AAGM,eAAe7D,YAAY,CAAC2B,MAAqB,EAAE,EAAEmC,QAAQ,CAAA,EAAwB,EAAE;IAC5F,gEAAgE;IAChE,OAAO,MAAMtE,SAAS,EAAE,CAAC6C,QAAQ,CAC/BpC,OAAO,CAAC0B,MAAM,CAACW,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAEC,IAAG,IAAA,CAACC,aAAa,EAAEsB,QAAQ,CAAC,CAClF,CAAC;AACJ,CAAC;AAGM,SAAS7D,OAAO,CAACqC,GAAkB,EAAE,GAAGyB,OAAO,AAAU,EAAY;IAC1E,MAAMT,IAAI,GAAG,EAAE,AAAC;IAChB,IAAIhB,GAAG,EAAE;QACPgB,IAAI,CAACU,IAAI,CAAC,IAAI,EAAE1B,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,OAAOgB,IAAI,CAACW,MAAM,CAACF,OAAO,CAAC,CAAC;AAC9B,CAAC;AAGM,eAAe7D,uBAAuB,GAAsB;IACjE,MAAMgE,MAAM,GAAG,MAAM1E,SAAS,EAAE,CAAC6C,QAAQ,CAAC;QAAC,SAAS;QAAE,IAAI;KAAC,CAAC,AAAC;IAE7D,MAAM8B,UAAU,GAAGD,MAAM,CACtBpB,IAAI,EAAE,CACNK,OAAO,QAAQ,EAAE,CAAC,CAClBT,KAAK,CAAC0B,GAAE,EAAA,QAAA,CAACC,GAAG,CAAC,AACd,8CAA8C;IAC9C,mFAAmF;IACnF,6GAA6G;IAC7G,2FAA2F;KAC1FC,MAAM,CAAC,CAACzB,IAAI,GAAK,CAACA,IAAI,CAACY,KAAK,gBAAgB,CAAC,AAAC;IAEjD,wDAAwD;IACxD,mBAAmB;IACnB,MAAMc,eAAe,GAIfJ,UAAU,CACbK,KAAK,CAAC,CAAC,EAAEL,UAAU,CAACvB,MAAM,CAAC,CAC3B6B,GAAG,CAAC,CAAC5B,IAAI,GAAK;QACb,qFAAqF;QACrF,mIAAmI;QACnI,2DAA2D;QAC3D,MAAM6B,KAAK,GAAG7B,IAAI,CAACH,KAAK,CAAC,GAAG,CAAC,CAAC4B,MAAM,CAACK,OAAO,CAAC,AAAC;QAE9C,MAAMC,YAAY,GAAGF,KAAK,CAAC,CAAC,CAAC,KAAK,cAAc,AAAC;QACjD,MAAMG,IAAI,GAAGhC,IAAI,CAACW,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,QAAQ,AAAC;QAC/D,OAAO;YAAEkB,KAAK;YAAEG,IAAI;YAAED,YAAY;SAAE,CAAC;IACvC,CAAC,CAAC,CACDN,MAAM,CAAC,CAAC,EAAEI,KAAK,EAAE,CAACpC,GAAG,CAAC,CAAA,EAAE,GAAK,CAAC,CAACA,GAAG,CAAC,AAAC;IAEvC,MAAMwC,cAAc,GAAGP,eAAe,CAACE,GAAG,CAAkB,OAAOC,KAAK,GAAK;QAC3E,MAAM,EACJG,IAAI,CAAA,EACJH,KAAK,EAAE,CAACpC,GAAG,EAAE,GAAGyC,UAAU,CAAC,CAAA,EAC3BH,YAAY,CAAA,IACb,GAAGF,KAAK,AAAC;QAEV,IAAI1C,IAAI,GAAkB,IAAI,AAAC;QAE/B,IAAI6C,IAAI,KAAK,QAAQ,EAAE;YACrB,IAAID,YAAY,EAAE;gBAChB,0CAA0C;gBAC1C,yBAAyB;gBACzB,MAAMI,SAAS,GAAGD,UAAU,CAACE,IAAI,CAAC,CAACC,IAAI,GAAKA,IAAI,CAAC1B,QAAQ,CAAC,QAAQ,CAAC,CAAC,AAAC;gBACrE,IAAIwB,SAAS,EAAE;oBACbhD,IAAI,GAAGgD,SAAS,CAAC7B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,2DAA2D;YAC3D,IAAI,CAACnB,IAAI,EAAE;gBACT,sBAAsB;gBACtBA,IAAI,GAAG,CAAC,OAAO,EAAEM,GAAG,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,OAAO;gBAEE,GAA2C;YADlD,8FAA8F;YAC9FN,IAAI,GAAG,CAAA,GAA2C,GAA1C,MAAM7B,0BAA0B,CAAC;gBAAEmC,GAAG;aAAE,CAAC,YAA1C,GAA2C,GAAI,EAAE,CAAC;QAC3D,CAAC;QAED,OAAO;YACLA,GAAG;YACHN,IAAI;YACJ6C,IAAI;YACJD,YAAY;YACZO,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC,CAAC,AAAC;IAEH,OAAOC,OAAO,CAACC,GAAG,CAACP,cAAc,CAAC,CAAC;AACrC,CAAC;AAOM,eAAe3E,0BAA0B,CAACwB,MAAqB,EAA0B;IAC9F,MAAM4B,OAAO,GAAG,MAAM/D,SAAS,EAAE,CAAC6C,QAAQ,CAACpC,OAAO,CAAC0B,MAAM,CAACW,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,AAAC;IAEtF,IAAIiB,OAAO,CAACE,KAAK,wDAAwD,EAAE;QACzE,mDAAmD;QACnD,MAAM,IAAIC,OAAY,aAAA,CAAC,oBAAoB,EAAEH,OAAO,CAAC,CAAC;IACxD,CAAC;QAEM/C,GAA8B;IAArC,OAAOA,CAAAA,GAA8B,GAA9BA,qBAAqB,CAAC+C,OAAO,CAAC,YAA9B/C,GAA8B,GAAI,IAAI,CAAC;AAChD,CAAC;AAEM,eAAeJ,mBAAmB,CAAC,EACxC4B,IAAI,CAAA,EACc,GAAG,EAAE,EAA0B;IACjD,MAAMsD,OAAO,GAAG,MAAMpF,uBAAuB,EAAE,AAAC;IAEhD,IAAI,CAAC8B,IAAI,EAAE;YACFsD,GAAU;QAAjB,OAAOA,CAAAA,GAAU,GAAVA,OAAO,CAAC,CAAC,CAAC,YAAVA,GAAU,GAAI,IAAI,CAAC;IAC5B,CAAC;QAEMA,IAA8C;IAArD,OAAOA,CAAAA,IAA8C,GAA9CA,OAAO,CAACL,IAAI,CAAC,CAACtD,MAAM,GAAKA,MAAM,CAACK,IAAI,KAAKA,IAAI,CAAC,YAA9CsD,IAA8C,GAAI,IAAI,CAAC;AAChE,CAAC;AAQM,eAAejF,4BAA4B,CAACiC,GAAY,EAAoB;IACjF,IAAI;QACF,MAAMoC,KAAK,GAAG,MAAMnE,6BAA6B,CAAC;YAAE+B,GAAG;SAAE,EAAEd,yBAAyB,CAAC,AAAC;QACtF,OAAO,CAAC,CAACkD,KAAK,CAAClD,yBAAyB,CAAC,CAACiC,KAAK,WAAW,CAAC;IAC7D,EAAE,OAAM;QACN,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAGM,eAAenD,kBAAkB,CACtCqB,MAAoC,EACd;IACtB,MAAM4D,UAAU,GAAG,CAAC,MAAMhF,6BAA6B,CAACoB,MAAM,EAAEJ,sBAAsB,CAAC,CAAC,CACtFA,sBAAsB,CACvB,AAAC;IAEF,IAAIgE,UAAU,EAAE;QACd,OAAOA,UAAU,CAACzC,IAAI,EAAE,CAACJ,KAAK,CAAC,GAAG,CAAC,CAAgB;IACrD,CAAC;IAED,MAAM8C,GAAG,GAAG,CAAC,MAAMjF,6BAA6B,CAACoB,MAAM,EAAEL,aAAa,CAAC,CAAC,CACtEA,aAAa,CACd,AAAa,AAAC;IACf,OAAO;QAACkE,GAAG;KAAC,CAAC;AACf,CAAC;AAEM,eAAejF,6BAA6B,CACjDoB,MAAqB,EACrB8D,IAAa,EACc;IAC3B,aAAa;IACb,MAAMC,WAAW,GAAGzF,OAAO,IAAI;QAAC0B,MAAM,CAACW,GAAG;QAAE,OAAO;QAAE,SAAS;QAAEmD,IAAI;KAAC,CAACnB,MAAM,CAACK,OAAO,CAAC,CAAC,AAAC;IACvF,IAAI;QACF,2BAA2B;QAC3B,MAAMpB,OAAO,GAAG,MAAM/D,SAAS,EAAE,CAACmG,kBAAkB,CAACD,WAAW,CAAC,AAAC;QAClE,QAAQ;QACR,2CAA2C;QAC3C,4BAA4B;QAE5B,IAAID,IAAI,EAAE;YACRhF,KAAK,CAAC,CAAC,4BAA4B,EAAEkB,MAAM,CAACW,GAAG,CAAC,QAAQ,EAAEmD,IAAI,CAAC,QAAQ,EAAElC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,OAAO;gBACL,CAACkC,IAAI,CAAC,EAAElC,OAAO;aAChB,CAAC;QACJ,CAAC;QACD,MAAMmB,KAAK,GAAGkB,wBAAwB,CAACrC,OAAO,CAAC,AAAC;QAEhD9C,KAAK,CAAC,CAAC,YAAY,CAAC,EAAEiE,KAAK,CAAC,CAAC;QAE7B,OAAOA,KAAK,CAAC;IACf,EAAE,OAAOmB,KAAK,EAAO;QACnB,gDAAgD;QAChD,MAAM,IAAInC,OAAY,aAAA,CAAC,CAAC,qCAAqC,EAAE/B,MAAM,CAACW,GAAG,CAAC,GAAG,EAAEuD,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAASF,wBAAwB,CAACG,sBAA8B,EAAE;IAChE,MAAMC,UAAU,GAAqB,EAAE,AAAC;IACxC,MAAMC,WAAW,2BAA2B,AAAC;IAC7C,KAAK,MAAMxC,KAAK,IAAIsC,sBAAsB,CAACG,QAAQ,CAACD,WAAW,CAAC,CAAE;QAChED,UAAU,CAACvC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAOuC,UAAU,CAAC;AACpB,CAAC;AAMM,SAASxF,qBAAqB,CAAC2F,UAAkB,EAAE;IACxD,OAAOA,UAAU,CACdrD,IAAI,EAAE,CACNJ,KAAK,WAAW,CAChB0D,KAAK,EAAE,CAAC;AACb,CAAC"}
@@ -79,7 +79,7 @@ function getContext() {
79
79
  cpu: summarizeCpuInfo(),
80
80
  app: {
81
81
  name: "expo/cli",
82
- version: "0.18.7"
82
+ version: "0.18.8"
83
83
  },
84
84
  ci: _ciInfo().isCI ? {
85
85
  name: _ciInfo().name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.18.7",
3
+ "version": "0.18.8",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -49,7 +49,7 @@
49
49
  "@expo/osascript": "^2.0.31",
50
50
  "@expo/package-manager": "^1.5.0",
51
51
  "@expo/plist": "^0.1.0",
52
- "@expo/prebuild-config": "7.0.1",
52
+ "@expo/prebuild-config": "7.0.3",
53
53
  "@expo/rudder-sdk-node": "1.1.1",
54
54
  "@expo/spawn-async": "^1.7.2",
55
55
  "@expo/xcpretty": "^4.3.0",
@@ -168,5 +168,5 @@
168
168
  "tree-kill": "^1.2.2",
169
169
  "tsd": "^0.28.1"
170
170
  },
171
- "gitHead": "4a7cf0d0baf6dfc595d93f604945d2142e705a36"
171
+ "gitHead": "71b2f4339ef7b5b42ce87c1d8c17fe41c60355e0"
172
172
  }