UNPKG

@sentry/wizard

Version:

Sentry wizard helping you to configure your project

81 lines (73 loc) 2.18 kB
import type { Answers } from 'inquirer'; import { prompt } from 'inquirer'; import * as _ from 'lodash'; import { BaseStep } from './BaseStep'; function sleep(n: number): Promise<void> { return new Promise((resolve) => setTimeout(resolve, n)); } export class SentryProjectSelector extends BaseStep { public async emit(answers: Answers): Promise<any> { this.debug(answers); if (!_.has(answers, 'wizard')) { // we skip this completly because the wizard wasn't running return {}; } if ( _.has(answers, 'wizard.projects') && answers.wizard.projects.length === 0 ) { throw new Error('no projects'); } let selectedProject = null; if (answers.wizard.projects.length === 1) { selectedProject = { selectedProject: answers.wizard.projects[0] }; // the wizard CLI closes too quickly when we skip the prompt // as it will cause the UI to be stuck saying Waiting for wizard to connect await sleep(1000); } else { selectedProject = await prompt([ { choices: answers.wizard.projects.map((project: any) => { return { name: `${project.organization.name} / ${project.slug}`, value: project, }; }), message: 'Please select your project in Sentry:', name: 'selectedProject', type: 'list', }, ]); } return { config: { auth: { token: _.get(answers, 'wizard.apiKeys.token', null), }, dsn: { public: _.get( selectedProject, 'selectedProject.keys.0.dsn.public', null, ), secret: _.get( selectedProject, 'selectedProject.keys.0.dsn.secret', null, ), }, organization: { slug: _.get( selectedProject, 'selectedProject.organization.slug', null, ), }, project: { id: _.get(selectedProject, 'selectedProject.id', null), slug: _.get(selectedProject, 'selectedProject.slug', null), }, }, }; } }