UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

60 lines 2.54 kB
import chalk from 'chalk'; import inquirer from 'inquirer'; import { logger, execSync, getFirebaserc } from '../../utils/index.js'; const DATABASES = ['session', 'cache']; const confirmCreate = async (projectId, database) => { const keyStr = chalk.yellow(database); const { create } = await inquirer.prompt([{ type: 'confirm', name: 'create', default: false, message: `Do you want to create the Firestore database ${keyStr} ` + `for project ${chalk.yellow(projectId)}?` }]); if (create) { const { location } = await inquirer.prompt([{ type: 'list', name: 'location', default: 'eur3', message: `Select the region for the Firestore database ${keyStr}.` + `\n${chalk.gray('Note:')} Choose the same region where` + 'App Engine is deployed to reduce latency!', choices: ['eur3 (Belgium and Netherlands)', 'nam5 (United States)', 'europe-west1 (Belgium)', 'europe-north1 (Finland)', 'europe-west2 (London)', 'europe-west3 (Frankfurt)', 'europe-west6 (Zurich)', 'us-central1 (Iowa)', 'us-east1 (South Carolina)', 'us-east4 (Northern Virginia)', 'us-west1 (Oregon)', 'northamerica-northeast1 (Montreal)', 'southamerica-east1 (Sao Paulo)', 'us-west2 (Los Angeles)', 'asia-northeast1 (Tokyo)', 'asia-southeast1 (Singapore)', 'australia-southeast1 (Sydney)'] }]); const { deleteProtection } = await inquirer.prompt([{ type: 'list', name: 'deleteProtection', default: 'ENABLED', message: `Enable delete protection for the Firestore database ${keyStr}:`, choices: ['ENABLED', 'DISABLED'] }]); const spinner = logger.spinner(`Creating database ${keyStr}...`); try { await execSync(`firebase firestore:databases:create ${database}`, { location: location.split(' ')[0].toLowerCase(), stdio: 'inherit', project: projectId, 'delete-protection': deleteProtection }); } catch (error) { spinner.fail(`Failed to create database ${keyStr}: ${error.message}`); return Promise.resolve(); } spinner.succeed(`Database ${keyStr} created successfully.`); } return Promise.resolve(); }; export default async () => { const firebaserc = getFirebaserc(); if (!firebaserc.projects) { return Promise.reject('No projects found in .firebaserc'); } for await (const database of DATABASES) { await confirmCreate(firebaserc.projects.production, database); await confirmCreate(firebaserc.projects.development, database); } return Promise.resolve(); };