agora-foundation 3.7.9-alpha → 3.8.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,16 @@
1
+ export declare const DEFAULT_MAX_CONCURRENT = 10;
2
+ export declare class AgoraRequestScheduler {
3
+ private _maxConcurrent;
4
+ private _runningCount;
5
+ private _queueControl;
6
+ private _weightManager;
7
+ private _timeoutThreshold;
8
+ constructor(configs?: {
9
+ rules?: Map<RegExp, number>;
10
+ maxConcurrent?: number;
11
+ });
12
+ addTask(url: string, executor: () => Promise<any>): void;
13
+ private _isIdle;
14
+ private _executeTask;
15
+ private _onTaskComplete;
16
+ }
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.js");
4
+ require("core-js/modules/es.symbol.description.js");
5
+ require("core-js/modules/es.symbol.iterator.js");
6
+ require("core-js/modules/es.error.cause.js");
7
+ require("core-js/modules/es.error.to-string.js");
8
+ require("core-js/modules/es.array.from.js");
9
+ require("core-js/modules/es.array.is-array.js");
10
+ require("core-js/modules/es.array.slice.js");
11
+ require("core-js/modules/es.date.to-string.js");
12
+ require("core-js/modules/es.function.name.js");
13
+ require("core-js/modules/es.object.define-property.js");
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
15
+ Object.defineProperty(exports, "__esModule", {
16
+ value: true
17
+ });
18
+ exports.DEFAULT_MAX_CONCURRENT = exports.AgoraRequestScheduler = void 0;
19
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
20
+ require("core-js/modules/es.array.find-index.js");
21
+ require("core-js/modules/es.array.for-each.js");
22
+ require("core-js/modules/es.array.iterator.js");
23
+ require("core-js/modules/es.array.map.js");
24
+ require("core-js/modules/es.array.push.js");
25
+ require("core-js/modules/es.array.splice.js");
26
+ require("core-js/modules/es.date.now.js");
27
+ require("core-js/modules/es.map.js");
28
+ require("core-js/modules/es.object.to-string.js");
29
+ require("core-js/modules/es.regexp.constructor.js");
30
+ require("core-js/modules/es.regexp.dot-all.js");
31
+ require("core-js/modules/es.regexp.exec.js");
32
+ require("core-js/modules/es.regexp.sticky.js");
33
+ require("core-js/modules/es.regexp.test.js");
34
+ require("core-js/modules/es.regexp.to-string.js");
35
+ require("core-js/modules/es.string.iterator.js");
36
+ require("core-js/modules/esnext.iterator.constructor.js");
37
+ require("core-js/modules/esnext.iterator.for-each.js");
38
+ require("core-js/modules/esnext.iterator.map.js");
39
+ require("core-js/modules/esnext.map.delete-all.js");
40
+ require("core-js/modules/esnext.map.emplace.js");
41
+ require("core-js/modules/esnext.map.every.js");
42
+ require("core-js/modules/esnext.map.filter.js");
43
+ require("core-js/modules/esnext.map.find.js");
44
+ require("core-js/modules/esnext.map.find-key.js");
45
+ require("core-js/modules/esnext.map.includes.js");
46
+ require("core-js/modules/esnext.map.key-of.js");
47
+ require("core-js/modules/esnext.map.map-keys.js");
48
+ require("core-js/modules/esnext.map.map-values.js");
49
+ require("core-js/modules/esnext.map.merge.js");
50
+ require("core-js/modules/esnext.map.reduce.js");
51
+ require("core-js/modules/esnext.map.some.js");
52
+ require("core-js/modules/esnext.map.update.js");
53
+ require("core-js/modules/web.dom-collections.for-each.js");
54
+ require("core-js/modules/web.dom-collections.iterator.js");
55
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
56
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
57
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
58
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
59
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
60
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
61
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
62
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
63
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
64
+ var DEFAULT_MAX_CONCURRENT = exports.DEFAULT_MAX_CONCURRENT = 10;
65
+ var AgoraRequestWeightManager = /*#__PURE__*/function () {
66
+ function AgoraRequestWeightManager() {
67
+ (0, _classCallCheck2["default"])(this, AgoraRequestWeightManager);
68
+ (0, _defineProperty2["default"])(this, "_rules", new Map());
69
+ }
70
+ return (0, _createClass2["default"])(AgoraRequestWeightManager, [{
71
+ key: "getWeight",
72
+ value: function getWeight(url) {
73
+ var _iterator = _createForOfIteratorHelper(this._rules),
74
+ _step;
75
+ try {
76
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
77
+ var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
78
+ pattern = _step$value[0],
79
+ weight = _step$value[1];
80
+ if (pattern.test(url)) {
81
+ return weight;
82
+ }
83
+ }
84
+ } catch (err) {
85
+ _iterator.e(err);
86
+ } finally {
87
+ _iterator.f();
88
+ }
89
+ return 0;
90
+ }
91
+ }, {
92
+ key: "addRule",
93
+ value: function addRule(pattern, weight) {
94
+ if (typeof pattern === 'string') {
95
+ this._rules.set(new RegExp(pattern), weight);
96
+ } else {
97
+ this._rules.set(pattern, weight);
98
+ }
99
+ }
100
+ }]);
101
+ }();
102
+ var AgoraPriorityQueue = /*#__PURE__*/function () {
103
+ function AgoraPriorityQueue() {
104
+ (0, _classCallCheck2["default"])(this, AgoraPriorityQueue);
105
+ (0, _defineProperty2["default"])(this, "_items", []);
106
+ }
107
+ return (0, _createClass2["default"])(AgoraPriorityQueue, [{
108
+ key: "enqueue",
109
+ value: function enqueue(item) {
110
+ this._items.push(item);
111
+ }
112
+ }, {
113
+ key: "dequeue",
114
+ value: function dequeue(timeoutThreshold) {
115
+ var _this = this;
116
+ var now = Date.now();
117
+ var taskIndex = this._items.findIndex(function (item) {
118
+ return now - (item === null || item === void 0 ? void 0 : item.addedAt) > timeoutThreshold;
119
+ });
120
+ if (taskIndex !== -1) {
121
+ return this._items.splice(taskIndex, 1)[0];
122
+ }
123
+ taskIndex = this._items.findIndex(function (item) {
124
+ return (item === null || item === void 0 ? void 0 : item.weight) === Math.max.apply(Math, (0, _toConsumableArray2["default"])(_this._items.map(function (item) {
125
+ return item === null || item === void 0 ? void 0 : item.weight;
126
+ })));
127
+ });
128
+ if (taskIndex !== -1) {
129
+ return this._items.splice(taskIndex, 1)[0];
130
+ }
131
+ return undefined;
132
+ }
133
+ }]);
134
+ }();
135
+ var AgoraRequestScheduler = exports.AgoraRequestScheduler = /*#__PURE__*/function () {
136
+ // in ms
137
+
138
+ function AgoraRequestScheduler(configs) {
139
+ var _rules$size,
140
+ _this2 = this;
141
+ (0, _classCallCheck2["default"])(this, AgoraRequestScheduler);
142
+ (0, _defineProperty2["default"])(this, "_maxConcurrent", DEFAULT_MAX_CONCURRENT);
143
+ (0, _defineProperty2["default"])(this, "_runningCount", 0);
144
+ (0, _defineProperty2["default"])(this, "_queueControl", new AgoraPriorityQueue());
145
+ (0, _defineProperty2["default"])(this, "_weightManager", new AgoraRequestWeightManager());
146
+ (0, _defineProperty2["default"])(this, "_timeoutThreshold", 5000);
147
+ var _ref = configs !== null && configs !== void 0 ? configs : {},
148
+ rules = _ref.rules,
149
+ maxConcurrent = _ref.maxConcurrent;
150
+ if (maxConcurrent && typeof maxConcurrent === 'number') {
151
+ this._maxConcurrent = maxConcurrent;
152
+ }
153
+ if (((_rules$size = rules === null || rules === void 0 ? void 0 : rules.size) !== null && _rules$size !== void 0 ? _rules$size : 0) > 0) {
154
+ rules === null || rules === void 0 || rules.forEach(function (v, k) {
155
+ if ((k instanceof RegExp || typeof k === 'string') && typeof v === 'number') {
156
+ _this2._weightManager.addRule(k, v);
157
+ }
158
+ });
159
+ }
160
+ }
161
+ return (0, _createClass2["default"])(AgoraRequestScheduler, [{
162
+ key: "addTask",
163
+ value: function addTask(url, executor) {
164
+ var task = {
165
+ url: url,
166
+ weight: this._weightManager.getWeight(url),
167
+ addedAt: Date.now(),
168
+ executor: executor
169
+ };
170
+ this._queueControl.enqueue(task);
171
+ this._executeTask();
172
+ }
173
+ }, {
174
+ key: "_isIdle",
175
+ value: function _isIdle() {
176
+ if (this._runningCount < this._maxConcurrent) {
177
+ return true;
178
+ }
179
+ return false;
180
+ }
181
+ }, {
182
+ key: "_executeTask",
183
+ value: function () {
184
+ var _executeTask2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
185
+ var task, _t;
186
+ return _regenerator["default"].wrap(function (_context) {
187
+ while (1) switch (_context.prev = _context.next) {
188
+ case 0:
189
+ if (this._isIdle()) {
190
+ _context.next = 1;
191
+ break;
192
+ }
193
+ return _context.abrupt("return");
194
+ case 1:
195
+ task = this._queueControl.dequeue(this._timeoutThreshold);
196
+ if (!task) {
197
+ _context.next = 6;
198
+ break;
199
+ }
200
+ this._runningCount++;
201
+ _context.prev = 2;
202
+ _context.next = 3;
203
+ return task.executor();
204
+ case 3:
205
+ _context.next = 5;
206
+ break;
207
+ case 4:
208
+ _context.prev = 4;
209
+ _t = _context["catch"](2);
210
+ case 5:
211
+ _context.prev = 5;
212
+ this._onTaskComplete();
213
+ return _context.finish(5);
214
+ case 6:
215
+ case "end":
216
+ return _context.stop();
217
+ }
218
+ }, _callee, this, [[2, 4, 5, 6]]);
219
+ }));
220
+ function _executeTask() {
221
+ return _executeTask2.apply(this, arguments);
222
+ }
223
+ return _executeTask;
224
+ }()
225
+ }, {
226
+ key: "_onTaskComplete",
227
+ value: function _onTaskComplete() {
228
+ this._runningCount--;
229
+ this._executeTask();
230
+ }
231
+ }]);
232
+ }();
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 安全地使用 Node.removeChild 移除子节点
3
+ * @param parent 父节点
4
+ * @param child 要移除的子节点
5
+ * @returns 移除的节点,如果失败返回 null
6
+ */
7
+ export declare function safelyRemoveChild<T extends Node>(parent: Node | null, child: T | null): T | null;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.object.define-property.js");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.safelyRemoveChild = safelyRemoveChild;
8
+ var _logger = require("../logger");
9
+ /**
10
+ * 安全地使用 Node.removeChild 移除子节点
11
+ * @param parent 父节点
12
+ * @param child 要移除的子节点
13
+ * @returns 移除的节点,如果失败返回 null
14
+ */
15
+
16
+ var logger = (0, _logger.getLogger)();
17
+ function safelyRemoveChild(parent, child) {
18
+ // 参数检查
19
+ if (!parent || !child) {
20
+ return null;
21
+ }
22
+ try {
23
+ // 检查父子关系
24
+ if (parent.contains(child)) {
25
+ return parent.removeChild(child);
26
+ } else {
27
+ // 子节点不属于该父节点
28
+ logger.warn('safelyRemoveChild: The node to be removed is not a child of this node');
29
+ return null;
30
+ }
31
+ } catch (error) {
32
+ // 捕获其他可能的错误
33
+ logger.error('safelyRemoveChild: Failed to remove child node', error);
34
+ return null;
35
+ }
36
+ }
@@ -1 +1,5 @@
1
1
  export declare const zipDir: (dirPath: string, filter?: (fileName: string) => boolean) => Promise<File | null>;
