{"version":3,"sources":["jsdelivr-header.js","/npm/@adt/message-tracker@0.0.1-SNAPSHOT.1/dist/MessageTracker.umd.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCNC,SAAU,EAAQ,GACC,iBAAZ,SAA0C,oBAAX,OAAyB,OAAO,QAAU,IAC9D,mBAAX,QAAyB,OAAO,IAAM,OAAO,GACpD,WACC,IAAI,EAAU,EAAO,eACjB,EAAU,IACd,EAAO,eAAiB,EACxB,EAAQ,WAAa,WAA8C,OAAjC,EAAO,eAAiB,EAAgB,CAAS,CACnF,CALD,EAMD,CATA,CASE,MAAM,WAAe,aA+KvB,OAjKA,SAAS,EAAe,GAEpB,GAAI,MAAO,EACP,MAAM,MAAM,gCAGhB,GAAI,YAAa,IAAM,EACnB,MAAM,MAAM,2CAGhB,IAAI,EAAkB,GAClB,EAAgB,EAAE,QAClB,EAAgB,EAAE,cAAgB,EAAE,cAAgB,IACpD,EAAQ,KAEZ,SAAS,IAEL,IAAI,EAAM,IAAI,KAAS,IAAO,GAE9B,EAAkB,EAAgB,QAAO,SAAU,GAC/C,QAAI,EAAM,EAAI,QAAU,EAAI,WACxB,EAAI,OAAO,EAAI,oBACR,EAIf,KAGoB,OAAS,EACzB,EAAQ,WAAW,EAAc,IAEjC,aAAa,GACb,EAAQ,KAEhB,CAEA,OAAO,OAAO,OAAO,EAAe,UAAW,CAE3C,cAAe,CAAE,IAAK,SAAa,GAC3B,EAAgB,CACpB,EAAG,IAAK,WACJ,OAAO,CACX,GAEJ,SAAU,CAAE,MAsBR,SAAe,GAEX,IAAI,EAAO,KAEP,EAAM,IAAI,SAAQ,SAAU,EAAS,GAErC,IAAI,EAAM,IAAI,KAAS,IAAO,EAE9B,EAAS,OAAO,OAAO,MAEnB,WAAY,QAAuB,IAAX,IACxB,EAAS,EAAE,QAGf,EAAgB,KAAK,CACjB,QAAS,EAAE,QACX,OAAQ,EAAE,OACV,QAAS,EACT,OAAQ,EACR,QAAS,EACT,QAAS,EAAE,QAAU,EAAE,QAAU,EAAK,cACtC,kBAAmB,EAAE,kBACrB,OAAQ,EACR,QAAS,EAAE,SACnB,IAOA,OAJc,OAAV,IACA,EAAQ,WAAW,EAAc,IAG9B,CACX,GAWJ,aAAc,CAEV,MAAO,SAAe,GAElB,IAEI,EACA,EAHA,EAAI,EAAgB,OACpB,GAAK,EAIT,SAAS,EAAQ,GACb,OAAO,SAAU,GACb,EAAW,GACX,GAAK,CACT,CACJ,CAEA,SAAS,EAAO,GACZ,OAAO,SAAU,GACb,EAAU,GACV,GAAK,CACT,CACJ,CAEA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,CAExB,IAAI,EAAM,EAAgB,GAa1B,GAXA,EAAmB,EAAQ,EAAI,SAC/B,EAAkB,EAAO,EAAI,QAE7B,EAAI,OAAO,KAAK,EAAI,QAAS,CACzB,QAAS,EACT,QAAS,EAAI,QACb,QAAS,EACT,OAAQ,EACR,OAAQ,EAAI,UAGL,IAAP,EAAa,CACb,EAAgB,OAAO,EAAG,GAC1B,KACJ,CACJ,CAEA,OAAO,CACX,IAIZ,CAIC","file":"/npm/@adt/message-tracker@0.0.1-SNAPSHOT.1/dist/MessageTracker.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@adt/message-tracker@0.0.1-SNAPSHOT.1/dist/MessageTracker.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(function() {\n\t\tvar current = global.MessageTracker;\n\t\tvar exports = factory();\n\t\tglobal.MessageTracker = exports;\n\t\texports.noConflict = function() { global.MessageTracker = current; return exports; };\n\t})();\n}(this, (function () { 'use strict';\n\n\"use strict\";\n\n/**\n * Tracker constructor.\n * You can use this function with or without \"new\" operator\n *\n * @constructor\n * @param {Object} o\n * @param {Number} o.timeout Message timeout in milliseconds\n * @param {Number} [o.checkInterval=1000] Check interval in milliseconds\n */\n\nfunction MessageTracker(o) {\n\n    if (typeof o === \"undefined\" || o === null) {\n        throw Error(\"Missing configuration object\");\n    }\n\n    if (\"timeout\" in o === false) {\n        throw Error(\"Required param 'timeout' is not defined\");\n    }\n\n    var promiseRegister = [],\n        globalTimeout = o.timeout,\n        checkInterval = o.checkInterval ? o.checkInterval : 1000,\n        timer = null;\n\n    function checkOverdue() {\n\n        var now = new Date() / 1000 | 0; // Get seconds and cut milliseconds\n\n        promiseRegister = promiseRegister.filter(function (val) {\n            if (now - val.regTime > val.timeout) {\n                val.reject(val.timeoutRejectWith);\n                return false;\n            } else {\n                return true;\n            }\n        });\n\n        // Timer is set again only when we have any message\n        if (promiseRegister.length > 0) {\n            timer = setTimeout(checkOverdue, checkInterval);\n        } else {\n            clearTimeout(timer);\n            timer = null;\n        }\n    }\n\n    return Object.create(MessageTracker.prototype, {\n\n        globalTimeout: { set: function set(val) {\n                globalTimeout = val;\n            }, get: function get() {\n                return globalTimeout;\n            } },\n\n        register: { value:\n\n            /**\n             * Registers message in tracker.\n             * Filter function is a function witch should accept one argument as object with following properties<br>\n             *     - message - message passed to matchMessage method<br>\n             *     - current - iterated message from internal message register)<br>\n             *     - resolve - resolving function<br>\n             *     - reject - rejecting function)<br>\n             *     - params - additional params\n             * Filter function is executed on each registered message when you call MessageTracker#matchMessage method\n             * If o.context will be passed then filter function will be executed within passed context\n             *\n             * @param {Object} o\n             * @param {Object} o.message\n             * @param {Function} o.filter Filter function\n             * @param {Number} [o.timeout=this.globalTimeout] Individual timeout in seconds for registered message, if not given, global timeout from constructor will be used\n             * @param {Object} o.timeoutRejectWith Overdue messages will be rejected with this object\n             * @param {Object} [o.params={}] Additional params which will be passed to filter function\n             * @param {Object} [o.context] Context (this) to execute filter function\n             * @return Promise\n             */\n            function value(o) {\n\n                var that = this;\n\n                var ret = new Promise(function (resolve, reject) {\n\n                    var now = new Date() / 1000 | 0,\n                        // Get seconds and cut milliseconds\n                    params = Object.create(null);\n\n                    if (\"params\" in o && typeof params !== \"undefined\") {\n                        params = o.params;\n                    }\n\n                    promiseRegister.push({\n                        message: o.message,\n                        filter: o.filter,\n                        resolve: resolve,\n                        reject: reject,\n                        regTime: now,\n                        timeout: o.timeout ? o.timeout : that.globalTimeout,\n                        timeoutRejectWith: o.timeoutRejectWith,\n                        params: params,\n                        context: o.context });\n                });\n\n                // Start timer if it's not started\n                if (timer === null) {\n                    timer = setTimeout(checkOverdue, checkInterval);\n                }\n\n                return ret;\n            } },\n\n        /**\n         * Match message passed as argument with registered messages\n         * Matching is done by function passed to register method in filter property\n         * Function returns true if message was matched\n         * @see MessageTracker#register\n         * @param {Object} m Message to check\n         * @function\n         * @return Boolean\n         */\n        matchMessage: {\n\n            value: function value(m) {\n\n                var l = promiseRegister.length,\n                    br = false,\n                    rejectForFilter,\n                    resolveForFilter;\n\n                function resolve(resolveFnc) {\n                    return function (res) {\n                        resolveFnc(res);\n                        br = true;\n                    };\n                }\n\n                function reject(rejectFnc) {\n                    return function (err) {\n                        rejectFnc(err);\n                        br = true;\n                    };\n                }\n\n                for (var i = 0; i < l; i++) {\n\n                    var val = promiseRegister[i];\n\n                    resolveForFilter = resolve(val.resolve);\n                    rejectForFilter = reject(val.reject);\n\n                    val.filter.call(val.context, {\n                        message: m,\n                        current: val.message,\n                        resolve: resolveForFilter,\n                        reject: rejectForFilter,\n                        params: val.params\n                    });\n\n                    if (br === true) {\n                        promiseRegister.splice(i, 1);\n                        break;\n                    }\n                }\n\n                return br;\n            }\n        }\n\n    });\n}\n\nreturn MessageTracker;\n\n})));\n"]}