ravendb
Version:
RavenDB client for Node.js
82 lines • 2.76 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseConnectionState = void 0;
const node_events_1 = require("node:events");
const index_js_1 = require("../../Exceptions/index.js");
const PromiseUtil_js_1 = require("../../Utility/PromiseUtil.js");
const TypeUtil_js_1 = require("../../Utility/TypeUtil.js");
class DatabaseConnectionState {
static ERROR_EVENT = "error";
_emitter = new node_events_1.EventEmitter();
addOnError(handler) {
this._emitter.addListener(DatabaseConnectionState.ERROR_EVENT, handler);
}
removeOnError(handler) {
this._emitter.removeListener(DatabaseConnectionState.ERROR_EVENT, handler);
}
_onDisconnect;
onConnect;
_value = 0;
lastError;
_firstSet;
_connected;
set(connection) {
if (!this._firstSet.isFulfilled) {
connection
.then(() => {
this._firstSet.resolve(undefined);
})
.catch(error => {
this._firstSet.reject(error);
});
}
else {
connection.catch(TypeUtil_js_1.TypeUtil.NOOP);
}
this._connected = connection;
}
inc() {
this._value++;
}
dec() {
this._value--;
if (!this._value) {
this.set(this._onDisconnect());
}
}
error(e) {
this.set(Promise.reject(e));
this.lastError = e;
this._emitter.emit(DatabaseConnectionState.ERROR_EVENT, e);
}
ensureSubscribedNow() {
return this._connected || Promise.resolve(this._firstSet.promise);
}
dispose() {
this.set(Promise.reject((0, index_js_1.getError)("InvalidOperationException", "Object was disposed")));
this._emitter.removeAllListeners("Document");
this._emitter.removeAllListeners("Index");
this._emitter.removeAllListeners("Operation");
this._emitter.removeAllListeners("Counter");
this._emitter.removeAllListeners("TimeSeries");
this._emitter.removeAllListeners(DatabaseConnectionState.ERROR_EVENT);
}
constructor(onConnect, onDisconnect) {
this.onConnect = onConnect;
this._onDisconnect = onDisconnect;
this._value = 0;
this._emitter.setMaxListeners(50);
this._firstSet = (0, PromiseUtil_js_1.defer)();
}
addOnChangeNotification(type, handler) {
this._emitter.addListener(type, handler);
}
removeOnChangeNotification(type, handler) {
this._emitter.removeListener(type, handler);
}
send(type, change) {
this._emitter.emit(type, change);
}
}
exports.DatabaseConnectionState = DatabaseConnectionState;
//# sourceMappingURL=DatabaseConnectionState.js.map