emilsoftware-utilities 2.0.0-dev.6 → 2.0.0-dev.7

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,5 @@
1
1
  import { Logger } from "./Logger";
2
- import { Options } from "es-node-firebird";
2
+ import { Options } from "node-firebird";
3
3
  export declare abstract class DatabaseUpdater {
4
4
  protected static options: Options;
5
5
  protected static logger: Logger;
@@ -1 +1 @@
1
- {"version":3,"file":"DatabaseUpdater.js","sourceRoot":"","sources":["../src/DatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Orm } from \"./Orm\";\r\nimport { Logger } from \"./Logger\";\r\nimport { Options } from \"es-node-firebird\";\r\n\r\nexport abstract class DatabaseUpdater {\r\n //#region Fields and Options\r\n protected static options: Options;\r\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\r\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\r\n //#endregion\r\n\r\n //#region Utility Methods\r\n /**\r\n * Checks if a table exists.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @returns True if the table exists, false otherwise.\r\n */\r\n protected static async tableExists(\r\n options: Options,\r\n table: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$RELATIONS\r\n WHERE RDB$RELATION_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [table.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a column exists in a specific table.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @param column Column name.\r\n * @returns True if the column exists, false otherwise.\r\n */\r\n protected static async columnExists(\r\n options: Options,\r\n table: string,\r\n column: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1 \r\n FROM RDB$RELATION_FIELDS \r\n WHERE RDB$RELATION_NAME = ? \r\n AND RDB$FIELD_NAME = ?`;\r\n const result = await Orm.query(options, query, [\r\n table.toUpperCase(),\r\n column.toUpperCase(),\r\n ]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a generator/sequence exists.\r\n * @param options Database connection options.\r\n * @param generator Generator name.\r\n * @returns True if the generator exists, false otherwise.\r\n */\r\n protected static async generatorExists(\r\n options: Options,\r\n generator: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$GENERATORS\r\n WHERE RDB$GENERATOR_NAME = ?`;\r\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking generator ${generator}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a trigger exists.\r\n * @param options Database connection options.\r\n * @param trigger Trigger name.\r\n * @returns True if the trigger exists, false otherwise.\r\n */\r\n protected static async triggerExists(\r\n options: Options,\r\n trigger: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$TRIGGERS\r\n WHERE RDB$TRIGGER_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking trigger ${trigger}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the current database version from the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @returns The current database version or null if not found.\r\n */\r\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n return null;\r\n }\r\n\r\n const parameters = (await Orm.query(\r\n options,\r\n `SELECT CODPAR, DESPAR\r\n FROM PARAMETRI\r\n WHERE CODPAR IN (?, ?)\r\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\r\n [\r\n this.versionParameterKeys[0],\r\n this.versionParameterKeys[1],\r\n this.versionParameterKeys[0],\r\n ]\r\n )) as any[];\r\n\r\n return parameters.length > 0 ? parameters[0].DESPAR : null;\r\n } catch (error: any) {\r\n this.logger.error(`Error getting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the database version in the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @param version The new database version.\r\n */\r\n protected static async setDatabaseVersion(\r\n options: Options,\r\n version: string\r\n ): Promise<void> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n await this.createParametersTable(options);\r\n }\r\n\r\n const existingRows = (await Orm.query(\r\n options,\r\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\r\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\r\n )) as any[];\r\n\r\n if (existingRows.length === 0) {\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\r\n [this.versionParameterKeys[0], version, \"versione\", null]\r\n );\r\n return;\r\n }\r\n\r\n for (const row of existingRows) {\r\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\r\n version,\r\n row.CODPAR?.trim?.() ?? row.CODPAR,\r\n ]);\r\n }\r\n } catch (error: any) {\r\n this.logger.error(`Error setting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Initialization Methods\r\n /**\r\n * Ensures the PARAMETRI table exists and initializes it if necessary.\r\n * @param options Database connection options.\r\n */\r\n protected static async createParametersTable(options: Options): Promise<void> {\r\n try {\r\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\r\n if (!tableAlreadyExists) {\r\n const createTableQuery = `\r\n CREATE TABLE PARAMETRI (\r\n CODPAR VARCHAR(15) NOT NULL,\r\n DESPAR VARCHAR(255),\r\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\r\n GRUPPO VARCHAR(20)\r\n );`;\r\n\r\n await Orm.query(options, createTableQuery);\r\n\r\n await Orm.query(\r\n options,\r\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\r\n );\r\n\r\n await Orm.query(options, \"GRANT ALL ON PARAMETRI TO PUBLIC;\");\r\n await Orm.query(options, \"GRANT SELECT ON PARAMETRI TO TABX;\");\r\n }\r\n\r\n const versioneDb = await this.getDatabaseVersion(options);\r\n if (versioneDb !== null && versioneDb !== undefined) {\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\r\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\r\n );\r\n } catch (error: any) {\r\n this.logger.error(\"Error creating table PARAMETRI:\", error);\r\n throw error;\r\n }\r\n\r\n\r\n }\r\n //#endregion\r\n}\r\n"]}
1
+ {"version":3,"file":"DatabaseUpdater.js","sourceRoot":"","sources":["../src/DatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Orm } from \"./Orm\";\nimport { Logger } from \"./Logger\";\nimport { Options } from \"node-firebird\";\n\r\nexport abstract class DatabaseUpdater {\r\n //#region Fields and Options\r\n protected static options: Options;\r\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\r\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\r\n //#endregion\r\n\r\n //#region Utility Methods\r\n /**\r\n * Checks if a table exists.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @returns True if the table exists, false otherwise.\r\n */\r\n protected static async tableExists(\r\n options: Options,\r\n table: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$RELATIONS\r\n WHERE RDB$RELATION_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [table.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a column exists in a specific table.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @param column Column name.\r\n * @returns True if the column exists, false otherwise.\r\n */\r\n protected static async columnExists(\r\n options: Options,\r\n table: string,\r\n column: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1 \r\n FROM RDB$RELATION_FIELDS \r\n WHERE RDB$RELATION_NAME = ? \r\n AND RDB$FIELD_NAME = ?`;\r\n const result = await Orm.query(options, query, [\r\n table.toUpperCase(),\r\n column.toUpperCase(),\r\n ]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a generator/sequence exists.\r\n * @param options Database connection options.\r\n * @param generator Generator name.\r\n * @returns True if the generator exists, false otherwise.\r\n */\r\n protected static async generatorExists(\r\n options: Options,\r\n generator: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$GENERATORS\r\n WHERE RDB$GENERATOR_NAME = ?`;\r\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking generator ${generator}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a trigger exists.\r\n * @param options Database connection options.\r\n * @param trigger Trigger name.\r\n * @returns True if the trigger exists, false otherwise.\r\n */\r\n protected static async triggerExists(\r\n options: Options,\r\n trigger: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$TRIGGERS\r\n WHERE RDB$TRIGGER_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking trigger ${trigger}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the current database version from the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @returns The current database version or null if not found.\r\n */\r\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n return null;\r\n }\r\n\r\n const parameters = (await Orm.query(\r\n options,\r\n `SELECT CODPAR, DESPAR\r\n FROM PARAMETRI\r\n WHERE CODPAR IN (?, ?)\r\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\r\n [\r\n this.versionParameterKeys[0],\r\n this.versionParameterKeys[1],\r\n this.versionParameterKeys[0],\r\n ]\r\n )) as any[];\r\n\r\n return parameters.length > 0 ? parameters[0].DESPAR : null;\r\n } catch (error: any) {\r\n this.logger.error(`Error getting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the database version in the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @param version The new database version.\r\n */\r\n protected static async setDatabaseVersion(\r\n options: Options,\r\n version: string\r\n ): Promise<void> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n await this.createParametersTable(options);\r\n }\r\n\r\n const existingRows = (await Orm.query(\r\n options,\r\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\r\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\r\n )) as any[];\r\n\r\n if (existingRows.length === 0) {\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\r\n [this.versionParameterKeys[0], version, \"versione\", null]\r\n );\r\n return;\r\n }\r\n\r\n for (const row of existingRows) {\r\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\r\n version,\r\n row.CODPAR?.trim?.() ?? row.CODPAR,\r\n ]);\r\n }\r\n } catch (error: any) {\r\n this.logger.error(`Error setting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Initialization Methods\r\n /**\r\n * Ensures the PARAMETRI table exists and initializes it if necessary.\r\n * @param options Database connection options.\r\n */\r\n protected static async createParametersTable(options: Options): Promise<void> {\r\n try {\r\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\r\n if (!tableAlreadyExists) {\r\n const createTableQuery = `\r\n CREATE TABLE PARAMETRI (\r\n CODPAR VARCHAR(15) NOT NULL,\r\n DESPAR VARCHAR(255),\r\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\r\n GRUPPO VARCHAR(20)\r\n );`;\r\n\r\n await Orm.query(options, createTableQuery);\r\n\r\n await Orm.query(\r\n options,\r\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\r\n );\r\n\r\n await Orm.query(options, \"GRANT ALL ON PARAMETRI TO PUBLIC;\");\r\n await Orm.query(options, \"GRANT SELECT ON PARAMETRI TO TABX;\");\r\n }\r\n\r\n const versioneDb = await this.getDatabaseVersion(options);\r\n if (versioneDb !== null && versioneDb !== undefined) {\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\r\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\r\n );\r\n } catch (error: any) {\r\n this.logger.error(\"Error creating table PARAMETRI:\", error);\r\n throw error;\r\n }\r\n\r\n\r\n }\r\n //#endregion\r\n}\r\n"]}
package/dist/Orm.d.ts CHANGED
@@ -1,16 +1,10 @@
1
- import { Database, Options, Transaction } from "es-node-firebird";
1
+ import { Database, Options, Transaction } from "node-firebird";
2
2
  export declare class Orm {
3
3
  private static logger;
4
- private static compatibilityProfileCache;
5
4
  static quote(value: string): string;
6
5
  private static getTimeoutMs;
7
6
  private static createTimeoutError;
8
- private static createCompatibilityCacheKey;
9
- private static getProbeTimeoutMs;
10
- private static reorderCandidatesWithCache;
11
- private static createCompatibilitySummaryError;
12
7
  private static detachQuietly;
13
- private static attachOnceWithTimeout;
14
8
  private static attachWithTimeout;
15
9
  static testConnection(options: Options): Promise<boolean>;
16
10
  static query(options: Options, query: string, parameters?: any[], logQuery?: boolean): Promise<any>;
package/dist/Orm.js CHANGED
@@ -43,18 +43,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
43
43
  };
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.Orm = void 0;
46
- const Firebird = __importStar(require("es-node-firebird"));
46
+ const Firebird = __importStar(require("node-firebird"));
47
47
  const Logger_1 = require("./Logger");
48
48
  const Utilities_1 = require("./Utilities");
49
49
  const firebird_compat_1 = require("./firebird-compat");
50
- (0, firebird_compat_1.ensureEsNodeFirebirdCompatibilityPatch)();
51
50
  class Orm {
52
51
  static quote(value) {
53
52
  return "\"" + value + "\"";
54
53
  }
55
54
  static getTimeoutMs(options) {
56
- var _a, _b, _c;
57
- const candidate = (_c = (_b = (_a = options.connectTimeoutMs) !== null && _a !== void 0 ? _a : options.compatibilityTotalTimeoutMs) !== null && _b !== void 0 ? _b : options.connectTimeout) !== null && _c !== void 0 ? _c : 15000;
55
+ var _a;
56
+ const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
57
+ const candidate = (_a = normalizedOptions.connectTimeout) !== null && _a !== void 0 ? _a : 15000;
58
58
  return Number.isFinite(candidate) && candidate > 0 ? Math.trunc(candidate) : 15000;
59
59
  }
60
60
  static createTimeoutError(stage, timeoutMs, options, query) {
@@ -63,54 +63,6 @@ class Orm {
63
63
  const suffix = query ? ` | sql=${query.replace(/\s+/g, " ").trim()}` : "";
64
64
  return new Error(`Timeout during Firebird ${stage} after ${timeoutMs} ms on ${target}${suffix}`);
65
65
  }
66
- static createCompatibilityCacheKey(options) {
67
- var _a, _b, _c, _d;
68
- return [
69
- (_a = options.host) !== null && _a !== void 0 ? _a : "?",
70
- (_b = options.port) !== null && _b !== void 0 ? _b : "?",
71
- (_c = options.database) !== null && _c !== void 0 ? _c : "?",
72
- (_d = options.user) !== null && _d !== void 0 ? _d : "?",
73
- ].join("|");
74
- }
75
- static getProbeTimeoutMs(options, candidateCount) {
76
- const configured = options.compatibilityProbeTimeoutMs;
77
- if (Number.isFinite(configured) && configured > 0) {
78
- return Math.trunc(configured);
79
- }
80
- const totalTimeoutMs = this.getTimeoutMs(options);
81
- if (candidateCount <= 1) {
82
- return totalTimeoutMs;
83
- }
84
- return Math.max(2500, Math.min(5000, Math.trunc(totalTimeoutMs / candidateCount)));
85
- }
86
- static reorderCandidatesWithCache(options, candidates) {
87
- const cacheKey = this.createCompatibilityCacheKey(options);
88
- const cachedCandidate = this.compatibilityProfileCache.get(cacheKey);
89
- if (!cachedCandidate) {
90
- return candidates;
91
- }
92
- const ordered = [...candidates];
93
- const cachedDescription = (0, firebird_compat_1.describeFirebirdCompatibilityOptions)(cachedCandidate);
94
- const cachedIndex = ordered.findIndex((candidate) => (0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate) === cachedDescription);
95
- if (cachedIndex <= 0) {
96
- return ordered;
97
- }
98
- const [matchedCandidate] = ordered.splice(cachedIndex, 1);
99
- ordered.unshift(matchedCandidate);
100
- return ordered;
101
- }
102
- static createCompatibilitySummaryError(options, attempts) {
103
- var _a, _b, _c;
104
- const target = `${(_a = options.host) !== null && _a !== void 0 ? _a : "?"}:${(_b = options.port) !== null && _b !== void 0 ? _b : "?"} -> ${(_c = options.database) !== null && _c !== void 0 ? _c : "?"}`;
105
- const attemptsSummary = attempts
106
- .map(({ candidate, error }) => {
107
- var _a, _b;
108
- const errorMessage = String((_b = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error) !== null && _b !== void 0 ? _b : "Unknown error");
109
- return `[${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)} => ${errorMessage}]`;
110
- })
111
- .join("; ");
112
- return new Error(`Unable to attach Firebird database after compatibility probing on ${target}. Attempts: ${attemptsSummary}`);
113
- }
114
66
  static detachQuietly(db) {
115
67
  return __awaiter(this, void 0, void 0, function* () {
116
68
  if (!db) {
@@ -126,17 +78,20 @@ class Orm {
126
78
  });
127
79
  });
128
80
  }
129
- static attachOnceWithTimeout(options, timeoutMs = this.getTimeoutMs(options)) {
81
+ static attachWithTimeout(options) {
130
82
  return new Promise((resolve, reject) => {
83
+ const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
84
+ const timeoutMs = this.getTimeoutMs(normalizedOptions);
131
85
  let settled = false;
132
86
  const timeoutId = setTimeout(() => {
133
87
  if (settled) {
134
88
  return;
135
89
  }
136
90
  settled = true;
137
- reject(this.createTimeoutError("attach", timeoutMs, options));
91
+ reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("attach", timeoutMs, normalizedOptions), normalizedOptions, { stage: "attach" }));
138
92
  }, timeoutMs);
139
- Firebird.attach(options, (err, db) => __awaiter(this, void 0, void 0, function* () {
93
+ this.logger.info(`Firebird attach using ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(normalizedOptions)}`);
94
+ Firebird.attach(normalizedOptions, (err, db) => __awaiter(this, void 0, void 0, function* () {
140
95
  if (settled) {
141
96
  yield this.detachQuietly(db);
142
97
  return;
@@ -144,54 +99,12 @@ class Orm {
144
99
  settled = true;
145
100
  clearTimeout(timeoutId);
146
101
  if (err) {
147
- this.logger.error(err);
148
- return reject(err);
102
+ return reject((0, firebird_compat_1.enhanceFirebirdError)(err, normalizedOptions, { stage: "attach" }));
149
103
  }
150
104
  return resolve(db);
151
105
  }));
152
106
  });
153
107
  }
154
- static attachWithTimeout(options) {
155
- return __awaiter(this, void 0, void 0, function* () {
156
- var _a;
157
- const totalTimeoutMs = this.getTimeoutMs(options);
158
- const candidates = this.reorderCandidatesWithCache(options, (0, firebird_compat_1.buildFirebirdCompatibilityCandidates)(options));
159
- const probeTimeoutMs = this.getProbeTimeoutMs(options, candidates.length);
160
- const startedAt = Date.now();
161
- const attempts = [];
162
- const cacheKey = this.createCompatibilityCacheKey(options);
163
- for (let index = 0; index < candidates.length; index++) {
164
- const candidate = candidates[index];
165
- const elapsedMs = Date.now() - startedAt;
166
- const remainingMs = totalTimeoutMs - elapsedMs;
167
- if (remainingMs <= 0) {
168
- break;
169
- }
170
- const attemptTimeoutMs = index === 0 && candidates.length === 1
171
- ? remainingMs
172
- : Math.min(probeTimeoutMs, remainingMs);
173
- try {
174
- if (candidates.length > 1) {
175
- this.logger.info(`Firebird compatibility probe ${index + 1}/${candidates.length}: ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)} (timeout ${attemptTimeoutMs} ms)`);
176
- }
177
- const db = yield this.attachOnceWithTimeout(candidate, attemptTimeoutMs);
178
- this.compatibilityProfileCache.set(cacheKey, candidate);
179
- if (candidates.length > 1) {
180
- this.logger.info(`Firebird compatibility profile selected: ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)}`);
181
- }
182
- return db;
183
- }
184
- catch (error) {
185
- attempts.push({ candidate, error });
186
- if (!(0, firebird_compat_1.shouldRetryFirebirdCompatibility)(error) || index === candidates.length - 1) {
187
- throw this.createCompatibilitySummaryError(options, attempts);
188
- }
189
- this.logger.warning(`Firebird attach failed with ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)}. Trying next compatibility profile. Error: ${String((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error)}`);
190
- }
191
- }
192
- throw this.createCompatibilitySummaryError(options, attempts);
193
- });
194
- }
195
108
  static testConnection(options) {
196
109
  return __awaiter(this, void 0, void 0, function* () {
197
110
  return new Promise((resolve) => {
@@ -212,9 +125,10 @@ class Orm {
212
125
  static query(options_1, query_1) {
213
126
  return __awaiter(this, arguments, void 0, function* (options, query, parameters = [], logQuery = true) {
214
127
  try {
215
- const db = yield this.attachWithTimeout(options);
128
+ const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
129
+ const db = yield this.attachWithTimeout(normalizedOptions);
216
130
  return yield new Promise((resolve, reject) => {
217
- const timeoutMs = this.getTimeoutMs(options);
131
+ const timeoutMs = this.getTimeoutMs(normalizedOptions);
218
132
  let settled = false;
219
133
  const timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
220
134
  if (settled) {
@@ -222,7 +136,7 @@ class Orm {
222
136
  }
223
137
  settled = true;
224
138
  yield this.detachQuietly(db);
225
- reject(this.createTimeoutError("query", timeoutMs, options, query));
139
+ reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("query", timeoutMs, normalizedOptions, query), normalizedOptions, { stage: "query", sql: query }));
226
140
  }), timeoutMs);
227
141
  if (logQuery) {
228
142
  this.logger.info(Utilities_1.RestUtilities.printQueryWithParams(query, parameters));
@@ -236,25 +150,26 @@ class Orm {
236
150
  clearTimeout(timeoutId);
237
151
  yield this.detachQuietly(db);
238
152
  if (error) {
239
- this.logger.error(error);
240
- return reject(error);
153
+ return reject((0, firebird_compat_1.enhanceFirebirdError)(error, normalizedOptions, { stage: "query", sql: query }));
241
154
  }
242
155
  return resolve(result);
243
156
  }));
244
157
  });
245
158
  }
246
159
  catch (error) {
247
- this.logger.error(error);
248
- throw error;
160
+ const normalizedError = (0, firebird_compat_1.enhanceFirebirdError)(error, options, { stage: "query", sql: query });
161
+ this.logger.error(normalizedError);
162
+ throw normalizedError;
249
163
  }
250
164
  });
251
165
  }
252
166
  static execute(options_1, query_1) {
253
167
  return __awaiter(this, arguments, void 0, function* (options, query, parameters = [], logQuery = true) {
254
168
  try {
255
- const db = yield this.attachWithTimeout(options);
169
+ const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
170
+ const db = yield this.attachWithTimeout(normalizedOptions);
256
171
  return yield new Promise((resolve, reject) => {
257
- const timeoutMs = this.getTimeoutMs(options);
172
+ const timeoutMs = this.getTimeoutMs(normalizedOptions);
258
173
  let settled = false;
259
174
  const timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
260
175
  if (settled) {
@@ -262,7 +177,7 @@ class Orm {
262
177
  }
263
178
  settled = true;
264
179
  yield this.detachQuietly(db);
265
- reject(this.createTimeoutError("execute", timeoutMs, options, query));
180
+ reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("execute", timeoutMs, normalizedOptions, query), normalizedOptions, { stage: "execute", sql: query }));
266
181
  }), timeoutMs);
267
182
  if (logQuery) {
268
183
  this.logger.info(Utilities_1.RestUtilities.printQueryWithParams(query, parameters));
@@ -276,16 +191,16 @@ class Orm {
276
191
  clearTimeout(timeoutId);
277
192
  yield this.detachQuietly(db);
278
193
  if (error) {
279
- this.logger.error(error);
280
- return reject(error);
194
+ return reject((0, firebird_compat_1.enhanceFirebirdError)(error, normalizedOptions, { stage: "execute", sql: query }));
281
195
  }
282
196
  return resolve(result);
283
197
  }));
284
198
  });
285
199
  }
286
200
  catch (error) {
287
- this.logger.error(error);
288
- throw error;
201
+ const normalizedError = (0, firebird_compat_1.enhanceFirebirdError)(error, options, { stage: "execute", sql: query });
202
+ this.logger.error(normalizedError);
203
+ throw normalizedError;
289
204
  }
290
205
  });
291
206
  }
@@ -304,10 +219,10 @@ class Orm {
304
219
  return __awaiter(this, void 0, void 0, function* () {
305
220
  return new Promise((resolve, reject) => {
306
221
  db.transaction(Firebird.ISOLATION_READ_COMMITTED, function (err, transaction) {
307
- if (err)
222
+ if (err) {
308
223
  return reject(err);
309
- else
310
- return resolve(transaction);
224
+ }
225
+ return resolve(transaction);
311
226
  });
312
227
  });
313
228
  });
@@ -316,10 +231,10 @@ class Orm {
316
231
  return __awaiter(this, void 0, void 0, function* () {
317
232
  return new Promise((resolve, reject) => {
318
233
  transaction.commit((err) => {
319
- if (err)
234
+ if (err) {
320
235
  return reject(err);
321
- else
322
- return resolve("Transaction committed successfully.");
236
+ }
237
+ return resolve("Transaction committed successfully.");
323
238
  });
324
239
  });
325
240
  });
@@ -328,10 +243,10 @@ class Orm {
328
243
  return __awaiter(this, void 0, void 0, function* () {
329
244
  return new Promise((resolve, reject) => {
330
245
  transaction.rollback((err) => {
331
- if (err)
246
+ if (err) {
332
247
  return reject(err);
333
- else
334
- return resolve("Transaction rolled back successfully.");
248
+ }
249
+ return resolve("Transaction rolled back successfully.");
335
250
  });
336
251
  });
337
252
  });
@@ -346,10 +261,10 @@ class Orm {
346
261
  for (const qwp of queriesWithParams) {
347
262
  yield new Promise((resolve, reject) => {
348
263
  transaction.query(qwp.query, qwp.params, (err, result) => {
349
- if (err)
264
+ if (err) {
350
265
  return reject(err);
351
- else
352
- return resolve(result);
266
+ }
267
+ return resolve(result);
353
268
  });
354
269
  });
355
270
  }
@@ -372,10 +287,10 @@ class Orm {
372
287
  return yield queries.reduce((promiseChain, currentQuery, index) => {
373
288
  return promiseChain.then(() => new Promise((resolve, reject) => {
374
289
  transaction.query(currentQuery, params[index], (err, result) => {
375
- if (err)
290
+ if (err) {
376
291
  return reject(err);
377
- else
378
- return resolve(result);
292
+ }
293
+ return resolve(result);
379
294
  });
380
295
  }));
381
296
  }, Promise.resolve());
@@ -386,9 +301,7 @@ class Orm {
386
301
  if (rollbackErr) {
387
302
  return reject(rollbackErr);
388
303
  }
389
- else {
390
- return reject(error);
391
- }
304
+ return reject(error);
392
305
  });
393
306
  });
394
307
  }
@@ -397,5 +310,4 @@ class Orm {
397
310
  }
398
311
  exports.Orm = Orm;
399
312
  Orm.logger = new Logger_1.Logger(Orm.name);
400
- Orm.compatibilityProfileCache = new Map();
401
313
  //# sourceMappingURL=Orm.js.map
package/dist/Orm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Orm.js","sourceRoot":"","sources":["../src/Orm.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"es-node-firebird\";\nimport { Logger } from \"./Logger\";\nimport { Database, Options, Transaction } from \"es-node-firebird\";\nimport { RestUtilities } from \"./Utilities\";\nimport {\n buildFirebirdCompatibilityCandidates,\n describeFirebirdCompatibilityOptions,\n ensureEsNodeFirebirdCompatibilityPatch,\n FirebirdOptions,\n shouldRetryFirebirdCompatibility,\n} from \"./firebird-compat\";\n\nensureEsNodeFirebirdCompatibilityPatch();\n\nexport class Orm {\n private static logger: Logger = new Logger(Orm.name);\n private static compatibilityProfileCache: Map<string, FirebirdOptions> = new Map<string, FirebirdOptions>();\n\n public static quote(value: string): string {\n return \"\\\"\" + value + \"\\\"\";\n }\n\n private static getTimeoutMs(options: Options): number {\n const candidate = (options as FirebirdOptions).connectTimeoutMs\n ?? (options as FirebirdOptions).compatibilityTotalTimeoutMs\n ?? (options as FirebirdOptions).connectTimeout\n ?? 15000;\n\n return Number.isFinite(candidate) && candidate > 0 ? Math.trunc(candidate) : 15000;\n }\n\n private static createTimeoutError(stage: string, timeoutMs: number, options: Options, query?: string): Error {\n const target = `${options.host ?? \"?\"}:${options.port ?? \"?\"} -> ${options.database ?? \"?\"}`;\n const suffix = query ? ` | sql=${query.replace(/\\s+/g, \" \").trim()}` : \"\";\n return new Error(`Timeout during Firebird ${stage} after ${timeoutMs} ms on ${target}${suffix}`);\n }\n\n private static createCompatibilityCacheKey(options: Options): string {\n return [\n options.host ?? \"?\",\n options.port ?? \"?\",\n options.database ?? \"?\",\n options.user ?? \"?\",\n ].join(\"|\");\n }\n\n private static getProbeTimeoutMs(options: Options, candidateCount: number): number {\n const configured = (options as FirebirdOptions).compatibilityProbeTimeoutMs;\n if (Number.isFinite(configured) && configured! > 0) {\n return Math.trunc(configured!);\n }\n\n const totalTimeoutMs = this.getTimeoutMs(options);\n if (candidateCount <= 1) {\n return totalTimeoutMs;\n }\n\n return Math.max(2500, Math.min(5000, Math.trunc(totalTimeoutMs / candidateCount)));\n }\n\n private static reorderCandidatesWithCache(options: Options, candidates: FirebirdOptions[]): FirebirdOptions[] {\n const cacheKey = this.createCompatibilityCacheKey(options);\n const cachedCandidate = this.compatibilityProfileCache.get(cacheKey);\n if (!cachedCandidate) {\n return candidates;\n }\n\n const ordered = [...candidates];\n const cachedDescription = describeFirebirdCompatibilityOptions(cachedCandidate);\n const cachedIndex = ordered.findIndex((candidate) => describeFirebirdCompatibilityOptions(candidate) === cachedDescription);\n\n if (cachedIndex <= 0) {\n return ordered;\n }\n\n const [matchedCandidate] = ordered.splice(cachedIndex, 1);\n ordered.unshift(matchedCandidate);\n return ordered;\n }\n\n private static createCompatibilitySummaryError(options: Options, attempts: { candidate: FirebirdOptions, error: unknown }[]): Error {\n const target = `${options.host ?? \"?\"}:${options.port ?? \"?\"} -> ${options.database ?? \"?\"}`;\n const attemptsSummary = attempts\n .map(({ candidate, error }) => {\n const errorMessage = String((error as { message?: unknown })?.message ?? error ?? \"Unknown error\");\n return `[${describeFirebirdCompatibilityOptions(candidate)} => ${errorMessage}]`;\n })\n .join(\"; \");\n\n return new Error(`Unable to attach Firebird database after compatibility probing on ${target}. Attempts: ${attemptsSummary}`);\n }\n\n private static async detachQuietly(db: Database | undefined): Promise<void> {\n if (!db) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n try {\n db.detach(() => resolve());\n } catch {\n resolve();\n }\n });\n }\n\n private static attachOnceWithTimeout(options: Options, timeoutMs = this.getTimeoutMs(options)): Promise<Database> {\n return new Promise((resolve, reject): void => {\n let settled = false;\n const timeoutId = setTimeout(() => {\n if (settled) {\n return;\n }\n\n settled = true;\n reject(this.createTimeoutError(\"attach\", timeoutMs, options));\n }, timeoutMs);\n\n Firebird.attach(options, async (err: any, db: Database): Promise<void> => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n\n if (err) {\n this.logger.error(err);\n return reject(err);\n }\n\n return resolve(db);\n });\n });\n }\n\n private static async attachWithTimeout(options: Options): Promise<Database> {\n const totalTimeoutMs = this.getTimeoutMs(options);\n const candidates = this.reorderCandidatesWithCache(options, buildFirebirdCompatibilityCandidates(options));\n const probeTimeoutMs = this.getProbeTimeoutMs(options, candidates.length);\n const startedAt = Date.now();\n const attempts: { candidate: FirebirdOptions, error: unknown }[] = [];\n const cacheKey = this.createCompatibilityCacheKey(options);\n\n for (let index = 0; index < candidates.length; index++) {\n const candidate = candidates[index];\n const elapsedMs = Date.now() - startedAt;\n const remainingMs = totalTimeoutMs - elapsedMs;\n\n if (remainingMs <= 0) {\n break;\n }\n\n const attemptTimeoutMs = index === 0 && candidates.length === 1\n ? remainingMs\n : Math.min(probeTimeoutMs, remainingMs);\n\n try {\n if (candidates.length > 1) {\n this.logger.info(\n `Firebird compatibility probe ${index + 1}/${candidates.length}: ${describeFirebirdCompatibilityOptions(candidate)} (timeout ${attemptTimeoutMs} ms)`\n );\n }\n\n const db = await this.attachOnceWithTimeout(candidate, attemptTimeoutMs);\n this.compatibilityProfileCache.set(cacheKey, candidate);\n\n if (candidates.length > 1) {\n this.logger.info(\n `Firebird compatibility profile selected: ${describeFirebirdCompatibilityOptions(candidate)}`\n );\n }\n\n return db;\n } catch (error) {\n attempts.push({ candidate, error });\n\n if (!shouldRetryFirebirdCompatibility(error) || index === candidates.length - 1) {\n throw this.createCompatibilitySummaryError(options, attempts);\n }\n\n this.logger.warning(\n `Firebird attach failed with ${describeFirebirdCompatibilityOptions(candidate)}. Trying next compatibility profile. Error: ${String((error as { message?: unknown })?.message ?? error)}`\n );\n }\n }\n\n throw this.createCompatibilitySummaryError(options, attempts);\n }\n\n public static async testConnection(options: Options): Promise<boolean> {\n return new Promise((resolve): void => {\n this.attachWithTimeout(options)\n .then(async (db: Database): Promise<void> => {\n this.logger.info(\"DATABASE connesso.\");\n await this.detachQuietly(db);\n resolve(true);\n })\n .catch((err: Error): void => {\n this.logger.error(\"La connessione con il DATABASE non e andata a buon fine.\");\n this.logger.error(err);\n resolve(false);\n });\n });\n }\n\n public static async query(options: Options, query: string, parameters: any[] = [], logQuery = true): Promise<any> {\n try {\n const db = await this.attachWithTimeout(options);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(options);\n let settled = false;\n const timeoutId = setTimeout(async () => {\n if (settled) {\n return;\n }\n\n settled = true;\n await this.detachQuietly(db);\n reject(this.createTimeoutError(\"query\", timeoutMs, options, query));\n }, timeoutMs);\n\n if (logQuery) {\n this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n }\n\n db.query(query, parameters, async (error: any, result: any) => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n await this.detachQuietly(db);\n\n if (error) {\n this.logger.error(error);\n return reject(error);\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n this.logger.error(error as object);\n throw error;\n }\n }\n\n public static async execute(options: Options, query: string, parameters: any = [], logQuery = true): Promise<any> {\n try {\n const db = await this.attachWithTimeout(options);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(options);\n let settled = false;\n const timeoutId = setTimeout(async () => {\n if (settled) {\n return;\n }\n\n settled = true;\n await this.detachQuietly(db);\n reject(this.createTimeoutError(\"execute\", timeoutMs, options, query));\n }, timeoutMs);\n\n if (logQuery) {\n this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n }\n\n db.execute(query, parameters, async (error: any, result: any) => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n await this.detachQuietly(db);\n\n if (error) {\n this.logger.error(error);\n return reject(error);\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n this.logger.error(error as object);\n throw error;\n }\n }\n\n public static trimParam(param: any): string {\n if (typeof param === \"string\" || param instanceof String) {\n return param.trim();\n }\n return param;\n }\n\n public static async connect(options: Options): Promise<Database> {\n return this.attachWithTimeout(options);\n }\n\n public static async startTransaction(db: Database): Promise<Transaction> {\n return new Promise((resolve, reject): void => {\n db.transaction(Firebird.ISOLATION_READ_COMMITTED, function (err: any, transaction: Transaction): void {\n if (err) return reject(err); else return resolve(transaction);\n });\n });\n }\n\n public static async commitTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.commit((err: any): void => {\n if (err) return reject(err); else return resolve(\"Transaction committed successfully.\");\n });\n });\n }\n\n public static async rollbackTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.rollback((err: any): void => {\n if (err) return reject(err); else return resolve(\"Transaction rolled back successfully.\");\n });\n });\n }\n\n public static async executeMultiple(options: Options, queriesWithParams: { query: string, params: any[] }[]): Promise<string> {\n let db: Database | undefined;\n let transaction: Transaction | undefined;\n\n try {\n db = await Orm.connect(options);\n transaction = await Orm.startTransaction(db);\n\n for (const qwp of queriesWithParams) {\n await new Promise((resolve, reject) => {\n transaction.query(qwp.query, qwp.params, (err: any, result: any): void => {\n if (err) return reject(err);\n else return resolve(result);\n });\n });\n }\n\n await Orm.commitTransaction(transaction);\n await Orm.detachQuietly(db);\n return \"OK\";\n\n } catch (error) {\n if (transaction) {\n await Orm.rollbackTransaction(transaction);\n }\n await Orm.detachQuietly(db);\n throw error;\n }\n }\n\n public static async executeQueries(transaction: Transaction, queries: string[], params: any[]): Promise<any> {\n try {\n return await queries.reduce((promiseChain: Promise<any>, currentQuery: string, index: number) => {\n return promiseChain.then(() => new Promise((resolve, reject) => {\n transaction.query(currentQuery, params[index], (err: any, result: any): void => {\n if (err) return reject(err);\n else return resolve(result);\n });\n }));\n }, Promise.resolve());\n } catch (error) {\n return await new Promise((resolve, reject) => {\n transaction.rollback((rollbackErr: any): void => {\n if (rollbackErr) {\n return reject(rollbackErr);\n } else {\n return reject(error);\n }\n });\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"Orm.js","sourceRoot":"","sources":["../src/Orm.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"node-firebird\";\nimport { Database, Options, Transaction } from \"node-firebird\";\nimport { Logger } from \"./Logger\";\nimport { RestUtilities } from \"./Utilities\";\nimport {\n describeFirebirdCompatibilityOptions,\n enhanceFirebirdError,\n FirebirdOptions,\n normalizeFirebirdOptions,\n} from \"./firebird-compat\";\n\nexport class Orm {\n private static logger: Logger = new Logger(Orm.name);\n\n public static quote(value: string): string {\n return \"\\\"\" + value + \"\\\"\";\n }\n\n private static getTimeoutMs(options: Options): number {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const candidate = normalizedOptions.connectTimeout ?? 15000;\n return Number.isFinite(candidate) && candidate > 0 ? Math.trunc(candidate) : 15000;\n }\n\n private static createTimeoutError(stage: string, timeoutMs: number, options: Options, query?: string): Error {\n const target = `${options.host ?? \"?\"}:${options.port ?? \"?\"} -> ${options.database ?? \"?\"}`;\n const suffix = query ? ` | sql=${query.replace(/\\s+/g, \" \").trim()}` : \"\";\n return new Error(`Timeout during Firebird ${stage} after ${timeoutMs} ms on ${target}${suffix}`);\n }\n\n private static async detachQuietly(db: Database | undefined): Promise<void> {\n if (!db) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n try {\n db.detach(() => resolve());\n } catch {\n resolve();\n }\n });\n }\n\n private static attachWithTimeout(options: Options): Promise<Database> {\n return new Promise((resolve, reject): void => {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const timeoutMs = this.getTimeoutMs(normalizedOptions);\n let settled = false;\n const timeoutId = setTimeout(() => {\n if (settled) {\n return;\n }\n\n settled = true;\n reject(\n enhanceFirebirdError(\n this.createTimeoutError(\"attach\", timeoutMs, normalizedOptions),\n normalizedOptions,\n { stage: \"attach\" },\n ),\n );\n }, timeoutMs);\n\n this.logger.info(`Firebird attach using ${describeFirebirdCompatibilityOptions(normalizedOptions)}`);\n\n Firebird.attach(normalizedOptions, async (err: any, db: Database): Promise<void> => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n\n if (err) {\n return reject(enhanceFirebirdError(err, normalizedOptions, { stage: \"attach\" }));\n }\n\n return resolve(db);\n });\n });\n }\n\n public static async testConnection(options: Options): Promise<boolean> {\n return new Promise((resolve): void => {\n this.attachWithTimeout(options)\n .then(async (db: Database): Promise<void> => {\n this.logger.info(\"DATABASE connesso.\");\n await this.detachQuietly(db);\n resolve(true);\n })\n .catch((err: Error): void => {\n this.logger.error(\"La connessione con il DATABASE non e andata a buon fine.\");\n this.logger.error(err);\n resolve(false);\n });\n });\n }\n\n public static async query(options: Options, query: string, parameters: any[] = [], logQuery = true): Promise<any> {\n try {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const db = await this.attachWithTimeout(normalizedOptions);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(normalizedOptions);\n let settled = false;\n const timeoutId = setTimeout(async () => {\n if (settled) {\n return;\n }\n\n settled = true;\n await this.detachQuietly(db);\n reject(\n enhanceFirebirdError(\n this.createTimeoutError(\"query\", timeoutMs, normalizedOptions, query),\n normalizedOptions,\n { stage: \"query\", sql: query },\n ),\n );\n }, timeoutMs);\n\n if (logQuery) {\n this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n }\n\n db.query(query, parameters, async (error: any, result: any) => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n await this.detachQuietly(db);\n\n if (error) {\n return reject(enhanceFirebirdError(error, normalizedOptions, { stage: \"query\", sql: query }));\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n const normalizedError = enhanceFirebirdError(error, options, { stage: \"query\", sql: query });\n this.logger.error(normalizedError);\n throw normalizedError;\n }\n }\n\n public static async execute(options: Options, query: string, parameters: any = [], logQuery = true): Promise<any> {\n try {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const db = await this.attachWithTimeout(normalizedOptions);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(normalizedOptions);\n let settled = false;\n const timeoutId = setTimeout(async () => {\n if (settled) {\n return;\n }\n\n settled = true;\n await this.detachQuietly(db);\n reject(\n enhanceFirebirdError(\n this.createTimeoutError(\"execute\", timeoutMs, normalizedOptions, query),\n normalizedOptions,\n { stage: \"execute\", sql: query },\n ),\n );\n }, timeoutMs);\n\n if (logQuery) {\n this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n }\n\n db.execute(query, parameters, async (error: any, result: any) => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n await this.detachQuietly(db);\n\n if (error) {\n return reject(enhanceFirebirdError(error, normalizedOptions, { stage: \"execute\", sql: query }));\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n const normalizedError = enhanceFirebirdError(error, options, { stage: \"execute\", sql: query });\n this.logger.error(normalizedError);\n throw normalizedError;\n }\n }\n\n public static trimParam(param: any): string {\n if (typeof param === \"string\" || param instanceof String) {\n return param.trim();\n }\n return param;\n }\n\n public static async connect(options: Options): Promise<Database> {\n return this.attachWithTimeout(options);\n }\n\n public static async startTransaction(db: Database): Promise<Transaction> {\n return new Promise((resolve, reject): void => {\n db.transaction(Firebird.ISOLATION_READ_COMMITTED, function (err: any, transaction: Transaction): void {\n if (err) {\n return reject(err);\n }\n\n return resolve(transaction);\n });\n });\n }\n\n public static async commitTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.commit((err: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(\"Transaction committed successfully.\");\n });\n });\n }\n\n public static async rollbackTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.rollback((err: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(\"Transaction rolled back successfully.\");\n });\n });\n }\n\n public static async executeMultiple(options: Options, queriesWithParams: { query: string, params: any[] }[]): Promise<string> {\n let db: Database | undefined;\n let transaction: Transaction | undefined;\n\n try {\n db = await Orm.connect(options);\n transaction = await Orm.startTransaction(db);\n\n for (const qwp of queriesWithParams) {\n await new Promise((resolve, reject) => {\n transaction!.query(qwp.query, qwp.params, (err: any, result: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(result);\n });\n });\n }\n\n await Orm.commitTransaction(transaction);\n await Orm.detachQuietly(db);\n return \"OK\";\n } catch (error) {\n if (transaction) {\n await Orm.rollbackTransaction(transaction);\n }\n\n await Orm.detachQuietly(db);\n throw error;\n }\n }\n\n public static async executeQueries(transaction: Transaction, queries: string[], params: any[]): Promise<any> {\n try {\n return await queries.reduce((promiseChain: Promise<any>, currentQuery: string, index: number) => {\n return promiseChain.then(() => new Promise((resolve, reject) => {\n transaction.query(currentQuery, params[index], (err: any, result: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(result);\n });\n }));\n }, Promise.resolve());\n } catch (error) {\n return await new Promise((resolve, reject) => {\n transaction.rollback((rollbackErr: any): void => {\n if (rollbackErr) {\n return reject(rollbackErr);\n }\n\n return reject(error);\n });\n });\n }\n }\n}\n"]}
package/dist/Utilities.js CHANGED
@@ -403,7 +403,7 @@ class DatabaseUtilities {
403
403
  pageSize: 100000, // The page size for database transactions. Default: 100,000.
404
404
  retryConnectionInterval: 1000, // The interval (in ms) to retry a failed connection. Default: 1,000 ms.
405
405
  blobAsText: true, // Determines if BLOB fields should be treated as text. Default: true.
406
- authPlugins: ['Srp256', 'Srp', 'Legacy_Auth'],
406
+ connectTimeout: 15000,
407
407
  connectTimeoutMs: 15000,
408
408
  };
409
409
  }