2
+ export declare const createMultiEntryZip: () => {
3
+ addFile: (fileName: string, content: string) => void;
4
+ finish: () => Promise<ArrayBuffer>;
5
+ };
@@ -9,10 +9,8 @@ require("core-js/modules/es.array.from.js");
9
9
  require("core-js/modules/es.array.is-array.js");
10
10
  require("core-js/modules/es.array.iterator.js");
11
11
  require("core-js/modules/es.array.slice.js");
12
- require("core-js/modules/es.date.to-string.js");
13
12
  require("core-js/modules/es.function.name.js");
14
13
  require("core-js/modules/es.object.define-property.js");
15
- require("core-js/modules/es.regexp.exec.js");
16
14
  require("core-js/modules/es.regexp.test.js");
17
15
  require("core-js/modules/es.regexp.to-string.js");
18
16
  require("core-js/modules/es.string.iterator.js");
@@ -21,27 +19,29 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
21
19
  Object.defineProperty(exports, "__esModule", {
22
20
  value: true
23
21
  });
24
- exports.zipDir = void 0;
22
+ exports.zipDir = exports.createMultiEntryZip = void 0;
25
23
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
26
24
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
27
25
  require("core-js/modules/es.array.concat.js");
26
+ require("core-js/modules/es.date.to-iso-string.js");
27
+ require("core-js/modules/es.date.to-string.js");
28
28
  require("core-js/modules/es.object.to-string.js");
