{"version":3,"sources":["jsdelivr-header.js","/npm/devlabs-tsbase@1.0.23/dist/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCNA,SAA2C,EAAM,GAChD,GAAsB,iBAAZ,SAA0C,iBAAX,OACxC,OAAO,QAAU,SACb,GAAqB,mBAAX,QAAyB,OAAO,IAC9C,OAAO,GAAI,OACP,CACJ,IAAI,EAAI,IACR,IAAI,IAAI,KAAK,GAAuB,iBAAZ,QAAuB,QAAU,GAAM,GAAK,EAAE,EACvE,CACA,CATD,CASG,QAAQ,WACX,OAAgB,SAAU,GAEhB,IAAI,EAAmB,CAAC,EAGxB,SAAS,EAAoB,GAG5B,GAAG,EAAiB,GACnB,OAAO,EAAiB,GAAU,QAGnC,IAAI,EAAS,EAAiB,GAAY,CACzC,EAAG,EACH,GAAG,EACH,QAAS,CAAC,GAUX,OANA,EAAQ,GAAU,KAAK,EAAO,QAAS,EAAQ,EAAO,QAAS,GAG/D,EAAO,GAAI,EAGJ,EAAO,OACf,CAyDA,OArDA,EAAoB,EAAI,EAGxB,EAAoB,EAAI,EAGxB,EAAoB,EAAI,SAAS,EAAS,EAAM,GAC3C,EAAoB,EAAE,EAAS,IAClC,OAAO,eAAe,EAAS,EAAM,CAAE,YAAY,EAAM,IAAK,GAEhE,EAGA,EAAoB,EAAI,SAAS,GACX,oBAAX,QAA0B,OAAO,aAC1C,OAAO,eAAe,EAAS,OAAO,YAAa,CAAE,MAAO,WAE7D,OAAO,eAAe,EAAS,aAAc,CAAE,OAAO,GACvD,EAOA,EAAoB,EAAI,SAAS,EAAO,GAEvC,GADU,EAAP,IAAU,EAAQ,EAAoB,IAC/B,EAAP,EAAU,OAAO,EACpB,GAAW,EAAP,GAA8B,iBAAV,GAAsB,GAAS,EAAM,WAAY,OAAO,EAChF,IAAI,EAAK,OAAO,OAAO,MAGvB,GAFA,EAAoB,EAAE,GACtB,OAAO,eAAe,EAAI,UAAW,CAAE,YAAY,EAAM,MAAO,IACtD,EAAP,GAA4B,iBAAT,EAAmB,IAAI,IAAI,KAAO,EAAO,EAAoB,EAAE,EAAI,EAAK,SAAS,GAAO,OAAO,EAAM,EAAM,EAAE,KAAK,KAAM,IAC9I,OAAO,CACR,EAGA,EAAoB,EAAI,SAAS,GAChC,IAAI,EAAS,GAAU,EAAO,WAC7B,WAAwB,OAAO,EAAgB,OAAG,EAClD,WAA8B,OAAO,CAAQ,EAE9C,OADA,EAAoB,EAAE,EAAQ,IAAK,GAC5B,CACR,EAGA,EAAoB,EAAI,SAAS,EAAQ,GAAY,OAAO,OAAO,UAAU,eAAe,KAAK,EAAQ,EAAW,EAGpH,EAAoB,EAAI,GAIjB,EAAoB,EAAoB,EAAI,iBACnD,CApFM,CAsFN,CAEJ;;;;+BAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,wTAEE,EAED;;;;gCAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,0jKAEE,EAED;;;;gCAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,y6aAEE,EAED;;;;uGAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,kgGAEE,EAED;;;;8BAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,y/jBAEE,EAED;;;;wOAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,8jFAEE,EAED;;;;8LAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,4+IAEE,EAED;;;;mCAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,mUAEE,EAED;;;;kEAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,ozRAEE,EAED;;;;+BAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,q/wBAEE,EAED;;;;+BAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,whCAEE,EAED;;;;+BAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,41BAEE,EAED;;;;8BAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,41SAEE,EAED;;;;iCAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,qiIAEE,EAED;;;;8BAKA,SAAU,OAAQ,oBAAqB,qBAE7C,aACA,KAAK,u0FAEE,GAGP","file":"/npm/devlabs-tsbase@1.0.23/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/devlabs-tsbase@1.0.23/dist/index.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 webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./src/consts.ts\":\n/*!***********************!*\\\n  !*** ./src/consts.ts ***!\n  \\***********************/\n/*! exports provided: consts */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"consts\\\", function() { return consts; });\\nvar consts;\\n(function (consts) {\\n    consts.autoIncIdStart = 100000;\\n})(consts || (consts = {}));\\n\\n\\n//# sourceURL=webpack:///./src/consts.ts?\");\n\n/***/ }),\n\n/***/ \"./src/entry/entry.ts\":\n/*!****************************!*\\\n  !*** ./src/entry/entry.ts ***!\n  \\****************************/\n/*! exports provided: tsEntry */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsEntry\\\", function() { return tsEntry; });\\n/* harmony import */ var _logger_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../logger/logger */ \\\"./src/logger/logger.ts\\\");\\n\\n/**\\n * 基础对象模块\\n */\\nvar tsEntry;\\n(function (tsEntry) {\\n    /**\\n     * 基础对象\\n     */\\n    class Entry {\\n        constructor(id = 0, name = '', typ = 0) {\\n            this._entryName = 'Entry';\\n            this._id = id;\\n            this._name = name;\\n            this._typ = typ;\\n        }\\n        get entryName() {\\n            return this._entryName;\\n        }\\n        set entryName(value) {\\n            this._entryName = value;\\n        }\\n        get id() {\\n            return this._id;\\n        }\\n        set id(value) {\\n            this._id = value;\\n        }\\n        get name() {\\n            return this._name;\\n        }\\n        set name(value) {\\n            this._name = value;\\n        }\\n        get typ() {\\n            return this._typ;\\n        }\\n        set typ(value) {\\n            this._typ = value;\\n        }\\n        get fullName() {\\n            return `${this._entryName}[${this._id},${this._name},${this._typ}]`;\\n        }\\n        trace(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.trace(this.fullName, message, ...optionalParams);\\n        }\\n        debug(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debug(this.fullName, message, ...optionalParams);\\n        }\\n        info(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.info(this.fullName, message, ...optionalParams);\\n        }\\n        warn(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warn(this.fullName, message, ...optionalParams);\\n        }\\n        error(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.error(this.fullName, message, ...optionalParams);\\n        }\\n        tracef(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.tracef(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        debugf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        infof(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.infof(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        warnf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        errorf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        traceStack(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.traceStack(this.fullName, message, ...optionalParams);\\n        }\\n        debugStack(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugStack(this.fullName, message, ...optionalParams);\\n        }\\n        infoStack(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.infoStack(this.fullName, message, ...optionalParams);\\n        }\\n        warnStack(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnStack(this.fullName, message, ...optionalParams);\\n        }\\n        errorStack(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorStack(this.fullName, message, ...optionalParams);\\n        }\\n        traceStackf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.traceStackf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        debugStackf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugStackf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        infoStackf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.infoStackf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        warnStackf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnStackf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n        errorStackf(message, ...optionalParams) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorStackf(this.fullName + ' ' + message, ...optionalParams);\\n        }\\n    }\\n    tsEntry.Entry = Entry;\\n})(tsEntry || (tsEntry = {}));\\n\\n\\n//# sourceURL=webpack:///./src/entry/entry.ts?\");\n\n/***/ }),\n\n/***/ \"./src/event/event.ts\":\n/*!****************************!*\\\n  !*** ./src/event/event.ts ***!\n  \\****************************/\n/*! exports provided: tsEvent */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsEvent\\\", function() { return tsEvent; });\\n/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../consts */ \\\"./src/consts.ts\\\");\\n/* harmony import */ var _entry_entry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../entry/entry */ \\\"./src/entry/entry.ts\\\");\\n/* harmony import */ var _logger_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../logger/logger */ \\\"./src/logger/logger.ts\\\");\\n/* harmony import */ var _utils_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/string */ \\\"./src/utils/string.ts\\\");\\n\\n\\n\\n\\n/**\\n * 事件模块\\n */\\nvar tsEvent;\\n(function (tsEvent) {\\n    /**\\n     * 事件对象\\n     */\\n    class Event extends _entry_entry__WEBPACK_IMPORTED_MODULE_1__[\\\"tsEntry\\\"].Entry {\\n        constructor(id, name, handler, caller = null, limit = -1) {\\n            super(id, name, 0);\\n            this.handler = null;\\n            this.caller = null;\\n            this._execLimit = -1;\\n            this._execCount = 0;\\n            this.entryName = 'Event';\\n            this.handler = handler;\\n            this.caller = caller;\\n            this._execLimit = limit;\\n        }\\n        get execLimit() {\\n            return this._execLimit;\\n        }\\n        get execCount() {\\n            return this._execCount;\\n        }\\n        destroy() {\\n            this.handler = null;\\n            this.caller = null;\\n        }\\n        equal(handler, caller) {\\n            return handler == this.handler && caller == this.caller;\\n        }\\n        async _dispatch(...args) {\\n            this.handler(this, this.caller, ...args);\\n        }\\n        dispatch(...args) {\\n            if (!this.handler) {\\n                return false;\\n            }\\n            this._dispatch(...args);\\n            this._execCount++;\\n            return true;\\n        }\\n        checkLimit() {\\n            if (this.execLimit == -1) {\\n                return false;\\n            }\\n            return this.execCount >= this.execLimit;\\n        }\\n    }\\n    tsEvent.Event = Event;\\n    class EventManager {\\n        constructor(name) {\\n            this._name = '';\\n            this.autoIncIdStart = 0;\\n            this.nameEventsMap = null;\\n            this._name = name;\\n            this.autoIncIdStart = _consts__WEBPACK_IMPORTED_MODULE_0__[\\\"consts\\\"].autoIncIdStart;\\n            this.nameEventsMap = new Map();\\n        }\\n        get name() {\\n            return this._name;\\n        }\\n        set name(value) {\\n            this._name = value;\\n        }\\n        get fullName() {\\n            return `EventManager[${this._name}]`;\\n        }\\n        has(name, handler, caller) {\\n            let events = this.nameEventsMap.get(name);\\n            if (events) {\\n                let len = events.length;\\n                for (let index = 0; index < len; index++) {\\n                    const element = events[index];\\n                    if (element.equal(handler, caller)) {\\n                        return true;\\n                    }\\n                }\\n            }\\n            return false;\\n        }\\n        get(name, id) {\\n            let events = this.nameEventsMap.get(name);\\n            if (events) {\\n                let len = events.length;\\n                for (let index = 0; index < len; index++) {\\n                    const element = events[index];\\n                    if (element.id == id) {\\n                        return element;\\n                    }\\n                }\\n            }\\n            return null;\\n        }\\n        add(name, handler, caller = null, limit = -1) {\\n            if (this.has(name, handler, caller)) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.errorf(this.fullName + ' addEventListener {0} err:duplicate add', name);\\n                return null;\\n            }\\n            let id = this.autoIncIdStart;\\n            this.autoIncIdStart++;\\n            let event = new Event(id, name, handler, caller, limit);\\n            if (this.nameEventsMap.has(name)) {\\n                this.nameEventsMap.get(name).push(event);\\n            }\\n            else {\\n                this.nameEventsMap.set(name, [event]);\\n            }\\n            event.entryName = _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format('{0}[{1}]', event.entryName, this.name);\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.debugf(this.fullName + ' addEventListener {0} size:{1}', event.fullName, this.nameEventsMap.get(name).length);\\n            return event;\\n        }\\n        del(event) {\\n            if (!event || !event.id) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.warnf(this.fullName + ' delEventListener {0} err:invalid instance', event);\\n                return;\\n            }\\n            let events = this.nameEventsMap.get(event.name);\\n            if (events) {\\n                let len = events.length;\\n                for (let index = 0; index < len; index++) {\\n                    const element = events[index];\\n                    if (element.id == event.id) {\\n                        element.destroy();\\n                        events.splice(index, 1);\\n                        _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.debugf(this.fullName + ' delEventListener {0} size:{1}', event.fullName, events.length);\\n                        return true;\\n                    }\\n                }\\n            }\\n            return false;\\n        }\\n        delById(name, id) {\\n            let event = this.get(name, id);\\n            return this.del(event);\\n        }\\n        clear(name) {\\n            let arr = this.nameEventsMap.get(name);\\n            let len = arr ? arr.length : 0;\\n            for (let index = 0; index < len; index++) {\\n                arr[index].destroy();\\n            }\\n            return this.nameEventsMap.delete(name);\\n        }\\n        dispatch(name, ...args) {\\n            let events = this.nameEventsMap.get(name);\\n            if (!events || events.length == 0) {\\n                return;\\n            }\\n            let begin = Date.now();\\n            // TODO：这里先用拷贝的方案解决事件回调中删除的问题\\n            const eventsCopy = Object.assign([], events);\\n            let len = eventsCopy.length;\\n            let dels = [];\\n            for (let index = 0; index < len; index++) {\\n                const element = eventsCopy[index];\\n                element.dispatch(...args);\\n                if (element.checkLimit()) {\\n                    dels.push(element);\\n                }\\n            }\\n            len = dels.length;\\n            for (let index = 0; index < len; index++) {\\n                const element = dels[index];\\n                this.del(element);\\n            }\\n            let use = Date.now() - begin;\\n            if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].ExecTimeLevel.Error) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.errorf(this.fullName + ' dispatchEvent {0} exec:{1} dels:{2} use:{3}', name, eventsCopy.length, len, use);\\n            }\\n            else if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].ExecTimeLevel.Warn) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.warnf(this.fullName + ' dispatchEvent {0} exec:{1} dels:{2} use:{3}', name, eventsCopy.length, len, use);\\n            }\\n            else {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.tracef(this.fullName + ' dispatchEvent {0} exec:{1} dels:{2} use:{3}', name, eventsCopy.length, len, use);\\n            }\\n        }\\n        getStatistics() {\\n            let mgrName = this.name;\\n            let arr = [];\\n            this.nameEventsMap.forEach(function (events, key) {\\n                if (events.length == 0) {\\n                    return;\\n                }\\n                let count = 0;\\n                events.forEach(function (value, index) {\\n                    if (value.execCount > count) {\\n                        count = value.execCount;\\n                    }\\n                });\\n                let str = _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format('{0} 名称:{1} 数量:{2} 执行计数:{3}', mgrName, key, events.length, count);\\n                arr.push(str);\\n            });\\n            return arr;\\n        }\\n    }\\n    tsEvent.EventManager = EventManager;\\n    /**\\n     * 事件管理实例容器\\n     */\\n    const eventMgrs = new Array();\\n    /**\\n     * 全局事件管理实例\\n     */\\n    const globalEventMgr = new EventManager('Global');\\n    /**\\n     * 添加事件管理实例\\n     * @param mgr EventManager实例\\n     */\\n    function addEventMgr(mgr) {\\n        for (let index = 0; index < eventMgrs.length; index++) {\\n            if (eventMgrs[index].name == mgr.name) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"tsLog\\\"].Logger.errorStackf('tsEvent addEventMgr {0}  err:duplicate add', mgr.name);\\n                return false;\\n            }\\n        }\\n        eventMgrs.push(mgr);\\n        return true;\\n    }\\n    tsEvent.addEventMgr = addEventMgr;\\n    /**\\n     * 删除事件管理实例\\n     * @param mgr EventManager实例\\n     * @returns 成功：true 失败：false\\n     */\\n    function delEventMgr(mgr) {\\n        for (let index = 0; index < eventMgrs.length; index++) {\\n            if (eventMgrs[index].name == mgr.name) {\\n                eventMgrs.splice(index, 1);\\n                return true;\\n            }\\n        }\\n        return false;\\n    }\\n    tsEvent.delEventMgr = delEventMgr;\\n    /**\\n     * 通过名称删除事件管理实例\\n     * @param name EventManager实例名称\\n     * @returns 成功：true 失败：false\\n     */\\n    function delEventMgrByName(name) {\\n        for (let index = 0; index < eventMgrs.length; index++) {\\n            if (eventMgrs[index].name == name) {\\n                eventMgrs.splice(index, 1);\\n                return true;\\n            }\\n        }\\n        return false;\\n    }\\n    tsEvent.delEventMgrByName = delEventMgrByName;\\n    /**\\n     * 添加全局事件监听\\n     * @param name 名称\\n     * @param handler 事件处理\\n     * @param caller 调用者（回传参数，可用于解决this指针问题）\\n     * @param limit 执行次数（次数达到自动删除，默认-1不限次数）\\n     * @returns Event实例\\n     */\\n    function addEventListener(name, handler, caller = null, limit = -1) {\\n        return globalEventMgr.add(name, handler, caller, limit);\\n    }\\n    tsEvent.addEventListener = addEventListener;\\n    /**\\n     * 删除全局事件监听\\n     * @param event Event实例\\n     * @returns 成功：true 失败：false\\n     */\\n    function delEventListener(event) {\\n        return globalEventMgr.del(event);\\n    }\\n    tsEvent.delEventListener = delEventListener;\\n    /**\\n     * 通过唯一标识删除全局事件监听\\n     * @param name 名称\\n     * @param id 唯一标识\\n     * @returns 成功：true 失败：false\\n     */\\n    function delEventListenerById(name, id) {\\n        return globalEventMgr.delById(name, id);\\n    }\\n    tsEvent.delEventListenerById = delEventListenerById;\\n    /**\\n     * 清理指定名称全局事件监听\\n     * @param name 名称\\n     * @returns 成功：true 失败：false\\n     */\\n    function clearEventListener(name) {\\n        return globalEventMgr.clear(name);\\n    }\\n    tsEvent.clearEventListener = clearEventListener;\\n    /**\\n     * 派发全局事件\\n     * @param name 名称\\n     * @param args 事件参数列表\\n     * @returns\\n     */\\n    function dispatchEvent(name, ...args) {\\n        return globalEventMgr.dispatch(name, ...args);\\n    }\\n    tsEvent.dispatchEvent = dispatchEvent;\\n    /**\\n     * 获取统计信息(全局+EventEntry实例)\\n     * @returns [\\\"名称:Req_User_Info 数量:1 执行计数:0\\\", ...]\\n     */\\n    function getStatistics() {\\n        let arr = globalEventMgr.getStatistics();\\n        eventMgrs.forEach(function (mgr, index) {\\n            arr = arr.concat(mgr.getStatistics());\\n        });\\n        return arr;\\n    }\\n    tsEvent.getStatistics = getStatistics;\\n    /**\\n     * 局部事件管理基类\\n     */\\n    class EventEntry extends _entry_entry__WEBPACK_IMPORTED_MODULE_1__[\\\"tsEntry\\\"].Entry {\\n        constructor(id = 0, name = '', typ = 0) {\\n            super(id, name, typ);\\n            this.eventMgr = null;\\n            this.entryName = 'EventEntry';\\n            this.eventMgr = new EventManager(name);\\n            addEventMgr(this.eventMgr);\\n        }\\n        /**\\n         * 添加事件监听\\n         * @param name 名称\\n         * @param handler 回调\\n         * @param caller 调用者（回传参数，可用于解决this指针问题）\\n         * @param limit 执行次数（次数达到自动删除，默认-1不限次数）\\n         * @returns Event实例\\n         */\\n        addEventListener(name, handler, caller = null, limit = -1) {\\n            return this.eventMgr.add(name, handler, caller, limit);\\n        }\\n        /**\\n         * 删除事件监听\\n         * @param event Event实例\\n         * @returns 成功：true 失败：false\\n         */\\n        delEventListener(event) {\\n            return this.eventMgr.del(event);\\n        }\\n        /**\\n         * 通过唯一标识删除事件监听\\n         * @param name 名称\\n         * @param id 唯一标识\\n         * @returns 成功：true 失败：false\\n         */\\n        delEventListenerById(name, id) {\\n            return this.eventMgr.delById(name, id);\\n        }\\n        /**\\n         * 清理指定名称事件监听\\n         * @param name 名称\\n         * @returns 成功：true 失败：false\\n         */\\n        clearEventListener(name) {\\n            return this.eventMgr.clear(name);\\n        }\\n        /**\\n         * 派发事件\\n         * @param name 名称\\n         * @param args 事件参数列表\\n         * @returns\\n         */\\n        dispatchEvent(name, ...args) {\\n            return this.eventMgr.dispatch(name, ...args);\\n        }\\n    }\\n    tsEvent.EventEntry = EventEntry;\\n})(tsEvent || (tsEvent = {}));\\n\\n\\n//# sourceURL=webpack:///./src/event/event.ts?\");\n\n/***/ }),\n\n/***/ \"./src/index.ts\":\n/*!**********************!*\\\n  !*** ./src/index.ts ***!\n  \\**********************/\n/*! exports provided: tsString, tsDate, tsJson, tsUrl, tsMd5, tsLog, tsEntry, tsTime, tsEvent, tsNet */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _utils_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/string */ \\\"./src/utils/string.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsString\\\", function() { return _utils_string__WEBPACK_IMPORTED_MODULE_0__[\\\"tsString\\\"]; });\\n\\n/* harmony import */ var _utils_date__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/date */ \\\"./src/utils/date.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsDate\\\", function() { return _utils_date__WEBPACK_IMPORTED_MODULE_1__[\\\"tsDate\\\"]; });\\n\\n/* harmony import */ var _utils_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/json */ \\\"./src/utils/json.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsJson\\\", function() { return _utils_json__WEBPACK_IMPORTED_MODULE_2__[\\\"tsJson\\\"]; });\\n\\n/* harmony import */ var _utils_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/url */ \\\"./src/utils/url.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsUrl\\\", function() { return _utils_url__WEBPACK_IMPORTED_MODULE_3__[\\\"tsUrl\\\"]; });\\n\\n/* harmony import */ var _utils_md5__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/md5 */ \\\"./src/utils/md5.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsMd5\\\", function() { return _utils_md5__WEBPACK_IMPORTED_MODULE_4__[\\\"tsMd5\\\"]; });\\n\\n/* harmony import */ var _logger_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./logger/logger */ \\\"./src/logger/logger.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsLog\\\", function() { return _logger_logger__WEBPACK_IMPORTED_MODULE_5__[\\\"tsLog\\\"]; });\\n\\n/* harmony import */ var _entry_entry__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./entry/entry */ \\\"./src/entry/entry.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsEntry\\\", function() { return _entry_entry__WEBPACK_IMPORTED_MODULE_6__[\\\"tsEntry\\\"]; });\\n\\n/* harmony import */ var _time_time__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./time/time */ \\\"./src/time/time.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsTime\\\", function() { return _time_time__WEBPACK_IMPORTED_MODULE_7__[\\\"tsTime\\\"]; });\\n\\n/* harmony import */ var _event_event__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./event/event */ \\\"./src/event/event.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"tsEvent\\\", function() { return _event_event__WEBPACK_IMPORTED_MODULE_8__[\\\"tsEvent\\\"]; });\\n\\n/* harmony import */ var _net_index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./net/index */ \\\"./src/net/index.ts\\\");\\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \\\"tsNet\\\", function() { return _net_index__WEBPACK_IMPORTED_MODULE_9__; });\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n//# sourceURL=webpack:///./src/index.ts?\");\n\n/***/ }),\n\n/***/ \"./src/logger/logger.ts\":\n/*!******************************!*\\\n  !*** ./src/logger/logger.ts ***!\n  \\******************************/\n/*! exports provided: tsLog */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsLog\\\", function() { return tsLog; });\\n/* harmony import */ var _utils_md5__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/md5 */ \\\"./src/utils/md5.ts\\\");\\n/* harmony import */ var _time_time__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../time/time */ \\\"./src/time/time.ts\\\");\\n/* harmony import */ var _utils_date__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/date */ \\\"./src/utils/date.ts\\\");\\n/* harmony import */ var _utils_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/string */ \\\"./src/utils/string.ts\\\");\\n\\n\\n\\n\\n/**\\n * 日志模块\\n */\\nvar tsLog;\\n(function (tsLog) {\\n    /**\\n     * 日志级别\\n     */\\n    let Level;\\n    (function (Level) {\\n        Level[Level[\\\"None\\\"] = 0] = \\\"None\\\";\\n        Level[Level[\\\"Error\\\"] = 1] = \\\"Error\\\";\\n        Level[Level[\\\"Warn\\\"] = 2] = \\\"Warn\\\";\\n        Level[Level[\\\"Info\\\"] = 3] = \\\"Info\\\";\\n        Level[Level[\\\"Debug\\\"] = 4] = \\\"Debug\\\";\\n        Level[Level[\\\"Trace\\\"] = 5] = \\\"Trace\\\";\\n    })(Level = tsLog.Level || (tsLog.Level = {}));\\n    let ExecTimeLevel;\\n    (function (ExecTimeLevel) {\\n        ExecTimeLevel[ExecTimeLevel[\\\"Warn\\\"] = 20] = \\\"Warn\\\";\\n        ExecTimeLevel[ExecTimeLevel[\\\"Error\\\"] = 50] = \\\"Error\\\";\\n    })(ExecTimeLevel = tsLog.ExecTimeLevel || (tsLog.ExecTimeLevel = {}));\\n    /**\\n     * 日志记录器\\n     */\\n    class Logger {\\n        /**\\n         * 设置日志记录器\\n         * @param options InitOptions\\n         */\\n        static setOptions(options) {\\n            this.options = options;\\n            if (!_utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].isNullOrEmpty(this.options.tag)) {\\n                for (let index = 0; index < this.levelTags.length; index++) {\\n                    this.levelTags[index] = this.levelTags[index] + ' ' + this.options.tag;\\n                }\\n            }\\n        }\\n        /**\\n         * 追加关键字内容\\n         * @param content\\n         */\\n        static appendTag(append) {\\n            if (!_utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].isNullOrEmpty(append)) {\\n                for (let index = 0; index < this.levelTags.length; index++) {\\n                    this.levelTags[index] = this.levelTags[index] + append;\\n                }\\n            }\\n        }\\n        /**\\n         * 设置补充关键字\\n         * @param content\\n         */\\n        static setAddTag(content) {\\n            this.options.addTag = content;\\n        }\\n        static checkLevel(level) {\\n            return this.options.level >= level;\\n        }\\n        static toString(...optionalParams) {\\n            if (!optionalParams || optionalParams.length == 0) {\\n                return '';\\n            }\\n            let str = '';\\n            for (let index = 0; index < optionalParams.length; index++) {\\n                const element = optionalParams[index];\\n                str = str + ' ' + _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].toString(element);\\n            }\\n            return str;\\n        }\\n        static report(level, content, contentNoDate) {\\n            if (this.options.reportLevel < level || !this.options.reportCaller) {\\n                return;\\n            }\\n            const hash = _utils_md5__WEBPACK_IMPORTED_MODULE_0__[\\\"tsMd5\\\"].hash(contentNoDate);\\n            if (this.reportFilter.get(hash)) {\\n                return;\\n            }\\n            this.reportFilter.set(hash, true);\\n            try {\\n                this.options.reportCaller(content);\\n            }\\n            catch (error) {\\n                console.log(content);\\n            }\\n        }\\n        static log(level, message, ...optionalParams) {\\n            if (!this.checkLevel(level)) {\\n                return;\\n            }\\n            let content = this.levelTags[level] + this.options.addTag + ' ' + _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].toString(message);\\n            if (this.options.dateTag) {\\n                content = '[' + _utils_date__WEBPACK_IMPORTED_MODULE_2__[\\\"tsDate\\\"].toLocaleStringMS() + '] ' + content;\\n            }\\n            if (this.options.substitute || this.options.reportCaller) {\\n                let contentNew = content;\\n                if (optionalParams.length > 0) {\\n                    contentNew = content + ' ' + this.toString(...optionalParams);\\n                }\\n                this.report(level, contentNew, content);\\n                if (this.options.substitute) {\\n                    this.options.substitute(contentNew);\\n                    return;\\n                }\\n            }\\n            console.log(content, ...optionalParams);\\n        }\\n        static logf(level, message, ...optionalParams) {\\n            if (!this.checkLevel(level)) {\\n                return;\\n            }\\n            let content = this.levelTags[level] + this.options.addTag + ' ' + _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format(message, ...optionalParams);\\n            let contentNew = content;\\n            if (this.options.dateTag) {\\n                contentNew = '[' + _utils_date__WEBPACK_IMPORTED_MODULE_2__[\\\"tsDate\\\"].toLocaleStringMS() + '] ' + content;\\n            }\\n            if (this.options.substitute || this.options.reportCaller) {\\n                this.report(level, contentNew, content);\\n                if (this.options.substitute) {\\n                    this.options.substitute(contentNew);\\n                    return;\\n                }\\n            }\\n            console.log(contentNew);\\n        }\\n        /**\\n         * Level.Trace级别输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static trace(message, ...optionalParams) {\\n            this.log(Level.Trace, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Debug级别输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static debug(message, ...optionalParams) {\\n            this.log(Level.Debug, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Info级别输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static info(message, ...optionalParams) {\\n            this.log(Level.Info, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Warn级别输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static warn(message, ...optionalParams) {\\n            this.log(Level.Warn, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Error级别输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static error(message, ...optionalParams) {\\n            this.log(Level.Error, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Trace级别格式化输出 (\\\"example: hello, world 2023\\\")\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static tracef(message, ...optionalParams) {\\n            this.logf(Level.Trace, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Debug级别格式化输出 (\\\"example: hello, world 2023\\\")\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static debugf(message, ...optionalParams) {\\n            this.logf(Level.Debug, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Info级别格式化输出 (\\\"example: hello, world 2023\\\")\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static infof(message, ...optionalParams) {\\n            this.logf(Level.Info, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Warn级别格式化输出 (\\\"example: hello, world 2023\\\")\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static warnf(message, ...optionalParams) {\\n            this.logf(Level.Warn, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Error级别格式化输出 (\\\"example: hello, world 2023\\\")\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static errorf(message, ...optionalParams) {\\n            this.logf(Level.Error, message, ...optionalParams);\\n        }\\n        /**\\n         * Level.Trace级别带堆栈输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static traceStack(message, ...optionalParams) {\\n            this.trace(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.trace(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Debug级别带堆栈输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static debugStack(message, ...optionalParams) {\\n            this.debug(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.debug(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Info级别带堆栈输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static infoStack(message, ...optionalParams) {\\n            this.info(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.info(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Warn级别带堆栈输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static warnStack(message, ...optionalParams) {\\n            this.warn(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.warn(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Error级别带堆栈输出，与console.log同样用法\\n         * @param message\\n         * @param optionalParams\\n         */\\n        static errorStack(message, ...optionalParams) {\\n            this.error(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.error(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Trace级别还堆栈格式化输出 (\\\"example: hello, world 2023\\\" + \\\"\\\\n\\\" + ${stack info})\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static traceStackf(message, ...optionalParams) {\\n            this.tracef(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.trace(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Debug级别还堆栈格式化输出 (\\\"example: hello, world 2023\\\" + \\\"\\\\n\\\" + ${stack info})\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static debugStackf(message, ...optionalParams) {\\n            this.debugf(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.debug(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Info级别还堆栈格式化输出 (\\\"example: hello, world 2023\\\" + \\\"\\\\n\\\" + ${stack info})\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static infoStackf(message, ...optionalParams) {\\n            this.infof(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.info(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Warn级别还堆栈格式化输出 (\\\"example: hello, world 2023\\\" + \\\"\\\\n\\\" + ${stack info})\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static warnStackf(message, ...optionalParams) {\\n            this.warnf(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.warn(name, location);\\n            });\\n        }\\n        /**\\n         * Level.Error级别还堆栈格式化输出 (\\\"example: hello, world 2023\\\" + \\\"\\\\n\\\" + ${stack info})\\n         * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n         * @param optionalParams 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n         */\\n        static errorStackf(message, ...optionalParams) {\\n            this.errorf(message, ...optionalParams);\\n            const callstack = new Error().stack.split('\\\\n');\\n            callstack.forEach(s => {\\n                let matchArray = s.match(/at (.+) ((.+))/);\\n                if (!matchArray)\\n                    return;\\n                let name = matchArray[1];\\n                let location = matchArray[2];\\n                this.error(name, location);\\n            });\\n        }\\n        /**\\n         * debug耗时\\n         * @param from 来源关键字\\n         * @param optionalParams 可变参数\\n         */\\n        static debugTimeUse(from, ...optionalParams) {\\n            if (!this.options.isShowDebugTimeUse)\\n                return;\\n            let beginMs = this.timeUseMap.get(from);\\n            let content = '';\\n            let content_time = '';\\n            let curMs = _time_time__WEBPACK_IMPORTED_MODULE_1__[\\\"tsTime\\\"].unixMsec();\\n            if (!beginMs) {\\n                this.timeUseMap.set(from, curMs);\\n                content = _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format('debugTimeUse {0}', from);\\n                content_time = _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format('BEGIN:{0}', curMs);\\n            }\\n            else {\\n                this.timeUseMap.delete(from);\\n                const diff = curMs - beginMs;\\n                content = _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format('debugTimeUse {0}', from);\\n                content_time = _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format('ENDED:{0} USE:{1} ms', curMs, diff);\\n            }\\n            content += ' ' + content_time;\\n            if (optionalParams.length > 0) {\\n                content += ' ' + this.toString(...optionalParams);\\n            }\\n            switch (this.options.level) {\\n                case Level.Trace:\\n                    this.trace(content);\\n                    break;\\n                case Level.Debug:\\n                    this.debug(content);\\n                    break;\\n                case Level.Info:\\n                    this.info(content);\\n                    break;\\n                case Level.Warn:\\n                    this.warn(content);\\n                    break;\\n                default:\\n                    this.timeUseMap.delete(from);\\n                    break;\\n            }\\n        }\\n        /**\\n         * debug耗时\\n         * @param format 格式化字符串\\n         * @param optionalParams 格式化参数\\n         */\\n        static debugTimeUsef(format, ...optionalParams) {\\n            if (!this.options.isShowDebugTimeUse)\\n                return;\\n            const content = _utils_string__WEBPACK_IMPORTED_MODULE_3__[\\\"tsString\\\"].format(format, ...optionalParams);\\n            this.debugTimeUse(content);\\n        }\\n    }\\n    Logger.levelTags = ['NONE', 'ERRO', 'WARN', 'INFO', 'DEBU', 'TRAC'];\\n    Logger.options = {\\n        level: Level.Trace,\\n        reportLevel: Level.Error,\\n        tag: '',\\n        addTag: '',\\n        dateTag: false,\\n        substitute: null,\\n        reportCaller: null,\\n        isShowDebugTimeUse: false\\n    };\\n    /**\\n     * 优化日志上传过滤器\\n     */\\n    Logger.reportFilter = new Map();\\n    Logger.timeUseMap = new Map();\\n    tsLog.Logger = Logger;\\n})(tsLog || (tsLog = {}));\\n\\n\\n//# sourceURL=webpack:///./src/logger/logger.ts?\");\n\n/***/ }),\n\n/***/ \"./src/net/index.ts\":\n/*!**************************!*\\\n  !*** ./src/net/index.ts ***!\n  \\**************************/\n/*! exports provided: WSConn, WSState, WSEventType, readUint32, messageUniNum, registerMessageNameNum, registerMessageHandler, unregisterMessageHandler, registerMessageLogFilter, getMessageNum, getMessageHandler, messageLogFilter */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _websocket__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./websocket */ \\\"./src/net/websocket.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"WSConn\\\", function() { return _websocket__WEBPACK_IMPORTED_MODULE_0__[\\\"WSConn\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"WSState\\\", function() { return _websocket__WEBPACK_IMPORTED_MODULE_0__[\\\"WSState\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"WSEventType\\\", function() { return _websocket__WEBPACK_IMPORTED_MODULE_0__[\\\"WSEventType\\\"]; });\\n\\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \\\"./src/net/util.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"readUint32\\\", function() { return _util__WEBPACK_IMPORTED_MODULE_1__[\\\"readUint32\\\"]; });\\n\\n/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./message */ \\\"./src/net/message.ts\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"messageUniNum\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"messageUniNum\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"registerMessageNameNum\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"registerMessageNameNum\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"registerMessageHandler\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"registerMessageHandler\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"unregisterMessageHandler\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"unregisterMessageHandler\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"registerMessageLogFilter\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"registerMessageLogFilter\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"getMessageNum\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"getMessageNum\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"getMessageHandler\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"getMessageHandler\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"messageLogFilter\\\", function() { return _message__WEBPACK_IMPORTED_MODULE_2__[\\\"messageLogFilter\\\"]; });\\n\\n\\n\\n\\n\\n\\n\\n//# sourceURL=webpack:///./src/net/index.ts?\");\n\n/***/ }),\n\n/***/ \"./src/net/message.ts\":\n/*!****************************!*\\\n  !*** ./src/net/message.ts ***!\n  \\****************************/\n/*! exports provided: messageUniNum, registerMessageNameNum, registerMessageHandler, unregisterMessageHandler, registerMessageLogFilter, getMessageNum, getMessageHandler, messageLogFilter */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"messageUniNum\\\", function() { return messageUniNum; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"registerMessageNameNum\\\", function() { return registerMessageNameNum; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"registerMessageHandler\\\", function() { return registerMessageHandler; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"unregisterMessageHandler\\\", function() { return unregisterMessageHandler; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"registerMessageLogFilter\\\", function() { return registerMessageLogFilter; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getMessageNum\\\", function() { return getMessageNum; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getMessageHandler\\\", function() { return getMessageHandler; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"messageLogFilter\\\", function() { return messageLogFilter; });\\n/* harmony import */ var _logger_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../logger/logger */ \\\"./src/logger/logger.ts\\\");\\n\\nlet messageNameNumMap = new Map();\\nlet messageNumHandlerMap = new Map();\\nlet messageNumLogFilterMap = new Map();\\nfunction messageUniNum(firstNum, secondNum) {\\n    let num = firstNum * 100000 + secondNum;\\n    return num;\\n}\\nfunction registerMessageNameNum(name, firstNum, secondNum, obj) {\\n    let uniNum = messageUniNum(firstNum, secondNum);\\n    if (messageNameNumMap.has(name)) {\\n        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf('tsNet.registerMessageNameNum [{0},{1},{2}] err: duplicate exist', firstNum, secondNum, name);\\n        return false;\\n    }\\n    _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf('tsNet.registerMessageNameNum [{0},{1},{2},{3}]', firstNum, secondNum, name, uniNum);\\n    messageNameNumMap.set(name, { firstNum: firstNum, secondNum: secondNum, uniNum: uniNum, name: name, obj: obj });\\n    return true;\\n}\\nfunction registerMessageHandler(name, callback, caller = null) {\\n    let msgNum = messageNameNumMap.get(name);\\n    if (!msgNum) {\\n        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf('tsNet.registerMessageHandler {0} err: invalid MessageNum[{1}]', name, msgNum);\\n        return false;\\n    }\\n    if (messageNumHandlerMap.has(msgNum.uniNum)) {\\n        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf('tsNet.registerMessageHandler [{0},{1},{2}] err: duplicate exist', msgNum.firstNum, msgNum.secondNum, name);\\n        return false;\\n    }\\n    _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf('tsNet.registerMessageHandler {0}', name);\\n    messageNumHandlerMap.set(msgNum.uniNum, { callback: callback, caller: caller, msgNum: msgNum });\\n    return true;\\n}\\nfunction unregisterMessageHandler(name) {\\n    let msgNum = messageNameNumMap.get(name);\\n    if (!msgNum) {\\n        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf('tsNet.unregisterMessageHandler {0} err: invalid MessageNum[{1}]', name, msgNum);\\n        return false;\\n    }\\n    if (!messageNumHandlerMap.has(msgNum.uniNum)) {\\n        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf('tsNet.unregisterMessageHandler [{0},{1},{2}] err: does not exist', msgNum.firstNum, msgNum.secondNum, name);\\n        return false;\\n    }\\n    _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf('tsNet.unregisterMessageHandler {0}', name);\\n    messageNumHandlerMap.delete(msgNum.uniNum);\\n    return true;\\n}\\nfunction registerMessageLogFilter(name) {\\n    _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf('tsNet.registerMessageLogFilter {0}', name);\\n    let msgNum = messageNameNumMap.get(name);\\n    if (!msgNum) {\\n        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf('tsNet.registerMessageLogFilter {0} err: invalid MessageNum[{1}]', name, msgNum);\\n        return;\\n    }\\n    messageNumLogFilterMap.set(msgNum.uniNum, true);\\n}\\nfunction getMessageNum(name) {\\n    return messageNameNumMap.get(name);\\n}\\nfunction getMessageHandler(uniNum) {\\n    return messageNumHandlerMap.get(uniNum);\\n}\\nfunction messageLogFilter(uniNum) {\\n    return messageNumLogFilterMap.has(uniNum);\\n}\\n\\n\\n//# sourceURL=webpack:///./src/net/message.ts?\");\n\n/***/ }),\n\n/***/ \"./src/net/util.ts\":\n/*!*************************!*\\\n  !*** ./src/net/util.ts ***!\n  \\*************************/\n/*! exports provided: readUint32 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"readUint32\\\", function() { return readUint32; });\\nfunction readUint32(arr) {\\n    let view = new DataView(arr);\\n    return view.getUint32(0, true);\\n}\\n\\n\\n//# sourceURL=webpack:///./src/net/util.ts?\");\n\n/***/ }),\n\n/***/ \"./src/net/websocket.ts\":\n/*!******************************!*\\\n  !*** ./src/net/websocket.ts ***!\n  \\******************************/\n/*! exports provided: WSState, WSEventType, WSCloseCode, WSConn */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"WSState\\\", function() { return WSState; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"WSEventType\\\", function() { return WSEventType; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"WSCloseCode\\\", function() { return WSCloseCode; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"WSConn\\\", function() { return WSConn; });\\n/* harmony import */ var _time_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../time/time */ \\\"./src/time/time.ts\\\");\\n/* harmony import */ var _utils_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/string */ \\\"./src/utils/string.ts\\\");\\n/* harmony import */ var _event_event__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../event/event */ \\\"./src/event/event.ts\\\");\\n\\n\\n\\nvar WSState;\\n(function (WSState) {\\n    WSState[WSState[\\\"CONNECTING\\\"] = 0] = \\\"CONNECTING\\\";\\n    WSState[WSState[\\\"OPEN\\\"] = 1] = \\\"OPEN\\\";\\n    WSState[WSState[\\\"CLOSING\\\"] = 2] = \\\"CLOSING\\\";\\n    WSState[WSState[\\\"CLOSED\\\"] = 3] = \\\"CLOSED\\\";\\n})(WSState || (WSState = {}));\\nvar WSEventType;\\n(function (WSEventType) {\\n    WSEventType[\\\"Connect_Error\\\"] = \\\"Connect_Error\\\";\\n    WSEventType[\\\"Connect_Open\\\"] = \\\"Connect_Open\\\";\\n    WSEventType[\\\"Connect_Close\\\"] = \\\"Connect_Close\\\";\\n})(WSEventType || (WSEventType = {}));\\nvar WSCloseCode;\\n(function (WSCloseCode) {\\n    WSCloseCode[WSCloseCode[\\\"CloseCode_Reconnect\\\"] = 4998] = \\\"CloseCode_Reconnect\\\";\\n    WSCloseCode[WSCloseCode[\\\"CloseCode_Shutdown\\\"] = 4999] = \\\"CloseCode_Shutdown\\\";\\n})(WSCloseCode || (WSCloseCode = {}));\\nclass WSConn extends _event_event__WEBPACK_IMPORTED_MODULE_2__[\\\"tsEvent\\\"].EventEntry {\\n    constructor(id, name, options = { connCtor: null, pingHandler: null, onMessageHandler: null, binaryType: 'arraybuffer', pingInterval: 10, reconnectLimit: 0 }) {\\n        super(id, name);\\n        this.url = '';\\n        this.closeCode = 0;\\n        this.conn = null;\\n        this.options = null;\\n        this.pingTimer = null;\\n        this.lastSendTime = 0;\\n        this.reconnectTimer = null;\\n        this.onOpenCount = 0;\\n        this.entryName = 'WSConn';\\n        this.options = options;\\n        this.debugf('constructor options:{0}', options);\\n    }\\n    handlePing() {\\n        if (_time_time__WEBPACK_IMPORTED_MODULE_0__[\\\"tsTime\\\"].unixSec() - this.lastSendTime < this.options.pingInterval) {\\n            return;\\n        }\\n        if (this.options.pingHandler) {\\n            this.options.pingHandler(this);\\n        }\\n    }\\n    stopReconnect() {\\n        if (!this.reconnectTimer) {\\n            return;\\n        }\\n        this.reconnectTimer.stop();\\n        this.reconnectTimer = null;\\n    }\\n    checkReconnect() {\\n        if ((this.closeCode > 0 && this.closeCode != WSCloseCode.CloseCode_Reconnect) || this.options.reconnectLimit == 0 || this.reconnectTimer) {\\n            this.errorf('checkReconnect closeCode:{0} isClosed:{1} isCloseing:{2} isConnected:{3} isConnecting:{4}', this.closeCode, this.isClosed(), this.isCloseing(), this.isConnected(), this.isConnecting());\\n            return;\\n        }\\n        this.reconnectTimer = _time_time__WEBPACK_IMPORTED_MODULE_0__[\\\"tsTime\\\"].addTimer(this.fullName + '_reconnect', 1, (timer, caller) => {\\n            if (!caller.isClosed()) {\\n                caller.stopReconnect();\\n            }\\n            else {\\n                caller.connect('', true);\\n            }\\n        }, this, -1, true);\\n    }\\n    handleCloseAndError(result, conn) {\\n        if (!this.conn || conn != this.conn) {\\n            this.error('onError err:conn is other');\\n            return;\\n        }\\n        this.setConn(null);\\n        if (this.closeCode != WSCloseCode.CloseCode_Reconnect) {\\n            this.dispatchEvent(WSEventType.Connect_Close, result);\\n        }\\n        this.checkReconnect();\\n    }\\n    onError(result, conn) {\\n        this.errorf('onError url:{0}', this.url);\\n        this.handleCloseAndError(result, conn);\\n    }\\n    onClose(result, conn) {\\n        this.debug('onClose res:', result);\\n        this.handleCloseAndError(result, conn);\\n    }\\n    onOpen(result) {\\n        this.onOpenCount++;\\n        this.debug('onOpen count:', this.onOpenCount);\\n        if (this.options.pingInterval > 0 && !this.pingTimer) {\\n            this.pingTimer = _time_time__WEBPACK_IMPORTED_MODULE_0__[\\\"tsTime\\\"].addTimer(this.fullName + '_ping', this.options.pingInterval, (timer, caller) => {\\n                caller.handlePing();\\n            }, this, -1, true);\\n        }\\n        this.lastSendTime = _time_time__WEBPACK_IMPORTED_MODULE_0__[\\\"tsTime\\\"].unixSec();\\n        this.dispatchEvent(WSEventType.Connect_Open, result);\\n        this.stopReconnect();\\n    }\\n    onMessage(result) {\\n        this.trace('recv res:', result);\\n        if (this.options.onMessageHandler) {\\n            this.options.onMessageHandler(this, result.data);\\n        }\\n    }\\n    setConn(conn) {\\n        this.conn = conn;\\n        if (conn) {\\n            let self = this;\\n            conn.onerror = (ev) => {\\n                self.onError(ev, conn);\\n            };\\n            conn.onopen = (ev) => {\\n                self.onOpen(ev);\\n            };\\n            conn.onclose = (ev) => {\\n                self.onClose(ev, conn);\\n            };\\n            conn.onmessage = (ev) => {\\n                self.onMessage(ev);\\n            };\\n        }\\n        else {\\n            if (this.pingTimer) {\\n                this.pingTimer.stop();\\n                this.pingTimer = null;\\n            }\\n        }\\n    }\\n    connect(url, isReconnect = false) {\\n        this.debugf('connect isReconnect:{0}', isReconnect);\\n        if (_utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].isNullOrEmpty(url)) {\\n            url = this.url;\\n        }\\n        this.closeCode = 0;\\n        if (this.conn) {\\n            this.error('connect err:conn is busy');\\n            return;\\n        }\\n        if (!isReconnect && this.reconnectTimer) {\\n            this.error('connect err:conn in reconnecting');\\n            return;\\n        }\\n        if (isReconnect && this.onOpenCount > 0) {\\n            url += '&reconnect=true';\\n        }\\n        this.debugf('connect {0}', url);\\n        let conn = null;\\n        if (!this.options.connCtor) {\\n            conn = new WebSocket(url);\\n            conn.binaryType = this.options.binaryType;\\n        }\\n        else {\\n            conn = this.options.connCtor(url);\\n        }\\n        this.setConn(conn);\\n    }\\n    reconnect(url, tag) {\\n        this.onOpenCount = 0;\\n        this.url = url;\\n        this.debugf('reconnect url:{0} tag:{1}', url, tag);\\n        if (this.isConnecting()) {\\n            this.errorf('reconnect err:conn in connecting tag:{0}', tag);\\n            this.close(WSCloseCode.CloseCode_Reconnect, '客户端重连关闭');\\n            this.handleCloseAndError({}, this.conn);\\n            return;\\n        }\\n        if (this.isCloseing()) {\\n            this.errorf('reconnect err:conn in closeing tag:{0}', tag);\\n            this.close(WSCloseCode.CloseCode_Reconnect, '客户端重连关闭');\\n            this.handleCloseAndError({}, this.conn);\\n            return;\\n        }\\n        if (this.conn) {\\n            this.close(WSCloseCode.CloseCode_Reconnect, '客户端重连关闭');\\n        }\\n        else {\\n            this.connect(url);\\n        }\\n    }\\n    isConnecting() {\\n        if (this.conn && this.conn.readyState == WSState.CONNECTING) {\\n            return true;\\n        }\\n        return false;\\n    }\\n    isConnected() {\\n        if (this.conn && this.conn.readyState == WSState.OPEN) {\\n            return true;\\n        }\\n        return false;\\n    }\\n    isCloseing() {\\n        if (this.conn && this.conn.readyState == WSState.CLOSING) {\\n            return true;\\n        }\\n        return false;\\n    }\\n    isClosed() {\\n        if (!this.conn || this.conn.readyState == WSState.CLOSED) {\\n            return true;\\n        }\\n        return false;\\n    }\\n    close(code = WSCloseCode.CloseCode_Shutdown, reason = '客户端主动关闭') {\\n        if (!this.isConnected()) {\\n            return false;\\n        }\\n        this.debugf('close code:{0} reason:{1}', code, reason);\\n        this.closeCode = code;\\n        this.conn.close(code, reason);\\n        return true;\\n    }\\n    send(data) {\\n        if (!this.isConnected()) {\\n            this.errorf('send err:conn not connected closeCode:{0} isClosed:{1} isCloseing:{2} isConnected:{3} isConnecting:{4}', this.closeCode, this.isClosed(), this.isCloseing(), this.isConnected(), this.isConnecting());\\n            return;\\n        }\\n        this.trace('send data:{0}', data);\\n        this.lastSendTime = _time_time__WEBPACK_IMPORTED_MODULE_0__[\\\"tsTime\\\"].unixSec();\\n        this.conn.send(data);\\n    }\\n}\\n\\n\\n//# sourceURL=webpack:///./src/net/websocket.ts?\");\n\n/***/ }),\n\n/***/ \"./src/time/time.ts\":\n/*!**************************!*\\\n  !*** ./src/time/time.ts ***!\n  \\**************************/\n/*! exports provided: tsTime */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsTime\\\", function() { return tsTime; });\\n/* harmony import */ var _logger_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../logger/logger */ \\\"./src/logger/logger.ts\\\");\\n/* harmony import */ var _utils_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/string */ \\\"./src/utils/string.ts\\\");\\n/* harmony import */ var _entry_entry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../entry/entry */ \\\"./src/entry/entry.ts\\\");\\n/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../consts */ \\\"./src/consts.ts\\\");\\n\\n\\n\\n\\n/**\\n *  时间模块\\n */\\nvar tsTime;\\n(function (tsTime) {\\n    /**\\n     * 当前时间unix时间戳/秒\\n     * @returns\\n     */\\n    function unixSec() {\\n        return Math.floor(Date.now() / 1000);\\n    }\\n    tsTime.unixSec = unixSec;\\n    /**\\n     * 当前时间unix时间戳/毫秒\\n     * @returns\\n     */\\n    function unixMsec() {\\n        return Date.now();\\n    }\\n    tsTime.unixMsec = unixMsec;\\n    /**\\n     * 定时器对象\\n     */\\n    class Timer extends _entry_entry__WEBPACK_IMPORTED_MODULE_2__[\\\"tsEntry\\\"].Entry {\\n        constructor(id, name, interval, callback, caller = null, limit = -1, permanent = false) {\\n            super(id, name);\\n            this._running = false;\\n            this._stopped = true;\\n            this._interval = 0;\\n            this._execLimit = -1;\\n            this._permanent = true;\\n            this._execCount = 0;\\n            this.callback = null;\\n            this.caller = null;\\n            this.entryName = 'Timer';\\n            this._interval = interval;\\n            this.callback = callback;\\n            this.caller = caller;\\n            this._execLimit = limit;\\n            this._permanent = permanent;\\n        }\\n        get running() {\\n            return this._running;\\n        }\\n        get stopped() {\\n            return this._stopped;\\n        }\\n        get interval() {\\n            return this._interval;\\n        }\\n        get execLimit() {\\n            return this._execLimit;\\n        }\\n        get permanent() {\\n            return this._permanent;\\n        }\\n        get execCount() {\\n            return this._execCount;\\n        }\\n        destroy() {\\n            this.callback = null;\\n            this.caller = null;\\n        }\\n        start() {\\n            if (this.running) {\\n                this.error('start err:already running');\\n                return false;\\n            }\\n            this.debug('start');\\n            this._running = true;\\n            this._stopped = false;\\n            return true;\\n        }\\n        /**\\n         * 立即停止并销毁\\n         * @returns 成功：true 失败：false\\n         */\\n        stop() {\\n            if (this.stopped) {\\n                this.error('stop err:already stopped');\\n                return false;\\n            }\\n            this.debug('stop');\\n            this._running = false;\\n            this._stopped = true;\\n            this.destroy();\\n            return true;\\n        }\\n        /**\\n         * 暂停\\n         * @returns 成功：true 失败：false\\n         */\\n        pause() {\\n            if (this.stopped) {\\n                return false;\\n            }\\n            if (!this.running) {\\n                this.error('pause err:not running');\\n                return false;\\n            }\\n            this.debug('pause');\\n            this._running = false;\\n            return true;\\n        }\\n        /**\\n         * 恢复\\n         * @returns 成功：true 失败：false\\n         */\\n        resume() {\\n            if (this.stopped) {\\n                return false;\\n            }\\n            if (this.running) {\\n                // this.error(\\\"resume err:is running\\\");\\n                return false;\\n            }\\n            this.debug('resume');\\n            return TimeManager.resumeTimer(this);\\n        }\\n        async _exec() {\\n            if (!this.running) {\\n                return;\\n            }\\n            let begin = tsTime.unixMsec();\\n            this.callback(this, this.caller);\\n            let use = tsTime.unixMsec() - begin;\\n            if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].ExecTimeLevel.Error) {\\n                this.errorf('exec limit:{0} count:{1} use:{2}', this.execLimit, this._execCount, use);\\n            }\\n            else if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].ExecTimeLevel.Warn) {\\n                this.warnf('exec limit:{0} count:{1} use:{2}', this.execLimit, this._execCount, use);\\n            }\\n            else {\\n                this.tracef('exec limit:{0} count:{1} use:{2}', this.execLimit, this._execCount, use);\\n            }\\n        }\\n        exec() {\\n            if (this.stopped || !this.running) {\\n                this.error('exec err:is stopped');\\n                return false;\\n            }\\n            if (!this.callback) {\\n                this.error('exec err:callback is null');\\n                return false;\\n            }\\n            this._execCount++;\\n            this._exec();\\n            return true;\\n        }\\n        checkLimit() {\\n            if (this.execLimit == -1) {\\n                return false;\\n            }\\n            return this.execCount >= this.execLimit;\\n        }\\n    }\\n    tsTime.Timer = Timer;\\n    /**\\n     * 闹钟对象\\n     */\\n    class Clocker extends _entry_entry__WEBPACK_IMPORTED_MODULE_2__[\\\"tsEntry\\\"].Entry {\\n        constructor(id, name, interval, callback, caller = null) {\\n            super(id, name);\\n            this._running = false;\\n            this._stopped = true;\\n            this._interval = '';\\n            this.callback = null;\\n            this.caller = null;\\n            this.entryName = 'Clocker';\\n            this._interval = interval;\\n            this.callback = callback;\\n            this.caller = caller;\\n        }\\n        get running() {\\n            return this._running;\\n        }\\n        get stopped() {\\n            return this._stopped;\\n        }\\n        get interval() {\\n            return this._interval;\\n        }\\n        destroy() {\\n            this.callback = null;\\n            this.caller = null;\\n        }\\n        start() {\\n            if (this.running) {\\n                this.error('start err:already running');\\n                return false;\\n            }\\n            this.debug('start');\\n            this._running = true;\\n            this._stopped = false;\\n            return true;\\n        }\\n        /**\\n         * 立即停止并销毁\\n         * @returns\\n         */\\n        stop() {\\n            if (this.stopped) {\\n                this.error('stop err:already stopped');\\n                return false;\\n            }\\n            this.debug('stop');\\n            this._running = false;\\n            this._stopped = true;\\n            this.destroy();\\n            return true;\\n        }\\n        /**\\n         * 暂停\\n         * @returns\\n         */\\n        pause() {\\n            if (!this.running) {\\n                this.error('pause err:not running');\\n                return false;\\n            }\\n            this.debug('pause');\\n            this._running = false;\\n            return true;\\n        }\\n        /**\\n         * 恢复\\n         * @returns\\n         */\\n        resume() {\\n            if (this.running) {\\n                this.error('resume err:is running');\\n                return false;\\n            }\\n            this.debug('resume');\\n            this._running = true;\\n        }\\n        async _exec() {\\n            if (!this.running) {\\n                return;\\n            }\\n            let begin = tsTime.unixMsec();\\n            this.callback(this, this.caller);\\n            let use = tsTime.unixMsec() - begin;\\n            if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].ExecTimeLevel.Error) {\\n                this.errorf('exec use:{0}', use);\\n            }\\n            else if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].ExecTimeLevel.Warn) {\\n                this.warnf('exec use:{0}', use);\\n            }\\n            else {\\n                this.tracef('exec use:{0}', use);\\n            }\\n        }\\n        exec() {\\n            if (this.stopped || !this.running) {\\n                this.error('exec err:is stopped');\\n                return false;\\n            }\\n            if (!this.callback) {\\n                this.error('exec err:callback is null');\\n                return false;\\n            }\\n            this._exec();\\n            return true;\\n        }\\n    }\\n    tsTime.Clocker = Clocker;\\n    class TimeManager {\\n        static start() {\\n            setInterval(() => {\\n                this.autoIncInterval++;\\n                let timers = this.intervalTimersMap.get(this.autoIncInterval);\\n                if (timers && timers.length > 0) {\\n                    let begin = tsTime.unixMsec();\\n                    let execCount = 0;\\n                    let delCount = 0;\\n                    this.intervalTimersMap.delete(this.autoIncInterval);\\n                    let len = timers.length;\\n                    for (let index = 0; index < len; index++) {\\n                        const element = timers[index];\\n                        if (element.stopped) {\\n                            this.delTimer(element);\\n                            delCount++;\\n                            continue;\\n                        }\\n                        if (!element.running) {\\n                            continue;\\n                        }\\n                        execCount++;\\n                        element.exec();\\n                        if (element.checkLimit()) {\\n                            this.delTimer(element);\\n                            delCount++;\\n                            continue;\\n                        }\\n                        let nextInterval = this.autoIncInterval + element.interval;\\n                        if (this.intervalTimersMap.has(nextInterval)) {\\n                            this.intervalTimersMap.get(nextInterval).push(element);\\n                        }\\n                        else {\\n                            this.intervalTimersMap.set(nextInterval, [element]);\\n                        }\\n                    }\\n                    let use = tsTime.unixMsec() - begin;\\n                    if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].ExecTimeLevel.Error) {\\n                        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.tag + ' loop exec:{0} dels:{1} use:{2}', execCount, delCount, use);\\n                    }\\n                    else if (use >= _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].ExecTimeLevel.Warn) {\\n                        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnf(this.tag + ' loop exec:{0} dels:{1} use:{2}', execCount, delCount, use);\\n                    }\\n                    else {\\n                        _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.tracef(this.tag + ' loop exec:{0} dels:{1} use:{2}', execCount, delCount, use);\\n                    }\\n                }\\n                let date = new Date();\\n                let key = _utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].formatNumber(date.getHours(), 2) + ':' + _utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].formatNumber(date.getMinutes(), 2) + ':' + _utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].formatNumber(date.getSeconds(), 2);\\n                let clockers = this.intervalClockersMap.get(key);\\n                if (clockers && clockers.length > 0) {\\n                    let clockersNew = null;\\n                    for (let index = 0; index < clockers.length; index++) {\\n                        const element = clockers[index];\\n                        if (!element.running) {\\n                            if (element.stopped) {\\n                                this.delClocker(element);\\n                            }\\n                            continue;\\n                        }\\n                        element.exec();\\n                        if (!clockersNew) {\\n                            clockersNew = [];\\n                        }\\n                        clockersNew.push(element);\\n                    }\\n                    this.intervalClockersMap.set(key, clockersNew);\\n                }\\n            }, 1000);\\n        }\\n        static hasTimer(name) {\\n            return this.nameTimerMap.has(name);\\n        }\\n        static getTimer(name) {\\n            return this.nameTimerMap.get(name);\\n        }\\n        static addTimer(name, interval, callback, caller = null, limit = -1, permanent = false) {\\n            if (_utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].isNullOrEmpty(name) || interval < 1 || Math.ceil(interval) > interval) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.tag + ' addTimer name:{0} interval:{1} limit:{2} fail err: invalid params', name, interval, limit);\\n                return null;\\n            }\\n            let old = this.getTimer(name);\\n            if (old) {\\n                if (!old.stopped) {\\n                    old.stop();\\n                }\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnf(this.tag + ' addTimer name:{0} interval:{1} limit:{2} replace {3}', name, interval, limit, old.fullName);\\n            }\\n            if (this.autoIncIdStart == _consts__WEBPACK_IMPORTED_MODULE_3__[\\\"consts\\\"].autoIncIdStart) {\\n                this.start();\\n            }\\n            let id = this.autoIncIdStart;\\n            this.autoIncIdStart++;\\n            let timer = new Timer(id, name, interval, callback, caller, limit, permanent);\\n            let timerName = timer.fullName;\\n            this.nameTimerMap.set(name, timer);\\n            let nextInterval = this.autoIncInterval + interval;\\n            if (this.intervalTimersMap.has(nextInterval)) {\\n                this.intervalTimersMap.get(nextInterval).push(timer);\\n            }\\n            else {\\n                this.intervalTimersMap.set(nextInterval, [timer]);\\n            }\\n            if (!timer) {\\n                let errMsg = _utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].format(this.tag + ' addTimer {0} instance is {1}', timerName, timer);\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.error(errMsg);\\n                throw new Error(errMsg);\\n            }\\n            else {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf(this.tag + ' addTimer {0} size:{1} pocessing:{2}', timer.fullName, this.nameTimerMap.size, this.intervalTimersMap.size);\\n                timer.start();\\n            }\\n            this.nameTimerHistoryMap.set(name, interval);\\n            // tsLog.Logger.warn(this.tag + \\\" addTimer history:\\\", this.nameTimerHistoryMap);\\n            return timer;\\n        }\\n        static delTimer(timer) {\\n            if (!timer || !timer.id) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnf(this.tag + ' delTimer {0} err: invalid instance', timer);\\n                return false;\\n            }\\n            if (timer.running) {\\n                timer.stop();\\n            }\\n            let old = this.getTimer(timer.name);\\n            if (!old || timer.id != old.id) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnf(this.tag + ' delTimer del:{0} old:{1} err: invalid instance', timer.fullName, old ? old.fullName : 'null');\\n                return false;\\n            }\\n            let ok = this.nameTimerMap.delete(timer.name);\\n            if (ok) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf(this.tag + ' delTimer {0} size:{1} processing:{2}', timer.fullName, this.nameTimerMap.size, this.intervalTimersMap.size);\\n            }\\n            else {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.tag + ' delTimer {0} err: does not exist', timer.fullName);\\n            }\\n            return ok;\\n        }\\n        static delTimerByName(name) {\\n            let timer = this.getTimer(name);\\n            return this.delTimer(timer);\\n        }\\n        static resumeTimer(timer) {\\n            if (!this.hasTimer(timer.name)) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.tag + ' resumeTimer {0} does not exist', timer.fullName);\\n                return false;\\n            }\\n            if (timer.running) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.tag + ' resumeTimer {0} is running', timer.fullName);\\n                return false;\\n            }\\n            let nextInterval = this.autoIncInterval + timer.interval;\\n            if (this.intervalTimersMap.has(nextInterval)) {\\n                this.intervalTimersMap.get(nextInterval).push(timer);\\n            }\\n            else {\\n                this.intervalTimersMap.set(nextInterval, [timer]);\\n            }\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf(this.tag + ' resumeTimer {0} size:{1} pocessing:{2}', timer.fullName, this.nameTimerMap.size, this.intervalTimersMap.size);\\n            timer.start();\\n            return true;\\n        }\\n        static pause() {\\n            this.nameTimerMap.forEach(function (timer) {\\n                if (!timer.permanent) {\\n                    timer.pause();\\n                }\\n            });\\n        }\\n        static resume() {\\n            this.nameTimerMap.forEach(function (timer) {\\n                if (!timer.permanent) {\\n                    timer.resume();\\n                }\\n            });\\n        }\\n        static getStatistics() {\\n            let arr = [];\\n            this.nameTimerMap.forEach(function (timer) {\\n                let str = _utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].format('名称:{0} 间隔:{1}s 状态:{2} 执行计数:{3}', timer.name, timer.interval, timer.running, timer.execCount);\\n                arr.push(str);\\n            });\\n            return arr;\\n        }\\n        static hasClocker(name) {\\n            return this.nameClockerMap.has(name);\\n        }\\n        static getClocker(name) {\\n            return this.nameClockerMap.get(name);\\n        }\\n        static addClocker(name, interval, callback, caller = null) {\\n            if (_utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].isNullOrEmpty(name) || interval.split(':').length != 3) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.tag + ' addClocker name:{0} interval:{1} fail err: invalid params', name, interval);\\n                return null;\\n            }\\n            let old = this.getClocker(name);\\n            if (old) {\\n                if (!old.stopped) {\\n                    old.stop();\\n                }\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnf(this.tag + ' addClocker name:{0} interval:{1} replace {2}', name, interval, old.fullName);\\n            }\\n            if (this.autoIncIdStart == _consts__WEBPACK_IMPORTED_MODULE_3__[\\\"consts\\\"].autoIncIdStart) {\\n                this.start();\\n            }\\n            let id = this.autoIncIdStart;\\n            this.autoIncIdStart++;\\n            let clocker = new Clocker(id, name, interval, callback, caller);\\n            let clockerName = clocker.fullName;\\n            this.nameClockerMap.set(name, clocker);\\n            if (this.intervalClockersMap.has(interval)) {\\n                this.intervalClockersMap.get(interval).push(clocker);\\n            }\\n            else {\\n                this.intervalClockersMap.set(interval, [clocker]);\\n            }\\n            if (!clocker) {\\n                let errMsg = _utils_string__WEBPACK_IMPORTED_MODULE_1__[\\\"tsString\\\"].format(this.tag + ' addClocker {0} instance is {1}', clockerName, clocker);\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.error(errMsg);\\n                throw new Error(errMsg);\\n            }\\n            else {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf(this.tag + ' addClocker {0} size:{1} pocessing:{2}', clocker.fullName, this.nameClockerMap.size, this.intervalClockersMap.size);\\n                clocker.start();\\n            }\\n            return clocker;\\n        }\\n        static delClocker(clocker) {\\n            if (!clocker || !clocker.id) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.warnf(this.tag + ' delClocker {0} err: invalid instance', clocker);\\n                return false;\\n            }\\n            if (clocker.running) {\\n                clocker.stop();\\n            }\\n            let old = this.getClocker(clocker.name);\\n            if (!old || clocker.id != old.id) {\\n                return false;\\n            }\\n            let ok = this.nameClockerMap.delete(clocker.name);\\n            if (ok) {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.debugf(this.tag + ' delClocker {0} size:{1} processing:{2}', clocker.fullName, this.nameClockerMap.size, this.intervalClockersMap.size);\\n            }\\n            else {\\n                _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf(this.tag + ' delClocker {0} err: does not exist', clocker.fullName);\\n            }\\n            return ok;\\n        }\\n        static delClockerByName(name) {\\n            let clocker = this.getClocker(name);\\n            return this.delClocker(clocker);\\n        }\\n    }\\n    TimeManager.tag = 'TimeManager';\\n    TimeManager.autoIncIdStart = _consts__WEBPACK_IMPORTED_MODULE_3__[\\\"consts\\\"].autoIncIdStart;\\n    TimeManager.nameTimerMap = new Map();\\n    TimeManager.intervalTimersMap = new Map();\\n    TimeManager.autoIncInterval = 0;\\n    TimeManager.nameClockerMap = new Map();\\n    TimeManager.intervalClockersMap = new Map();\\n    TimeManager.nameTimerHistoryMap = new Map();\\n    tsTime.TimeManager = TimeManager;\\n    /**\\n     * 通过名称获取定时器\\n     * @param name 名称\\n     * @returns Timer实例\\n     */\\n    function getTimer(name) {\\n        return TimeManager.getTimer(name);\\n    }\\n    tsTime.getTimer = getTimer;\\n    /**\\n     * 添加秒级定时器\\n     * @param name 名称，全局唯一，同名覆盖\\n     * @param interval 间隔 单位：秒\\n     * @param callback 回调\\n     * @param caller 调用者（回传参数，可用于解决this指针问题）\\n     * @param limit 执行次数（次数达到自动删除 默认-1(无限次数)）\\n     * @param permanent 常驻状态（true: 不受全局暂停影响 默认false）\\n     * @returns Timer实例\\n     */\\n    function addTimer(name, interval, callback, caller = null, limit = -1, permanent = false) {\\n        return TimeManager.addTimer(name, interval, callback, caller, limit, permanent);\\n    }\\n    tsTime.addTimer = addTimer;\\n    /**\\n     * 删除定时器\\n     * @param timer Timer实例\\n     * @returns 成功：true 失败：false\\n     */\\n    function delTimer(timer) {\\n        return TimeManager.delTimer(timer);\\n    }\\n    tsTime.delTimer = delTimer;\\n    /**\\n     * 通过名称删除定时器\\n     * @param name 名称\\n     * @returns 成功：true 失败：false\\n     */\\n    function delTimerByName(name) {\\n        return TimeManager.delTimerByName(name);\\n    }\\n    tsTime.delTimerByName = delTimerByName;\\n    /**\\n     * 暂停所有定时器\\n     */\\n    function pauseAll() {\\n        TimeManager.pause();\\n    }\\n    tsTime.pauseAll = pauseAll;\\n    /**\\n     * 恢复所有定时器\\n     */\\n    function resumeAll() {\\n        TimeManager.resume();\\n    }\\n    tsTime.resumeAll = resumeAll;\\n    /**\\n     * 获取统计信息\\n     * @returns [\\\"名称:app_askBetListTimer 间隔:300s 状态:true 执行计数:1\\\", ...]\\n     */\\n    function getStatistics() {\\n        return TimeManager.getStatistics();\\n    }\\n    tsTime.getStatistics = getStatistics;\\n    /**\\n     * 通过名称获取闹钟\\n     * @param name 名称\\n     * @returns Clocker实例\\n     */\\n    function getClocker(name) {\\n        return TimeManager.getClocker(name);\\n    }\\n    tsTime.getClocker = getClocker;\\n    /**\\n     * 添加时分秒级闹钟\\n     * @param name 名称\\n     * @param interval 间隔 示例: 12:00:00\\n     * @param callback 回调\\n     * @param caller 调用者（回传参数，可用于解决this指针问题）\\n     * @returns Clocker实例\\n     */\\n    function addClocker(name, interval, callback, caller = null) {\\n        return TimeManager.addClocker(name, interval, callback, caller);\\n    }\\n    tsTime.addClocker = addClocker;\\n    /**\\n     * 删除闹钟\\n     * @param clocker Clocker实例\\n     * @returns 成功：true 失败：false\\n     */\\n    function delClocker(clocker) {\\n        return TimeManager.delClocker(clocker);\\n    }\\n    tsTime.delClocker = delClocker;\\n    /**\\n     * 通过名称删除闹钟\\n     * @param name 名称\\n     * @returns 成功：true 失败：false\\n     */\\n    function delClockerByName(name) {\\n        return TimeManager.delClockerByName(name);\\n    }\\n    tsTime.delClockerByName = delClockerByName;\\n})(tsTime || (tsTime = {}));\\n\\n\\n//# sourceURL=webpack:///./src/time/time.ts?\");\n\n/***/ }),\n\n/***/ \"./src/utils/date.ts\":\n/*!***************************!*\\\n  !*** ./src/utils/date.ts ***!\n  \\***************************/\n/*! exports provided: tsDate */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsDate\\\", function() { return tsDate; });\\n/**\\n * 日期模块\\n */\\nvar tsDate;\\n(function (tsDate) {\\n    const fillMs = ['', '00', '0', ''];\\n    /**\\n     * 日期格式化输出带毫秒\\n     * @param date 可选参数，默认：new Date\\n     * @returns 2022/4/24 10:44:49\\n     */\\n    function toLocaleString(date) {\\n        date = date ? date : new Date();\\n        let ms = date.getMilliseconds().toString();\\n        return date.toLocaleString();\\n    }\\n    tsDate.toLocaleString = toLocaleString;\\n    /**\\n     * 日期格式化输出带毫秒\\n     * @param date 可选参数，默认：new Date\\n     * @returns 2022/4/24 10:44:49.863\\n     */\\n    function toLocaleStringMS(date) {\\n        date = date ? date : new Date();\\n        let ms = date.getMilliseconds().toString();\\n        return date.toLocaleString() + '.' + fillMs[ms.length] + ms;\\n    }\\n    tsDate.toLocaleStringMS = toLocaleStringMS;\\n})(tsDate || (tsDate = {}));\\n\\n\\n//# sourceURL=webpack:///./src/utils/date.ts?\");\n\n/***/ }),\n\n/***/ \"./src/utils/json.ts\":\n/*!***************************!*\\\n  !*** ./src/utils/json.ts ***!\n  \\***************************/\n/*! exports provided: tsJson */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsJson\\\", function() { return tsJson; });\\n/* harmony import */ var _logger_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../logger/logger */ \\\"./src/logger/logger.ts\\\");\\n\\n/**\\n * json模块\\n */\\nvar tsJson;\\n(function (tsJson) {\\n    /**\\n     * 安全JSON.parse\\n     * @param data\\n     * @param tag 用于排查错误的关键字\\n     * @returns\\n     */\\n    function parse(data, tag) {\\n        try {\\n            return JSON.parse(data);\\n        }\\n        catch (error) {\\n            _logger_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"tsLog\\\"].Logger.errorf('tsJson parse tag:{0} data:{1} err:{2}', data, tag, error);\\n        }\\n    }\\n    tsJson.parse = parse;\\n})(tsJson || (tsJson = {}));\\n\\n\\n//# sourceURL=webpack:///./src/utils/json.ts?\");\n\n/***/ }),\n\n/***/ \"./src/utils/md5.ts\":\n/*!**************************!*\\\n  !*** ./src/utils/md5.ts ***!\n  \\**************************/\n/*! exports provided: tsMd5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsMd5\\\", function() { return tsMd5; });\\n/*\\n * md5模块\\n */\\nvar tsMd5;\\n(function (tsMd5) {\\n    function md5_RotateLeft(lValue, iShiftBits) {\\n        return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));\\n    }\\n    function md5_AddUnsigned(lX, lY) {\\n        var lX4, lY4, lX8, lY8, lResult;\\n        lX8 = lX & 0x80000000;\\n        lY8 = lY & 0x80000000;\\n        lX4 = lX & 0x40000000;\\n        lY4 = lY & 0x40000000;\\n        lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);\\n        if (lX4 & lY4) {\\n            return lResult ^ 0x80000000 ^ lX8 ^ lY8;\\n        }\\n        if (lX4 | lY4) {\\n            if (lResult & 0x40000000) {\\n                return lResult ^ 0xc0000000 ^ lX8 ^ lY8;\\n            }\\n            else {\\n                return lResult ^ 0x40000000 ^ lX8 ^ lY8;\\n            }\\n        }\\n        else {\\n            return lResult ^ lX8 ^ lY8;\\n        }\\n    }\\n    function md5_F(x, y, z) {\\n        return (x & y) | (~x & z);\\n    }\\n    function md5_G(x, y, z) {\\n        return (x & z) | (y & ~z);\\n    }\\n    function md5_H(x, y, z) {\\n        return x ^ y ^ z;\\n    }\\n    function md5_I(x, y, z) {\\n        return y ^ (x | ~z);\\n    }\\n    function md5_FF(a, b, c, d, x, s, ac) {\\n        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_F(b, c, d), x), ac));\\n        return md5_AddUnsigned(md5_RotateLeft(a, s), b);\\n    }\\n    function md5_GG(a, b, c, d, x, s, ac) {\\n        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_G(b, c, d), x), ac));\\n        return md5_AddUnsigned(md5_RotateLeft(a, s), b);\\n    }\\n    function md5_HH(a, b, c, d, x, s, ac) {\\n        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_H(b, c, d), x), ac));\\n        return md5_AddUnsigned(md5_RotateLeft(a, s), b);\\n    }\\n    function md5_II(a, b, c, d, x, s, ac) {\\n        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_I(b, c, d), x), ac));\\n        return md5_AddUnsigned(md5_RotateLeft(a, s), b);\\n    }\\n    function md5_ConvertToWordArray(string) {\\n        var lWordCount;\\n        var lMessageLength = string.length;\\n        var lNumberOfWords_temp1 = lMessageLength + 8;\\n        var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;\\n        var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;\\n        var lWordArray = Array(lNumberOfWords - 1);\\n        var lBytePosition = 0;\\n        var lByteCount = 0;\\n        while (lByteCount < lMessageLength) {\\n            lWordCount = (lByteCount - (lByteCount % 4)) / 4;\\n            lBytePosition = (lByteCount % 4) * 8;\\n            lWordArray[lWordCount] = lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition);\\n            lByteCount++;\\n        }\\n        lWordCount = (lByteCount - (lByteCount % 4)) / 4;\\n        lBytePosition = (lByteCount % 4) * 8;\\n        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);\\n        lWordArray[lNumberOfWords - 2] = lMessageLength << 3;\\n        lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\\n        return lWordArray;\\n    }\\n    function md5_WordToHex(lValue) {\\n        var WordToHexValue = '', WordToHexValue_temp = '', lByte, lCount;\\n        for (lCount = 0; lCount <= 3; lCount++) {\\n            lByte = (lValue >>> (lCount * 8)) & 255;\\n            WordToHexValue_temp = '0' + lByte.toString(16);\\n            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);\\n        }\\n        return WordToHexValue;\\n    }\\n    function md5_Utf8Encode(string) {\\n        string = string.replace(/\\\\r\\\\n/g, '\\\\n');\\n        var utftext = '';\\n        for (var n = 0; n < string.length; n++) {\\n            var c = string.charCodeAt(n);\\n            if (c < 128) {\\n                utftext += String.fromCharCode(c);\\n            }\\n            else if (c > 127 && c < 2048) {\\n                utftext += String.fromCharCode((c >> 6) | 192);\\n                utftext += String.fromCharCode((c & 63) | 128);\\n            }\\n            else {\\n                utftext += String.fromCharCode((c >> 12) | 224);\\n                utftext += String.fromCharCode(((c >> 6) & 63) | 128);\\n                utftext += String.fromCharCode((c & 63) | 128);\\n            }\\n        }\\n        return utftext;\\n    }\\n    function hash(string) {\\n        var x = Array();\\n        var k, AA, BB, CC, DD, a, b, c, d;\\n        var S11 = 7, S12 = 12, S13 = 17, S14 = 22;\\n        var S21 = 5, S22 = 9, S23 = 14, S24 = 20;\\n        var S31 = 4, S32 = 11, S33 = 16, S34 = 23;\\n        var S41 = 6, S42 = 10, S43 = 15, S44 = 21;\\n        string = md5_Utf8Encode(string);\\n        x = md5_ConvertToWordArray(string);\\n        a = 0x67452301;\\n        b = 0xefcdab89;\\n        c = 0x98badcfe;\\n        d = 0x10325476;\\n        for (k = 0; k < x.length; k += 16) {\\n            AA = a;\\n            BB = b;\\n            CC = c;\\n            DD = d;\\n            a = md5_FF(a, b, c, d, x[k + 0], S11, 0xd76aa478);\\n            d = md5_FF(d, a, b, c, x[k + 1], S12, 0xe8c7b756);\\n            c = md5_FF(c, d, a, b, x[k + 2], S13, 0x242070db);\\n            b = md5_FF(b, c, d, a, x[k + 3], S14, 0xc1bdceee);\\n            a = md5_FF(a, b, c, d, x[k + 4], S11, 0xf57c0faf);\\n            d = md5_FF(d, a, b, c, x[k + 5], S12, 0x4787c62a);\\n            c = md5_FF(c, d, a, b, x[k + 6], S13, 0xa8304613);\\n            b = md5_FF(b, c, d, a, x[k + 7], S14, 0xfd469501);\\n            a = md5_FF(a, b, c, d, x[k + 8], S11, 0x698098d8);\\n            d = md5_FF(d, a, b, c, x[k + 9], S12, 0x8b44f7af);\\n            c = md5_FF(c, d, a, b, x[k + 10], S13, 0xffff5bb1);\\n            b = md5_FF(b, c, d, a, x[k + 11], S14, 0x895cd7be);\\n            a = md5_FF(a, b, c, d, x[k + 12], S11, 0x6b901122);\\n            d = md5_FF(d, a, b, c, x[k + 13], S12, 0xfd987193);\\n            c = md5_FF(c, d, a, b, x[k + 14], S13, 0xa679438e);\\n            b = md5_FF(b, c, d, a, x[k + 15], S14, 0x49b40821);\\n            a = md5_GG(a, b, c, d, x[k + 1], S21, 0xf61e2562);\\n            d = md5_GG(d, a, b, c, x[k + 6], S22, 0xc040b340);\\n            c = md5_GG(c, d, a, b, x[k + 11], S23, 0x265e5a51);\\n            b = md5_GG(b, c, d, a, x[k + 0], S24, 0xe9b6c7aa);\\n            a = md5_GG(a, b, c, d, x[k + 5], S21, 0xd62f105d);\\n            d = md5_GG(d, a, b, c, x[k + 10], S22, 0x2441453);\\n            c = md5_GG(c, d, a, b, x[k + 15], S23, 0xd8a1e681);\\n            b = md5_GG(b, c, d, a, x[k + 4], S24, 0xe7d3fbc8);\\n            a = md5_GG(a, b, c, d, x[k + 9], S21, 0x21e1cde6);\\n            d = md5_GG(d, a, b, c, x[k + 14], S22, 0xc33707d6);\\n            c = md5_GG(c, d, a, b, x[k + 3], S23, 0xf4d50d87);\\n            b = md5_GG(b, c, d, a, x[k + 8], S24, 0x455a14ed);\\n            a = md5_GG(a, b, c, d, x[k + 13], S21, 0xa9e3e905);\\n            d = md5_GG(d, a, b, c, x[k + 2], S22, 0xfcefa3f8);\\n            c = md5_GG(c, d, a, b, x[k + 7], S23, 0x676f02d9);\\n            b = md5_GG(b, c, d, a, x[k + 12], S24, 0x8d2a4c8a);\\n            a = md5_HH(a, b, c, d, x[k + 5], S31, 0xfffa3942);\\n            d = md5_HH(d, a, b, c, x[k + 8], S32, 0x8771f681);\\n            c = md5_HH(c, d, a, b, x[k + 11], S33, 0x6d9d6122);\\n            b = md5_HH(b, c, d, a, x[k + 14], S34, 0xfde5380c);\\n            a = md5_HH(a, b, c, d, x[k + 1], S31, 0xa4beea44);\\n            d = md5_HH(d, a, b, c, x[k + 4], S32, 0x4bdecfa9);\\n            c = md5_HH(c, d, a, b, x[k + 7], S33, 0xf6bb4b60);\\n            b = md5_HH(b, c, d, a, x[k + 10], S34, 0xbebfbc70);\\n            a = md5_HH(a, b, c, d, x[k + 13], S31, 0x289b7ec6);\\n            d = md5_HH(d, a, b, c, x[k + 0], S32, 0xeaa127fa);\\n            c = md5_HH(c, d, a, b, x[k + 3], S33, 0xd4ef3085);\\n            b = md5_HH(b, c, d, a, x[k + 6], S34, 0x4881d05);\\n            a = md5_HH(a, b, c, d, x[k + 9], S31, 0xd9d4d039);\\n            d = md5_HH(d, a, b, c, x[k + 12], S32, 0xe6db99e5);\\n            c = md5_HH(c, d, a, b, x[k + 15], S33, 0x1fa27cf8);\\n            b = md5_HH(b, c, d, a, x[k + 2], S34, 0xc4ac5665);\\n            a = md5_II(a, b, c, d, x[k + 0], S41, 0xf4292244);\\n            d = md5_II(d, a, b, c, x[k + 7], S42, 0x432aff97);\\n            c = md5_II(c, d, a, b, x[k + 14], S43, 0xab9423a7);\\n            b = md5_II(b, c, d, a, x[k + 5], S44, 0xfc93a039);\\n            a = md5_II(a, b, c, d, x[k + 12], S41, 0x655b59c3);\\n            d = md5_II(d, a, b, c, x[k + 3], S42, 0x8f0ccc92);\\n            c = md5_II(c, d, a, b, x[k + 10], S43, 0xffeff47d);\\n            b = md5_II(b, c, d, a, x[k + 1], S44, 0x85845dd1);\\n            a = md5_II(a, b, c, d, x[k + 8], S41, 0x6fa87e4f);\\n            d = md5_II(d, a, b, c, x[k + 15], S42, 0xfe2ce6e0);\\n            c = md5_II(c, d, a, b, x[k + 6], S43, 0xa3014314);\\n            b = md5_II(b, c, d, a, x[k + 13], S44, 0x4e0811a1);\\n            a = md5_II(a, b, c, d, x[k + 4], S41, 0xf7537e82);\\n            d = md5_II(d, a, b, c, x[k + 11], S42, 0xbd3af235);\\n            c = md5_II(c, d, a, b, x[k + 2], S43, 0x2ad7d2bb);\\n            b = md5_II(b, c, d, a, x[k + 9], S44, 0xeb86d391);\\n            a = md5_AddUnsigned(a, AA);\\n            b = md5_AddUnsigned(b, BB);\\n            c = md5_AddUnsigned(c, CC);\\n            d = md5_AddUnsigned(d, DD);\\n        }\\n        return (md5_WordToHex(a) + md5_WordToHex(b) + md5_WordToHex(c) + md5_WordToHex(d)).toUpperCase();\\n    }\\n    tsMd5.hash = hash;\\n})(tsMd5 || (tsMd5 = {}));\\n\\n\\n//# sourceURL=webpack:///./src/utils/md5.ts?\");\n\n/***/ }),\n\n/***/ \"./src/utils/string.ts\":\n/*!*****************************!*\\\n  !*** ./src/utils/string.ts ***!\n  \\*****************************/\n/*! exports provided: tsString */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsString\\\", function() { return tsString; });\\n/**\\n * 字符串处理模块\\n */\\nvar tsString;\\n(function (tsString) {\\n    /**\\n     * 将任意类型格式化为string类型\\n     * @param arg 任意类型\\n     * @returns\\n     */\\n    function toString(arg) {\\n        let str = '';\\n        let typ = typeof arg;\\n        // typ: \\\"string\\\" | \\\"number\\\" | \\\"bigint\\\" | \\\"boolean\\\" | \\\"symbol\\\" | \\\"undefined\\\" | \\\"object\\\" | \\\"function\\\"\\n        if (typ == 'undefined') {\\n            str = typ;\\n        }\\n        else if (typ == 'object') {\\n            if (arg == null) {\\n                str = 'null';\\n            }\\n            else {\\n                str = JSON.stringify(arg);\\n            }\\n        }\\n        else {\\n            str = arg.toString();\\n        }\\n        return str;\\n    }\\n    tsString.toString = toString;\\n    /**\\n     * 格式化字符串-指定类型\\n     * @param message 带格式的字符串（\\\"example: {0}, {1}\\\"）\\n     * @param replacements strng类型参数（[\\\"hello\\\", \\\"world\\\"]）\\n     * @returns \\\"example: hello, world\\\"\\n     */\\n    function formats(message, ...replacements) {\\n        var args = replacements;\\n        return message.replace(/{(\\\\d+)}/g, function (match, number) {\\n            return typeof args[number] !== 'undefined' ? args[number] : match;\\n        });\\n    }\\n    tsString.formats = formats;\\n    /**\\n     * 格式化字符串\\n     * @param message 带格式的字符串（\\\"example: {0}, {1} {2}\\\"）\\n     * @param replacements 任意类型参数（[\\\"hello\\\", \\\"world\\\", 2023]）\\n     * @returns \\\"example: hello, world 2023\\\"\\n     */\\n    function format(message, ...replacements) {\\n        var args = replacements;\\n        return message.replace(/{(\\\\d+)}/g, function (match, number) {\\n            return toString(args[number]);\\n        });\\n    }\\n    tsString.format = format;\\n    /**\\n     * 字符串去空格\\n     * @param value\\n     * @returns\\n     */\\n    function trim(value) {\\n        let str = value;\\n        if (String.prototype.trim) {\\n            str = value.trim();\\n        }\\n        else {\\n            str = value.replace(/(^\\\\s*)|(\\\\s*$)/g, '');\\n        }\\n        return str;\\n    }\\n    tsString.trim = trim;\\n    /**\\n     * 字符串是否为空\\n     * @param value 字符串\\n     * @returns 空：true 非空：false\\n     */\\n    function isNullOrEmpty(value) {\\n        if (typeof value != 'string') {\\n            return true;\\n        }\\n        let str = trim(value);\\n        return str == '' || str == 'null' || str == 'nil' || str == 'undefined';\\n    }\\n    tsString.isNullOrEmpty = isNullOrEmpty;\\n    /**\\n     * 安全encodeURI\\n     * @param value\\n     * @returns\\n     */\\n    function encodeURI(value) {\\n        if (isNullOrEmpty(value)) {\\n            return '';\\n        }\\n        return value.replace(/[\\\\u4e00-\\\\u9fa5]/g, function ($) {\\n            return encodeURI($);\\n        });\\n    }\\n    tsString.encodeURI = encodeURI;\\n    const fillNumbers = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000'];\\n    /**\\n     * 格式化number\\n     * @param n number (example: 1)\\n     * @param len 长度 (example: 3)\\n     * @returns (example: \\\"001\\\")\\n     */\\n    function formatNumber(n, len) {\\n        let s = n.toString();\\n        let diff = len - s.length;\\n        return fillNumbers[diff] + s;\\n    }\\n    tsString.formatNumber = formatNumber;\\n    /**\\n     * 格式化输出Object属性，用于调式\\n     * @param obj\\n     * @returns\\n     */\\n    function formatObjectProperty(obj) {\\n        if (!obj) {\\n            return '';\\n        }\\n        let str = '';\\n        Object.getOwnPropertyNames(obj).forEach(function (key) {\\n            let typ = typeof obj[key];\\n            if (typ == 'function' || typ == 'object') {\\n                str += tsString.format('{0}:{1} ', key, typ);\\n            }\\n            else if (key.indexOf('_') == -1) {\\n                str += tsString.format('{0}:{1} ', key, obj[key]);\\n            }\\n        });\\n        return str;\\n    }\\n    tsString.formatObjectProperty = formatObjectProperty;\\n})(tsString || (tsString = {}));\\n\\n\\n//# sourceURL=webpack:///./src/utils/string.ts?\");\n\n/***/ }),\n\n/***/ \"./src/utils/url.ts\":\n/*!**************************!*\\\n  !*** ./src/utils/url.ts ***!\n  \\**************************/\n/*! exports provided: tsUrl */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"tsUrl\\\", function() { return tsUrl; });\\n/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string */ \\\"./src/utils/string.ts\\\");\\n\\n/**\\n * URL处理模块\\n */\\nvar tsUrl;\\n(function (tsUrl) {\\n    /**\\n     * 获取域名传参，！！！警告：参数名不能带=号，仅支持参数值带=号\\n     * @param url 带参数的url，默认值：window.location\\n     * @returns\\n     */\\n    function getQuery(url) {\\n        if (!_string__WEBPACK_IMPORTED_MODULE_0__[\\\"tsString\\\"].isNullOrEmpty(url)) {\\n            if (String(url).indexOf('?') != -1) {\\n                url = url.split('?')[1];\\n            }\\n        }\\n        else if (_string__WEBPACK_IMPORTED_MODULE_0__[\\\"tsString\\\"].isNullOrEmpty(url) && window) {\\n            url = window.location.search.substring(1);\\n        }\\n        let m = new Map();\\n        if (_string__WEBPACK_IMPORTED_MODULE_0__[\\\"tsString\\\"].isNullOrEmpty(url)) {\\n            return m;\\n        }\\n        let query = decodeURI(url);\\n        if (query.length > 0) {\\n            let vars = query.split('&');\\n            for (let val of vars) {\\n                let index = val.indexOf('=');\\n                if (index == -1) {\\n                    continue;\\n                }\\n                let k = val.substring(0, index);\\n                let v = val.substring(index + 1, val.length);\\n                m[k] = v;\\n            }\\n        }\\n        return m;\\n    }\\n    tsUrl.getQuery = getQuery;\\n    /**\\n     * 获取指定参数值\\n     * @param key 参数名\\n     * @param defaultVal 默认值\\n     * @param url 带参数的url，默认值：window.location\\n     * @returns\\n     */\\n    function getQueryValue(key, defaultVal, url) {\\n        let m = getQuery(url);\\n        return m[key] || defaultVal;\\n    }\\n    tsUrl.getQueryValue = getQueryValue;\\n    /**\\n     * 从url中提取域名\\n     * @param url 支持：http, https, wss, ws,\\n     * @returns\\n     */\\n    function getDomain(url) {\\n        if (_string__WEBPACK_IMPORTED_MODULE_0__[\\\"tsString\\\"].isNullOrEmpty(url)) {\\n            return '';\\n        }\\n        let domain = url.replace('https://', '');\\n        domain = domain.replace('http://', '');\\n        domain = domain.replace('wss://', '');\\n        domain = domain.replace('ws://', '');\\n        let index = domain.indexOf('/');\\n        if (index != -1) {\\n            domain = domain.substring(0, index);\\n        }\\n        return domain;\\n    }\\n    tsUrl.getDomain = getDomain;\\n    /**\\n     * 转换url wss->https, ws->http\\n     * @param url\\n     * @returns\\n     */\\n    function convertWSToHttp(url) {\\n        let httpUrl = url.replace('wss://', 'https://');\\n        httpUrl = httpUrl.replace('ws://', 'http://');\\n        return httpUrl;\\n    }\\n    tsUrl.convertWSToHttp = convertWSToHttp;\\n})(tsUrl || (tsUrl = {}));\\n\\n\\n//# sourceURL=webpack:///./src/utils/url.ts?\");\n\n/***/ })\n\n/******/ });\n});"]}