UNPKG

node-pg-migrate-custom

Version:

Postgresql database migration management tool for node.js

92 lines (91 loc) 4.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.renameRole = exports.alterRole = exports.createRole = exports.dropRole = void 0; const lodash_1 = require("lodash"); const utils_1 = require("../utils"); const formatRoleOptions = (roleOptions = {}) => { const options = []; if (roleOptions.superuser !== undefined) { options.push(roleOptions.superuser ? 'SUPERUSER' : 'NOSUPERUSER'); } if (roleOptions.createdb !== undefined) { options.push(roleOptions.createdb ? 'CREATEDB' : 'NOCREATEDB'); } if (roleOptions.createrole !== undefined) { options.push(roleOptions.createrole ? 'CREATEROLE' : 'NOCREATEROLE'); } if (roleOptions.inherit !== undefined) { options.push(roleOptions.inherit ? 'INHERIT' : 'NOINHERIT'); } if (roleOptions.login !== undefined) { options.push(roleOptions.login ? 'LOGIN' : 'NOLOGIN'); } if (roleOptions.replication !== undefined) { options.push(roleOptions.replication ? 'REPLICATION' : 'NOREPLICATION'); } if (roleOptions.bypassrls !== undefined) { options.push(roleOptions.bypassrls ? 'BYPASSRLS' : 'NOBYPASSRLS'); } if (roleOptions.limit) { options.push(`CONNECTION LIMIT ${Number(roleOptions.limit)}`); } if (roleOptions.password !== undefined) { const encrypted = roleOptions.encrypted === false ? 'UNENCRYPTED' : 'ENCRYPTED'; options.push(`${encrypted} PASSWORD ${utils_1.escapeValue(roleOptions.password)}`); } if (roleOptions.valid !== undefined) { const valid = roleOptions.valid ? utils_1.escapeValue(roleOptions.valid) : "'infinity'"; options.push(`VALID UNTIL ${valid}`); } if (roleOptions.inRole) { const inRole = lodash_1.isArray(roleOptions.inRole) ? roleOptions.inRole.join(',') : roleOptions.inRole; options.push(`IN ROLE ${inRole}`); } if (roleOptions.role) { const role = lodash_1.isArray(roleOptions.role) ? roleOptions.role.join(',') : roleOptions.role; options.push(`ROLE ${role}`); } if (roleOptions.admin) { const admin = lodash_1.isArray(roleOptions.admin) ? roleOptions.admin.join(',') : roleOptions.admin; options.push(`ADMIN ${admin}`); } return options.join(' '); }; function dropRole(mOptions) { const _drop = (roleName, options = {}) => { const { ifExists } = options; const ifExistsStr = ifExists ? ' IF EXISTS' : ''; const roleNameStr = mOptions.literal(roleName); return `DROP ROLE${ifExistsStr} ${roleNameStr};`; }; return _drop; } exports.dropRole = dropRole; function createRole(mOptions) { const _create = (roleName, roleOptions = {}) => { const options = formatRoleOptions(Object.assign(Object.assign({}, roleOptions), { superuser: roleOptions.superuser || false, createdb: roleOptions.createdb || false, createrole: roleOptions.createrole || false, inherit: roleOptions.inherit !== false, login: roleOptions.login || false, replication: roleOptions.replication || false })); const optionsStr = options ? ` WITH ${options}` : ''; return `CREATE ROLE ${mOptions.literal(roleName)}${optionsStr};`; }; _create.reverse = dropRole(mOptions); return _create; } exports.createRole = createRole; function alterRole(mOptions) { const _alter = (roleName, roleOptions = {}) => { const options = formatRoleOptions(roleOptions); return options ? `ALTER ROLE ${mOptions.literal(roleName)} WITH ${options};` : ''; }; return _alter; } exports.alterRole = alterRole; function renameRole(mOptions) { const _rename = (oldRoleName, newRoleName) => { const oldRoleNameStr = mOptions.literal(oldRoleName); const newRoleNameStr = mOptions.literal(newRoleName); return `ALTER ROLE ${oldRoleNameStr} RENAME TO ${newRoleNameStr};`; }; _rename.reverse = (oldRoleName, newRoleName) => _rename(newRoleName, oldRoleName); return _rename; } exports.renameRole = renameRole;