29
29
  require("core-js/modules/es.promise.js");
30
+ require("core-js/modules/es.regexp.exec.js");
31
+ require("core-js/modules/es.string.replace.js");
30
32
  var _jszip = _interopRequireDefault(require("jszip"));
31
- var _logger = require("../logger");
32
- var _dayjs = _interopRequireDefault(require("dayjs"));
33
33
  var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
34
34
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
35
35
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
36
36
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
37
+ var COMPRESSION_LEVEL = 9;
37
38
  var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
38
- var logger = (0, _logger.getLogger)();
39
39
  return new Promise(function (resolve) {
40
40
  try {
41
41
  var fs = window.require('fs');
42
42
  fs.readdir(dirPath, /*#__PURE__*/function () {
43
43
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(err, files) {
44
- var zip, _iterator, _step, _file, filePath, logsStr, blob, buffer, datefmt, file, _t;
44
+ var zip, _iterator, _step, _file, filePath, logsStr, blob, buffer, now, datefmt, file, _t;
45
45
  return _regenerator["default"].wrap(function (_context) {
46
46
  while (1) switch (_context.prev = _context.next) {
47
47
  case 0:
@@ -107,7 +107,7 @@ var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
107
107
  type: 'blob',
108
108
  compression: 'DEFLATE',
109
109
  compressionOptions: {
110
- level: 9
110
+ level: COMPRESSION_LEVEL
111
111
  }
112
112
  });
113
113
  case 12:
@@ -116,7 +116,9 @@ var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
116
116
  return blob.arrayBuffer();
117
117
  case 13:
118
118
  buffer = _context.sent;
119
- datefmt = (0, _dayjs["default"])().format('YYYY-MM-DDTHH:mm:ssZ[Z]');
119
+ // 使用 JavaScript 内置 Date 对象格式化日期
120
+ now = new Date();
121
+ datefmt = now.toISOString().replace(/\.\d{3}Z$/, 'Z') + 'Z';
120
122
  file = new File([buffer], "logs-".concat(datefmt, ".zip"), {
121
123
  type: 'application/zip'
122
124
  });
@@ -132,7 +134,7 @@ var zipDir = exports.zipDir = function zipDir(dirPath, filter) {
132
134
  };
133
135
  }());
134
136
  } catch (e) {
135
- logger.error("failed to get buffer.", e);
137
+ console.error("failed to get buffer.", e);
136
138
  resolve(null);
137
139
  }
138
140
  });
@@ -163,4 +165,44 @@ var isFile = /*#__PURE__*/function () {
163
165
  return function isFile(_x3) {
164
166
  return _ref2.apply(this, arguments);
165
167
  };
166
- }();
168
+ }();
169
+ var createMultiEntryZip = exports.createMultiEntryZip = function createMultiEntryZip() {
170
+ var zip = new _jszip["default"]();
171
+ return {
172
+ addFile: function addFile(fileName, content) {
173
+ zip.file(fileName, content);
174
+ },
175
+ finish: function () {
176
+ var _finish = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
177
+ var blob, buffer;
178
+ return _regenerator["default"].wrap(function (_context3) {
179
+ while (1) switch (_context3.prev = _context3.next) {
180
+ case 0:
181
+ _context3.next = 1;
182
+ return zip.generateAsync({
183
+ type: 'blob',
184
+ compression: 'DEFLATE',
185
+ compressionOptions: {
186
+ level: COMPRESSION_LEVEL
187
+ }
188
+ });
189
+ case 1:
190
+ blob = _context3.sent;
191
+ _context3.next = 2;
192
+ return blob.arrayBuffer();
193
+ case 2:
194
+ buffer = _context3.sent;
195
+ return _context3.abrupt("return", buffer);
196
+ case 3:
197
+ case "end":
198
+ return _context3.stop();
199
+ }
200
+ }, _callee3);
201
+ }));
202
+ function finish() {
203
+ return _finish.apply(this, arguments);
204
+ }
205
+ return finish;
206
+ }()
207
+ };
208
+ };
@@ -24,10 +24,15 @@ require("core-js/modules/es.array.concat.js");
24
24
  require("core-js/modules/es.array.for-each.js");
