UNPKG

advanced-logger

Version:

Advanced logger module extendable with plugins. Works in nodejs and browsers

803 lines (717 loc) 28.6 kB
module.exports = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "./src/index.ts"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./src/AdvancedLogger.ts": /*!*******************************!*\ !*** ./src/AdvancedLogger.ts ***! \*******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var LogStore_1 = __webpack_require__(/*! ./LogStore */ "./src/LogStore.ts"); /** * Uses different strategies to submit logs to log server via Service facade. */ var AdvancedLogger = /** @class */ (function () { function AdvancedLogger(configuration) { this.configuration = configuration; this.logStore = new LogStore_1.default({ transformations: configuration.transformations }); this.strategy = this.configuration.strategy; this.service = this.configuration.service; // todo Where is it better to subscribe? this.logStore.eventEmitter.on("add", this.onAdd.bind(this)); this.logStore.eventEmitter.on("clear", this.onClear.bind(this)); this.logStore.eventEmitter.on("error", this.onStoreError.bind(this)); this.strategy.eventEmitter.on("send", this.onSend.bind(this)); this.strategy.eventEmitter.on("error", this.onStrategyError.bind(this)); } AdvancedLogger.prototype.log = function (log) { this.logStore.add(log); }; /** * Forces strategy to initiate logs sending */ AdvancedLogger.prototype.sendAllLogs = function () { this.strategy.sendAll(); }; AdvancedLogger.prototype.destroy = function () { this.logStore.destroy(); this.logStore = null; this.strategy.destroy(); this.strategy = null; this.service.destroy(); this.service = null; this.configuration = null; }; AdvancedLogger.prototype.onStoreError = function (error) { console.error(error); }; AdvancedLogger.prototype.onAdd = function (info) { this.strategy.onAdd(info); }; AdvancedLogger.prototype.onClear = function (info) { this.strategy.onClear(); }; AdvancedLogger.prototype.onStrategyError = function (error) { console.error(error); }; AdvancedLogger.prototype.onSend = function () { if (this.logStore.size() > 0) { var logs = this.logStore.getAll(); // We need to clear store as soon as we received request to send all logs this.logStore.clear(); this.service .sendAllLogs(logs) .catch(function (error) { console.log(error); // todo Retry sending logs here or in the service }); } }; return AdvancedLogger; }()); exports.default = AdvancedLogger; /***/ }), /***/ "./src/LogStore.ts": /*!*************************!*\ !*** ./src/LogStore.ts ***! \*************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var events_1 = __webpack_require__(/*! events */ "events"); var throttle = __webpack_require__(/*! lodash/throttle */ "lodash/throttle"); var TransformationEnum_1 = __webpack_require__(/*! ./enums/TransformationEnum */ "./src/enums/TransformationEnum.ts"); var LogUtils_1 = __webpack_require__(/*! ./util/LogUtils */ "./src/util/LogUtils.ts"); var LogStore = /** @class */ (function () { function LogStore(config) { this.groupLeftIndex = -1; this.logs = []; this.eventEmitter = new events_1.EventEmitter(); this.config = config; this.initTransformations(); } LogStore.prototype.add = function (log) { //todo If has a grouping transformation if (this.identityMap) { var id = LogUtils_1.default.getLogIdByFields(log, this.groupableConfig.configuration.groupIdentityFields); if (!this.identityMap.has(id)) { this.logs.push(log); } this.onAddToGroup(log); } else { this.logs.push(log); } this.eventEmitter.emit("add", { logCount: this.size() }); }; LogStore.prototype.clear = function () { this.logs.length = 0; this.eventEmitter.emit("clear", null); }; LogStore.prototype.getAll = function () { if (this.throttledOnGroupFinalize) { this.throttledOnGroupFinalize.flush(); } return this.logs.slice(); }; LogStore.prototype.size = function () { return this.logs.length; }; /*public getRealLogCount(): number { // todo Take into account the "grouped" counter. Optimize calculation speed using caching in add method return this.logs.length; }*/ LogStore.prototype.destroy = function () { if (this.throttledOnGroupFinalize) { this.throttledOnGroupFinalize.cancel(); } this.logs.length = 0; this.eventEmitter.removeAllListeners(); this.eventEmitter = null; }; //todo Should it be moved to a separate class? Come up with a nicer design LogStore.prototype.initTransformations = function () { if (this.config && this.config.transformations) { var groupableConfig = this.config.transformations .find(function (value) { return value.type === TransformationEnum_1.TransformationEnum.RAPID_FIRE_GROUPING; }); if (groupableConfig) { this.groupableConfig = groupableConfig; this.identityMap = new Map(); this.throttledOnGroupFinalize = throttle(this.onGroupFinalize.bind(this), this.groupableConfig.configuration.interval, { trailing: true, leading: false }); //todo Maybe, move to add method this.eventEmitter.on("add", this.throttledOnGroupFinalize); } } }; LogStore.prototype.onAddToGroup = function (log) { var logId = LogUtils_1.default.getLogIdByFields(log, this.groupableConfig.configuration.groupIdentityFields); if (this.identityMap.has(logId)) { var savedCounter = this.identityMap.get(logId); this.identityMap.set(logId, savedCounter + 1); } else { this.identityMap.set(logId, 1); } }; LogStore.prototype.onGroupFinalize = function () { // Apply grouping counters from Map to logs range from left index to the last var len = this.logs.length; if (len > 0) { var groupConfig = this.groupableConfig.configuration; for (var i = this.groupLeftIndex !== -1 ? this.groupLeftIndex : 0; i < len; i++) { var log = this.logs[i]; var id = LogUtils_1.default.getLogIdByFields(log, groupConfig.groupIdentityFields); log[groupConfig.groupFieldName] = this.identityMap.has(id) ? this.identityMap.get(id) : 1; } } this.groupLeftIndex = len > 0 ? len - 1 : -1; this.identityMap.clear(); }; return LogStore; }()); exports.default = LogStore; /***/ }), /***/ "./src/enums/TransformationEnum.ts": /*!*****************************************!*\ !*** ./src/enums/TransformationEnum.ts ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var TransformationEnum; (function (TransformationEnum) { TransformationEnum[TransformationEnum["RAPID_FIRE_GROUPING"] = 0] = "RAPID_FIRE_GROUPING"; })(TransformationEnum = exports.TransformationEnum || (exports.TransformationEnum = {})); /***/ }), /***/ "./src/index.ts": /*!**********************!*\ !*** ./src/index.ts ***! \**********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var AdvancedLogger_1 = __webpack_require__(/*! ./AdvancedLogger */ "./src/AdvancedLogger.ts"); exports.AdvancedLogger = AdvancedLogger_1.default; var TransformationEnum_1 = __webpack_require__(/*! ./enums/TransformationEnum */ "./src/enums/TransformationEnum.ts"); exports.TransformationEnum = TransformationEnum_1.TransformationEnum; var ConsoleService_1 = __webpack_require__(/*! ./service/ConsoleService */ "./src/service/ConsoleService.ts"); var LogglyService_1 = __webpack_require__(/*! ./service/LogglyService */ "./src/service/LogglyService.ts"); var SumologicService_1 = __webpack_require__(/*! ./service/SumologicService */ "./src/service/SumologicService.ts"); var InstantStrategy_1 = __webpack_require__(/*! ./strategy/InstantStrategy */ "./src/strategy/InstantStrategy.ts"); var OnBundleSizeStrategy_1 = __webpack_require__(/*! ./strategy/OnBundleSizeStrategy */ "./src/strategy/OnBundleSizeStrategy.ts"); var OnIntervalStrategy_1 = __webpack_require__(/*! ./strategy/OnIntervalStrategy */ "./src/strategy/OnIntervalStrategy.ts"); var OnRequestStrategy_1 = __webpack_require__(/*! ./strategy/OnRequestStrategy */ "./src/strategy/OnRequestStrategy.ts"); var strategy = { InstantStrategy: InstantStrategy_1.default, OnBundleSizeStrategy: OnBundleSizeStrategy_1.default, OnRequestStrategy: OnRequestStrategy_1.default, OnIntervalStrategy: OnIntervalStrategy_1.default }; exports.strategy = strategy; var service = { SumologicService: SumologicService_1.default, LogglyService: LogglyService_1.default, ConsoleService: ConsoleService_1.default }; exports.service = service; /***/ }), /***/ "./src/service/BaseRemoteService.ts": /*!******************************************!*\ !*** ./src/service/BaseRemoteService.ts ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var fast_safe_stringify_1 = __webpack_require__(/*! fast-safe-stringify */ "fast-safe-stringify"); var http_1 = __webpack_require__(/*! ../util/http */ "./src/util/http.ts"); var LogUtils_1 = __webpack_require__(/*! ../util/LogUtils */ "./src/util/LogUtils.ts"); var BaseRemoteService = /** @class */ (function () { function BaseRemoteService(config) { this.serviceConfig = config.serviceConfig; this.defaultLogConfig = config.defaultLogConfig || {}; } BaseRemoteService.prototype.sendAllLogs = function (logs) { var _this = this; return this.preparePayload(logs) .then(function (payload) { var headers = _this.getHeaders(); if (_this.serviceConfig.retryAttempts && _this.serviceConfig.retryAttempts > 0) { return http_1.default.postRequest(_this.serviceConfig, headers, payload) .catch(function () { return http_1.default.delayedRetry(_this.serviceConfig.retryAttempts, _this.serviceConfig.retryInterval, http_1.default.postRequest.bind(_this, _this.serviceConfig, headers, payload)); }); } else { return http_1.default.postRequest(_this.serviceConfig, headers, payload); } }); }; BaseRemoteService.prototype.preparePayload = function (logs) { var _this = this; var resultList = logs.map(function (log) { var preparedLog = Object.assign({}, _this.defaultLogConfig, log); return LogUtils_1.default.tryJSONStringify(preparedLog) || fast_safe_stringify_1.default(preparedLog); }); return Promise.resolve(resultList.join("\n")); }; BaseRemoteService.prototype.destroy = function () { this.serviceConfig = null; this.defaultLogConfig = null; }; /** * Returns object for headers config * @example * {"Content-Type": "text/plain"} */ BaseRemoteService.prototype.getHeaders = function () { return {}; }; return BaseRemoteService; }()); exports.default = BaseRemoteService; /***/ }), /***/ "./src/service/ConsoleService.ts": /*!***************************************!*\ !*** ./src/service/ConsoleService.ts ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * Console reporting service for debugging purposes */ var ConsoleService = /** @class */ (function () { function ConsoleService() { } ConsoleService.prototype.preparePayload = function (logs) { return Promise.resolve(logs); }; ConsoleService.prototype.sendAllLogs = function (logs) { console.log(logs); return Promise.resolve(); }; ConsoleService.prototype.destroy = function () { //nothing to do here }; return ConsoleService; }()); exports.default = ConsoleService; /***/ }), /***/ "./src/service/LogglyService.ts": /*!**************************************!*\ !*** ./src/service/LogglyService.ts ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); } return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var BaseRemoteService_1 = __webpack_require__(/*! ./BaseRemoteService */ "./src/service/BaseRemoteService.ts"); var LogglyService = /** @class */ (function (_super) { __extends(LogglyService, _super); function LogglyService(config) { return _super.call(this, config) || this; } LogglyService.prototype.getHeaders = function () { return { "Content-Type": "text/plain" }; }; return LogglyService; }(BaseRemoteService_1.default)); exports.default = LogglyService; /***/ }), /***/ "./src/service/SumologicService.ts": /*!*****************************************!*\ !*** ./src/service/SumologicService.ts ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); } return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var BaseRemoteService_1 = __webpack_require__(/*! ./BaseRemoteService */ "./src/service/BaseRemoteService.ts"); var SumologicService = /** @class */ (function (_super) { __extends(SumologicService, _super); function SumologicService(config) { return _super.call(this, config) || this; } SumologicService.prototype.getHeaders = function () { var serviceConfig = this.serviceConfig; return { "Content-Type": "application/json", //todo Optional? "X-Sumo-Category": serviceConfig.sourceCategory, //todo Optional? "X-Sumo-Host": serviceConfig.host, //todo Optional? "X-Sumo-Name": serviceConfig.sourceName }; }; return SumologicService; }(BaseRemoteService_1.default)); exports.default = SumologicService; /***/ }), /***/ "./src/strategy/InstantStrategy.ts": /*!*****************************************!*\ !*** ./src/strategy/InstantStrategy.ts ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var events_1 = __webpack_require__(/*! events */ "events"); var InstantStrategy = /** @class */ (function () { function InstantStrategy() { this.eventEmitter = new events_1.EventEmitter(); } InstantStrategy.prototype.onAdd = function (info) { this.eventEmitter.emit("send"); //console.log("InstantStrategy#sent"); }; InstantStrategy.prototype.onClear = function () { // Ignore log list change //console.log("InstantStrategy#cleared"); }; InstantStrategy.prototype.sendAll = function (info) { // This strategy sends all logs separately }; InstantStrategy.prototype.destroy = function () { this.eventEmitter.removeAllListeners(); this.eventEmitter = null; }; return InstantStrategy; }()); exports.default = InstantStrategy; /***/ }), /***/ "./src/strategy/OnBundleSizeStrategy.ts": /*!**********************************************!*\ !*** ./src/strategy/OnBundleSizeStrategy.ts ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var events_1 = __webpack_require__(/*! events */ "events"); var OnBundleSizeStrategy = /** @class */ (function () { function OnBundleSizeStrategy(config) { /** * @type {number} */ this.MAX_BUNDLE_SIZE = 100; this.eventEmitter = new events_1.EventEmitter(); if (config.maxBundle) { this.MAX_BUNDLE_SIZE = config.maxBundle; } } OnBundleSizeStrategy.prototype.onAdd = function (info) { if (info && info.logCount >= this.MAX_BUNDLE_SIZE) { this.eventEmitter.emit("send"); } else { //console.log("Not enough logs so far"); } }; OnBundleSizeStrategy.prototype.onClear = function () { // Ignore log list change //console.log("OnBundleSizeStrategy#cleared"); }; OnBundleSizeStrategy.prototype.sendAll = function (info) { this.eventEmitter.emit("send"); }; OnBundleSizeStrategy.prototype.destroy = function () { this.eventEmitter.removeAllListeners(); this.eventEmitter = null; }; return OnBundleSizeStrategy; }()); exports.default = OnBundleSizeStrategy; /***/ }), /***/ "./src/strategy/OnIntervalStrategy.ts": /*!********************************************!*\ !*** ./src/strategy/OnIntervalStrategy.ts ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var events_1 = __webpack_require__(/*! events */ "events"); var debounce = __webpack_require__(/*! lodash/debounce */ "lodash/debounce"); var OnIntervalStrategy = /** @class */ (function () { function OnIntervalStrategy(config) { /** * @type {number} */ this.SEND_INTERVAL = 15000; this.eventEmitter = new events_1.EventEmitter(); if (config.interval) { this.SEND_INTERVAL = config.interval; } this.debouncedSend = debounce(this.send.bind(this), this.SEND_INTERVAL); } OnIntervalStrategy.prototype.onAdd = function (info) { if (info && info.logCount > 0) { this.debouncedSend(); } }; OnIntervalStrategy.prototype.onClear = function () { // Ignore log list change //console.log("OnIntervalStrategy#cleared"); }; OnIntervalStrategy.prototype.sendAll = function (info) { this.eventEmitter.emit("send"); }; OnIntervalStrategy.prototype.destroy = function () { this.eventEmitter.removeAllListeners(); this.eventEmitter = null; }; OnIntervalStrategy.prototype.send = function () { this.eventEmitter.emit("send"); }; return OnIntervalStrategy; }()); exports.default = OnIntervalStrategy; /***/ }), /***/ "./src/strategy/OnRequestStrategy.ts": /*!*******************************************!*\ !*** ./src/strategy/OnRequestStrategy.ts ***! \*******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var events_1 = __webpack_require__(/*! events */ "events"); var OnRequestStrategy = /** @class */ (function () { function OnRequestStrategy() { this.eventEmitter = new events_1.EventEmitter(); } OnRequestStrategy.prototype.onAdd = function (info) { // Ignore log list change }; OnRequestStrategy.prototype.onClear = function () { // Ignore log list change //console.log("OnRequestStrategy#cleared"); }; OnRequestStrategy.prototype.sendAll = function (info) { this.eventEmitter.emit("send"); }; OnRequestStrategy.prototype.destroy = function () { this.eventEmitter.removeAllListeners(); this.eventEmitter = null; }; return OnRequestStrategy; }()); exports.default = OnRequestStrategy; /***/ }), /***/ "./src/util/LogUtils.ts": /*!******************************!*\ !*** ./src/util/LogUtils.ts ***! \******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DELIMETER = "-"; exports.default = { getLogIdByFields: function (log, fields) { return fields.map(function (field) { return "" + field + DELIMETER + log[field]; }).join(DELIMETER); }, /** * It is necessary to convert objects safely, otherwise we can lost the whole log bundle */ tryJSONStringify: function (obj) { try { return JSON.stringify(obj); } catch (_) { //ignore the error return ""; } } }; /***/ }), /***/ "./src/util/http.ts": /*!**************************!*\ !*** ./src/util/http.ts ***! \**************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var fetch = __webpack_require__(/*! node-fetch */ "node-fetch"); var http = { postRequest: function (serviceConfig, headers, payload) { return fetch(serviceConfig.url, { method: serviceConfig.method, body: payload, headers: headers }); }, delayedRetry: function (retries, delay, fn) { if (delay === void 0) { delay = 0; } return new Promise(function (resolve, reject) { setTimeout(function () { return fn().then(resolve).catch(reject); }, delay); }) .catch(function (error) { return retries > 1 ? http.delayedRetry(retries - 1, delay, fn) : Promise.reject(error); }); } }; exports.default = http; /***/ }), /***/ "events": /*!*************************!*\ !*** external "events" ***! \*************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = require("events"); /***/ }), /***/ "fast-safe-stringify": /*!**************************************!*\ !*** external "fast-safe-stringify" ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = require("fast-safe-stringify"); /***/ }), /***/ "lodash/debounce": /*!**********************************!*\ !*** external "lodash/debounce" ***! \**********************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = require("lodash/debounce"); /***/ }), /***/ "lodash/throttle": /*!**********************************!*\ !*** external "lodash/throttle" ***! \**********************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = require("lodash/throttle"); /***/ }), /***/ "node-fetch": /*!*****************************!*\ !*** external "node-fetch" ***! \*****************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = require("node-fetch"); /***/ }) /******/ }); //# sourceMappingURL=advanced-logger.node.js.map