UNPKG

pg-create-db

Version:

Database creation tool for PostgreSQL database server

85 lines (84 loc) 6.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDatabase = createDatabase; exports.checkToRunCreateDatabaseHandler = checkToRunCreateDatabaseHandler; exports.createDatabaseHandler = createDatabaseHandler; const commander_1 = require("commander"); const cosmiconfig_1 = require("cosmiconfig"); const path_1 = require("path"); const default_1 = require("../constants/default"); const env_keys_1 = require("../constants/env-keys"); const create_database_service_1 = require("../services/create-database.service"); const replace_env_1 = require("../utils/replace-env"); function createDatabase(program) { program .addOption(new commander_1.Option('-d,--dry-run <boolean>', 'Show queries to execute without apply them in database') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.dryRun) .env(env_keys_1.PG_CREATE_DB_DRY_RUN)) .addOption(new commander_1.Option('-c,--config <string>', 'Configuration file for bulk migrations (example content: [{"databaseUrl":"postgres://${POSTGRES_USER}:POSTGRES_PASSWORD@localhost:POSTGRES_PORT/POSTGRES_DATABASE?schema=public"}], rules: https://github.com/cosmiconfig/cosmiconfig)') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.config) .env(env_keys_1.PG_CREATE_DB_CONFIG)) .addOption(new commander_1.Option('-r,--root-database-url <string>', 'Database url for connect as root user (example: postgres://postgres:ROOT_POSTGRES_PASSWORD@localhost:POSTGRES_PORT/postgres?schema=public)') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.rootDatabaseUrl) .env(env_keys_1.PG_CREATE_DB_ROOT_DATABASE_URL)) .addOption(new commander_1.Option('-a,--app-database-url <string>', 'Application database url used for create new database (example: postgres://POSTGRES_USER:POSTGRES_PASSWORD@localhost:POSTGRES_PORT/POSTGRES_DATABASE?schema=public)') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.appDatabaseUrl) .env(env_keys_1.PG_CREATE_DB_APP_DATABASE_URL)) .addOption(new commander_1.Option('-n,--force-change-username <boolean>', 'Force rename username if one exists in database for app-database-url excluding root') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.forceChangeUsername) .env(env_keys_1.PG_CREATE_DB_FORCE_CHANGE_USERNAME)) .addOption(new commander_1.Option('-p,--force-change-password <boolean>', 'Force change password of specified app-database-url') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.forceChangePassword) .env(env_keys_1.PG_CREATE_DB_FORCE_CHANGE_PASSWORD)) .addOption(new commander_1.Option('--drop-app-database <boolean>', 'Drop application database before try create it') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.dropAppDatabase) .env(env_keys_1.PG_CREATE_DB_DROP_APP_DATABASE)) .addOption(new commander_1.Option('-e,--extensions <boolean>', 'Default extensions') .default(default_1.PG_CREATE_DB_DEFAULT_CONFIG.extensions) .env(env_keys_1.PG_CREATE_DB_EXTENSIONS)); } function checkToRunCreateDatabaseHandler(options) { return Object.keys(options).filter(Boolean).length > 0; } async function createDatabaseHandler(options) { let configObjects = []; try { const dir = (0, path_1.dirname)(options.config); const searchFrom = dir[0] === '.' ? (0, path_1.join)(process.cwd(), dir) : dir[0] === path_1.sep ? dir : process.cwd(); const moduleName = (0, path_1.basename)(options.config); const config = await (0, cosmiconfig_1.cosmiconfig)(moduleName, { loaders: cosmiconfig_1.defaultLoaders, }).search(searchFrom); if (config && !config?.isEmpty) { configObjects = Array.isArray(config.config) ? config.config : [config.config]; } } catch (err) { console.error(err); } if (configObjects.length === 0) { const createDatabaseService = new create_database_service_1.CreateDatabaseService(Boolean((0, replace_env_1.replaceEnv)(options.dryRun)?.toLowerCase() === 'true')); await createDatabaseService.createDatabase({ appDatabaseUrl: (0, replace_env_1.replaceEnv)(options.appDatabaseUrl), rootDatabaseUrl: (0, replace_env_1.replaceEnv)(options.rootDatabaseUrl), extensions: (0, replace_env_1.replaceEnv)(options.extensions).split(','), forceChangePassword: Boolean((0, replace_env_1.replaceEnv)(options.forceChangePassword)?.toLowerCase() === 'true'), forceChangeUsername: Boolean((0, replace_env_1.replaceEnv)(options.forceChangeUsername)?.toLowerCase() === 'true'), dropAppDatabase: Boolean((0, replace_env_1.replaceEnv)(options.dropAppDatabase)?.toLowerCase() === 'true'), }); } else { for (let index = 0; index < configObjects.length; index++) { const configObject = configObjects[index]; const createDatabaseService = new create_database_service_1.CreateDatabaseService(Boolean((0, replace_env_1.replaceEnv)(configObject.dryRun || options.dryRun)?.toLowerCase() === 'true')); await createDatabaseService.createDatabase({ appDatabaseUrl: (0, replace_env_1.replaceEnv)(configObject.appDatabaseUrl), rootDatabaseUrl: (0, replace_env_1.replaceEnv)(configObject.rootDatabaseUrl || options.rootDatabaseUrl), extensions: (0, replace_env_1.replaceEnv)(configObject.extensions || options.extensions).split(','), forceChangePassword: Boolean((0, replace_env_1.replaceEnv)(configObject.forceChangePassword || options.forceChangePassword)?.toLowerCase() === 'true'), forceChangeUsername: Boolean((0, replace_env_1.replaceEnv)(configObject.forceChangeUsername || options.forceChangeUsername)?.toLowerCase() === 'true'), dropAppDatabase: Boolean((0, replace_env_1.replaceEnv)(configObject.dropAppDatabase || options.dropAppDatabase)?.toLowerCase() === 'true'), }); } } }