25
25
  require("core-js/modules/es.array.iterator.js");
26
26
  require("core-js/modules/es.array.push.js");
27
- require("core-js/modules/es.array.reverse.js");
27
+ require("core-js/modules/es.array-buffer.constructor.js");
28
+ require("core-js/modules/es.array-buffer.slice.js");
29
+ require("core-js/modules/es.data-view.js");
28
30
  require("core-js/modules/es.date.to-string.js");
29
31
  require("core-js/modules/es.object.to-string.js");
30
32
  require("core-js/modules/es.string.iterator.js");
33
+ require("core-js/modules/esnext.array-buffer.detached.js");
34
+ require("core-js/modules/esnext.array-buffer.transfer.js");
35
+ require("core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js");
31
36
  require("core-js/modules/esnext.iterator.constructor.js");
32
37
  require("core-js/modules/esnext.iterator.for-each.js");
33
38
  require("core-js/modules/web.dom-collections.for-each.js");
@@ -38,16 +43,17 @@ var _mutex = require("../mutex");
38
43
  var _constants = require("../constants");
39
44
  var _reply = require("./reply");
40
45
  var _raceCondition = require("../../utilities/race-condition");
41
- var _jszip = _interopRequireDefault(require("jszip"));
42
46
  var _env = require("../../utilities/env");
