@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
61 lines • 2.22 kB
JavaScript
import chalk from 'chalk';
import inquirer from 'inquirer';
import { logger, execSync, getFirebaserc, getFirestoreLocations } 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 locations = await getFirestoreLocations(projectId);
const {
location
} = await inquirer.prompt([{
type: 'select',
name: 'location',
default: locations.find(loc => loc.startsWith('europe-west1')) || locations[0],
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: locations
}]);
const {
deleteProtection
} = await inquirer.prompt([{
type: 'select',
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();
};