@bhagat-surya-dev/dashchat-database-manager
Version:
AI-powered database schema analysis and management library
86 lines • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseDatabaseHandler = exports.LogLevel = void 0;
var LogLevel;
(function (LogLevel) {
LogLevel["INFO"] = "INFO";
LogLevel["WARN"] = "WARN";
LogLevel["ERROR"] = "ERROR";
LogLevel["DEBUG"] = "DEBUG";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
// Abstract base class with common functionality
class BaseDatabaseHandler {
constructor(options) {
this.timeout = options?.timeout ?? 30000; // Default 30 seconds
this.maxSampleSize = options?.maxSampleSize ?? 5; // Default 5 sample rows
this.loggerFn = options?.loggerFn;
}
// Helper method for timing out promises
async withTimeout(promise, ms = this.timeout, errorMsg) {
return new Promise((resolve, reject) => {
const timer = setTimeout(() => {
reject(new Error(errorMsg || `Operation timed out after ${ms} ms`));
}, ms);
promise
.then((value) => {
clearTimeout(timer);
resolve(value);
})
.catch((err) => {
clearTimeout(timer);
reject(err);
});
});
}
// Logging methods
log(level, context, message) {
if (this.loggerFn) {
this.loggerFn(level, context, message);
}
else {
const formattedMessage = this.formatLogMessage(level, context, message);
switch (level) {
case LogLevel.ERROR:
console.error(formattedMessage);
break;
case LogLevel.WARN:
console.warn(formattedMessage);
break;
case LogLevel.DEBUG:
console.debug(formattedMessage);
break;
default: console.log(formattedMessage);
}
}
}
formatLogMessage(level, context, message) {
const timestamp = new Date().toISOString();
return JSON.stringify({
timestamp,
level,
method: context.method,
action: context.action,
message,
duration: context.duration,
...context.metadata
});
}
logError(method, error, context) {
const errorObject = error instanceof Error ? error : new Error(String(error));
this.log(LogLevel.ERROR, {
method,
action: 'error_handling',
metadata: {
errorName: errorObject.name,
errorMessage: errorObject.message,
errorStack: errorObject.stack,
...context
}
}, 'An error occurred');
}
logInfo(method, message, data) {
this.log(LogLevel.INFO, { method, metadata: data }, message);
}
}
exports.BaseDatabaseHandler = BaseDatabaseHandler;
//# sourceMappingURL=base-handler.js.map