@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 PostgreSQL database exists before connecting.
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 PostgreSQL database exists before connecting.
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, 10, , 11]);
57
+ _c.trys.push([1, 16, , 17]);
55
58
  Sequelize = require("sequelize").Sequelize;
56
- adminConnection = new Sequelize("postgres", dbUser, dbPassword, {
59
+ systemDb = dialect === "mssql" ? "master" : dialect === "mysql" ? undefined : "postgres";
60
+ adminConnection = new Sequelize(systemDb || "", dbUser, dbPassword, {
57
61
  host: dbHost,
58
- dialect: "postgres",
62
+ port: port,
63
+ dialect: dialect,
59
64
  logging: false,
60
- dialectOptions: ssl
61
- ? { ssl: { require: true, rejectUnauthorized: false } }
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, 6, 7, 9]);
67
- return [4 /*yield*/, adminConnection.query("SELECT 1 FROM pg_database WHERE datname = '" + dbName + "'")];
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 \"" + dbName + "\"")];
79
+ return [4 /*yield*/, adminConnection.query("CREATE DATABASE [" + dbName + "]")];
72
80
  case 4:
73
81
  _c.sent();
74
- console.log("[DB] Database \"" + dbName + "\" created successfully");
82
+ console.log("[DB] Database \"" + dbName + "\" created (mssql)");
75
83
  _c.label = 5;
76
- case 5: return [3 /*break*/, 9];
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
- // 42P04 = database already exists (race condition safe)
80
- if (((_a = error_1 === null || error_1 === void 0 ? void 0 : error_1.original) === null || _a === void 0 ? void 0 : _a.code) !== "42P04") {
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*/, 9];
84
- case 7: return [4 /*yield*/, adminConnection.close()];
85
- case 8:
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 9: return [3 /*break*/, 11];
89
- case 10:
112
+ case 15: return [3 /*break*/, 17];
113
+ case 16:
90
114
  _b = _c.sent();
91
- return [3 /*break*/, 11];
92
- case 11: return [2 /*return*/];
115
+ return [3 /*break*/, 17];
116
+ case 17: return [2 /*return*/];
93
117
  }
94
118
  });
95
119
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluyappgocore/commons-backend",
3
- "version": "1.0.210",
3
+ "version": "1.0.211",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",