43
47
  var _logRotateNew = require("./log-rotate-new");
48
+ var _zip = require("../../utilities/zip");
44
49
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
45
50
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
46
51
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // import { createRotateTransport } from './log-rotate';
47
52
  var MAX_WAIT_TIME = 3000;
48
53
  var mutex = new _mutex.Mutex();
49
- var maxRecords = 50000;
54
+ var maxRecords = 20000;
50
55
  var logsCount = 0;
56
+ var maxDeleteCount = 5000;
51
57
  var logs = [];
52
58
  var writeLog = exports.writeLog = function writeLog(self, callId, log) {
53
59
  logsCount++;
@@ -60,7 +66,7 @@ var writeLog = exports.writeLog = function writeLog(self, callId, log) {
60
66
  var debouncedWriting = (0, _debounce["default"])(function () {
61
67
  mutex.dispatch(function () {
62
68
  return (0, _raceCondition.timeout)((0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
63
- var time1, logscopy, count, exceedNo, total, pk, time2, _t, _t2;
69
+ var time1, logscopy, count, exceedNo, records, maxIdToDelete, total, pk, time2, _t, _t2;
64
70
  return _regenerator["default"].wrap(function (_context) {
65
71
  while (1) switch (_context.prev = _context.next) {
66
72
  case 0:
@@ -72,7 +78,7 @@ var debouncedWriting = (0, _debounce["default"])(function () {
72
78
  break;
73
79
  }
74
80
  writeLogsToDisk(logscopy);
75
- _context.next = 9;
81
+ _context.next = 11;
76
82
  break;
77
83
  case 1:
78
84
  _context.prev = 1;
@@ -82,43 +88,56 @@ var debouncedWriting = (0, _debounce["default"])(function () {
82
88
  count = _context.sent;
83
89
  exceedNo = logscopy.length + count - maxRecords;
84
90
  if (!(exceedNo > 0)) {
85
- _context.next = 4;
91
+ _context.next = 6;
86
92
  break;
87
93
  }
88
94
  console.log("[worker] the count of stored logs exceeded limit of ".concat(maxRecords, " for ").concat(exceedNo, "."));
89
- console.log("[worker] start deleting records. exceeded: ".concat(exceedNo));
95
+ console.log("[worker] start deleting records. will delete: ".concat(maxDeleteCount));
90
96
  _context.next = 3;
91
- return _db.db.logs.orderBy(':id').reverse().limit(exceedNo)["delete"]();
97
+ return _db.db.logs.orderBy(':id').limit(maxDeleteCount).keys();
92
98
  case 3:
99
+ records = _context.sent;
100
+ if (!(records.length > 0)) {
101
+ _context.next = 5;
102
+ break;
103
+ }
104
+ maxIdToDelete = records[records.length - 1];
105
+ _context.next = 4;
106
+ return _db.db.logs.where(':id').belowOrEqual(maxIdToDelete)["delete"]();
107
+ case 4:
93
108
  total = _context.sent;
94
109
  console.log("[worker] done deleting records. total: ".concat(total));
95
- case 4:
96
110
  _context.next = 6;
97
111
  break;
98
112
  case 5:
99
- _context.prev = 5;
113
+ console.log("[worker] no records to delete");
114
+ case 6:
115
+ _context.next = 8;
116
+ break;
117
+ case 7:
118
+ _context.prev = 7;
100
119
  _t = _context["catch"](1);
101
120
  console.error("[worker] clear db failed.", _t);
102
- case 6:
103
- _context.prev = 6;
121
+ case 8:
122
+ _context.prev = 8;
104
123
  console.log("[worker] start writing logs. total: ".concat(logscopy.length));
105
- _context.next = 7;
124
+ _context.next = 9;
106
125
  return _db.db.logs.bulkPut(logscopy);
107
- case 7:
126
+ case 9:
108
127
  pk = _context.sent;
109
128
  time2 = new Date().getTime();
110
129
  console.log("[worker] done writing logs in ".concat(time2 - time1, "ms. total: ").concat(logscopy.length, ", lastId: ").concat(pk));
111
- _context.next = 9;
130
+ _context.next = 11;
112
131
  break;
113
- case 8:
114
- _context.prev = 8;
115
- _t2 = _context["catch"](6);
132
+ case 10:
133
+ _context.prev = 10;
134
+ _t2 = _context["catch"](8);
116
135
  console.error("[worker] bulkPut ".concat(logscopy.length, " failed."), _t2);
117
- case 9:
136
+ case 11:
118
137
  case "end":
119
138
  return _context.stop();
120
139
  }
121
- }, _callee, null, [[1, 5], [6, 8]]);
140
+ }, _callee, null, [[1, 7], [8, 10]]);
122
141
  }))(), MAX_WAIT_TIME);
123
142
  })["catch"](function (e) {
124
143
  console.log('[worker] an error during dispatching writeLog', e);
@@ -128,14 +147,14 @@ var debouncedWriting = (0, _debounce["default"])(function () {
128
147
  });
129
148
  var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
130
149
  var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(self, callId, labels) {
131
- var zip, blob, lastId, _iterator, _step, _loop, buffer, _t3, _t4;
150
+ var buffer, lastId, _createMultiEntryZip, addFile, finish, _iterator, _step, _loop, _t3, _t4;
132
151
  return _regenerator["default"].wrap(function (_context3) {
133
152
  while (1) switch (_context3.prev = _context3.next) {
134
153
  case 0:
135
- zip = new _jszip["default"]();
136
- blob = new Blob();
154
+ buffer = new ArrayBuffer();
137
155
  lastId = 0;
138
156
  _context3.prev = 1;
157
+ _createMultiEntryZip = (0, _zip.createMultiEntryZip)(), addFile = _createMultiEntryZip.addFile, finish = _createMultiEntryZip.finish;
139
158
  _iterator = _createForOfIteratorHelper(labels);
140
159
  _context3.prev = 2;
141
160
  _loop = /*#__PURE__*/_regenerator["default"].mark(function _loop() {
@@ -153,7 +172,7 @@ var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
153
172
  if (e.id > lastId) lastId = e.id;
154
173
  });
155
174
  case 1:
156
- zip.file("".concat(label, "-logs.txt"), logsStr);
175
+ addFile("".concat(label, "-logs.txt"), logsStr);
157
176
  console.log("[worker] collected ".concat(count, " logs by labels [").concat(label, "]."));
158
177
  case 2:
159
178
  case "end":
@@ -184,11 +203,9 @@ var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
184
203
  return _context3.finish(7);
185
204
  case 8:
186
205
  _context3.next = 9;
187
- return zip.generateAsync({
188
- type: 'blob'
189
- });
206
+ return finish();
190
207
  case 9:
191
- blob = _context3.sent;
208
+ buffer = _context3.sent;
192
209
  _context3.next = 11;
193
210
  break;
194
211
  case 10:
@@ -199,17 +216,13 @@ var collectLogs = exports.collectLogs = /*#__PURE__*/function () {
199
216
  isSuccess: false
200
217
  });
201
218
  case 11:
202
- console.log("[worker] completed collecting logs, compressed size: ".concat(blob.size, " bytes."));
203
- _context3.next = 12;
204
- return blob.arrayBuffer();
205
- case 12:
206
- buffer = _context3.sent;
219
+ console.log("[worker] completed collecting logs, compressed size: ".concat(buffer.byteLength, " bytes."));
207
220
  (0, _reply.reply)(self, callId, _constants.WorkerDirectives.COLLECT_LOGS, {
208
221
  isSuccess: true,
209
222
  buffer: buffer,
210
223
  lastId: lastId
211
224
  }, [buffer]);
212
- case 13:
225
+ case 12:
213
226
  case "end":
214
227
  return _context3.stop();
215
228
  }