UNPKG

@microtica/database

Version:

Database tools

109 lines 4.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Database = exports.Values = exports.Types = void 0; const anyDbSql = require("anydb-sql"); const migrations = require("anydb-sql-migrations"); const connection_string_1 = require("connection-string"); const pg_1 = require("pg"); const mysql = require("mysql"); var Types; (function (Types) { function CHAR(length) { return `CHAR(${length})`; } Types.CHAR = CHAR; function VARCHAR(length) { return `VARCHAR(${length})`; } Types.VARCHAR = VARCHAR; function TIMESTAMP(length = 0) { return `TIMESTAMP(${length})`; } Types.TIMESTAMP = TIMESTAMP; Types.UUID = "varchar(36)"; Types.TEXT = "TEXT"; Types.BOOLEAN = "BOOLEAN"; function defaultValue(type, defValue) { return `${type} DEFAULT ${defValue}`; } Types.defaultValue = defaultValue; })(Types = exports.Types || (exports.Types = {})); var Values; (function (Values) { function CURRENT_TIMESTAMP(length = 0) { return `CURRENT_TIMESTAMP(${length})`; } Values.CURRENT_TIMESTAMP = CURRENT_TIMESTAMP; })(Values = exports.Values || (exports.Values = {})); class Database { create() { const connString = new connection_string_1.ConnectionString(process.env.databaseUrl); if (connString.protocol === "sqlite") { return Promise.resolve(); } if (!connString.segments || (connString.segments && !connString.segments.length)) { throw new Error("Database name missing. Check connection string"); } if (connString.protocol === "postgres") { const connection = new pg_1.Client({ connectionString: process.env.databaseUrl }); return new Promise((resolve, reject) => { connection.connect(err => { if (err) { return reject(err); } console.log("[INFO] Database connected."); connection.query(`CREATE SCHEMA IF NOT EXISTS ${connString.params.currentSchema}`, (err, result) => { if (err) { return reject(err); } console.log("[INFO] Database schema created."); connection.end(err => { if (err) { return reject(err); } resolve(); }); }); }); }); } else if (connString.protocol === "mysql") { const connection = mysql.createConnection({ host: connString.hostname, port: connString.port, user: connString.user, password: connString.password }); return new Promise((resolve, reject) => { connection.connect(err => { if (err) { return reject(err); } console.log("[INFO] Database connected."); connection.query(`CREATE DATABASE IF NOT EXISTS ${connString.segments[0]}`, (err, result) => { if (err) { return reject(err); } console.log("[INFO] Database created."); connection.end(err => { if (err) { return reject(err); } resolve(); }); }); }); }); } } migrate(migrationsDir) { return migrations.create(Database.db, migrationsDir).migrate(); } rollback(migrationsDir) { return migrations.create(Database.db, migrationsDir).undoLast(); } drop(migrationsDir) { return migrations.create(Database.db, migrationsDir).drop(); } } exports.Database = Database; Database.db = anyDbSql({ url: process.env.databaseUrl, connections: { min: 1, max: 4 } }); //# sourceMappingURL=database.js.map