eas-cli 2.1.0 → 2.2.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 (293) hide show
  1. package/README.md +6 -1047
  2. package/build/branch/queries.d.ts +10 -2
  3. package/build/branch/queries.js +30 -30
  4. package/build/branch/utils.d.ts +4 -0
  5. package/build/branch/utils.js +15 -0
  6. package/build/build/android/build.js +3 -3
  7. package/build/build/android/prepareJob.js +1 -2
  8. package/build/build/android/syncProjectConfiguration.d.ts +2 -1
  9. package/build/build/android/syncProjectConfiguration.js +2 -2
  10. package/build/build/build.js +15 -4
  11. package/build/build/configure.js +2 -2
  12. package/build/build/createContext.d.ts +5 -1
  13. package/build/build/createContext.js +8 -14
  14. package/build/build/ios/build.js +2 -1
  15. package/build/build/ios/credentials.js +1 -1
  16. package/build/build/ios/prepareJob.js +1 -2
  17. package/build/build/ios/syncProjectConfiguration.d.ts +2 -1
  18. package/build/build/ios/syncProjectConfiguration.js +2 -2
  19. package/build/build/local.js +1 -1
  20. package/build/build/metadata.js +1 -2
  21. package/build/build/queries.d.ts +9 -0
  22. package/build/build/queries.js +51 -0
  23. package/build/build/runBuildAndSubmit.d.ts +3 -1
  24. package/build/build/runBuildAndSubmit.js +15 -7
  25. package/build/build/utils/repository.js +5 -1
  26. package/build/channel/queries.d.ts +17 -0
  27. package/build/channel/queries.js +137 -0
  28. package/build/channel/utils.d.ts +22 -0
  29. package/build/channel/utils.js +87 -0
  30. package/build/commandUtils/EasCommand.d.ts +68 -7
  31. package/build/commandUtils/EasCommand.js +60 -79
  32. package/build/commandUtils/context/ActorContextField.d.ts +5 -0
  33. package/build/commandUtils/context/ActorContextField.js +11 -0
  34. package/build/commandUtils/context/ContextField.d.ts +6 -0
  35. package/build/commandUtils/context/ContextField.js +5 -0
  36. package/build/commandUtils/context/DynamicProjectConfigContextField.d.ts +11 -0
  37. package/build/commandUtils/context/DynamicProjectConfigContextField.js +27 -0
  38. package/build/commandUtils/context/OptionalProjectConfigContextField.d.ts +13 -0
  39. package/build/commandUtils/context/OptionalProjectConfigContextField.js +37 -0
  40. package/build/commandUtils/context/ProjectConfigContextField.d.ts +13 -0
  41. package/build/commandUtils/context/ProjectConfigContextField.js +23 -0
  42. package/build/commandUtils/context/ProjectDirContextField.d.ts +4 -0
  43. package/build/commandUtils/context/ProjectDirContextField.js +11 -0
  44. package/build/commandUtils/context/contextUtils/ensureLoggedInAsync.d.ts +21 -0
  45. package/build/commandUtils/context/contextUtils/ensureLoggedInAsync.js +75 -0
  46. package/build/commandUtils/context/contextUtils/findProjectDirAndVerifyProjectSetupAsync.d.ts +17 -0
  47. package/build/commandUtils/context/contextUtils/findProjectDirAndVerifyProjectSetupAsync.js +102 -0
  48. package/build/commandUtils/context/contextUtils/getProjectIdAsync.d.ts +24 -0
  49. package/build/commandUtils/context/contextUtils/getProjectIdAsync.js +108 -0
  50. package/build/commandUtils/flags.d.ts +10 -0
  51. package/build/commandUtils/flags.js +23 -0
  52. package/build/commandUtils/pagination.d.ts +7 -4
  53. package/build/commandUtils/pagination.js +11 -15
  54. package/build/commands/account/login.d.ts +0 -2
  55. package/build/commands/account/login.js +2 -7
  56. package/build/commands/account/logout.d.ts +0 -2
  57. package/build/commands/account/logout.js +0 -5
  58. package/build/commands/account/view.d.ts +0 -2
  59. package/build/commands/account/view.js +0 -5
  60. package/build/commands/analytics.d.ts +0 -1
  61. package/build/commands/analytics.js +0 -4
  62. package/build/commands/branch/create.d.ts +4 -0
  63. package/build/commands/branch/create.js +18 -18
  64. package/build/commands/branch/delete.d.ts +4 -0
  65. package/build/commands/branch/delete.js +29 -26
  66. package/build/commands/branch/list.d.ts +5 -2
  67. package/build/commands/branch/list.js +13 -8
  68. package/build/commands/branch/rename.d.ts +5 -1
  69. package/build/commands/branch/rename.js +15 -13
  70. package/build/commands/branch/view.d.ts +5 -2
  71. package/build/commands/branch/view.js +31 -13
  72. package/build/commands/build/cancel.d.ts +7 -0
  73. package/build/commands/build/cancel.js +50 -23
  74. package/build/commands/build/configure.d.ts +3 -0
  75. package/build/commands/build/configure.js +12 -7
  76. package/build/commands/build/index.d.ts +7 -2
  77. package/build/commands/build/index.js +31 -23
  78. package/build/commands/build/inspect.d.ts +5 -0
  79. package/build/commands/build/inspect.js +12 -3
  80. package/build/commands/build/list.d.ts +7 -2
  81. package/build/commands/build/list.js +36 -59
  82. package/build/commands/build/version/set.d.ts +5 -0
  83. package/build/commands/build/version/set.js +22 -14
  84. package/build/commands/build/version/sync.d.ts +5 -0
  85. package/build/commands/build/version/sync.js +22 -13
  86. package/build/commands/build/view.d.ts +3 -0
  87. package/build/commands/build/view.js +20 -14
  88. package/build/commands/channel/create.d.ts +4 -0
  89. package/build/commands/channel/create.js +32 -25
  90. package/build/commands/channel/delete.d.ts +3 -0
  91. package/build/commands/channel/delete.js +36 -59
  92. package/build/commands/channel/edit.d.ts +7 -7
  93. package/build/commands/channel/edit.js +39 -72
  94. package/build/commands/channel/list.d.ts +6 -0
  95. package/build/commands/channel/list.js +20 -76
  96. package/build/commands/channel/rollout.d.ts +5 -1
  97. package/build/commands/channel/rollout.js +34 -35
  98. package/build/commands/channel/view.d.ts +6 -33
  99. package/build/commands/channel/view.js +31 -132
  100. package/build/commands/config.d.ts +6 -2
  101. package/build/commands/config.js +22 -13
  102. package/build/commands/credentials.d.ts +4 -0
  103. package/build/commands/credentials.js +10 -1
  104. package/build/commands/device/create.d.ts +4 -0
  105. package/build/commands/device/create.js +15 -3
  106. package/build/commands/device/delete.d.ts +13 -8
  107. package/build/commands/device/delete.js +81 -130
  108. package/build/commands/device/list.d.ts +7 -0
  109. package/build/commands/device/list.js +42 -63
  110. package/build/commands/device/view.d.ts +3 -0
  111. package/build/commands/device/view.js +10 -5
  112. package/build/commands/diagnostics.d.ts +3 -1
  113. package/build/commands/diagnostics.js +10 -8
  114. package/build/commands/metadata/pull.d.ts +4 -0
  115. package/build/commands/metadata/pull.js +13 -8
  116. package/build/commands/metadata/push.d.ts +4 -0
  117. package/build/commands/metadata/push.js +13 -8
  118. package/build/commands/open.d.ts +3 -0
  119. package/build/commands/open.js +11 -9
  120. package/build/commands/project/info.d.ts +3 -0
  121. package/build/commands/project/info.js +9 -6
  122. package/build/commands/project/init.d.ts +12 -0
  123. package/build/commands/project/init.js +155 -8
  124. package/build/commands/secret/create.d.ts +6 -0
  125. package/build/commands/secret/create.js +87 -30
  126. package/build/commands/secret/delete.d.ts +4 -0
  127. package/build/commands/secret/delete.js +28 -19
  128. package/build/commands/secret/list.d.ts +3 -0
  129. package/build/commands/secret/list.js +19 -13
  130. package/build/commands/submit.d.ts +5 -0
  131. package/build/commands/submit.js +16 -7
  132. package/build/commands/update/configure.d.ts +3 -0
  133. package/build/commands/update/configure.js +22 -16
  134. package/build/commands/update/delete.d.ts +1 -0
  135. package/build/commands/update/delete.js +4 -7
  136. package/build/commands/update/index.d.ts +8 -12
  137. package/build/commands/update/index.js +90 -166
  138. package/build/commands/update/list.d.ts +8 -2
  139. package/build/commands/update/list.js +51 -81
  140. package/build/commands/update/view.d.ts +0 -4
  141. package/build/commands/update/view.js +14 -51
  142. package/build/commands/webhook/create.d.ts +4 -0
  143. package/build/commands/webhook/create.js +10 -5
  144. package/build/commands/webhook/delete.d.ts +6 -0
  145. package/build/commands/webhook/delete.js +26 -14
  146. package/build/commands/webhook/list.d.ts +3 -0
  147. package/build/commands/webhook/list.js +13 -9
  148. package/build/commands/webhook/update.d.ts +1 -0
  149. package/build/commands/webhook/update.js +3 -1
  150. package/build/credentials/android/actions/BuildCredentialsUtils.js +2 -6
  151. package/build/credentials/android/actions/CreateFcm.d.ts +2 -3
  152. package/build/credentials/android/actions/CreateGoogleServiceAccountKey.d.ts +2 -3
  153. package/build/credentials/android/actions/CreateKeystore.d.ts +2 -3
  154. package/build/credentials/android/actions/CreateKeystore.js +1 -2
  155. package/build/credentials/android/actions/RemoveGoogleServiceAccountKey.d.ts +2 -3
  156. package/build/credentials/android/actions/UseExistingGoogleServiceAccountKey.d.ts +2 -3
  157. package/build/credentials/android/api/GraphqlClient.d.ts +6 -7
  158. package/build/credentials/context.d.ts +8 -4
  159. package/build/credentials/context.js +8 -23
  160. package/build/credentials/ios/IosCredentialsProvider.js +11 -6
  161. package/build/credentials/ios/actions/AppleTeamFormatting.d.ts +2 -0
  162. package/build/credentials/ios/actions/AppleTeamFormatting.js +7 -0
  163. package/build/credentials/ios/actions/AppleTeamUtils.d.ts +1 -2
  164. package/build/credentials/ios/actions/AppleTeamUtils.js +1 -5
  165. package/build/credentials/ios/actions/AscApiKeyUtils.d.ts +3 -4
  166. package/build/credentials/ios/actions/AscApiKeyUtils.js +2 -2
  167. package/build/credentials/ios/actions/AssignAscApiKey.d.ts +1 -1
  168. package/build/credentials/ios/actions/AssignPushKey.d.ts +1 -1
  169. package/build/credentials/ios/actions/BuildCredentialsUtils.d.ts +3 -3
  170. package/build/credentials/ios/actions/BuildCredentialsUtils.js +8 -12
  171. package/build/credentials/ios/actions/ConfigureProvisioningProfile.d.ts +1 -1
  172. package/build/credentials/ios/actions/CreateAscApiKey.d.ts +2 -3
  173. package/build/credentials/ios/actions/CreateDistributionCertificate.d.ts +2 -2
  174. package/build/credentials/ios/actions/CreateProvisioningProfile.d.ts +1 -1
  175. package/build/credentials/ios/actions/CreatePushKey.d.ts +2 -3
  176. package/build/credentials/ios/actions/DeviceUtils.d.ts +0 -1
  177. package/build/credentials/ios/actions/DeviceUtils.js +3 -19
  178. package/build/credentials/ios/actions/DistributionCertificateUtils.d.ts +3 -4
  179. package/build/credentials/ios/actions/DistributionCertificateUtils.js +2 -2
  180. package/build/credentials/ios/actions/PushKeyUtils.d.ts +2 -3
  181. package/build/credentials/ios/actions/PushKeyUtils.js +2 -2
  182. package/build/credentials/ios/actions/RemoveAscApiKey.d.ts +2 -3
  183. package/build/credentials/ios/actions/RemoveDistributionCertificate.d.ts +3 -4
  184. package/build/credentials/ios/actions/RemoveProvisioningProfile.d.ts +1 -1
  185. package/build/credentials/ios/actions/RemovePushKey.d.ts +2 -3
  186. package/build/credentials/ios/actions/SetUpAdhocProvisioningProfile.d.ts +1 -1
  187. package/build/credentials/ios/actions/SetUpAscApiKey.d.ts +1 -1
  188. package/build/credentials/ios/actions/SetUpDistributionCertificate.d.ts +1 -1
  189. package/build/credentials/ios/actions/SetUpInternalProvisioningProfile.d.ts +1 -1
  190. package/build/credentials/ios/actions/SetUpProvisioningProfile.d.ts +1 -1
  191. package/build/credentials/ios/actions/SetUpPushKey.d.ts +1 -1
  192. package/build/credentials/ios/actions/SetUpSubmissionCredentials.d.ts +1 -1
  193. package/build/credentials/ios/actions/SetUpTargetBuildCredentials.d.ts +1 -1
  194. package/build/credentials/ios/actions/SetUpTargetBuildCredentialsFromCredentialsJson.d.ts +1 -1
  195. package/build/credentials/ios/api/GraphqlClient.d.ts +9 -15
  196. package/build/credentials/ios/api/graphql/mutations/AppleTeamMutation.d.ts +2 -3
  197. package/build/credentials/ios/api/graphql/mutations/AppleTeamMutation.js +3 -1
  198. package/build/credentials/ios/api/graphql/queries/AppleDeviceQuery.d.ts +3 -3
  199. package/build/credentials/ios/api/graphql/queries/AppleDeviceQuery.js +20 -6
  200. package/build/credentials/ios/api/graphql/queries/AppleTeamQuery.d.ts +2 -2
  201. package/build/credentials/ios/api/graphql/queries/AppleTeamQuery.js +8 -7
  202. package/build/credentials/ios/api/graphql/types/AppLookupParams.d.ts +7 -0
  203. package/build/credentials/ios/api/graphql/types/AppLookupParams.js +2 -0
  204. package/build/credentials/ios/types.d.ts +2 -3
  205. package/build/credentials/ios/utils/printCredentials.d.ts +1 -1
  206. package/build/credentials/ios/validators/validateProvisioningProfile.d.ts +1 -1
  207. package/build/credentials/manager/HelperActions.d.ts +4 -1
  208. package/build/credentials/manager/ManageAndroid.js +4 -14
  209. package/build/credentials/manager/ManageIos.js +12 -15
  210. package/build/credentials/manager/SelectBuildProfileFromEasJson.d.ts +1 -1
  211. package/build/credentials/manager/SelectBuildProfileFromEasJson.js +3 -3
  212. package/build/credentials/manager/SelectPlatform.d.ts +5 -1
  213. package/build/credentials/manager/SelectPlatform.js +5 -3
  214. package/build/devices/actions/create/action.d.ts +2 -3
  215. package/build/devices/context.d.ts +3 -5
  216. package/build/devices/context.js +2 -11
  217. package/build/devices/manager.d.ts +4 -5
  218. package/build/devices/manager.js +9 -16
  219. package/build/devices/queries.d.ts +21 -0
  220. package/build/devices/queries.js +121 -0
  221. package/build/devices/utils/errors.d.ts +3 -0
  222. package/build/devices/utils/errors.js +9 -0
  223. package/build/devices/utils/formatDevice.d.ts +3 -3
  224. package/build/devices/utils/formatDevice.js +8 -3
  225. package/build/graphql/generated.d.ts +1101 -191
  226. package/build/graphql/generated.js +13 -2
  227. package/build/graphql/mutations/EnvironmentSecretMutation.d.ts +3 -1
  228. package/build/graphql/queries/AppQuery.d.ts +1 -0
  229. package/build/graphql/queries/AppQuery.js +19 -0
  230. package/build/graphql/queries/BranchQuery.d.ts +5 -6
  231. package/build/graphql/queries/BranchQuery.js +44 -3
  232. package/build/graphql/queries/BuildQuery.d.ts +2 -20
  233. package/build/graphql/queries/BuildQuery.js +2 -2
  234. package/build/graphql/queries/ChannelQuery.d.ts +5 -2
  235. package/build/graphql/queries/ChannelQuery.js +45 -19
  236. package/build/graphql/queries/EnvironmentSecretsQuery.d.ts +5 -3
  237. package/build/graphql/queries/EnvironmentSecretsQuery.js +14 -28
  238. package/build/graphql/queries/UpdateQuery.d.ts +4 -6
  239. package/build/graphql/queries/UpdateQuery.js +59 -50
  240. package/build/graphql/queries/UserQuery.js +8 -1
  241. package/build/graphql/types/Account.d.ts +1 -0
  242. package/build/graphql/types/Account.js +17 -0
  243. package/build/graphql/types/App.js +7 -0
  244. package/build/graphql/types/EnvironmentSecret.d.ts +7 -0
  245. package/build/graphql/types/EnvironmentSecret.js +16 -1
  246. package/build/graphql/types/Update.d.ts +1 -0
  247. package/build/graphql/types/Update.js +30 -0
  248. package/build/graphql/types/UpdateBranch.js +4 -15
  249. package/build/metadata/context.d.ts +1 -1
  250. package/build/metadata/context.js +7 -9
  251. package/build/project/android/applicationId.d.ts +2 -1
  252. package/build/project/android/applicationId.js +7 -7
  253. package/build/project/android/versions.js +1 -1
  254. package/build/project/applicationIdentifier.d.ts +2 -1
  255. package/build/project/applicationIdentifier.js +2 -2
  256. package/build/project/expoConfig.d.ts +3 -3
  257. package/build/project/fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync.d.ts +22 -0
  258. package/build/project/fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync.js +93 -0
  259. package/build/project/ios/bundleIdentifier.d.ts +2 -1
  260. package/build/project/ios/bundleIdentifier.js +7 -7
  261. package/build/project/ios/scheme.d.ts +1 -1
  262. package/build/project/projectUtils.d.ts +4 -31
  263. package/build/project/projectUtils.js +13 -123
  264. package/build/project/remoteVersionSource.d.ts +2 -2
  265. package/build/project/remoteVersionSource.js +8 -7
  266. package/build/submit/android/ServiceAccountSource.js +1 -2
  267. package/build/submit/context.d.ts +3 -1
  268. package/build/submit/context.js +12 -14
  269. package/build/submit/ios/CredentialsServiceSource.js +1 -2
  270. package/build/submit/utils/builds.js +3 -1
  271. package/build/update/android/UpdatesModule.d.ts +1 -1
  272. package/build/update/android/UpdatesModule.js +2 -3
  273. package/build/update/ios/UpdatesModule.d.ts +1 -1
  274. package/build/update/ios/UpdatesModule.js +2 -3
  275. package/build/update/queries.d.ts +16 -1
  276. package/build/update/queries.js +96 -30
  277. package/build/update/utils.d.ts +21 -8
  278. package/build/update/utils.js +75 -14
  279. package/build/user/actions.d.ts +2 -8
  280. package/build/user/actions.js +4 -63
  281. package/build/utils/profiles.d.ts +3 -3
  282. package/build/utils/profiles.js +6 -5
  283. package/build/vcs/clients/git.d.ts +1 -1
  284. package/build/vcs/clients/git.js +1 -1
  285. package/build/vcs/vcs.d.ts +1 -1
  286. package/build/webhooks/input.d.ts +2 -1
  287. package/build/webhooks/input.js +10 -1
  288. package/oclif.manifest.json +1 -1
  289. package/package.json +4 -4
  290. package/build/project/ensureProjectExists.d.ts +0 -21
  291. package/build/project/ensureProjectExists.js +0 -88
  292. package/build/user/Account.d.ts +0 -3
  293. package/build/user/Account.js +0 -7
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerNewProjectAsync = exports.ensureProjectExistsAsync = void 0;
4
- const tslib_1 = require("tslib");
5
- const assert_1 = tslib_1.__importDefault(require("assert"));
6
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
- const terminal_link_1 = tslib_1.__importDefault(require("terminal-link"));
8
- const url_1 = require("../build/utils/url");
9
- const generated_1 = require("../graphql/generated");
10
- const AppMutation_1 = require("../graphql/mutations/AppMutation");
11
- const AppQuery_1 = require("../graphql/queries/AppQuery");
12
- const ora_1 = require("../ora");
13
- const Account_1 = require("../user/Account");
14
- const actions_1 = require("../user/actions");
15
- const projectCache = {};
16
- /**
17
- * Ensures project exists on EAS servers. Registers it when it doesn't
18
- * @returns The project ID
19
- */
20
- async function ensureProjectExistsAsync(projectInfo) {
21
- const { accountName, projectName } = projectInfo;
22
- const projectFullName = `@${accountName}/${projectName}`;
23
- if (projectFullName in projectCache) {
24
- return projectCache[projectFullName];
25
- }
26
- const actor = await (0, actions_1.ensureLoggedInAsync)();
27
- const account = (0, Account_1.findAccountByName)(actor.accounts, accountName);
28
- (0, assert_1.default)(account, `You must have access to the ${accountName} account to run this command`);
29
- const projectDashboardUrl = (0, url_1.getProjectDashboardUrl)(accountName, projectName);
30
- const projectLink = (0, terminal_link_1.default)(projectFullName, projectDashboardUrl, {
31
- // https://github.com/sindresorhus/terminal-link/issues/18#issuecomment-1068020361
32
- fallback: () => `${projectFullName} (${projectDashboardUrl})`,
33
- });
34
- const spinner = (0, ora_1.ora)(`Linking to project ${chalk_1.default.bold(projectFullName)}`).start();
35
- const maybeId = await findProjectIdByAccountNameAndSlugNullableAsync(accountName, projectName);
36
- if (maybeId) {
37
- spinner.succeed(`Linked to project ${chalk_1.default.bold(projectLink)}`);
38
- projectCache[projectFullName] = maybeId;
39
- return maybeId;
40
- }
41
- try {
42
- spinner.text = `Creating ${chalk_1.default.bold(projectFullName)} on Expo`;
43
- const id = await registerNewProjectAsync({
44
- accountId: account.id,
45
- projectName,
46
- privacy: projectInfo.privacy,
47
- });
48
- spinner.succeed(`Created ${chalk_1.default.bold(projectLink)} on Expo`);
49
- projectCache[projectFullName] = id;
50
- return id;
51
- }
52
- catch (err) {
53
- spinner.fail();
54
- throw err;
55
- }
56
- }
57
- exports.ensureProjectExistsAsync = ensureProjectExistsAsync;
58
- /**
59
- * Finds project by `@accountName/slug` and returns its ID, return null if the project does not exist
60
- * @param accountName account name
61
- * @param slug project slug
62
- * @returns A promise resolving to Project ID, null if it doesn't exist
63
- */
64
- async function findProjectIdByAccountNameAndSlugNullableAsync(accountName, slug) {
65
- var _a;
66
- try {
67
- const { id } = await AppQuery_1.AppQuery.byFullNameAsync(`@${accountName}/${slug}`);
68
- return id;
69
- }
70
- catch (err) {
71
- if ((_a = err.graphQLErrors) === null || _a === void 0 ? void 0 : _a.some((it) => { var _a; return ((_a = it.extensions) === null || _a === void 0 ? void 0 : _a.errorCode) !== 'EXPERIENCE_NOT_FOUND'; })) {
72
- throw err;
73
- }
74
- return null;
75
- }
76
- }
77
- /**
78
- * Registers new project on EAS servers
79
- * @returns Created project's ID
80
- */
81
- async function registerNewProjectAsync({ accountId, projectName, privacy, }) {
82
- return AppMutation_1.AppMutation.createAppAsync({
83
- accountId,
84
- projectName,
85
- privacy: privacy !== null && privacy !== void 0 ? privacy : generated_1.AppPrivacy.Public,
86
- });
87
- }
88
- exports.registerNewProjectAsync = registerNewProjectAsync;
@@ -1,3 +0,0 @@
1
- import { Account as GraphQLAccount } from '../graphql/generated';
2
- export declare type Account = Pick<GraphQLAccount, 'id' | 'name'>;
3
- export declare function findAccountByName(accounts: Account[], needle: string): Account | undefined;
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findAccountByName = void 0;
4
- function findAccountByName(accounts, needle) {
5
- return accounts.find(({ name }) => name === needle);
6
- }
7
- exports.findAccountByName = findAccountByName;