UNPKG

ravendb

Version:
82 lines 2.76 kB
"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