@microtica/database
Version:
Database tools
109 lines • 4.24 kB
JavaScript
;
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