1import chalk from 'chalk';
2
3import logger from '../../Logger';
4import * as Npm from '../../Npm';
5import { Task } from '../../TasksRunner';
6import { TaskArgs } from '../types';
7
8const { cyan } = chalk;
9
10/**
11 * Checks whether the environment allows to proceed with any further tasks.
12 */
13export const checkEnvironmentTask = new Task<TaskArgs>(
14  {
15    name: 'checkEnvironmentTask',
16    required: true,
17  },
18  async (): Promise<void | symbol> => {
19    const npmUser = await Npm.whoamiAsync();
20
21    if (!npmUser) {
22      logger.error(
23        '❗️ You must be logged in to NPM to publish packages, please run `npm login` first'
24      );
25      return Task.STOP;
26    }
27
28    const teamMembers = await Npm.getTeamMembersAsync(Npm.EXPO_DEVELOPERS_TEAM_NAME);
29
30    if (!teamMembers.includes(npmUser)) {
31      logger.error(
32        `❗️ You must be in ${cyan(Npm.EXPO_DEVELOPERS_TEAM_NAME)} team to publish packages`
33      );
34      return Task.STOP;
35    }
36  }
37);
38