@datastax/astra-db-ts
Version:
Data API TypeScript client
224 lines (223 loc) • 7.71 kB
JavaScript
"use strict";
// Copyright Datastax, Inc
// SPDX-License-Identifier: Apache-2.0
// noinspection DuplicatedCode
Object.defineProperty(exports, "__esModule", { value: true });
exports.InternalLogger = void 0;
const tslib_1 = require("tslib");
const constants_js_1 = require("../../lib/logging/constants.js");
const util_js_1 = require("../../lib/logging/util.js");
const index_js_1 = require("../../lib/index.js");
const cfg_handler_js_1 = require("../../lib/logging/cfg-handler.js");
const uuid = tslib_1.__importStar(require("uuid"));
class InternalLogger {
constructor(config, parent, console) {
Object.defineProperty(this, "commandStarted", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "commandFailed", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "commandWarnings", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "commandSucceeded", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "adminCommandFailed", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "adminCommandStarted", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "adminCommandPolling", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "adminCommandWarnings", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "adminCommandSucceeded", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "_someCommandEventEnabled", {
enumerable: true,
configurable: true,
writable: true,
value: false
});
Object.defineProperty(this, "_someAdminCommandEventEnabled", {
enumerable: true,
configurable: true,
writable: true,
value: false
});
Object.defineProperty(this, "_config", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "_listeners", {
enumerable: true,
configurable: true,
writable: true,
value: Object.create(null)
});
Object.defineProperty(this, "_parent", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "_console", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this._parent = parent;
this._console = console;
this._config = this._buildInternalConfig(config);
}
generateCommandRequestId() {
return this._someCommandEventEnabled ? uuid.v4() : '';
}
generateAdminCommandRequestId() {
return this._someAdminCommandEventEnabled ? uuid.v4() : '';
}
updateLoggingConfig(config) {
this._config = this._updateInternalConfig(this._config, config);
}
on(eventName, listener) {
if (!this._listeners[eventName]) {
this._listeners[eventName] = [];
}
this._listeners[eventName].push(listener);
}
off(eventName, listener) {
if (!this._listeners[eventName]) {
return;
}
const index = this._listeners[eventName].indexOf(listener);
if (index !== -1) {
this._listeners[eventName].splice(index, 1);
}
if (this._listeners[eventName].length === 0) {
delete this._listeners[eventName];
}
}
removeAllListeners(eventName) {
if (eventName) {
delete this._listeners[eventName];
}
else {
for (const key in this._listeners) {
delete this._listeners[key];
}
}
}
emit(eventName, event) {
if (this._listeners[eventName]) {
for (const listener of this._listeners[eventName]) {
try {
listener(event);
}
catch (_e) {
// Silently ignore errors
}
if (event._propagationState === index_js_1.PropagationState.StopImmediate) {
return;
}
}
}
if (this._parent && event._propagationState !== index_js_1.PropagationState.Stop) {
this._parent.emit(eventName, event);
}
}
_buildInternalConfig(config) {
return this._updateInternalConfig(constants_js_1.EmptyInternalLoggingConfig, config);
}
_updateInternalConfig(base, config) {
const newConfig = { ...base };
for (const layer of config.layers) {
for (const event of layer.events) {
newConfig[event] = (0, util_js_1.buildOutputsMap)(layer.emits);
const activeOutputs = constants_js_1.PrintLoggingOutputs.filter(key => newConfig[event]?.[key]);
if (activeOutputs.length > 1) {
throw new Error(`Nonsensical logging configuration; conflicting outputs '${activeOutputs}' set for '${event}'`);
}
}
}
this._buildLoggingFunctions(newConfig);
return newConfig;
}
_buildLoggingFunctions(config) {
this._someCommandEventEnabled = false;
this._someAdminCommandEventEnabled = false;
for (const [_eventName, outputs] of Object.entries(config)) {
const eventName = _eventName;
if (!outputs) {
this[eventName] = undefined;
continue;
}
const log = this._mkLogFn(outputs);
if (eventName.startsWith('admin')) {
this._someAdminCommandEventEnabled = true;
}
else {
this._someCommandEventEnabled = true;
}
this[eventName] = (...args) => {
const event = new constants_js_1.EventConstructors[eventName](...args);
outputs.event && this.emit(eventName, event);
log?.(event);
};
}
}
_mkLogFn(outputs) {
switch (true) {
case outputs.stdout:
return (event) => this._console.log(event.format());
case outputs.stderr:
return (event) => this._console.error(event.format());
case outputs['stdout:verbose']:
return (event) => this._console.log(event.formatVerbose());
case outputs['stderr:verbose']:
return (event) => this._console.error(event.formatVerbose());
}
}
}
exports.InternalLogger = InternalLogger;
Object.defineProperty(InternalLogger, "cfg", {
enumerable: true,
configurable: true,
writable: true,
value: cfg_handler_js_1.LoggingCfgHandler
});