@fluyappgocore/commons-backend 1.0.210 → 1.0.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ensures a
|
|
2
|
+
* Ensures a database exists before connecting.
|
|
3
|
+
* Supports PostgreSQL, MySQL, and MSSQL.
|
|
3
4
|
* Uses dynamic require of 'sequelize' which is available in each MS.
|
|
4
5
|
*/
|
|
5
6
|
export declare function ensureDatabase(opts: {
|
|
@@ -8,4 +9,6 @@ export declare function ensureDatabase(opts: {
|
|
|
8
9
|
dbPassword: string;
|
|
9
10
|
dbHost: string;
|
|
10
11
|
ssl?: boolean;
|
|
12
|
+
dialect?: string;
|
|
13
|
+
port?: number;
|
|
11
14
|
}): Promise<void>;
|
|
@@ -38,58 +38,82 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.ensureDatabase = void 0;
|
|
40
40
|
/**
|
|
41
|
-
* Ensures a
|
|
41
|
+
* Ensures a database exists before connecting.
|
|
42
|
+
* Supports PostgreSQL, MySQL, and MSSQL.
|
|
42
43
|
* Uses dynamic require of 'sequelize' which is available in each MS.
|
|
43
44
|
*/
|
|
44
45
|
function ensureDatabase(opts) {
|
|
45
46
|
var _a;
|
|
46
47
|
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
-
var dbName, dbUser, dbPassword, dbHost, ssl, Sequelize, adminConnection, results, error_1, _b;
|
|
48
|
+
var dbName, dbUser, dbPassword, dbHost, ssl, dialect, port, Sequelize, systemDb, adminConnection, results, results, error_1, code, _b;
|
|
48
49
|
return __generator(this, function (_c) {
|
|
49
50
|
switch (_c.label) {
|
|
50
51
|
case 0:
|
|
51
52
|
dbName = opts.dbName, dbUser = opts.dbUser, dbPassword = opts.dbPassword, dbHost = opts.dbHost, ssl = opts.ssl;
|
|
53
|
+
dialect = opts.dialect || process.env.DB_DIALECT || "postgres";
|
|
54
|
+
port = opts.port || parseInt(process.env.DB_PORT || "5432", 10);
|
|
52
55
|
_c.label = 1;
|
|
53
56
|
case 1:
|
|
54
|
-
_c.trys.push([1,
|
|
57
|
+
_c.trys.push([1, 16, , 17]);
|
|
55
58
|
Sequelize = require("sequelize").Sequelize;
|
|
56
|
-
|
|
59
|
+
systemDb = dialect === "mssql" ? "master" : dialect === "mysql" ? undefined : "postgres";
|
|
60
|
+
adminConnection = new Sequelize(systemDb || "", dbUser, dbPassword, {
|
|
57
61
|
host: dbHost,
|
|
58
|
-
|
|
62
|
+
port: port,
|
|
63
|
+
dialect: dialect,
|
|
59
64
|
logging: false,
|
|
60
|
-
dialectOptions:
|
|
61
|
-
? {
|
|
62
|
-
:
|
|
65
|
+
dialectOptions: dialect === "mssql"
|
|
66
|
+
? { options: { encrypt: !!ssl, trustServerCertificate: true } }
|
|
67
|
+
: ssl
|
|
68
|
+
? { ssl: { require: true, rejectUnauthorized: false } }
|
|
69
|
+
: {},
|
|
63
70
|
});
|
|
64
71
|
_c.label = 2;
|
|
65
72
|
case 2:
|
|
66
|
-
_c.trys.push([2,
|
|
67
|
-
|
|
73
|
+
_c.trys.push([2, 12, 13, 15]);
|
|
74
|
+
if (!(dialect === "mssql")) return [3 /*break*/, 6];
|
|
75
|
+
return [4 /*yield*/, adminConnection.query("SELECT name FROM sys.databases WHERE name = N'" + dbName + "'")];
|
|
68
76
|
case 3:
|
|
69
77
|
results = (_c.sent())[0];
|
|
70
78
|
if (!(results.length === 0)) return [3 /*break*/, 5];
|
|
71
|
-
return [4 /*yield*/, adminConnection.query("CREATE DATABASE
|
|
79
|
+
return [4 /*yield*/, adminConnection.query("CREATE DATABASE [" + dbName + "]")];
|
|
72
80
|
case 4:
|
|
73
81
|
_c.sent();
|
|
74
|
-
console.log("[DB] Database \"" + dbName + "\" created
|
|
82
|
+
console.log("[DB] Database \"" + dbName + "\" created (mssql)");
|
|
75
83
|
_c.label = 5;
|
|
76
|
-
case 5: return [3 /*break*/,
|
|
84
|
+
case 5: return [3 /*break*/, 11];
|
|
77
85
|
case 6:
|
|
86
|
+
if (!(dialect === "mysql" || dialect === "mariadb")) return [3 /*break*/, 8];
|
|
87
|
+
return [4 /*yield*/, adminConnection.query("CREATE DATABASE IF NOT EXISTS `" + dbName + "`")];
|
|
88
|
+
case 7:
|
|
89
|
+
_c.sent();
|
|
90
|
+
return [3 /*break*/, 11];
|
|
91
|
+
case 8: return [4 /*yield*/, adminConnection.query("SELECT 1 FROM pg_database WHERE datname = '" + dbName + "'")];
|
|
92
|
+
case 9:
|
|
93
|
+
results = (_c.sent())[0];
|
|
94
|
+
if (!(results.length === 0)) return [3 /*break*/, 11];
|
|
95
|
+
return [4 /*yield*/, adminConnection.query("CREATE DATABASE \"" + dbName + "\"")];
|
|
96
|
+
case 10:
|
|
97
|
+
_c.sent();
|
|
98
|
+
console.log("[DB] Database \"" + dbName + "\" created (postgres)");
|
|
99
|
+
_c.label = 11;
|
|
100
|
+
case 11: return [3 /*break*/, 15];
|
|
101
|
+
case 12:
|
|
78
102
|
error_1 = _c.sent();
|
|
79
|
-
|
|
80
|
-
if (
|
|
103
|
+
code = (_a = error_1 === null || error_1 === void 0 ? void 0 : error_1.original) === null || _a === void 0 ? void 0 : _a.code;
|
|
104
|
+
if (code !== "42P04" && code !== 1007 && code !== "S0001") {
|
|
81
105
|
console.error("[DB] Error ensuring database \"" + dbName + "\":", error_1.message);
|
|
82
106
|
}
|
|
83
|
-
return [3 /*break*/,
|
|
84
|
-
case
|
|
85
|
-
case
|
|
107
|
+
return [3 /*break*/, 15];
|
|
108
|
+
case 13: return [4 /*yield*/, adminConnection.close()];
|
|
109
|
+
case 14:
|
|
86
110
|
_c.sent();
|
|
87
111
|
return [7 /*endfinally*/];
|
|
88
|
-
case
|
|
89
|
-
case
|
|
112
|
+
case 15: return [3 /*break*/, 17];
|
|
113
|
+
case 16:
|
|
90
114
|
_b = _c.sent();
|
|
91
|
-
return [3 /*break*/,
|
|
92
|
-
case
|
|
115
|
+
return [3 /*break*/, 17];
|
|
116
|
+
case 17: return [2 /*return*/];
|
|
93
117
|
}
|
|
94
118
|
});
|
|
95
119
|
});
|