@zykj2024/much-library 1.1.7-beta.3 → 1.1.7-beta.4
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.
- package/dist/esm/McCascader/city.js +909 -0
- package/dist/esm/McCascader/index.d.ts +19 -0
- package/dist/esm/McCascader/index.js +221 -0
- package/dist/esm/McCascader/index.less +72 -0
- package/dist/esm/McContainer/index.d.ts +192 -0
- package/dist/esm/McContainer/index.js +522 -0
- package/dist/esm/McContainer/index.less +132 -0
- package/dist/esm/McDateRange/index.d.ts +28 -0
- package/dist/esm/McDateRange/index.js +167 -0
- package/dist/esm/McDateRange/index.less +33 -0
- package/dist/esm/McEllipsis/index.d.ts +40 -0
- package/dist/esm/McEllipsis/index.js +115 -0
- package/dist/esm/McEllipsis/index.less +9 -0
- package/dist/esm/McEllipsisMiddle/index.d.ts +13 -0
- package/dist/esm/McEllipsisMiddle/index.js +42 -0
- package/dist/esm/McEllipsisMiddle/index.less +9 -0
- package/dist/esm/McFonts/index.d.ts +8 -0
- package/dist/esm/McFonts/index.js +7 -0
- package/dist/esm/McGroupPanel/comps/SelectedItem/index.d.ts +4 -0
- package/dist/esm/McGroupPanel/comps/SelectedItem/index.js +75 -0
- package/dist/esm/McGroupPanel/index.d.ts +30 -0
- package/dist/esm/McGroupPanel/index.js +426 -0
- package/dist/esm/McGroupPanel/index.less +161 -0
- package/dist/esm/McIconFont/iconfont.js +1 -0
- package/dist/esm/McIconFont/index.d.ts +5 -0
- package/dist/esm/McIconFont/index.js +8 -0
- package/dist/esm/McIcons/business.json +137 -0
- package/dist/esm/McIcons/index.less +22 -0
- package/dist/esm/McInput/Input.d.ts +19 -0
- package/dist/esm/McInput/Input.js +48 -0
- package/dist/esm/McInput/Search.d.ts +39 -0
- package/dist/esm/McInput/Search.js +81 -0
- package/dist/esm/McInput/TextArea.d.ts +11 -0
- package/dist/esm/McInput/TextArea.js +37 -0
- package/dist/esm/McInput/demo/Input/addonBefore.d.ts +3 -0
- package/dist/esm/McInput/demo/Input/addonBefore.js +67 -0
- package/dist/esm/McInput/demo/Input/base.d.ts +2 -0
- package/dist/esm/McInput/demo/Input/base.js +31 -0
- package/dist/esm/McInput/demo/Input/isTrim.d.ts +2 -0
- package/dist/esm/McInput/demo/Input/isTrim.js +22 -0
- package/dist/esm/McInput/demo/Input/label.d.ts +2 -0
- package/dist/esm/McInput/demo/Input/label.js +26 -0
- package/dist/esm/McInput/demo/Input/ref.d.ts +3 -0
- package/dist/esm/McInput/demo/Input/ref.js +53 -0
- package/dist/esm/McInput/demo/Input/status.d.ts +2 -0
- package/dist/esm/McInput/demo/Input/status.js +23 -0
- package/dist/esm/McInput/demo/Search/search-base.d.ts +2 -0
- package/dist/esm/McInput/demo/Search/search-base.js +38 -0
- package/dist/esm/McInput/demo/TextArea/text-area-base.d.ts +2 -0
- package/dist/esm/McInput/demo/TextArea/text-area-base.js +38 -0
- package/dist/esm/McInput/index.d.ts +13 -0
- package/dist/esm/McInput/index.js +7 -0
- package/dist/esm/McInput/index.less +62 -0
- package/dist/esm/McInputNumber/index.d.ts +16 -0
- package/dist/esm/McInputNumber/index.js +50 -0
- package/dist/esm/McInputNumber/index.less +18 -0
- package/dist/esm/McLazyLoader/index.d.ts +39 -0
- package/dist/esm/McLazyLoader/index.js +88 -0
- package/dist/esm/McListSelect/comps/ListSelect.d.ts +67 -0
- package/dist/esm/McListSelect/comps/ListSelect.js +289 -0
- package/dist/esm/McListSelect/comps/ListSelectPanel.d.ts +138 -0
- package/dist/esm/McListSelect/comps/ListSelectPanel.js +451 -0
- package/dist/esm/McListSelect/comps/SelectedItem.d.ts +17 -0
- package/dist/esm/McListSelect/comps/SelectedItem.js +76 -0
- package/dist/esm/McListSelect/index.d.ts +10 -0
- package/dist/esm/McListSelect/index.js +5 -0
- package/dist/esm/McListSelect/index.less +257 -0
- package/dist/esm/McModalProvider/index.d.ts +174 -0
- package/dist/esm/McModalProvider/index.js +498 -0
- package/dist/esm/McPeriodSelect/index.d.ts +13 -0
- package/dist/esm/McPeriodSelect/index.js +305 -0
- package/dist/esm/McPeriodSelect/index.less +187 -0
- package/dist/esm/McPopoverButton/index.d.ts +14 -0
- package/dist/esm/McPopoverButton/index.js +52 -0
- package/dist/esm/McPopoverForm/index.d.ts +14 -0
- package/dist/esm/McPopoverForm/index.js +95 -0
- package/dist/esm/McProSelect/index.d.ts +35 -0
- package/dist/esm/McProSelect/index.js +152 -0
- package/dist/esm/McResult/default.d.ts +1 -0
- package/dist/esm/McResult/default.js +98 -0
- package/dist/esm/McResult/icon.d.ts +25 -0
- package/dist/esm/McResult/icon.js +1014 -0
- package/dist/esm/McResult/index.d.ts +31 -0
- package/dist/esm/McResult/index.js +119 -0
- package/dist/esm/McResult/index.less +18 -0
- package/dist/esm/McResult/public/403.svg +164 -0
- package/dist/esm/McResult/public/404.svg +123 -0
- package/dist/esm/McResult/public/500.svg +129 -0
- package/dist/esm/McResult/public/building.svg +127 -0
- package/dist/esm/McResult/public/code403.svg +7 -0
- package/dist/esm/McResult/public/code404.svg +5 -0
- package/dist/esm/McResult/public/code500.svg +5 -0
- package/dist/esm/McResult/public/detailEmpty.svg +1 -0
- package/dist/esm/McResult/public/empty.svg +1 -0
- package/dist/esm/McResult/public/noFunction.svg +1 -0
- package/dist/esm/McResult/public/noUser.svg +90 -0
- package/dist/esm/McSelect/components/PanelSearchInput/index.d.ts +12 -0
- package/dist/esm/McSelect/components/PanelSearchInput/index.js +45 -0
- package/dist/esm/McSelect/components/PanelSearchInput/index.less +7 -0
- package/dist/esm/McSelect/index.d.ts +47 -0
- package/dist/esm/McSelect/index.js +436 -0
- package/dist/esm/McSelect/index.less +72 -0
- package/dist/esm/McTag/index.d.ts +22 -0
- package/dist/esm/McTag/index.js +59 -0
- package/dist/esm/McThemeConfig/customToken.json +39 -0
- package/dist/esm/McThemeConfig/globalStyle.d.ts +2 -0
- package/dist/esm/McThemeConfig/globalStyle.js +198 -0
- package/dist/esm/McThemeConfig/index.d.ts +9 -0
- package/dist/esm/McThemeConfig/index.js +16 -0
- package/dist/esm/McThemeConfig/layoutStyle.d.ts +2 -0
- package/dist/esm/McThemeConfig/layoutStyle.js +1 -0
- package/dist/esm/McThemeConfig/provider.d.ts +8 -0
- package/dist/esm/McThemeConfig/provider.js +20 -0
- package/dist/esm/McThemeConfig/themeToken.json +152 -0
- package/dist/esm/McTreePanel/SelectedItem.d.ts +4 -0
- package/dist/esm/McTreePanel/SelectedItem.js +75 -0
- package/dist/esm/McTreePanel/index.d.ts +27 -0
- package/dist/esm/McTreePanel/index.js +315 -0
- package/dist/esm/McTreePanel/index.less +106 -0
- package/dist/esm/McTreeSelect/index.d.ts +13 -0
- package/dist/esm/McTreeSelect/index.js +182 -0
- package/dist/esm/McTreeSelect/index.less +72 -0
- package/dist/esm/McUpload/comps/McFormUpload/comps/UploadForVal/index.d.ts +38 -0
- package/dist/esm/McUpload/comps/McFormUpload/comps/UploadForVal/index.js +209 -0
- package/dist/esm/McUpload/comps/McFormUpload/comps/UploadForVal/index.less +6 -0
- package/dist/esm/McUpload/comps/McFormUpload/index.d.ts +7 -0
- package/dist/esm/McUpload/comps/McFormUpload/index.js +29 -0
- package/dist/esm/McUpload/comps/McUploadCmp/index.d.ts +49 -0
- package/dist/esm/McUpload/comps/McUploadCmp/index.js +396 -0
- package/dist/esm/McUpload/comps/McUploadCmp/index.less +68 -0
- package/dist/esm/McUpload/comps/McUploadDragger/index.d.ts +49 -0
- package/dist/esm/McUpload/comps/McUploadDragger/index.js +264 -0
- package/dist/esm/McUpload/comps/McUploadTrigger/index.d.ts +39 -0
- package/dist/esm/McUpload/comps/McUploadTrigger/index.js +318 -0
- package/dist/esm/McUpload/comps/McUploadTrigger/index.less +204 -0
- package/dist/esm/McUpload/index.d.ts +14 -0
- package/dist/esm/McUpload/index.js +9 -0
- package/dist/esm/McUpload/tools/calculateMD5/index.d.ts +3 -0
- package/dist/esm/McUpload/tools/calculateMD5/index.js +94 -0
- package/dist/esm/McUpload/tools/calculateMD5/md5Worker.js +44 -0
- package/dist/esm/McUpload/tools/getUid.d.ts +1 -0
- package/dist/esm/McUpload/tools/getUid.js +6 -0
- package/dist/esm/McUpload/tools/materialVerification.d.ts +50 -0
- package/dist/esm/McUpload/tools/materialVerification.js +257 -0
- package/dist/esm/McUpload/tools/uploadTools.d.ts +5 -0
- package/dist/esm/McUpload/tools/uploadTools.js +56 -0
- package/dist/esm/Utils/index.d.ts +8 -0
- package/dist/esm/Utils/index.js +9 -0
- package/dist/esm/Utils/lib/Queue/PriorityQueue.d.ts +21 -0
- package/dist/esm/Utils/lib/Queue/PriorityQueue.js +197 -0
- package/dist/esm/Utils/lib/Queue/TaskQueue.d.ts +17 -0
- package/dist/esm/Utils/lib/Queue/TaskQueue.js +199 -0
- package/dist/esm/Utils/lib/Queue/tools/BinaryHeap.d.ts +25 -0
- package/dist/esm/Utils/lib/Queue/tools/BinaryHeap.js +184 -0
- package/dist/esm/Utils/lib/Queue/tools/publicDependencyMethod.d.ts +6 -0
- package/dist/esm/Utils/lib/Queue/tools/publicDependencyMethod.js +26 -0
- package/dist/esm/Utils/lib/Queue/types/baseTaskQueue.d.ts +23 -0
- package/dist/esm/Utils/lib/Queue/types/baseTaskQueue.js +10 -0
- package/dist/esm/Utils/lib/copyToClipboard.d.ts +8 -0
- package/dist/esm/Utils/lib/copyToClipboard.js +54 -0
- package/dist/esm/index.d.ts +34 -0
- package/dist/esm/index.js +33 -0
- package/dist/esm/styles/index.less +2 -0
- package/dist/esm/styles/mixins.less +52 -0
- package/dist/esm/styles/utilities.less +51 -0
- package/dist/esm/typings.d.ts +20 -0
- package/package.json +4 -3
@@ -0,0 +1,56 @@
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
3
|
+
// web workers 如果说是cpu密集型任务,一般开启不超过10个,低于cpu2核,给用户的其他程序留出空间,
|
4
|
+
// 如果是io密集型任务,一般开启2-4个或低于cpu核心数一半,因为io密集型任务会大量阻塞,开启太多反而会降低性能
|
5
|
+
|
6
|
+
import { isNumber } from "./materialVerification";
|
7
|
+
|
8
|
+
// 统计方法执行时长
|
9
|
+
export function measureExecutionTime(fn) {
|
10
|
+
return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
11
|
+
var start,
|
12
|
+
result,
|
13
|
+
end,
|
14
|
+
duration,
|
15
|
+
_args = arguments;
|
16
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
17
|
+
while (1) switch (_context.prev = _context.next) {
|
18
|
+
case 0:
|
19
|
+
start = Date.now();
|
20
|
+
_context.prev = 1;
|
21
|
+
_context.next = 4;
|
22
|
+
return fn.apply(void 0, _args);
|
23
|
+
case 4:
|
24
|
+
result = _context.sent;
|
25
|
+
_context.next = 10;
|
26
|
+
break;
|
27
|
+
case 7:
|
28
|
+
_context.prev = 7;
|
29
|
+
_context.t0 = _context["catch"](1);
|
30
|
+
// 如果函数抛出错误,将其捕获并存储在 result 中
|
31
|
+
result = _context.t0;
|
32
|
+
case 10:
|
33
|
+
end = Date.now();
|
34
|
+
duration = end - start; // 转换为毫秒
|
35
|
+
// 返回执行时间和函数结果
|
36
|
+
return _context.abrupt("return", {
|
37
|
+
duration: duration,
|
38
|
+
result: result
|
39
|
+
});
|
40
|
+
case 13:
|
41
|
+
case "end":
|
42
|
+
return _context.stop();
|
43
|
+
}
|
44
|
+
}, _callee, null, [[1, 7]]);
|
45
|
+
}));
|
46
|
+
}
|
47
|
+
export var transformNumber = function transformNumber(num) {
|
48
|
+
if (!isNumber(num)) {
|
49
|
+
var tempNum = Number(num);
|
50
|
+
if (isNumber(tempNum)) {
|
51
|
+
return tempNum;
|
52
|
+
}
|
53
|
+
return 0;
|
54
|
+
}
|
55
|
+
return num;
|
56
|
+
};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
/** 工具方法 */
|
2
|
+
export { default as debounce } from 'lodash/debounce';
|
3
|
+
export { default as isEmpty } from 'lodash/isEmpty';
|
4
|
+
export { default as isNil } from 'lodash/isNil';
|
5
|
+
export { default as throttle } from 'lodash/throttle';
|
6
|
+
export { default as PriorityQueueTask } from './lib/Queue/PriorityQueue';
|
7
|
+
export { default as TaskQueue } from './lib/Queue/TaskQueue';
|
8
|
+
export { default as copyToClipboard } from './lib/copyToClipboard';
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/** 工具方法 */
|
2
|
+
|
3
|
+
export { default as debounce } from 'lodash/debounce';
|
4
|
+
export { default as isEmpty } from 'lodash/isEmpty';
|
5
|
+
export { default as isNil } from 'lodash/isNil';
|
6
|
+
export { default as throttle } from 'lodash/throttle';
|
7
|
+
export { default as PriorityQueueTask } from "./lib/Queue/PriorityQueue";
|
8
|
+
export { default as TaskQueue } from "./lib/Queue/TaskQueue";
|
9
|
+
export { default as copyToClipboard } from "./lib/copyToClipboard";
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { BinaryHeap } from './tools/BinaryHeap';
|
2
|
+
import { BaseTaskQueue, Task, TaskConfig } from './types/baseTaskQueue';
|
3
|
+
export interface PriorityQueueTask extends Task {
|
4
|
+
priority: number;
|
5
|
+
}
|
6
|
+
declare class PriorityQueue extends BaseTaskQueue<BinaryHeap<TaskConfig>, Task> {
|
7
|
+
queue: BinaryHeap<TaskConfig>;
|
8
|
+
private runningTasks;
|
9
|
+
private pausedTasks;
|
10
|
+
private isPaused;
|
11
|
+
private maxConcurrency;
|
12
|
+
[key: string | symbol]: any;
|
13
|
+
constructor(maxConcurrency?: number, tasks?: PriorityQueueTask[]);
|
14
|
+
addTask(taskConfig: PriorityQueueTask | PriorityQueueTask[]): void;
|
15
|
+
runTasks(): void;
|
16
|
+
pauseTask(taskFilter: (task: TaskConfig) => boolean): void;
|
17
|
+
resumeTask(taskFilter: (task: Task) => boolean): void;
|
18
|
+
cancelTask(taskFilter: (task: Task) => boolean): void;
|
19
|
+
getTaskCount(type: 'all' | 'running' | 'notRunning'): number;
|
20
|
+
}
|
21
|
+
export default PriorityQueue;
|
@@ -0,0 +1,197 @@
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
3
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
4
|
+
import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
|
5
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
6
|
+
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
7
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
8
|
+
import { BinaryHeap } from "./tools/BinaryHeap";
|
9
|
+
import { asyncWrap } from "./tools/publicDependencyMethod";
|
10
|
+
import { BaseTaskQueue } from "./types/baseTaskQueue";
|
11
|
+
var PriorityQueue = /*#__PURE__*/function (_BaseTaskQueue) {
|
12
|
+
_inherits(PriorityQueue, _BaseTaskQueue);
|
13
|
+
var _super = _createSuper(PriorityQueue);
|
14
|
+
function PriorityQueue() {
|
15
|
+
var _this;
|
16
|
+
var maxConcurrency = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
17
|
+
var tasks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
18
|
+
_classCallCheck(this, PriorityQueue);
|
19
|
+
_this = _super.call(this);
|
20
|
+
_defineProperty(_assertThisInitialized(_this), "queue", void 0);
|
21
|
+
// 正在执行的任务队列
|
22
|
+
_defineProperty(_assertThisInitialized(_this), "runningTasks", []);
|
23
|
+
// 运行中被暂停的任务队列
|
24
|
+
_defineProperty(_assertThisInitialized(_this), "pausedTasks", []);
|
25
|
+
// 是否暂停任务
|
26
|
+
_defineProperty(_assertThisInitialized(_this), "isPaused", false);
|
27
|
+
// 最大并发数
|
28
|
+
_defineProperty(_assertThisInitialized(_this), "maxConcurrency", 1);
|
29
|
+
_this.queue = new BinaryHeap(function (a, b) {
|
30
|
+
return a.priority - b.priority;
|
31
|
+
});
|
32
|
+
tasks === null || tasks === void 0 || tasks.map(function (item) {
|
33
|
+
return _objectSpread(_objectSpread({}, item), {}, {
|
34
|
+
task: asyncWrap(item.task),
|
35
|
+
isPaused: _this.isPaused
|
36
|
+
});
|
37
|
+
}).forEach(function (task) {
|
38
|
+
_this.queue.insert(task);
|
39
|
+
});
|
40
|
+
_this.maxConcurrency = maxConcurrency;
|
41
|
+
return _this;
|
42
|
+
}
|
43
|
+
_createClass(PriorityQueue, [{
|
44
|
+
key: "addTask",
|
45
|
+
value: function addTask(taskConfig) {
|
46
|
+
var _this2 = this;
|
47
|
+
if (Array.isArray(taskConfig)) {
|
48
|
+
taskConfig.forEach(function (item) {
|
49
|
+
var _this2$queue;
|
50
|
+
(_this2$queue = _this2.queue) === null || _this2$queue === void 0 || _this2$queue.insert(_objectSpread(_objectSpread({}, item), {}, {
|
51
|
+
task: asyncWrap(item.task),
|
52
|
+
isPaused: _this2.isPaused
|
53
|
+
}));
|
54
|
+
});
|
55
|
+
} else {
|
56
|
+
var _this$queue;
|
57
|
+
(_this$queue = this.queue) === null || _this$queue === void 0 || _this$queue.insert(_objectSpread(_objectSpread({}, taskConfig), {}, {
|
58
|
+
task: asyncWrap(taskConfig.task),
|
59
|
+
isPaused: this.isPaused
|
60
|
+
}));
|
61
|
+
}
|
62
|
+
this.runTasks();
|
63
|
+
}
|
64
|
+
}, {
|
65
|
+
key: "runTasks",
|
66
|
+
value: function runTasks() {
|
67
|
+
var _this3 = this;
|
68
|
+
if (this.isPaused || this.runningTasks.length >= this.maxConcurrency || this.queue.size() === 0 && this.pausedTasks.length === 0) {
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
var _loop = function _loop() {
|
72
|
+
// 查看被暂停的任务队列中有没有可以执行的
|
73
|
+
var pasuedIndex = _this3.pausedTasks.findIndex(function (task) {
|
74
|
+
return !task.isPaused;
|
75
|
+
});
|
76
|
+
if (pasuedIndex !== -1) {
|
77
|
+
var _pasuedTask$resume;
|
78
|
+
var pasuedTask = _this3.pausedTasks[pasuedIndex];
|
79
|
+
pasuedTask === null || pasuedTask === void 0 || (_pasuedTask$resume = pasuedTask.resume) === null || _pasuedTask$resume === void 0 || _pasuedTask$resume.call(pasuedTask);
|
80
|
+
_this3.pausedTasks = _this3.pausedTasks.filter(function (task) {
|
81
|
+
return task.id !== pasuedTask.id;
|
82
|
+
});
|
83
|
+
_this3.runningTasks.push(pasuedTask);
|
84
|
+
} else {
|
85
|
+
var _task = _this3.queue.find(function (task) {
|
86
|
+
return !task.isPaused;
|
87
|
+
});
|
88
|
+
if (_task) {
|
89
|
+
_this3.queue = _this3.queue.filter(function (t) {
|
90
|
+
return t.id !== _task.id;
|
91
|
+
});
|
92
|
+
_this3.runningTasks.push(_task);
|
93
|
+
_task.task().then(function (res) {
|
94
|
+
var _task$onFinished;
|
95
|
+
_task === null || _task === void 0 || (_task$onFinished = _task.onFinished) === null || _task$onFinished === void 0 || _task$onFinished.call(_task, [null, res]);
|
96
|
+
}).catch(function (err) {
|
97
|
+
var _task$onFinished2;
|
98
|
+
_task === null || _task === void 0 || (_task$onFinished2 = _task.onFinished) === null || _task$onFinished2 === void 0 || _task$onFinished2.call(_task, [err, null]);
|
99
|
+
}).finally(function () {
|
100
|
+
_this3.runningTasks = _this3.runningTasks.filter(function (t) {
|
101
|
+
return t.id !== _task.id;
|
102
|
+
});
|
103
|
+
_this3.runTasks();
|
104
|
+
_task.isPaused = false;
|
105
|
+
});
|
106
|
+
}
|
107
|
+
}
|
108
|
+
};
|
109
|
+
while ((this.queue.size() > 0 && (_this$queue2 = this.queue) !== null && _this$queue2 !== void 0 && _this$queue2.some(function (task) {
|
110
|
+
return !task.isPaused;
|
111
|
+
}) || this.pausedTasks.length > 0 && (_this$pausedTasks = this.pausedTasks) !== null && _this$pausedTasks !== void 0 && _this$pausedTasks.some(function (task) {
|
112
|
+
return !task.isPaused;
|
113
|
+
})) && this.runningTasks.length < this.maxConcurrency && !this.isPaused) {
|
114
|
+
var _this$queue2, _this$pausedTasks;
|
115
|
+
_loop();
|
116
|
+
}
|
117
|
+
}
|
118
|
+
// 暂停所有任务
|
119
|
+
|
120
|
+
// 暂停指定任务
|
121
|
+
}, {
|
122
|
+
key: "pauseTask",
|
123
|
+
value: function pauseTask(taskFilter) {
|
124
|
+
this.queue.forEach(function (task) {
|
125
|
+
if (taskFilter(task)) {
|
126
|
+
task.isPaused = true;
|
127
|
+
}
|
128
|
+
});
|
129
|
+
this.runningTasks.forEach(function (task) {
|
130
|
+
if (taskFilter(task)) {
|
131
|
+
var _task$pause;
|
132
|
+
task === null || task === void 0 || (_task$pause = task.pause) === null || _task$pause === void 0 || _task$pause.call(task);
|
133
|
+
task.isPaused = true;
|
134
|
+
}
|
135
|
+
});
|
136
|
+
this.pausedTasks = this.pausedTasks.concat(this.runningTasks.filter(taskFilter));
|
137
|
+
this.runningTasks = this.runningTasks.filter(function (task) {
|
138
|
+
return !taskFilter(task);
|
139
|
+
});
|
140
|
+
this.runTasks();
|
141
|
+
}
|
142
|
+
|
143
|
+
// 恢复指定任务执行
|
144
|
+
}, {
|
145
|
+
key: "resumeTask",
|
146
|
+
value: function resumeTask(taskFilter) {
|
147
|
+
this.queue.forEach(function (task) {
|
148
|
+
if (taskFilter(task)) {
|
149
|
+
task.isPaused = false;
|
150
|
+
}
|
151
|
+
});
|
152
|
+
this.pausedTasks.forEach(function (task) {
|
153
|
+
if (taskFilter(task)) {
|
154
|
+
// task?.resume?.()
|
155
|
+
task.isPaused = false;
|
156
|
+
}
|
157
|
+
});
|
158
|
+
this.runTasks();
|
159
|
+
}
|
160
|
+
|
161
|
+
// 取消任务
|
162
|
+
}, {
|
163
|
+
key: "cancelTask",
|
164
|
+
value: function cancelTask(taskFilter) {
|
165
|
+
// 任务还没有执行,从队列中移除
|
166
|
+
this.queue = this.queue.filter(taskFilter);
|
167
|
+
// 任务正在执行,取消执行,从正在执行的任务队列中移除
|
168
|
+
this.runningTasks.forEach(function (task) {
|
169
|
+
if (taskFilter(task)) {
|
170
|
+
var _task$cancel;
|
171
|
+
task === null || task === void 0 || (_task$cancel = task.cancel) === null || _task$cancel === void 0 || _task$cancel.call(task);
|
172
|
+
}
|
173
|
+
});
|
174
|
+
this.runningTasks = this.runningTasks.filter(taskFilter);
|
175
|
+
this.pausedTasks = this.pausedTasks.filter(taskFilter);
|
176
|
+
this.runTasks();
|
177
|
+
}
|
178
|
+
|
179
|
+
// 获取当前正在执行的任务数数量
|
180
|
+
}, {
|
181
|
+
key: "getTaskCount",
|
182
|
+
value: function getTaskCount(type) {
|
183
|
+
switch (type) {
|
184
|
+
case 'all':
|
185
|
+
return this.queue.size() + this.runningTasks.length;
|
186
|
+
case 'running':
|
187
|
+
return this.runningTasks.length;
|
188
|
+
case 'notRunning':
|
189
|
+
return this.queue.size();
|
190
|
+
default:
|
191
|
+
return 0;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
}]);
|
195
|
+
return PriorityQueue;
|
196
|
+
}(BaseTaskQueue);
|
197
|
+
export default PriorityQueue;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { BaseTaskQueue, Task, TaskConfig } from './types/baseTaskQueue';
|
2
|
+
declare class TaskQueue extends BaseTaskQueue<Task[], Task> {
|
3
|
+
queue: TaskConfig[];
|
4
|
+
private runningTasks;
|
5
|
+
private pausedTasks;
|
6
|
+
private isPaused;
|
7
|
+
private maxConcurrency;
|
8
|
+
[key: string | symbol]: any;
|
9
|
+
constructor(maxConcurrency?: number, tasks?: Task[]);
|
10
|
+
addTask(taskConfig: Task | Task[]): void;
|
11
|
+
pauseTask(taskFilter: (task: Task) => boolean): void;
|
12
|
+
resumeTask(taskFilter: (task: Task) => boolean): void;
|
13
|
+
cancelTask(taskFilter: (task: Task) => boolean): void;
|
14
|
+
runTasks(): void;
|
15
|
+
getTaskCount(type: 'all' | 'running' | 'notRunning'): number;
|
16
|
+
}
|
17
|
+
export default TaskQueue;
|
@@ -0,0 +1,199 @@
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
3
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
4
|
+
import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
|
5
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
6
|
+
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
7
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
8
|
+
// 任务队列(顺序队列)
|
9
|
+
import { asyncWrap } from "./tools/publicDependencyMethod";
|
10
|
+
import { BaseTaskQueue } from "./types/baseTaskQueue";
|
11
|
+
var TaskQueue = /*#__PURE__*/function (_BaseTaskQueue) {
|
12
|
+
_inherits(TaskQueue, _BaseTaskQueue);
|
13
|
+
var _super = _createSuper(TaskQueue);
|
14
|
+
function TaskQueue() {
|
15
|
+
var _this;
|
16
|
+
var maxConcurrency = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
17
|
+
var tasks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
18
|
+
_classCallCheck(this, TaskQueue);
|
19
|
+
_this = _super.call(this);
|
20
|
+
// 任务队列
|
21
|
+
_defineProperty(_assertThisInitialized(_this), "queue", []);
|
22
|
+
// 正在执行的任务队列
|
23
|
+
_defineProperty(_assertThisInitialized(_this), "runningTasks", []);
|
24
|
+
// 运行中被暂停的任务队列
|
25
|
+
_defineProperty(_assertThisInitialized(_this), "pausedTasks", []);
|
26
|
+
// 是否暂停任务
|
27
|
+
_defineProperty(_assertThisInitialized(_this), "isPaused", false);
|
28
|
+
// 最大并发数
|
29
|
+
_defineProperty(_assertThisInitialized(_this), "maxConcurrency", 1);
|
30
|
+
_this.maxConcurrency = maxConcurrency;
|
31
|
+
_this.queue = tasks === null || tasks === void 0 ? void 0 : tasks.map(function (item) {
|
32
|
+
return _objectSpread(_objectSpread({}, item), {}, {
|
33
|
+
task: asyncWrap(item.task),
|
34
|
+
isPaused: _this.isPaused
|
35
|
+
});
|
36
|
+
});
|
37
|
+
return _this;
|
38
|
+
}
|
39
|
+
|
40
|
+
// 添加任务到队列
|
41
|
+
_createClass(TaskQueue, [{
|
42
|
+
key: "addTask",
|
43
|
+
value: function addTask(taskConfig) {
|
44
|
+
var _this2 = this;
|
45
|
+
if (Array.isArray(taskConfig)) {
|
46
|
+
taskConfig.forEach(function (taskItem) {
|
47
|
+
_this2.queue.push(_objectSpread(_objectSpread({}, taskItem), {}, {
|
48
|
+
task: asyncWrap(taskItem.task),
|
49
|
+
isPaused: _this2.isPaused
|
50
|
+
}));
|
51
|
+
});
|
52
|
+
} else {
|
53
|
+
this.queue.push(_objectSpread(_objectSpread({}, taskConfig), {}, {
|
54
|
+
task: asyncWrap(taskConfig.task),
|
55
|
+
isPaused: this.isPaused
|
56
|
+
}));
|
57
|
+
}
|
58
|
+
this.runTasks();
|
59
|
+
}
|
60
|
+
|
61
|
+
// 暂停指定任务
|
62
|
+
}, {
|
63
|
+
key: "pauseTask",
|
64
|
+
value: function pauseTask(taskFilter) {
|
65
|
+
var _this3 = this;
|
66
|
+
this.queue.forEach(function (task) {
|
67
|
+
if (taskFilter(task)) {
|
68
|
+
task.isPaused = true;
|
69
|
+
}
|
70
|
+
});
|
71
|
+
this.runningTasks.forEach(function (task) {
|
72
|
+
if (taskFilter(task)) {
|
73
|
+
var _task$pause;
|
74
|
+
task === null || task === void 0 || (_task$pause = task.pause) === null || _task$pause === void 0 || _task$pause.call(task);
|
75
|
+
task.isPaused = true;
|
76
|
+
_this3.pausedTasks.push(task);
|
77
|
+
}
|
78
|
+
});
|
79
|
+
this.runningTasks = this.runningTasks.filter(function (task) {
|
80
|
+
return !taskFilter(task);
|
81
|
+
});
|
82
|
+
this.runTasks();
|
83
|
+
}
|
84
|
+
|
85
|
+
// 恢复任务
|
86
|
+
}, {
|
87
|
+
key: "resumeTask",
|
88
|
+
value: function resumeTask(taskFilter) {
|
89
|
+
this.queue.forEach(function (task) {
|
90
|
+
if (taskFilter(task)) {
|
91
|
+
task.isPaused = false;
|
92
|
+
}
|
93
|
+
});
|
94
|
+
this.pausedTasks.forEach(function (task) {
|
95
|
+
if (taskFilter(task)) {
|
96
|
+
// 变为可执行任务等待任务队列取出执行
|
97
|
+
task.isPaused = false;
|
98
|
+
}
|
99
|
+
});
|
100
|
+
this.runTasks();
|
101
|
+
}
|
102
|
+
|
103
|
+
// 取消任务
|
104
|
+
}, {
|
105
|
+
key: "cancelTask",
|
106
|
+
value: function cancelTask(taskFilter) {
|
107
|
+
this.queue = this.queue.filter(function (task) {
|
108
|
+
return !taskFilter(task);
|
109
|
+
});
|
110
|
+
var cancelTasks = this.runningTasks.filter(taskFilter);
|
111
|
+
cancelTasks === null || cancelTasks === void 0 || cancelTasks.forEach(function (task) {
|
112
|
+
if (taskFilter(task)) {
|
113
|
+
var _task$cancel;
|
114
|
+
task === null || task === void 0 || (_task$cancel = task.cancel) === null || _task$cancel === void 0 || _task$cancel.call(task);
|
115
|
+
}
|
116
|
+
});
|
117
|
+
this.runningTasks = this.runningTasks.filter(function (task) {
|
118
|
+
return !taskFilter(task);
|
119
|
+
});
|
120
|
+
// 从暂停队列中移除
|
121
|
+
this.pausedTasks = this.pausedTasks.filter(function (task) {
|
122
|
+
return !taskFilter(task);
|
123
|
+
});
|
124
|
+
this.runTasks();
|
125
|
+
}
|
126
|
+
|
127
|
+
// 运行任务
|
128
|
+
}, {
|
129
|
+
key: "runTasks",
|
130
|
+
value: function runTasks() {
|
131
|
+
var _this4 = this;
|
132
|
+
if (this.isPaused || this.runningTasks.length >= this.maxConcurrency || this.queue.length === 0 && this.pausedTasks.length === 0) {
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
var _loop = function _loop() {
|
136
|
+
// 查看暂停的任务队列中有没有被激活的任务
|
137
|
+
var pauseIndex = _this4.pausedTasks.findIndex(function (task) {
|
138
|
+
return !task.isPaused;
|
139
|
+
});
|
140
|
+
if (pauseIndex > -1) {
|
141
|
+
var _task$resume;
|
142
|
+
var _task = _this4.pausedTasks[pauseIndex];
|
143
|
+
_this4.pausedTasks = _this4.pausedTasks.slice(0, pauseIndex).concat(_this4.pausedTasks.slice(pauseIndex + 1));
|
144
|
+
// 恢复执行
|
145
|
+
_task === null || _task === void 0 || (_task$resume = _task.resume) === null || _task$resume === void 0 || _task$resume.call(_task);
|
146
|
+
_this4.runningTasks.push(_task);
|
147
|
+
} else {
|
148
|
+
var indx = _this4.queue.findIndex(function (task) {
|
149
|
+
return !task.isPaused;
|
150
|
+
});
|
151
|
+
if (indx > -1) {
|
152
|
+
var _task2 = _this4.queue[indx];
|
153
|
+
_this4.queue = _this4.queue.slice(0, indx).concat(_this4.queue.slice(indx + 1));
|
154
|
+
_this4.runningTasks.push(_task2);
|
155
|
+
_task2 === null || _task2 === void 0 || _task2.task().then(function (res) {
|
156
|
+
var _task2$onFinished;
|
157
|
+
_task2 === null || _task2 === void 0 || (_task2$onFinished = _task2.onFinished) === null || _task2$onFinished === void 0 || _task2$onFinished.call(_task2, [null, res]);
|
158
|
+
}).catch(function (err) {
|
159
|
+
var _task2$onFinished2;
|
160
|
+
_task2 === null || _task2 === void 0 || (_task2$onFinished2 = _task2.onFinished) === null || _task2$onFinished2 === void 0 || _task2$onFinished2.call(_task2, [err, null]);
|
161
|
+
}).finally(function () {
|
162
|
+
_this4.runningTasks = _this4.runningTasks.filter(function (t) {
|
163
|
+
return t.id !== _task2.id;
|
164
|
+
});
|
165
|
+
_task2.isPaused = false;
|
166
|
+
_this4.runTasks();
|
167
|
+
});
|
168
|
+
}
|
169
|
+
}
|
170
|
+
};
|
171
|
+
while ((this.queue.length > 0 && (_this$queue = this.queue) !== null && _this$queue !== void 0 && _this$queue.some(function (task) {
|
172
|
+
return !task.isPaused;
|
173
|
+
}) || this.pausedTasks.length > 0 && (_this$pausedTasks = this.pausedTasks) !== null && _this$pausedTasks !== void 0 && _this$pausedTasks.some(function (task) {
|
174
|
+
return !task.isPaused;
|
175
|
+
})) && this.runningTasks.length < this.maxConcurrency && !this.isPaused) {
|
176
|
+
var _this$queue, _this$pausedTasks;
|
177
|
+
_loop();
|
178
|
+
}
|
179
|
+
}
|
180
|
+
|
181
|
+
// 获取当前指定状态的任务数数量
|
182
|
+
}, {
|
183
|
+
key: "getTaskCount",
|
184
|
+
value: function getTaskCount(type) {
|
185
|
+
switch (type) {
|
186
|
+
case 'all':
|
187
|
+
return this.queue.length + this.runningTasks.length;
|
188
|
+
case 'running':
|
189
|
+
return this.runningTasks.length;
|
190
|
+
case 'notRunning':
|
191
|
+
return this.queue.length;
|
192
|
+
default:
|
193
|
+
return 0;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
}]);
|
197
|
+
return TaskQueue;
|
198
|
+
}(BaseTaskQueue);
|
199
|
+
export default TaskQueue;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
export declare class BinaryHeap<T> {
|
2
|
+
private compare;
|
3
|
+
private heap;
|
4
|
+
constructor(compare: (a: T, b: T) => number);
|
5
|
+
private parentIndex;
|
6
|
+
private leftChildIndex;
|
7
|
+
private rightChildIndex;
|
8
|
+
private swap;
|
9
|
+
private siftUp;
|
10
|
+
private siftDown;
|
11
|
+
insert(item: T): void;
|
12
|
+
insertMany(items: T[]): void;
|
13
|
+
extractMin(): T | undefined;
|
14
|
+
deleteByIndex(index: number): T | undefined;
|
15
|
+
find(taskFilter: (task: T) => boolean): T | undefined;
|
16
|
+
findIndex(taskFilter: (task: T) => boolean): number;
|
17
|
+
peek(): T | undefined;
|
18
|
+
size(): number;
|
19
|
+
isEmpty(): boolean;
|
20
|
+
clear(): void;
|
21
|
+
forEach(callback: (item: T) => void): void;
|
22
|
+
filter(taskFilter: (task: T) => boolean): BinaryHeap<T>;
|
23
|
+
some(taskFilter: (task: T) => boolean): boolean;
|
24
|
+
every(taskFilter: (task: T) => boolean): boolean;
|
25
|
+
}
|