@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
73 lines • 2.3 kB
JavaScript
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;
};