@haventech/supertype
Advanced tools
Comparing version 6.0.0-beta.7 to 6.0.0-beta.8
@@ -22,3 +22,2 @@ export declare class SupertypeLogger { | ||
private log; | ||
private setLogsSessionId; | ||
private setLogsAmorphicContext; | ||
@@ -25,0 +24,0 @@ getAmorphicContext(): any; |
@@ -119,4 +119,3 @@ "use strict"; | ||
} | ||
this.setLogsAmorphicContext(logObj.data); | ||
this.setLogsSessionId(logObj); | ||
this.setLogsAmorphicContext(logObj.context); | ||
logObj['level'] = level; | ||
@@ -134,12 +133,18 @@ if (this.isEnabled(levelToStr[logObj['level']], logObj)) { | ||
}; | ||
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; | ||
} | ||
}; | ||
//This method extracts sessionId from the each request's context | ||
//and places it in the context.sessionId. All other context properties are | ||
//placed in context.data object. | ||
SupertypeLogger.prototype.setLogsAmorphicContext = function (object) { | ||
if (this.context && Object.keys(this.context).length > 0) { | ||
object[this._amorphicContext] = __assign({}, this.context); | ||
if (!object.data) { | ||
object.data = {}; | ||
} | ||
if (typeof object.data === 'object') { | ||
var sessionId = this.context.session; | ||
object.data[this._amorphicContext] = __assign({}, this.context); | ||
if (object.data[this._amorphicContext] && sessionId) { | ||
object.data[this._amorphicContext].session = sessionId; | ||
delete object.data[this._amorphicContext].session; | ||
} | ||
} | ||
} | ||
@@ -329,2 +334,2 @@ }; | ||
exports.SupertypeLogger = SupertypeLogger; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VwZXJ0eXBlTG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N1cGVydHlwZUxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDbEcsSUFBTSxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBRWxHO0lBUUksaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2Qiw0QkFBNEI7SUFFNUI7UUFWUSxxQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztRQVczQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBR0QsK0JBQUssR0FBTDtRQUFNLGNBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQseUJBQWM7O1FBQ2hCLElBQUksQ0FBQyxHQUFHLE9BQVIsSUFBSSxrQkFBSyxFQUFFLEdBQUssSUFBSSxHQUFFO0lBQzFCLENBQUM7SUFFRCwrQkFBSyxHQUFMO1FBQU0sY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7WUFBZCx5QkFBYzs7UUFDaEIsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLGtCQUFLLEVBQUUsR0FBSyxJQUFJLEdB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsd0ZBQXdGO0lBQ2hGLG1DQUFTLEdBQWpCLFVBQWtCLEtBQUssRUFBRSxHQUFHO1FBQ3hCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDcEMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzNELE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUExVE0sMEJBQVUsR0FBVyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBMlRyRCxzQkFBQztDQUFBLEFBNVRELElBNFRDO0FBNVRZLDBDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbGV2ZWxUb1N0ciA9IHsgNjA6ICdmYXRhbCcsIDUwOiAnZXJyb3InLCA0MDogJ3dhcm4nLCAzMDogJ2luZm8nLCAyMDogJ2RlYnVnJywgMTA6ICd0cmFjZScgfTtcbmNvbnN0IHN0clRvTGV2ZWwgPSB7ICdmYXRhbCc6IDYwLCAnZXJyb3InOiA1MCwgJ3dhcm4nOiA0MCwgJ2luZm8nOiAzMCwgJ2RlYnVnJzogMjAsICd0cmFjZSc6IDEwIH07XG5cbmV4cG9ydCBjbGFzcyBTdXBlcnR5cGVMb2dnZXIge1xuICAgIHN0YXRpYyBtb2R1bGVOYW1lOiBzdHJpbmcgPSBTdXBlcnR5cGVMb2dnZXIubmFtZTtcbiAgICBwcml2YXRlIF9hbW9ycGhpY0NvbnRleHQgPSAnX19hbW9ycGhpY0NvbnRleHQnO1xuICAgIGNvbnRleHQ6IGFueTtcbiAgICBncmFudWxhckxldmVsczogYW55O1xuICAgIGxldmVsOiBhbnk7XG4gICAgcHJpdmF0ZSBfY2xpZW50TG9nZ2VyOiBhbnk7XG5cbiAgICAvLyBmb3Igb3ZlcnJpZGluZ1xuICAgIC8vIHNlbmRUb0xvZzogRnVuY3Rpb247XG4gICAgLy8gZm9ybWF0RGF0ZVRpbWU6IEZ1bmN0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgICAgICB0aGlzLmdyYW51bGFyTGV2ZWxzID0ge307XG4gICAgICAgIHRoaXMubGV2ZWwgPSAnaW5mbyc7XG4gICAgfVxuXG5cbiAgICBmYXRhbCguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZyg2MCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgZXJyb3IoLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coNTAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIHdhcm4oLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coNDAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIGluZm8oLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coMzAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIGRlYnVnKC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nKDIwLCAuLi5kYXRhKTtcbiAgICB9XG5cbiAgICB0cmFjZSguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZygxMCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0IGNsaWVudExvZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudExvZ2dlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhc3NpZ24gYSBjdXN0b20gc2VuZCB0byBsb2cgZnVuY3Rpb25hbGl0eS5cbiAgICAgKiBAcGFyYW0gbG9nZ2VyIC0gbG9nZ2VyIG11c3QgZml0IHRoZSBmb3JtYXQgb2YgaW5mby9lcnJvci9kZWJ1Zy93YXJuXG4gICAgICovXG4gICAgc2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgICAgICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICB0eXBlb2YgbG9nZ2VyLmVycm9yICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICB0eXBlb2YgbG9nZ2VyLmRlYnVnICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICB0eXBlb2YgbG9nZ2VyLndhcm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHNwZWNpZnkgYSBsb2dnZXIgd2l0aCB0aGUgaW5mbywgZXJyb3IsIGRlYnVnLCBhbmQgd2FybiBmdW5jdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxvZ2dlci5jaGlsZExvZ2dlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyID0gbG9nZ2VyLmNoaWxkTG9nZ2VyKHtlcnJvcjoge2lzSHVtYW5SZWxhdGVkOiBmYWxzZX19KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxvZ2dlci5jaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyID0gbG9nZ2VyLmNoaWxkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cblxuICAgIC8vIExvZyBhbGwgYXJndW1lbnRzIGFzc3VtaW5nIHRoZSBmaXJzdCBvbmUgaXMgbGV2ZWwgYW5kIHRoZSBzZWNvbmQgb25lIG1pZ2h0IGJlIGFuIG9iamVjdCAoc2ltaWxhciB0byBiYW55YW4pXG4gICAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllczogYW55W10gPSBhcmdzICYmIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzLnNsaWNlKCkgOiBhcmdzO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllc1swXSA9PT0gJ29iamVjdCcpICB7XG4gICAgICAgICAgICBsZXQgbG9nT2JqID0gcHJvcGVydGllc1swXTtcbiAgICAgICAgICAgIGlmICghbG9nT2JqLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBsb2dPYmouZGF0YSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2dPYmouY29udGV4dCkge1xuICAgICAgICAgICAgICAgIGxvZ09iai5jb250ZXh0ID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0TG9nc0Ftb3JwaGljQ29udGV4dChsb2dPYmouZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnNldExvZ3NTZXNzaW9uSWQobG9nT2JqKTtcblxuICAgICAgICAgICAgbG9nT2JqWydsZXZlbCddID0gbGV2ZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQobGV2ZWxUb1N0cltsb2dPYmpbJ2xldmVsJ11dLCBsb2dPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kVG9Mb2cobGV2ZWxUb1N0cltsb2dPYmpbJ2xldmVsJ11dLCBsb2dPYmosIC4uLnByb3BlcnRpZXMuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllc1snbGV2ZWwnXSA9IGxldmVsO1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQobGV2ZWxUb1N0cltwcm9wZXJ0aWVzWydsZXZlbCddXSwgcHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZFRvTG9nKGxldmVsVG9TdHJbcHJvcGVydGllc1snbGV2ZWwnXV0sIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExvZ3NTZXNzaW9uSWQobG9nT2JqOiBhbnkpIHtcbiAgICAgICAgaWYgKGxvZ09iai5kYXRhPy5fX2Ftb3JwaGljQ29udGV4dD8uc2Vzc2lvbikge1xuICAgICAgICAgICAgbG9nT2JqLmNvbnRleHQuc2Vzc2lvbklkID0gbG9nT2JqLmRhdGEuX19hbW9ycGhpY0NvbnRleHQuc2Vzc2lvbjtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2dPYmouZGF0YS5fX2Ftb3JwaGljQ29udGV4dC5zZXNzaW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2dzQW1vcnBoaWNDb250ZXh0KG9iamVjdCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb2JqZWN0W3RoaXMuX2Ftb3JwaGljQ29udGV4dF0gPSB7IC4uLnRoaXMuY29udGV4dCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QW1vcnBoaWNDb250ZXh0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7IF9fYW1vcnBoaWNDb250ZXh0OiB7IC4uLnRoaXMuY29udGV4dCB9IH07XG4gICAgfVxuXG4gICAgc3RhcnRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBjb250ZXh0IGFuZCByZXR1cm4gYSBuZXcgb2JqZWN0IHRoYXQgaGFzIHRoZSBwcm9wZXJ0aWVzIG9ubHkgc28gdGhleSBjYW4gYmUgY2xlYXJlZFxuICAgIHNldENvbnRleHRQcm9wcyhjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2UgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29udGV4dCkge1xuICAgICAgICAgICAgcmV2ZXJzZVtwcm9wXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRbcHJvcF0gPSBjb250ZXh0W3Byb3BdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldmVyc2U7XG4gICAgfVxuICAgIC8vIFBhcnNlIGxvZyBsZXZlbHMgc3VjaCBhcyB3YXJuLmFjdGl2aXR5XG4gICAgc2V0TGV2ZWwobGV2ZWwpIHtcbiAgICAgICAgdmFyIGxldmVscyA9IGxldmVsLnNwbGl0KCc7Jyk7XG5cbiAgICAgICAgZm9yICh2YXIgaXggPSAwOyBpeCA8IGxldmVscy5sZW5ndGg7ICsraXgpIHtcbiAgICAgICAgICAgIHZhciBsZXZlbGEgPSBsZXZlbHNbaXhdO1xuXG4gICAgICAgICAgICBpZiAobGV2ZWxhLm1hdGNoKC86LykpIHtcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWxzW2l4XS5tYXRjaCgvKC4qKTooLiopLykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFudWxhckxldmVsc1tSZWdFeHAuJDFdID0gdGhpcy5ncmFudWxhckxldmVsc1tSZWdFeHAuJDFdIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYW51bGFyTGV2ZWxzW1JlZ0V4cC4kMV0gPSBSZWdFeHAuJDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbGV2ZWxzW2l4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbGV2ZWxhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBwcm9wZXJ0aWVzIHJlY29yZGVkIGJ5IHNldENvbnRleHRcbiAgICBjbGVhckNvbnRleHRQcm9wcyhjb250ZXh0VG9DbGVhcikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29udGV4dFRvQ2xlYXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHRbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgbG9nZ2VyIGFuZCBjb3B5IG92ZXIgaXQncyBjb250ZXh0XG4gICAgY3JlYXRlQ2hpbGRMb2dnZXIoY29udGV4dCwgcm9vdFZhbHVlcz8sIGRhdGFWYWx1ZXM/KTogU3VwZXJ0eXBlTG9nZ2VyIHtcbiAgICAgICAgbGV0IGNoaWxkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgcHJvcCBpbiB0aGlzKSB7XG4gICAgICAgICAgICBjaGlsZFtwcm9wXSA9IHRoaXNbcHJvcF07XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5jb250ZXh0ID0gY29udGV4dCB8fCB7fTtcblxuICAgICAgICBmb3IgKGxldCBwcm9wZXIgaW4gdGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICBjaGlsZC5jb250ZXh0W3Byb3Blcl0gPSB0aGlzLmNvbnRleHRbcHJvcGVyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRMb2dnZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyLmNoaWxkTG9nZ2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRMb2dnZXIgPSB0aGlzLl9jbGllbnRMb2dnZXIuY2hpbGRMb2dnZXIocm9vdFZhbHVlcywgZGF0YVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZExvZ2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NsaWVudExvZ2dlci5jaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNoaWxkTG9nZ2VyID0gdGhpcy5fY2xpZW50TG9nZ2VyLmNoaWxkKHsuLi5yb290VmFsdWVzLCBkYXRhOiB7ZGF0YVZhbHVlc319KTtcbiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkTG9nZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkIGFzIFN1cGVydHlwZUxvZ2dlcjsgLy8gYmFkIHByYWN0aWNlIGJ1dCBzaG91bGQgZml4XG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZVRpbWUoZGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBmKDIsIChkYXRlLmdldE1vbnRoKCkgKyAxKSwgJy8nKSArIGYoMiwgZGF0ZS5nZXREYXRlKCksICcvJykgKyBmKDQsIGRhdGUuZ2V0RnVsbFllYXIoKSwgJyAnKSArXG4gICAgICAgICAgICBmKDIsIGRhdGUuZ2V0SG91cnMoKSwgJzonKSArIGYoMiwgZGF0ZS5nZXRNaW51dGVzKCksICc6JykgKyBmKDIsIGRhdGUuZ2V0U2Vjb25kcygpLCAnOicpICtcbiAgICAgICAgICAgIGYoMywgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkgKyAnIEdNVCcgKyAoMCAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwKTtcblxuICAgICAgICBmdW5jdGlvbiBmKHosIGQsIHM/KSB7XG4gICAgICAgICAgICB3aGlsZSAoU3RyaW5nKGQpLmxlbmd0aCA8IHopIHtcbiAgICAgICAgICAgICAgICBkID0gJzAnICsgZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGQgKyAocyB8fCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZUVtcHR5TG9nUHJvcGVydGllcyhsb2dPYmplY3Q6IGFueSkge1xuICAgICAgICBjb25zdCBrZXlzID0gWydjb250ZXh0JywgJ2RhdGEnXTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2dPYmplY3Rba2V5XSAmJiBPYmplY3Qua2V5cyhsb2dPYmplY3Rba2V5XSkubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2dPYmplY3Rba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBjb25zdW1lciBvZiB0aGlzIGNsYXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gbG9nIGxldmVsXG4gICAgICogQHBhcmFtIGxvZ09iamVjdCAtIGZvcm1hdHRlZCBsb2cgb2JqZWN0LCBwYXNzZWQgaW4gZnJvbSBjb25zdW1lclxuICAgICAqIEBwYXJhbSByYXdMb2dEYXRhIC0gdW5mb3JtYXR0ZWQgYW5kIHVucHJvY2Vzc2VkIHZlcnNpb24gb2YgXCJsb2dPYmplY3RcIiBwYXJhbVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZW5kVG9Mb2cobG9nTGV2ZWwsIGxvZ09iamVjdCwgLi4ucmF3TG9nRGF0YSkge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLnNlbmRUb0xvZy5uYW1lO1xuICAgICAgICB0aGlzLmRlbGV0ZUVtcHR5TG9nUHJvcGVydGllcyhsb2dPYmplY3QpO1xuICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyKSB7XG4gICAgICAgICAgICBsZXQgbGV2ZWxGb3JMb2cgPSB0eXBlb2YgbG9nTGV2ZWwgPT09ICdzdHJpbmcnID8gc3RyVG9MZXZlbFtsb2dMZXZlbF0gOiBsb2dMZXZlbDtcbiAgICAgICAgICAgIHN3aXRjaCAobGV2ZWxGb3JMb2cpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5kZWJ1Zyhsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyLmluZm8obG9nT2JqZWN0LCAuLi5yYXdMb2dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci53YXJuKGxvZ09iamVjdCwgLi4ucmF3TG9nRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5lcnJvcihsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IFN1cGVydHlwZUxvZ2dlci5tb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnbWlsZXN0b25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIGxldmVsIHVzZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBsb2dMZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dPYmplY3Q6IGxvZ09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMucHJldHR5UHJpbnQobG9nTGV2ZWwsIGxvZ09iamVjdCkpOyAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuXG4gICAgcHJldHR5UHJpbnQobGV2ZWwsIGpzb24pIHtcbiAgICAgICAgbGV0IHNwbGl0ID0gdGhpcy5zcGxpdChqc29uLCB7dGltZTogMSwgbXNnOiAxLCBsZXZlbDogMSwgbmFtZTogMX0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGVUaW1lKGpzb24udGltZSA/IG5ldyBEYXRlKGpzb24udGltZSkgOiBuZXcgRGF0ZSgpKSArICc6ICcgK1xuICAgICAgICAgICAgbGV2ZWwudG9VcHBlckNhc2UoKSArICc6ICcgK1xuICAgICAgICAgICAgYWRkQ29sb25JZlRva2VuKHNwbGl0WzFdLm5hbWUsICc6ICcpICtcbiAgICAgICAgICAgIGFkZENvbG9uSWZUb2tlbihzcGxpdFsxXS5tc2csICc6ICcpICtcbiAgICAgICAgICAgIHh5KHNwbGl0WzBdKTtcblxuICAgICAgICBmdW5jdGlvbiBhZGRDb2xvbklmVG9rZW4gKHRva2VuLCBjb2xvbkFuZFNwYWNlKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gKyBjb2xvbkFuZFNwYWNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB4eShqKSB7XG4gICAgICAgICAgICB2YXIgc3RyID0gJyc7XG4gICAgICAgICAgICB2YXIgc2VwID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gaikge1xuICAgICAgICAgICAgICAgIHN0ciArPSBzZXAgKyBwcm9wICsgJz0nICsgSlNPTi5zdHJpbmdpZnkoaltwcm9wXSk7XG4gICAgICAgICAgICAgICAgc2VwID0gJyAnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJygnICsgc3RyICsgJyknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNwbGl0KGpzb24sIHByb3BzKTogYW55W10ge1xuICAgICAgICBjb25zdCBhID0ge307XG4gICAgICAgIGNvbnN0IGIgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4ganNvbikge1xuICAgICAgICAgICAgKHByb3BzW3Byb3BdID8gYiA6IGEpW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbYSwgYl07XG4gICAgfVxuXG4gICAgLy8gTG9nZ2luZyBpcyBlbmFibGVkIGlmIGVpdGhlciB0aGUgbGV2ZWwgdGhyZXNob2xkIGlzIG1ldCBvciB0aGUgZ3JhbnVsYXIgbGV2ZWwgbWF0Y2hlc1xuICAgIHByaXZhdGUgaXNFbmFibGVkKGxldmVsLCBvYmopIHtcbiAgICAgICAgbGV2ZWwgPSBzdHJUb0xldmVsW2xldmVsXTtcblxuICAgICAgICBpZiAobGV2ZWwgPj0gc3RyVG9MZXZlbFt0aGlzLmxldmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmFudWxhckxldmVscykge1xuICAgICAgICAgICAgZm9yIChsZXQgbGV2ZWxyIGluIHRoaXMuZ3JhbnVsYXJMZXZlbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqW2xldmVscl0gJiYgb2JqW2xldmVscl0gPT0gdGhpcy5ncmFudWxhckxldmVsc1tsZXZlbHJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VwZXJ0eXBlTG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N1cGVydHlwZUxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDbEcsSUFBTSxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBRWxHO0lBUUksaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2Qiw0QkFBNEI7SUFFNUI7UUFWUSxxQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztRQVczQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBR0QsK0JBQUssR0FBTDtRQUFNLGNBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQseUJBQWM7O1FBQ2hCLElBQUksQ0FBQyxHQUFHLE9BQVIsSUFBSSxrQkFBSyxFQUFFLEdBQUssSUFBSSxHQUFFO0lBQzFCLENBQUM7SUFFRCwrQkFBSyxHQUFMO1FBQU0sY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7WUFBZCx5QkFBYzs7UUFDaEIsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLGtCQUFLLEVBQUUsR0FBSyxJQUFJLEdB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R0FBYixVQUFjLElBQUksRUFBRSxLQUFLO1FBQ3JCLElBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUViLEtBQUssSUFBTSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3JCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUVELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELHdGQUF3RjtJQUNoRixtQ0FBUyxHQUFqQixVQUFrQixLQUFLLEVBQUUsR0FBRztRQUN4QixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3BDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUMzRCxPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBL1RNLDBCQUFVLEdBQVcsZUFBZSxDQUFDLElBQUksQ0FBQztJQWdVckQsc0JBQUM7Q0FBQSxBQWpVRCxJQWlVQztBQWpVWSwwQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGxldmVsVG9TdHIgPSB7IDYwOiAnZmF0YWwnLCA1MDogJ2Vycm9yJywgNDA6ICd3YXJuJywgMzA6ICdpbmZvJywgMjA6ICdkZWJ1ZycsIDEwOiAndHJhY2UnIH07XG5jb25zdCBzdHJUb0xldmVsID0geyAnZmF0YWwnOiA2MCwgJ2Vycm9yJzogNTAsICd3YXJuJzogNDAsICdpbmZvJzogMzAsICdkZWJ1Zyc6IDIwLCAndHJhY2UnOiAxMCB9O1xuXG5leHBvcnQgY2xhc3MgU3VwZXJ0eXBlTG9nZ2VyIHtcbiAgICBzdGF0aWMgbW9kdWxlTmFtZTogc3RyaW5nID0gU3VwZXJ0eXBlTG9nZ2VyLm5hbWU7XG4gICAgcHJpdmF0ZSBfYW1vcnBoaWNDb250ZXh0ID0gJ19fYW1vcnBoaWNDb250ZXh0JztcbiAgICBjb250ZXh0OiBhbnk7XG4gICAgZ3JhbnVsYXJMZXZlbHM6IGFueTtcbiAgICBsZXZlbDogYW55O1xuICAgIHByaXZhdGUgX2NsaWVudExvZ2dlcjogYW55O1xuXG4gICAgLy8gZm9yIG92ZXJyaWRpbmdcbiAgICAvLyBzZW5kVG9Mb2c6IEZ1bmN0aW9uO1xuICAgIC8vIGZvcm1hdERhdGVUaW1lOiBGdW5jdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB7fTtcbiAgICAgICAgdGhpcy5ncmFudWxhckxldmVscyA9IHt9O1xuICAgICAgICB0aGlzLmxldmVsID0gJ2luZm8nO1xuICAgIH1cblxuXG4gICAgZmF0YWwoLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coNjAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIGVycm9yKC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nKDUwLCAuLi5kYXRhKTtcbiAgICB9XG5cbiAgICB3YXJuKC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nKDQwLCAuLi5kYXRhKTtcbiAgICB9XG5cbiAgICBpbmZvKC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nKDMwLCAuLi5kYXRhKTtcbiAgICB9XG5cbiAgICBkZWJ1ZyguLi5kYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZygyMCwgLi4uZGF0YSk7XG4gICAgfVxuXG4gICAgdHJhY2UoLi4uZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2coMTAsIC4uLmRhdGEpO1xuICAgIH1cblxuICAgIGdldCBjbGllbnRMb2dnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRMb2dnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYXNzaWduIGEgY3VzdG9tIHNlbmQgdG8gbG9nIGZ1bmN0aW9uYWxpdHkuXG4gICAgICogQHBhcmFtIGxvZ2dlciAtIGxvZ2dlciBtdXN0IGZpdCB0aGUgZm9ybWF0IG9mIGluZm8vZXJyb3IvZGVidWcvd2FyblxuICAgICAqL1xuICAgIHNldExvZ2dlcihsb2dnZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2dnZXIuaW5mbyAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGxvZ2dlci5lcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGxvZ2dlci5kZWJ1ZyAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGxvZ2dlci53YXJuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBzcGVjaWZ5IGEgbG9nZ2VyIHdpdGggdGhlIGluZm8sIGVycm9yLCBkZWJ1ZywgYW5kIHdhcm4gZnVuY3Rpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsb2dnZXIuY2hpbGRMb2dnZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlciA9IGxvZ2dlci5jaGlsZExvZ2dlcih7ZXJyb3I6IHtpc0h1bWFuUmVsYXRlZDogZmFsc2V9fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsb2dnZXIuY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlciA9IGxvZ2dlci5jaGlsZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NsaWVudExvZ2dlciA9IGxvZ2dlcjtcbiAgICB9XG5cbiAgICAvLyBMb2cgYWxsIGFyZ3VtZW50cyBhc3N1bWluZyB0aGUgZmlyc3Qgb25lIGlzIGxldmVsIGFuZCB0aGUgc2Vjb25kIG9uZSBtaWdodCBiZSBhbiBvYmplY3QgKHNpbWlsYXIgdG8gYmFueWFuKVxuICAgIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueVtdID0gYXJncyAmJiBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncy5zbGljZSgpIDogYXJncztcblxuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXNbMF0gPT09ICdvYmplY3QnKSAge1xuICAgICAgICAgICAgbGV0IGxvZ09iaiA9IHByb3BlcnRpZXNbMF07XG4gICAgICAgICAgICBpZiAoIWxvZ09iai5kYXRhKSB7XG4gICAgICAgICAgICAgICAgbG9nT2JqLmRhdGEgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9nT2JqLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBsb2dPYmouY29udGV4dCA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldExvZ3NBbW9ycGhpY0NvbnRleHQobG9nT2JqLmNvbnRleHQpO1xuXG4gICAgICAgICAgICBsb2dPYmpbJ2xldmVsJ10gPSBsZXZlbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZChsZXZlbFRvU3RyW2xvZ09ialsnbGV2ZWwnXV0sIGxvZ09iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRUb0xvZyhsZXZlbFRvU3RyW2xvZ09ialsnbGV2ZWwnXV0sIGxvZ09iaiwgLi4ucHJvcGVydGllcy5zbGljZSgxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzWydsZXZlbCddID0gbGV2ZWw7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZChsZXZlbFRvU3RyW3Byb3BlcnRpZXNbJ2xldmVsJ11dLCBwcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgdGhpcy5zZW5kVG9Mb2cobGV2ZWxUb1N0cltwcm9wZXJ0aWVzWydsZXZlbCddXSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vVGhpcyBtZXRob2QgZXh0cmFjdHMgc2Vzc2lvbklkIGZyb20gdGhlIGVhY2ggcmVxdWVzdCdzIGNvbnRleHRcbiAgICAvL2FuZCBwbGFjZXMgaXQgaW4gdGhlIGNvbnRleHQuc2Vzc2lvbklkLiBBbGwgb3RoZXIgY29udGV4dCBwcm9wZXJ0aWVzIGFyZSBcbiAgICAvL3BsYWNlZCBpbiBjb250ZXh0LmRhdGEgb2JqZWN0LlxuICAgIHByaXZhdGUgc2V0TG9nc0Ftb3JwaGljQ29udGV4dChvYmplY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCAmJiBPYmplY3Qua2V5cyh0aGlzLmNvbnRleHQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICghb2JqZWN0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICBvYmplY3QuZGF0YSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZGF0YSA9PT0gJ29iamVjdCcpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuY29udGV4dC5zZXNzaW9uO1xuICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhW3RoaXMuX2Ftb3JwaGljQ29udGV4dF0gPSB7IC4uLnRoaXMuY29udGV4dCB9O1xuICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZGF0YVt0aGlzLl9hbW9ycGhpY0NvbnRleHRdICYmIHNlc3Npb25JZCkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVt0aGlzLl9hbW9ycGhpY0NvbnRleHRdLnNlc3Npb24gPSBzZXNzaW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3QuZGF0YVt0aGlzLl9hbW9ycGhpY0NvbnRleHRdLnNlc3Npb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QW1vcnBoaWNDb250ZXh0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7IF9fYW1vcnBoaWNDb250ZXh0OiB7IC4uLnRoaXMuY29udGV4dCB9IH07XG4gICAgfVxuXG4gICAgc3RhcnRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBjb250ZXh0IGFuZCByZXR1cm4gYSBuZXcgb2JqZWN0IHRoYXQgaGFzIHRoZSBwcm9wZXJ0aWVzIG9ubHkgc28gdGhleSBjYW4gYmUgY2xlYXJlZFxuICAgIHNldENvbnRleHRQcm9wcyhjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2UgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29udGV4dCkge1xuICAgICAgICAgICAgcmV2ZXJzZVtwcm9wXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRbcHJvcF0gPSBjb250ZXh0W3Byb3BdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldmVyc2U7XG4gICAgfVxuICAgIC8vIFBhcnNlIGxvZyBsZXZlbHMgc3VjaCBhcyB3YXJuLmFjdGl2aXR5XG4gICAgc2V0TGV2ZWwobGV2ZWwpIHtcbiAgICAgICAgdmFyIGxldmVscyA9IGxldmVsLnNwbGl0KCc7Jyk7XG5cbiAgICAgICAgZm9yICh2YXIgaXggPSAwOyBpeCA8IGxldmVscy5sZW5ndGg7ICsraXgpIHtcbiAgICAgICAgICAgIHZhciBsZXZlbGEgPSBsZXZlbHNbaXhdO1xuXG4gICAgICAgICAgICBpZiAobGV2ZWxhLm1hdGNoKC86LykpIHtcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWxzW2l4XS5tYXRjaCgvKC4qKTooLiopLykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFudWxhckxldmVsc1tSZWdFeHAuJDFdID0gdGhpcy5ncmFudWxhckxldmVsc1tSZWdFeHAuJDFdIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYW51bGFyTGV2ZWxzW1JlZ0V4cC4kMV0gPSBSZWdFeHAuJDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbGV2ZWxzW2l4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbGV2ZWxhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBwcm9wZXJ0aWVzIHJlY29yZGVkIGJ5IHNldENvbnRleHRcbiAgICBjbGVhckNvbnRleHRQcm9wcyhjb250ZXh0VG9DbGVhcikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29udGV4dFRvQ2xlYXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHRbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgbG9nZ2VyIGFuZCBjb3B5IG92ZXIgaXQncyBjb250ZXh0XG4gICAgY3JlYXRlQ2hpbGRMb2dnZXIoY29udGV4dCwgcm9vdFZhbHVlcz8sIGRhdGFWYWx1ZXM/KTogU3VwZXJ0eXBlTG9nZ2VyIHtcbiAgICAgICAgbGV0IGNoaWxkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgcHJvcCBpbiB0aGlzKSB7XG4gICAgICAgICAgICBjaGlsZFtwcm9wXSA9IHRoaXNbcHJvcF07XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5jb250ZXh0ID0gY29udGV4dCB8fCB7fTtcblxuICAgICAgICBmb3IgKGxldCBwcm9wZXIgaW4gdGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICBjaGlsZC5jb250ZXh0W3Byb3Blcl0gPSB0aGlzLmNvbnRleHRbcHJvcGVyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRMb2dnZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyLmNoaWxkTG9nZ2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRMb2dnZXIgPSB0aGlzLl9jbGllbnRMb2dnZXIuY2hpbGRMb2dnZXIocm9vdFZhbHVlcywgZGF0YVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZExvZ2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NsaWVudExvZ2dlci5jaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNoaWxkTG9nZ2VyID0gdGhpcy5fY2xpZW50TG9nZ2VyLmNoaWxkKHsuLi5yb290VmFsdWVzLCBkYXRhOiB7ZGF0YVZhbHVlc319KTtcbiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkTG9nZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkIGFzIFN1cGVydHlwZUxvZ2dlcjsgLy8gYmFkIHByYWN0aWNlIGJ1dCBzaG91bGQgZml4XG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZVRpbWUoZGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBmKDIsIChkYXRlLmdldE1vbnRoKCkgKyAxKSwgJy8nKSArIGYoMiwgZGF0ZS5nZXREYXRlKCksICcvJykgKyBmKDQsIGRhdGUuZ2V0RnVsbFllYXIoKSwgJyAnKSArXG4gICAgICAgICAgICBmKDIsIGRhdGUuZ2V0SG91cnMoKSwgJzonKSArIGYoMiwgZGF0ZS5nZXRNaW51dGVzKCksICc6JykgKyBmKDIsIGRhdGUuZ2V0U2Vjb25kcygpLCAnOicpICtcbiAgICAgICAgICAgIGYoMywgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkgKyAnIEdNVCcgKyAoMCAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwKTtcblxuICAgICAgICBmdW5jdGlvbiBmKHosIGQsIHM/KSB7XG4gICAgICAgICAgICB3aGlsZSAoU3RyaW5nKGQpLmxlbmd0aCA8IHopIHtcbiAgICAgICAgICAgICAgICBkID0gJzAnICsgZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGQgKyAocyB8fCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZUVtcHR5TG9nUHJvcGVydGllcyhsb2dPYmplY3Q6IGFueSkge1xuICAgICAgICBjb25zdCBrZXlzID0gWydjb250ZXh0JywgJ2RhdGEnXTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2dPYmplY3Rba2V5XSAmJiBPYmplY3Qua2V5cyhsb2dPYmplY3Rba2V5XSkubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2dPYmplY3Rba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBjb25zdW1lciBvZiB0aGlzIGNsYXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gbG9nIGxldmVsXG4gICAgICogQHBhcmFtIGxvZ09iamVjdCAtIGZvcm1hdHRlZCBsb2cgb2JqZWN0LCBwYXNzZWQgaW4gZnJvbSBjb25zdW1lclxuICAgICAqIEBwYXJhbSByYXdMb2dEYXRhIC0gdW5mb3JtYXR0ZWQgYW5kIHVucHJvY2Vzc2VkIHZlcnNpb24gb2YgXCJsb2dPYmplY3RcIiBwYXJhbVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZW5kVG9Mb2cobG9nTGV2ZWwsIGxvZ09iamVjdCwgLi4ucmF3TG9nRGF0YSkge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLnNlbmRUb0xvZy5uYW1lO1xuICAgICAgICB0aGlzLmRlbGV0ZUVtcHR5TG9nUHJvcGVydGllcyhsb2dPYmplY3QpO1xuICAgICAgICBpZiAodGhpcy5fY2xpZW50TG9nZ2VyKSB7XG4gICAgICAgICAgICBsZXQgbGV2ZWxGb3JMb2cgPSB0eXBlb2YgbG9nTGV2ZWwgPT09ICdzdHJpbmcnID8gc3RyVG9MZXZlbFtsb2dMZXZlbF0gOiBsb2dMZXZlbDtcbiAgICAgICAgICAgIHN3aXRjaCAobGV2ZWxGb3JMb2cpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5kZWJ1Zyhsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50TG9nZ2VyLmluZm8obG9nT2JqZWN0LCAuLi5yYXdMb2dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci53YXJuKGxvZ09iamVjdCwgLi4ucmF3TG9nRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5lcnJvcihsb2dPYmplY3QsIC4uLnJhd0xvZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudExvZ2dlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IFN1cGVydHlwZUxvZ2dlci5tb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnbWlsZXN0b25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIGxldmVsIHVzZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBsb2dMZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dPYmplY3Q6IGxvZ09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMucHJldHR5UHJpbnQobG9nTGV2ZWwsIGxvZ09iamVjdCkpOyAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuXG4gICAgcHJldHR5UHJpbnQobGV2ZWwsIGpzb24pIHtcbiAgICAgICAgbGV0IHNwbGl0ID0gdGhpcy5zcGxpdChqc29uLCB7dGltZTogMSwgbXNnOiAxLCBsZXZlbDogMSwgbmFtZTogMX0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGVUaW1lKGpzb24udGltZSA/IG5ldyBEYXRlKGpzb24udGltZSkgOiBuZXcgRGF0ZSgpKSArICc6ICcgK1xuICAgICAgICAgICAgbGV2ZWwudG9VcHBlckNhc2UoKSArICc6ICcgK1xuICAgICAgICAgICAgYWRkQ29sb25JZlRva2VuKHNwbGl0WzFdLm5hbWUsICc6ICcpICtcbiAgICAgICAgICAgIGFkZENvbG9uSWZUb2tlbihzcGxpdFsxXS5tc2csICc6ICcpICtcbiAgICAgICAgICAgIHh5KHNwbGl0WzBdKTtcblxuICAgICAgICBmdW5jdGlvbiBhZGRDb2xvbklmVG9rZW4gKHRva2VuLCBjb2xvbkFuZFNwYWNlKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gKyBjb2xvbkFuZFNwYWNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB4eShqKSB7XG4gICAgICAgICAgICB2YXIgc3RyID0gJyc7XG4gICAgICAgICAgICB2YXIgc2VwID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gaikge1xuICAgICAgICAgICAgICAgIHN0ciArPSBzZXAgKyBwcm9wICsgJz0nICsgSlNPTi5zdHJpbmdpZnkoaltwcm9wXSk7XG4gICAgICAgICAgICAgICAgc2VwID0gJyAnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJygnICsgc3RyICsgJyknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNwbGl0KGpzb24sIHByb3BzKTogYW55W10ge1xuICAgICAgICBjb25zdCBhID0ge307XG4gICAgICAgIGNvbnN0IGIgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4ganNvbikge1xuICAgICAgICAgICAgKHByb3BzW3Byb3BdID8gYiA6IGEpW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbYSwgYl07XG4gICAgfVxuXG4gICAgLy8gTG9nZ2luZyBpcyBlbmFibGVkIGlmIGVpdGhlciB0aGUgbGV2ZWwgdGhyZXNob2xkIGlzIG1ldCBvciB0aGUgZ3JhbnVsYXIgbGV2ZWwgbWF0Y2hlc1xuICAgIHByaXZhdGUgaXNFbmFibGVkKGxldmVsLCBvYmopIHtcbiAgICAgICAgbGV2ZWwgPSBzdHJUb0xldmVsW2xldmVsXTtcblxuICAgICAgICBpZiAobGV2ZWwgPj0gc3RyVG9MZXZlbFt0aGlzLmxldmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmFudWxhckxldmVscykge1xuICAgICAgICAgICAgZm9yIChsZXQgbGV2ZWxyIGluIHRoaXMuZ3JhbnVsYXJMZXZlbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqW2xldmVscl0gJiYgb2JqW2xldmVscl0gPT0gdGhpcy5ncmFudWxhckxldmVsc1tsZXZlbHJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iXX0= |
{ | ||
"name": "@haventech/supertype", | ||
"description": "A type system for classical inheritence, mix-ins and composition.", | ||
"version": "6.0.0-beta.7", | ||
"version": "6.0.0-beta.8", | ||
"main": "dist/index.js", | ||
@@ -6,0 +6,0 @@ "types": "dist/index.d.ts", |
@@ -86,4 +86,3 @@ const levelToStr = { 60: 'fatal', 50: 'error', 40: 'warn', 30: 'info', 20: 'debug', 10: 'trace' }; | ||
this.setLogsAmorphicContext(logObj.data); | ||
this.setLogsSessionId(logObj); | ||
this.setLogsAmorphicContext(logObj.context); | ||
@@ -104,12 +103,18 @@ logObj['level'] = level; | ||
private setLogsSessionId(logObj: any) { | ||
if (logObj.data?.__amorphicContext?.session) { | ||
logObj.context.sessionId = logObj.data.__amorphicContext.session; | ||
delete logObj.data.__amorphicContext.session; | ||
} | ||
} | ||
//This method extracts sessionId from the each request's context | ||
//and places it in the context.sessionId. All other context properties are | ||
//placed in context.data object. | ||
private setLogsAmorphicContext(object) { | ||
if (this.context && Object.keys(this.context).length > 0) { | ||
object[this._amorphicContext] = { ...this.context }; | ||
if (!object.data) { | ||
object.data = {}; | ||
} | ||
if (typeof object.data === 'object'){ | ||
const sessionId = this.context.session; | ||
object.data[this._amorphicContext] = { ...this.context }; | ||
if (object.data[this._amorphicContext] && sessionId) { | ||
object.data[this._amorphicContext].session = sessionId; | ||
delete object.data[this._amorphicContext].session; | ||
} | ||
} | ||
} | ||
@@ -116,0 +121,0 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
388634
4716