UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

73 lines 2.3 kB
import inquirer from 'inquirer'; import { getRequiredFirebasercProjects } from '../../utils/firebase.js'; import { logger } from '../../utils/logger.js'; import { execSync } from '../../utils/index.js'; const REGIONS = ['us-central1', 'europe-west1', 'asia-southeast1']; const DEFAULT_REGION = 'europe-west1'; export const resolveRealtimeDatabaseInstanceName = projectId => `${projectId}-default-rtdb`; export const confirmCreateRealtimeDatabase = async ({ execSyncImpl = execSync, loggerImpl = logger, projectId, promptImpl = inquirer.prompt }) => { const { shouldCreate } = await promptImpl([{ type: 'confirm', name: 'shouldCreate', default: false, message: 'Do you want to create the Realtime Database instance ' + `for project ${projectId}?` }]); if (!shouldCreate) { return 'skipped'; } const { location } = await promptImpl([{ type: 'select', name: 'location', default: DEFAULT_REGION, message: 'Select the region for the Realtime Database instance.', choices: REGIONS }]); const instanceName = resolveRealtimeDatabaseInstanceName(projectId); const spinner = loggerImpl.spinner(`Creating Realtime Database instance ${instanceName}...`); try { await execSyncImpl(`firebase database:instances:create ${instanceName}`, { location, stdio: 'inherit', project: projectId }); } catch (error) { spinner.fail(`Failed to create Realtime Database instance ${instanceName}: ${error.message}`); throw error; } spinner.succeed(`Realtime Database instance ${instanceName} created successfully.`); return 'created'; }; export default async (dependencies = {}) => { const { execSync: execSyncImpl = execSync, getRequiredFirebasercProjects: getRequiredFirebasercProjectsImpl = getRequiredFirebasercProjects, logger: loggerImpl = logger, prompt: promptImpl = inquirer.prompt } = dependencies; const { developmentProjectId, productionProjectId } = getRequiredFirebasercProjectsImpl(); await confirmCreateRealtimeDatabase({ execSyncImpl, loggerImpl, projectId: productionProjectId, promptImpl }); await confirmCreateRealtimeDatabase({ execSyncImpl, loggerImpl, projectId: developmentProjectId, promptImpl }); return true; };