Socket
Socket
Sign inDemoInstall

@haventech/supertype

Package Overview
Dependencies
Maintainers
5
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@haventech/supertype - npm Package Compare versions

Comparing version 6.0.0-beta.6 to 6.0.0-beta.7

6

dist/SupertypeLogger.d.ts

@@ -22,4 +22,5 @@ export declare class SupertypeLogger {

private log;
setContextLog(object: any): void;
getContextLog(object: any): any;
private setLogsSessionId;
private setLogsAmorphicContext;
getAmorphicContext(): any;
startContext(context: any): void;

@@ -31,2 +32,3 @@ setContextProps(context: any): {};

formatDateTime(date: any): string;
private deleteEmptyLogProperties;
/**

@@ -33,0 +35,0 @@ * this function is designed to be replaced by the consumer of this class.

@@ -116,3 +116,7 @@ "use strict";

}
this.setContextLog(logObj.data);
if (!logObj.context) {
logObj.context = {};
}
this.setLogsAmorphicContext(logObj.data);
this.setLogsSessionId(logObj);
logObj['level'] = level;

@@ -130,11 +134,17 @@ if (this.isEnabled(levelToStr[logObj['level']], logObj)) {

};
SupertypeLogger.prototype.setContextLog = function (object) {
object[this._amorphicContext] = __assign({}, this.context);
SupertypeLogger.prototype.setLogsSessionId = function (logObj) {
var _a, _b;
if ((_b = (_a = logObj.data) === null || _a === void 0 ? void 0 : _a.__amorphicContext) === null || _b === void 0 ? void 0 : _b.session) {
logObj.context.sessionId = logObj.data.__amorphicContext.session;
delete logObj.data.__amorphicContext.session;
}
};
SupertypeLogger.prototype.getContextLog = function (object) {
if (!object[this._amorphicContext]) {
this.setContextLog(object);
SupertypeLogger.prototype.setLogsAmorphicContext = function (object) {
if (this.context && Object.keys(this.context).length > 0) {
object[this._amorphicContext] = __assign({}, this.context);
}
return object[this._amorphicContext];
};
SupertypeLogger.prototype.getAmorphicContext = function () {
return { __amorphicContext: __assign({}, this.context) };
};
SupertypeLogger.prototype.startContext = function (context) {

@@ -191,7 +201,8 @@ this.context = context;

childLogger = this._clientLogger.childLogger(rootValues, dataValues);
child = childLogger;
}
else if (this._clientLogger.child === 'function') {
childLogger = this._clientLogger.child(__assign(__assign({}, rootValues), { data: { dataValues: dataValues } }));
child = childLogger;
}
child.logger = childLogger;
}

@@ -211,2 +222,10 @@ return child; // bad practice but should fix

};
SupertypeLogger.prototype.deleteEmptyLogProperties = function (logObject) {
var keys = ['context', 'data'];
keys.forEach(function (key) {
if (logObject[key] && Object.keys(logObject[key]).length < 1) {
delete logObject[key];
}
});
};
/**

@@ -226,2 +245,3 @@ * this function is designed to be replaced by the consumer of this class.

var functionName = this.sendToLog.name;
this.deleteEmptyLogProperties(logObject);
if (this._clientLogger) {

@@ -312,2 +332,2 @@ var levelForLog = typeof logLevel === 'string' ? strToLevel[logLevel] : logLevel;

exports.SupertypeLogger = SupertypeLogger;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VwZXJ0eXBlTG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N1cGVydHlwZUxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDbEcsSUFBTSxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBRWxHO0lBUUksaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2Qiw0QkFBNEI7SUFFNUI7UUFWUSxxQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztRQVczQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBR0QsK0JBQUssR0FBTDtRQUFNLGNBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQseUJBQWM7O1FBQ2hCLElBQUksQ0FBQyxHQUFHLE9BQVIsSUFBSSxrQkFBSyxFQUFFLEdBQUssSUFBSSxHQUFFO0lBQzFCLENBQUM7SUFFRCwrQkFBSyxHQUFMO1FBQU0sY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7WUFBZCx5QkFBYzs7UUFDaEIsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLGtCQUFLLEVBQUUsR0FBSyxJQUFJLEdB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SUFFTywrQkFBSyxHQUFiLFVBQWMsSUFBSSxFQUFFLEtBQUs7UUFDckIsSUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWIsS0FBSyxJQUFNLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDckIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsd0ZBQXdGO0lBQ2hGLG1DQUFTLEdBQWpCLFVBQWtCLEtBQUssRUFBRSxHQUFHO1FBQ3hCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDcEMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzNELE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFwU00sMEJBQVUsR0FBVyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBcVNyRCxzQkFBQztDQUFBLEFBdFNELElBc1NDO0FBdFNZLDBDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QgfSBmcm9tIFwidXRpbC90eXBlc1wiO1xuXG5jb25zdCBsZXZlbFRvU3RyID0geyA2MDogJ2ZhdGFsJywgNTA6ICdlcnJvcicsIDQwOiAnd2FybicsIDMwOiAnaW5mbycsIDIwOiAnZGVidWcnLCAxMDogJ3RyYWNlJyB9O1xuY29uc3Qgc3RyVG9MZXZlbCA9IHsgJ2ZhdGFsJzogNjAsICdlcnJvcic6IDUwLCAnd2Fybic6IDQwLCAnaW5mbyc6IDMwLCAnZGVidWcnOiAyMCwgJ3RyYWNlJzogMTAgfTtcblxuZXhwb3J0IGNsYXNzIFN1cGVydHlwZUxvZ2dlciB7XG4gICAgc3RhdGljIG1vZHVsZU5hbWU6IHN0cmluZyA9IFN1cGVydHlwZUxvZ2dlci5uYW1lO1xuICAgIHByaXZhdGUgX2Ftb3JwaGljQ29udGV4dCA9ICdfX2Ftb3JwaGljQ29udGV4dCc7XG4gICAgY29udGV4dDogYW55O1xuICAgIGdyYW51bGFyTGV2ZWxzOiBhbnk7XG4gICAgbGV2ZWw6IGFueTtcbiAgICBwcml2YXRlIF9jbGllbnRMb2dnZXI6IGFueTtcblxuICAgIC8vIGZvciBvdmVycmlkaW5nXG4gICAgLy8gc2VuZFRvTG9nOiBGdW5jdGlvbjtcbiAgICAvLyBmb3JtYXREYXRlVGltZTogRnVuY3Rpb247XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0ge307XG4gICAgICAgIHRoaXMuZ3JhbnVsYXJMZXZlbHMgPSB7fTtcbiAgICAgICAgdGhpcy5sZXZlbCA9ICdpbmZvJztcbiAgICB9XG5cblxuICAgIGZhdGFsKC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nKDYwLCAuLi5kYXRhKTtcbiAgICB9XG5cbiAgICBlcnJvciguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZyg1MCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgd2FybiguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZyg0MCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgaW5mbyguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZygzMCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgZGVidWcoLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coMjAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIHRyYWNlKC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nKDEwLCAuLi5kYXRhKTtcbiAgICB9XG5cbiAgICBnZXQgY2xpZW50TG9nZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50TG9nZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFzc2lnbiBhIGN1c3RvbSBzZW5kIHRvIGxvZyBmdW5jdGlvbmFsaXR5LlxuICAgICAqIEBwYXJhbSBsb2dnZXIgLSBsb2dnZXIgbXVzdCBmaXQgdGhlIGZvcm1hdCBvZiBpbmZvL2Vycm9yL2RlYnVnL3dhcm5cbiAgICAgKi9cbiAgICBzZXRMb2dnZXIobG9nZ2VyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9nZ2VyLmluZm8gIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgIHR5cGVvZiBsb2dnZXIuZXJyb3IgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgIHR5cGVvZiBsb2dnZXIuZGVidWcgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgIHR5cGVvZiBsb2dnZXIud2FybiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2Ugc3BlY2lmeSBhIGxvZ2dlciB3aXRoIHRoZSBpbmZvLCBlcnJvciwgZGVidWcsIGFuZCB3YXJuIGZ1bmN0aW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9nZ2VyLmNoaWxkTG9nZ2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGllbnRMb2dnZXIgPSBsb2dnZXIuY2hpbGRMb2dnZXIoe2Vycm9yOiB7aXNIdW1hblJlbGF0ZWQ6IGZhbHNlfX0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9nZ2VyLmNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGllbnRMb2dnZXIgPSBsb2dnZXIuY2hpbGQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbGllbnRMb2dnZXIgPSBsb2dnZXI7XG4gICAgfVxuXG4gICAgLy8gTG9nIGFsbCBhcmd1bWVudHMgYXNzdW1pbmcgdGhlIGZpcnN0IG9uZSBpcyBsZXZlbCBhbmQgdGhlIHNlY29uZCBvbmUgbWlnaHQgYmUgYW4gb2JqZWN0IChzaW1pbGFyIHRvIGJhbnlhbilcbiAgICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnlbXSA9IGFyZ3MgJiYgQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0aWVzWzBdID09PSAnb2JqZWN0JykgIHtcbiAgICAgICAgICAgIGxldCBsb2dPYmogPSBwcm9wZXJ0aWVzWzBdO1xuICAgICAgICAgICAgaWYgKCFsb2dPYmouZGF0YSkge1xuICAgICAgICAgICAgICAgIGxvZ09iai5kYXRhID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldENvbnRleHRMb2cobG9nT2JqLmRhdGEpO1xuICAgICAgICAgICAgbG9nT2JqWydsZXZlbCddID0gbGV2ZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQobGV2ZWxUb1N0cltsb2dPYmpbJ2xldmVsJ11dLCBsb2dPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kVG9Mb2cobGV2ZWxUb1N0cltsb2dPYmpbJ2xldmVsJ11dLCBsb2dPYmosIC4uLnByb3BlcnRpZXMuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllc1snbGV2ZWwnXSA9IGxldmVsO1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQobGV2ZWxUb1N0cltwcm9wZXJ0aWVzWydsZXZlbCddXSwgcHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZFRvTG9nKGxldmVsVG9TdHJbcHJvcGVydGllc1snbGV2ZWwnXV0sIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRDb250ZXh0TG9nKG9iamVjdCkge1xuICAgICAgICBvYmplY3RbdGhpcy5fYW1vcnBoaWNDb250ZXh0XSA9IHsgLi4udGhpcy5jb250ZXh0IH07XG4gICAgfVxuXG4gICAgZ2V0Q29udGV4dExvZyhvYmplY3QpIHtcbiAgICAgICAgaWYgKCFvYmplY3RbdGhpcy5fYW1vcnBoaWNDb250ZXh0XSkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250ZXh0TG9nKG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFt0aGlzLl9hbW9ycGhpY0NvbnRleHRdO1xuICAgIH1cblxuICAgIHN0YXJ0Q29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGUgcHJvcGVydGllcyBpbiB0aGUgY29udGV4dCBhbmQgcmV0dXJuIGEgbmV3IG9iamVjdCB0aGF0IGhhcyB0aGUgcHJvcGVydGllcyBvbmx5IHNvIHRoZXkgY2FuIGJlIGNsZWFyZWRcbiAgICBzZXRDb250ZXh0UHJvcHMoY29udGV4dCkge1xuICAgICAgICBjb25zdCByZXZlcnNlID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldmVyc2VbcHJvcF0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0W3Byb3BdID0gY29udGV4dFtwcm9wXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXZlcnNlO1xuICAgIH1cbiAgICAvLyBQYXJzZSBsb2cgbGV2ZWxzIHN1Y2ggYXMgd2Fybi5hY3Rpdml0eVxuICAgIHNldExldmVsKGxldmVsKSB7XG4gICAgICAgIHZhciBsZXZlbHMgPSBsZXZlbC5zcGxpdCgnOycpO1xuXG4gICAgICAgIGZvciAodmFyIGl4ID0gMDsgaXggPCBsZXZlbHMubGVuZ3RoOyArK2l4KSB7XG4gICAgICAgICAgICB2YXIgbGV2ZWxhID0gbGV2ZWxzW2l4XTtcblxuICAgICAgICAgICAgaWYgKGxldmVsYS5tYXRjaCgvOi8pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxldmVsc1tpeF0ubWF0Y2goLyguKik6KC4qKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhbnVsYXJMZXZlbHNbUmVnRXhwLiQxXSA9IHRoaXMuZ3JhbnVsYXJMZXZlbHNbUmVnRXhwLiQxXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFudWxhckxldmVsc1tSZWdFeHAuJDFdID0gUmVnRXhwLiQyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbCA9IGxldmVsc1tpeF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbCA9IGxldmVsYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbnkgcHJvcGVydGllcyByZWNvcmRlZCBieSBzZXRDb250ZXh0XG4gICAgY2xlYXJDb250ZXh0UHJvcHMoY29udGV4dFRvQ2xlYXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNvbnRleHRUb0NsZWFyKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0W3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGxvZ2dlciBhbmQgY29weSBvdmVyIGl0J3MgY29udGV4dFxuICAgIGNyZWF0ZUNoaWxkTG9nZ2VyKGNvbnRleHQsIHJvb3RWYWx1ZXM/LCBkYXRhVmFsdWVzPyk6IFN1cGVydHlwZUxvZ2dlciB7XG4gICAgICAgIGxldCBjaGlsZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IHByb3AgaW4gdGhpcykge1xuICAgICAgICAgICAgY2hpbGRbcHJvcF0gPSB0aGlzW3Byb3BdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQuY29udGV4dCA9IGNvbnRleHQgfHwge307XG5cbiAgICAgICAgZm9yIChsZXQgcHJvcGVyIGluIHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgY2hpbGQuY29udGV4dFtwcm9wZXJdID0gdGhpcy5jb250ZXh0W3Byb3Blcl07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRMb2dnZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyLmNoaWxkTG9nZ2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRMb2dnZXIgPSB0aGlzLl9jbGllbnRMb2dnZXIuY2hpbGRMb2dnZXIocm9vdFZhbHVlcywgZGF0YVZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jbGllbnRMb2dnZXIuY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjaGlsZExvZ2dlciA9IHRoaXMuX2NsaWVudExvZ2dlci5jaGlsZCh7Li4ucm9vdFZhbHVlcywgZGF0YToge2RhdGFWYWx1ZXN9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZC5sb2dnZXIgPSBjaGlsZExvZ2dlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGlsZCBhcyBTdXBlcnR5cGVMb2dnZXI7IC8vIGJhZCBwcmFjdGljZSBidXQgc2hvdWxkIGZpeFxuICAgIH1cblxuICAgIGZvcm1hdERhdGVUaW1lKGRhdGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZigyLCAoZGF0ZS5nZXRNb250aCgpICsgMSksICcvJykgKyBmKDIsIGRhdGUuZ2V0RGF0ZSgpLCAnLycpICsgZig0LCBkYXRlLmdldEZ1bGxZZWFyKCksICcgJykgK1xuICAgICAgICAgICAgZigyLCBkYXRlLmdldEhvdXJzKCksICc6JykgKyBmKDIsIGRhdGUuZ2V0TWludXRlcygpLCAnOicpICsgZigyLCBkYXRlLmdldFNlY29uZHMoKSwgJzonKSArXG4gICAgICAgICAgICBmKDMsIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpICsgJyBHTVQnICsgKDAgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZih6LCBkLCBzPykge1xuICAgICAgICAgICAgd2hpbGUgKFN0cmluZyhkKS5sZW5ndGggPCB6KSB7XG4gICAgICAgICAgICAgICAgZCA9ICcwJyArIGQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkICsgKHMgfHwgJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSByZXBsYWNlZCBieSB0aGUgY29uc3VtZXIgb2YgdGhpcyBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2dMZXZlbCAtIGxvZyBsZXZlbFxuICAgICAqIEBwYXJhbSBsb2dPYmplY3QgLSBmb3JtYXR0ZWQgbG9nIG9iamVjdCwgcGFzc2VkIGluIGZyb20gY29uc3VtZXJcbiAgICAgKiBAcGFyYW0gcmF3TG9nRGF0YSAtIHVuZm9ybWF0dGVkIGFuZCB1bnByb2Nlc3NlZCB2ZXJzaW9uIG9mIFwibG9nT2JqZWN0XCIgcGFyYW1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2VuZFRvTG9nKGxvZ0xldmVsLCBsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gdGhpcy5zZW5kVG9Mb2cubmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2NsaWVudExvZ2dlcikge1xuICAgICAgICAgICAgbGV0IGxldmVsRm9yTG9nID0gdHlwZW9mIGxvZ0xldmVsID09PSAnc3RyaW5nJyA/IHN0clRvTGV2ZWxbbG9nTGV2ZWxdIDogbG9nTGV2ZWw7XG4gICAgICAgICAgICBzd2l0Y2ggKGxldmVsRm9yTG9nKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnRMb2dnZXIuZGVidWcobG9nT2JqZWN0LCAuLi5yYXdMb2dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5pbmZvKGxvZ09iamVjdCwgLi4ucmF3TG9nRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnRMb2dnZXIud2Fybihsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSA2MDpcbiAgICAgICAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnRMb2dnZXIuZXJyb3IobG9nT2JqZWN0LCAuLi5yYXdMb2dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnRMb2dnZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiBTdXBlcnR5cGVMb2dnZXIubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ21pbGVzdG9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCBsZXZlbCB1c2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dMZXZlbDogbG9nTGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nT2JqZWN0OiBsb2dPYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnByZXR0eVByaW50KGxvZ0xldmVsLCBsb2dPYmplY3QpKTsgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cblxuICAgIHByZXR0eVByaW50KGxldmVsLCBqc29uKSB7XG4gICAgICAgIGxldCBzcGxpdCA9IHRoaXMuc3BsaXQoanNvbiwge3RpbWU6IDEsIG1zZzogMSwgbGV2ZWw6IDEsIG5hbWU6IDF9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlVGltZShqc29uLnRpbWUgPyBuZXcgRGF0ZShqc29uLnRpbWUpIDogbmV3IERhdGUoKSkgKyAnOiAnICtcbiAgICAgICAgICAgIGxldmVsLnRvVXBwZXJDYXNlKCkgKyAnOiAnICtcbiAgICAgICAgICAgIGFkZENvbG9uSWZUb2tlbihzcGxpdFsxXS5uYW1lLCAnOiAnKSArXG4gICAgICAgICAgICBhZGRDb2xvbklmVG9rZW4oc3BsaXRbMV0ubXNnLCAnOiAnKSArXG4gICAgICAgICAgICB4eShzcGxpdFswXSk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkQ29sb25JZlRva2VuICh0b2tlbiwgY29sb25BbmRTcGFjZSkge1xuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuICsgY29sb25BbmRTcGFjZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24geHkoaikge1xuICAgICAgICAgICAgdmFyIHN0ciA9ICcnO1xuICAgICAgICAgICAgdmFyIHNlcCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGopIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gc2VwICsgcHJvcCArICc9JyArIEpTT04uc3RyaW5naWZ5KGpbcHJvcF0pO1xuICAgICAgICAgICAgICAgIHNlcCA9ICcgJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcoJyArIHN0ciArICcpJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzcGxpdChqc29uLCBwcm9wcyk6IGFueVtdIHtcbiAgICAgICAgY29uc3QgYSA9IHt9O1xuICAgICAgICBjb25zdCBiID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGpzb24pIHtcbiAgICAgICAgICAgIChwcm9wc1twcm9wXSA/IGIgOiBhKVtwcm9wXSA9IGpzb25bcHJvcF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgIH1cblxuICAgIC8vIExvZ2dpbmcgaXMgZW5hYmxlZCBpZiBlaXRoZXIgdGhlIGxldmVsIHRocmVzaG9sZCBpcyBtZXQgb3IgdGhlIGdyYW51bGFyIGxldmVsIG1hdGNoZXNcbiAgICBwcml2YXRlIGlzRW5hYmxlZChsZXZlbCwgb2JqKSB7XG4gICAgICAgIGxldmVsID0gc3RyVG9MZXZlbFtsZXZlbF07XG5cbiAgICAgICAgaWYgKGxldmVsID49IHN0clRvTGV2ZWxbdGhpcy5sZXZlbF0pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JhbnVsYXJMZXZlbHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxldmVsciBpbiB0aGlzLmdyYW51bGFyTGV2ZWxzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9ialtsZXZlbHJdICYmIG9ialtsZXZlbHJdID09IHRoaXMuZ3JhbnVsYXJMZXZlbHNbbGV2ZWxyXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59Il19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VwZXJ0eXBlTG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N1cGVydHlwZUxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDbEcsSUFBTSxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBRWxHO0lBUUksaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2Qiw0QkFBNEI7SUFFNUI7UUFWUSxxQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztRQVczQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBR0QsK0JBQUssR0FBTDtRQUFNLGNBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQseUJBQWM7O1FBQ2hCLElBQUksQ0FBQyxHQUFHLE9BQVIsSUFBSSxrQkFBSyxFQUFFLEdBQUssSUFBSSxHQUFFO0lBQzFCLENBQUM7SUFFRCwrQkFBSyxHQUFMO1FBQU0sY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7WUFBZCx5QkFBYzs7UUFDaEIsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLGtCQUFLLEVBQUUsR0FBSyxJQUFJLEdB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsd0ZBQXdGO0lBQ2hGLG1DQUFTLEdBQWpCLFVBQWtCLEtBQUssRUFBRSxHQUFHO1FBQ3hCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDcEMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzNELE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUExVE0sMEJBQVUsR0FBVyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBMlRyRCxzQkFBQztDQUFBLEFBNVRELElBNFRDO0FBNVRZLDBDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbGV2ZWxUb1N0ciA9IHsgNjA6ICdmYXRhbCcsIDUwOiAnZXJyb3InLCA0MDogJ3dhcm4nLCAzMDogJ2luZm8nLCAyMDogJ2RlYnVnJywgMTA6ICd0cmFjZScgfTtcbmNvbnN0IHN0clRvTGV2ZWwgPSB7ICdmYXRhbCc6IDYwLCAnZXJyb3InOiA1MCwgJ3dhcm4nOiA0MCwgJ2luZm8nOiAzMCwgJ2RlYnVnJzogMjAsICd0cmFjZSc6IDEwIH07XG5cbmV4cG9ydCBjbGFzcyBTdXBlcnR5cGVMb2dnZXIge1xuICAgIHN0YXRpYyBtb2R1bGVOYW1lOiBzdHJpbmcgPSBTdXBlcnR5cGVMb2dnZXIubmFtZTtcbiAgICBwcml2YXRlIF9hbW9ycGhpY0NvbnRleHQgPSAnX19hbW9ycGhpY0NvbnRleHQnO1xuICAgIGNvbnRleHQ6IGFueTtcbiAgICBncmFudWxhckxldmVsczogYW55O1xuICAgIGxldmVsOiBhbnk7XG4gICAgcHJpdmF0ZSBfY2xpZW50TG9nZ2VyOiBhbnk7XG5cbiAgICAvLyBmb3Igb3ZlcnJpZGluZ1xuICAgIC8vIHNlbmRUb0xvZzogRnVuY3Rpb247XG4gICAgLy8gZm9ybWF0RGF0ZVRpbWU6IEZ1bmN0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgICAgICB0aGlzLmdyYW51bGFyTGV2ZWxzID0ge307XG4gICAgICAgIHRoaXMubGV2ZWwgPSAnaW5mbyc7XG4gICAgfVxuXG5cbiAgICBmYXRhbCguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZyg2MCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgZXJyb3IoLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coNTAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIHdhcm4oLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coNDAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIGluZm8oLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coMzAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIGRlYnVnKC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nKDIwLCAuLi5kYXRhKTtcbiAgICB9XG5cbiAgICB0cmFjZSguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZygxMCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0IGNsaWVudExvZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudExvZ2dlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhc3NpZ24gYSBjdXN0b20gc2VuZCB0byBsb2cgZnVuY3Rpb25hbGl0eS5cbiAgICAgKiBAcGFyYW0gbG9nZ2VyIC0gbG9nZ2VyIG11c3QgZml0IHRoZSBmb3JtYXQgb2YgaW5mby9lcnJvci9kZWJ1Zy93YXJuXG4gICAgICovXG4gICAgc2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgICAgICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICB0eXBlb2YgbG9nZ2VyLmVycm9yICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICB0eXBlb2YgbG9nZ2VyLmRlYnVnICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICB0eXBlb2YgbG9nZ2VyLndhcm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHNwZWNpZnkgYSBsb2dnZXIgd2l0aCB0aGUgaW5mbywgZXJyb3IsIGRlYnVnLCBhbmQgd2FybiBmdW5jdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxvZ2dlci5jaGlsZExvZ2dlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyID0gbG9nZ2VyLmNoaWxkTG9nZ2VyKHtlcnJvcjoge2lzSHVtYW5SZWxhdGVkOiBmYWxzZX19KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxvZ2dlci5jaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyID0gbG9nZ2VyLmNoaWxkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cblxuICAgIC8vIExvZyBhbGwgYXJndW1lbnRzIGFzc3VtaW5nIHRoZSBmaXJzdCBvbmUgaXMgbGV2ZWwgYW5kIHRoZSBzZWNvbmQgb25lIG1pZ2h0IGJlIGFuIG9iamVjdCAoc2ltaWxhciB0byBiYW55YW4pXG4gICAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllczogYW55W10gPSBhcmdzICYmIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzLnNsaWNlKCkgOiBhcmdzO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllc1swXSA9PT0gJ29iamVjdCcpICB7XG4gICAgICAgICAgICBsZXQgbG9nT2JqID0gcHJvcGVydGllc1swXTtcbiAgICAgICAgICAgIGlmICghbG9nT2JqLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBsb2dPYmouZGF0YSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2dPYmouY29udGV4dCkge1xuICAgICAgICAgICAgICAgIGxvZ09iai5jb250ZXh0ID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0TG9nc0Ftb3JwaGljQ29udGV4dChsb2dPYmouZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnNldExvZ3NTZXNzaW9uSWQobG9nT2JqKTtcblxuICAgICAgICAgICAgbG9nT2JqWydsZXZlbCddID0gbGV2ZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQobGV2ZWxUb1N0cltsb2dPYmpbJ2xldmVsJ11dLCBsb2dPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kVG9Mb2cobGV2ZWxUb1N0cltsb2dPYmpbJ2xldmVsJ11dLCBsb2dPYmosIC4uLnByb3BlcnRpZXMuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllc1snbGV2ZWwnXSA9IGxldmVsO1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQobGV2ZWxUb1N0cltwcm9wZXJ0aWVzWydsZXZlbCddXSwgcHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZFRvTG9nKGxldmVsVG9TdHJbcHJvcGVydGllc1snbGV2ZWwnXV0sIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExvZ3NTZXNzaW9uSWQobG9nT2JqOiBhbnkpIHtcbiAgICAgICAgaWYgKGxvZ09iai5kYXRhPy5fX2Ftb3JwaGljQ29udGV4dD8uc2Vzc2lvbikge1xuICAgICAgICAgICAgbG9nT2JqLmNvbnRleHQuc2Vzc2lvbklkID0gbG9nT2JqLmRhdGEuX19hbW9ycGhpY0NvbnRleHQuc2Vzc2lvbjtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2dPYmouZGF0YS5fX2Ftb3JwaGljQ29udGV4dC5zZXNzaW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2dzQW1vcnBoaWNDb250ZXh0KG9iamVjdCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb2JqZWN0W3RoaXMuX2Ftb3JwaGljQ29udGV4dF0gPSB7IC4uLnRoaXMuY29udGV4dCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QW1vcnBoaWNDb250ZXh0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7IF9fYW1vcnBoaWNDb250ZXh0OiB7IC4uLnRoaXMuY29udGV4dCB9IH07XG4gICAgfVxuXG4gICAgc3RhcnRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBjb250ZXh0IGFuZCByZXR1cm4gYSBuZXcgb2JqZWN0IHRoYXQgaGFzIHRoZSBwcm9wZXJ0aWVzIG9ubHkgc28gdGhleSBjYW4gYmUgY2xlYXJlZFxuICAgIHNldENvbnRleHRQcm9wcyhjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2UgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29udGV4dCkge1xuICAgICAgICAgICAgcmV2ZXJzZVtwcm9wXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRbcHJvcF0gPSBjb250ZXh0W3Byb3BdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldmVyc2U7XG4gICAgfVxuICAgIC8vIFBhcnNlIGxvZyBsZXZlbHMgc3VjaCBhcyB3YXJuLmFjdGl2aXR5XG4gICAgc2V0TGV2ZWwobGV2ZWwpIHtcbiAgICAgICAgdmFyIGxldmVscyA9IGxldmVsLnNwbGl0KCc7Jyk7XG5cbiAgICAgICAgZm9yICh2YXIgaXggPSAwOyBpeCA8IGxldmVscy5sZW5ndGg7ICsraXgpIHtcbiAgICAgICAgICAgIHZhciBsZXZlbGEgPSBsZXZlbHNbaXhdO1xuXG4gICAgICAgICAgICBpZiAobGV2ZWxhLm1hdGNoKC86LykpIHtcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWxzW2l4XS5tYXRjaCgvKC4qKTooLiopLykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFudWxhckxldmVsc1tSZWdFeHAuJDFdID0gdGhpcy5ncmFudWxhckxldmVsc1tSZWdFeHAuJDFdIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYW51bGFyTGV2ZWxzW1JlZ0V4cC4kMV0gPSBSZWdFeHAuJDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbGV2ZWxzW2l4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbGV2ZWxhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBwcm9wZXJ0aWVzIHJlY29yZGVkIGJ5IHNldENvbnRleHRcbiAgICBjbGVhckNvbnRleHRQcm9wcyhjb250ZXh0VG9DbGVhcikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29udGV4dFRvQ2xlYXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHRbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgbG9nZ2VyIGFuZCBjb3B5IG92ZXIgaXQncyBjb250ZXh0XG4gICAgY3JlYXRlQ2hpbGRMb2dnZXIoY29udGV4dCwgcm9vdFZhbHVlcz8sIGRhdGFWYWx1ZXM/KTogU3VwZXJ0eXBlTG9nZ2VyIHtcbiAgICAgICAgbGV0IGNoaWxkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgcHJvcCBpbiB0aGlzKSB7XG4gICAgICAgICAgICBjaGlsZFtwcm9wXSA9IHRoaXNbcHJvcF07XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5jb250ZXh0ID0gY29udGV4dCB8fCB7fTtcblxuICAgICAgICBmb3IgKGxldCBwcm9wZXIgaW4gdGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICBjaGlsZC5jb250ZXh0W3Byb3Blcl0gPSB0aGlzLmNvbnRleHRbcHJvcGVyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRMb2dnZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyLmNoaWxkTG9nZ2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRMb2dnZXIgPSB0aGlzLl9jbGllbnRMb2dnZXIuY2hpbGRMb2dnZXIocm9vdFZhbHVlcywgZGF0YVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZExvZ2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NsaWVudExvZ2dlci5jaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNoaWxkTG9nZ2VyID0gdGhpcy5fY2xpZW50TG9nZ2VyLmNoaWxkKHsuLi5yb290VmFsdWVzLCBkYXRhOiB7ZGF0YVZhbHVlc319KTtcbiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkTG9nZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkIGFzIFN1cGVydHlwZUxvZ2dlcjsgLy8gYmFkIHByYWN0aWNlIGJ1dCBzaG91bGQgZml4XG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZVRpbWUoZGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBmKDIsIChkYXRlLmdldE1vbnRoKCkgKyAxKSwgJy8nKSArIGYoMiwgZGF0ZS5nZXREYXRlKCksICcvJykgKyBmKDQsIGRhdGUuZ2V0RnVsbFllYXIoKSwgJyAnKSArXG4gICAgICAgICAgICBmKDIsIGRhdGUuZ2V0SG91cnMoKSwgJzonKSArIGYoMiwgZGF0ZS5nZXRNaW51dGVzKCksICc6JykgKyBmKDIsIGRhdGUuZ2V0U2Vjb25kcygpLCAnOicpICtcbiAgICAgICAgICAgIGYoMywgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkgKyAnIEdNVCcgKyAoMCAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwKTtcblxuICAgICAgICBmdW5jdGlvbiBmKHosIGQsIHM/KSB7XG4gICAgICAgICAgICB3aGlsZSAoU3RyaW5nKGQpLmxlbmd0aCA8IHopIHtcbiAgICAgICAgICAgICAgICBkID0gJzAnICsgZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGQgKyAocyB8fCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZUVtcHR5TG9nUHJvcGVydGllcyhsb2dPYmplY3Q6IGFueSkge1xuICAgICAgICBjb25zdCBrZXlzID0gWydjb250ZXh0JywgJ2RhdGEnXTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2dPYmplY3Rba2V5XSAmJiBPYmplY3Qua2V5cyhsb2dPYmplY3Rba2V5XSkubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2dPYmplY3Rba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBjb25zdW1lciBvZiB0aGlzIGNsYXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gbG9nIGxldmVsXG4gICAgICogQHBhcmFtIGxvZ09iamVjdCAtIGZvcm1hdHRlZCBsb2cgb2JqZWN0LCBwYXNzZWQgaW4gZnJvbSBjb25zdW1lclxuICAgICAqIEBwYXJhbSByYXdMb2dEYXRhIC0gdW5mb3JtYXR0ZWQgYW5kIHVucHJvY2Vzc2VkIHZlcnNpb24gb2YgXCJsb2dPYmplY3RcIiBwYXJhbVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZW5kVG9Mb2cobG9nTGV2ZWwsIGxvZ09iamVjdCwgLi4ucmF3TG9nRGF0YSkge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLnNlbmRUb0xvZy5uYW1lO1xuICAgICAgICB0aGlzLmRlbGV0ZUVtcHR5TG9nUHJvcGVydGllcyhsb2dPYmplY3QpO1xuICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyKSB7XG4gICAgICAgICAgICBsZXQgbGV2ZWxGb3JMb2cgPSB0eXBlb2YgbG9nTGV2ZWwgPT09ICdzdHJpbmcnID8gc3RyVG9MZXZlbFtsb2dMZXZlbF0gOiBsb2dMZXZlbDtcbiAgICAgICAgICAgIHN3aXRjaCAobGV2ZWxGb3JMb2cpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5kZWJ1Zyhsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyLmluZm8obG9nT2JqZWN0LCAuLi5yYXdMb2dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci53YXJuKGxvZ09iamVjdCwgLi4ucmF3TG9nRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5lcnJvcihsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IFN1cGVydHlwZUxvZ2dlci5tb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnbWlsZXN0b25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIGxldmVsIHVzZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBsb2dMZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dPYmplY3Q6IGxvZ09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMucHJldHR5UHJpbnQobG9nTGV2ZWwsIGxvZ09iamVjdCkpOyAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuXG4gICAgcHJldHR5UHJpbnQobGV2ZWwsIGpzb24pIHtcbiAgICAgICAgbGV0IHNwbGl0ID0gdGhpcy5zcGxpdChqc29uLCB7dGltZTogMSwgbXNnOiAxLCBsZXZlbDogMSwgbmFtZTogMX0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGVUaW1lKGpzb24udGltZSA/IG5ldyBEYXRlKGpzb24udGltZSkgOiBuZXcgRGF0ZSgpKSArICc6ICcgK1xuICAgICAgICAgICAgbGV2ZWwudG9VcHBlckNhc2UoKSArICc6ICcgK1xuICAgICAgICAgICAgYWRkQ29sb25JZlRva2VuKHNwbGl0WzFdLm5hbWUsICc6ICcpICtcbiAgICAgICAgICAgIGFkZENvbG9uSWZUb2tlbihzcGxpdFsxXS5tc2csICc6ICcpICtcbiAgICAgICAgICAgIHh5KHNwbGl0WzBdKTtcblxuICAgICAgICBmdW5jdGlvbiBhZGRDb2xvbklmVG9rZW4gKHRva2VuLCBjb2xvbkFuZFNwYWNlKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gKyBjb2xvbkFuZFNwYWNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB4eShqKSB7XG4gICAgICAgICAgICB2YXIgc3RyID0gJyc7XG4gICAgICAgICAgICB2YXIgc2VwID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gaikge1xuICAgICAgICAgICAgICAgIHN0ciArPSBzZXAgKyBwcm9wICsgJz0nICsgSlNPTi5zdHJpbmdpZnkoaltwcm9wXSk7XG4gICAgICAgICAgICAgICAgc2VwID0gJyAnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJygnICsgc3RyICsgJyknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNwbGl0KGpzb24sIHByb3BzKTogYW55W10ge1xuICAgICAgICBjb25zdCBhID0ge307XG4gICAgICAgIGNvbnN0IGIgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4ganNvbikge1xuICAgICAgICAgICAgKHByb3BzW3Byb3BdID8gYiA6IGEpW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbYSwgYl07XG4gICAgfVxuXG4gICAgLy8gTG9nZ2luZyBpcyBlbmFibGVkIGlmIGVpdGhlciB0aGUgbGV2ZWwgdGhyZXNob2xkIGlzIG1ldCBvciB0aGUgZ3JhbnVsYXIgbGV2ZWwgbWF0Y2hlc1xuICAgIHByaXZhdGUgaXNFbmFibGVkKGxldmVsLCBvYmopIHtcbiAgICAgICAgbGV2ZWwgPSBzdHJUb0xldmVsW2xldmVsXTtcblxuICAgICAgICBpZiAobGV2ZWwgPj0gc3RyVG9MZXZlbFt0aGlzLmxldmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmFudWxhckxldmVscykge1xuICAgICAgICAgICAgZm9yIChsZXQgbGV2ZWxyIGluIHRoaXMuZ3JhbnVsYXJMZXZlbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqW2xldmVscl0gJiYgb2JqW2xldmVscl0gPT0gdGhpcy5ncmFudWxhckxldmVsc1tsZXZlbHJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
{
"name": "@haventech/supertype",
"description": "A type system for classical inheritence, mix-ins and composition.",
"version": "6.0.0-beta.6",
"version": "6.0.0-beta.7",
"main": "dist/index.js",

@@ -6,0 +6,0 @@ "types": "dist/index.d.ts",

@@ -1,3 +0,1 @@

import { isModuleNamespaceObject } from "util/types";
const levelToStr = { 60: 'fatal', 50: 'error', 40: 'warn', 30: 'info', 20: 'debug', 10: 'trace' };

@@ -84,3 +82,9 @@ const strToLevel = { 'fatal': 60, 'error': 50, 'warn': 40, 'info': 30, 'debug': 20, 'trace': 10 };

}
this.setContextLog(logObj.data);
if (!logObj.context) {
logObj.context = {};
}
this.setLogsAmorphicContext(logObj.data);
this.setLogsSessionId(logObj);
logObj['level'] = level;

@@ -100,13 +104,19 @@ if (this.isEnabled(levelToStr[logObj['level']], logObj)) {

setContextLog(object) {
object[this._amorphicContext] = { ...this.context };
private setLogsSessionId(logObj: any) {
if (logObj.data?.__amorphicContext?.session) {
logObj.context.sessionId = logObj.data.__amorphicContext.session;
delete logObj.data.__amorphicContext.session;
}
}
getContextLog(object) {
if (!object[this._amorphicContext]) {
this.setContextLog(object);
private setLogsAmorphicContext(object) {
if (this.context && Object.keys(this.context).length > 0) {
object[this._amorphicContext] = { ...this.context };
}
return object[this._amorphicContext];
}
getAmorphicContext(): any {
return { __amorphicContext: { ...this.context } };
}
startContext(context) {

@@ -169,3 +179,2 @@ this.context = context;

}
if (this._clientLogger) {

@@ -175,7 +184,8 @@ let childLogger;

childLogger = this._clientLogger.childLogger(rootValues, dataValues);
child = childLogger;
}
else if (this._clientLogger.child === 'function') {
childLogger = this._clientLogger.child({...rootValues, data: {dataValues}});
child = childLogger;
}
child.logger = childLogger;
}

@@ -200,2 +210,11 @@

private deleteEmptyLogProperties(logObject: any) {
const keys = ['context', 'data'];
keys.forEach((key) => {
if (logObject[key] && Object.keys(logObject[key]).length < 1) {
delete logObject[key];
}
})
}
/**

@@ -210,2 +229,3 @@ * this function is designed to be replaced by the consumer of this class.

const functionName = this.sendToLog.name;
this.deleteEmptyLogProperties(logObject);
if (this._clientLogger) {

@@ -212,0 +232,0 @@ let levelForLog = typeof logLevel === 'string' ? strToLevel[logLevel] : logLevel;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc