@modern-js/monorepo-tools 2.14.0 → 2.16.0
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/CHANGELOG.md +38 -0
- package/dist/cjs/cli/build.js +10 -31
- package/dist/cjs/cli/buildWatch.js +11 -31
- package/dist/cjs/cli/clear.js +11 -31
- package/dist/cjs/cli/deploy.js +14 -36
- package/dist/cjs/cli/index.js +23 -22
- package/dist/cjs/cli/install.js +11 -31
- package/dist/cjs/cli/new.js +17 -37
- package/dist/cjs/commands/build.js +21 -46
- package/dist/cjs/commands/buildWatch.js +19 -36
- package/dist/cjs/commands/clear.js +17 -34
- package/dist/cjs/commands/deploy.js +25 -41
- package/dist/cjs/commands/index.js +22 -21
- package/dist/cjs/commands/install.js +19 -36
- package/dist/cjs/constants.js +13 -26
- package/dist/cjs/dag/create.js +16 -28
- package/dist/cjs/dag/edgeManager.js +24 -28
- package/dist/cjs/dag/index.js +11 -29
- package/dist/cjs/dag/operator.js +106 -123
- package/dist/cjs/dag/task.js +52 -63
- package/dist/cjs/dag/utils.js +52 -49
- package/dist/cjs/features/build/index.js +52 -68
- package/dist/cjs/features/clear/index.js +66 -47
- package/dist/cjs/features/deploy/index.js +126 -96
- package/dist/cjs/features/dev/cmds.js +10 -25
- package/dist/cjs/features/dev/createTask.js +93 -56
- package/dist/cjs/features/dev/index.js +43 -71
- package/dist/cjs/features/dev/watchProjectsState.js +89 -64
- package/dist/cjs/features/install/index.js +74 -63
- package/dist/cjs/hooks/index.js +9 -27
- package/dist/cjs/index.js +36 -53
- package/dist/cjs/locale/en.js +7 -25
- package/dist/cjs/locale/index.js +18 -28
- package/dist/cjs/locale/zh.js +7 -25
- package/dist/cjs/log/error.js +7 -25
- package/dist/cjs/log/multiTasksLog.js +42 -43
- package/dist/cjs/log/time.js +19 -29
- package/dist/cjs/log/utils.js +7 -25
- package/dist/cjs/package/index.js +28 -30
- package/dist/cjs/parse-config/index.js +61 -49
- package/dist/cjs/parse-config/monorepo.js +81 -67
- package/dist/cjs/projects/checkProjectChange.js +95 -73
- package/dist/cjs/projects/clearMemoryFiles.js +52 -44
- package/dist/cjs/projects/getProjects.js +38 -65
- package/dist/cjs/projects/getProjectsByPackagesConfig.js +93 -71
- package/dist/cjs/projects/getProjectsByWorkspaceFile.js +89 -85
- package/dist/cjs/type.js +4 -15
- package/dist/cjs/utils/install.js +69 -44
- package/dist/cjs/utils/types.js +4 -15
- package/dist/esm/cli/build.js +2 -8
- package/dist/esm/cli/buildWatch.js +4 -9
- package/dist/esm/cli/clear.js +4 -9
- package/dist/esm/cli/deploy.js +7 -14
- package/dist/esm/cli/install.js +4 -9
- package/dist/esm/cli/new.js +9 -14
- package/dist/esm/commands/build.js +7 -17
- package/dist/esm/commands/buildWatch.js +6 -8
- package/dist/esm/commands/clear.js +6 -8
- package/dist/esm/commands/deploy.js +10 -11
- package/dist/esm/commands/install.js +6 -8
- package/dist/esm/constants.js +2 -6
- package/dist/esm/dag/create.js +10 -7
- package/dist/esm/dag/edgeManager.js +17 -6
- package/dist/esm/dag/index.js +1 -4
- package/dist/esm/dag/operator.js +77 -74
- package/dist/esm/dag/task.js +39 -30
- package/dist/esm/dag/utils.js +39 -27
- package/dist/esm/features/build/index.js +22 -27
- package/dist/esm/features/clear/index.js +4 -6
- package/dist/esm/features/deploy/index.js +55 -50
- package/dist/esm/features/dev/cmds.js +4 -4
- package/dist/esm/features/dev/createTask.js +31 -15
- package/dist/esm/features/dev/index.js +19 -27
- package/dist/esm/features/dev/watchProjectsState.js +41 -31
- package/dist/esm/features/install/index.js +11 -15
- package/dist/esm/hooks/index.js +1 -4
- package/dist/esm/index.js +12 -11
- package/dist/esm/locale/en.js +1 -4
- package/dist/esm/locale/index.js +5 -5
- package/dist/esm/locale/zh.js +1 -4
- package/dist/esm/log/error.js +1 -4
- package/dist/esm/log/multiTasksLog.js +32 -18
- package/dist/esm/log/time.js +7 -8
- package/dist/esm/log/utils.js +1 -4
- package/dist/esm/package/index.js +21 -8
- package/dist/esm/parse-config/index.js +11 -14
- package/dist/esm/parse-config/monorepo.js +20 -27
- package/dist/esm/projects/checkProjectChange.js +19 -23
- package/dist/esm/projects/clearMemoryFiles.js +3 -13
- package/dist/esm/projects/getProjects.js +21 -45
- package/dist/esm/projects/getProjectsByPackagesConfig.js +29 -33
- package/dist/esm/projects/getProjectsByWorkspaceFile.js +21 -41
- package/dist/esm/type.js +1 -0
- package/dist/esm/utils/install.js +12 -8
- package/dist/esm/utils/types.js +1 -0
- package/package.json +16 -12
package/dist/cjs/dag/operator.js
CHANGED
|
@@ -1,91 +1,80 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var operator_exports = {};
|
|
29
|
-
__export(operator_exports, {
|
|
30
|
-
DagOperator: () => DagOperator
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
31
4
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
5
|
+
Object.defineProperty(exports, "DagOperator", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: () => DagOperator
|
|
8
|
+
});
|
|
9
|
+
const _pmap = /* @__PURE__ */ _interop_require_default(require("p-map"));
|
|
10
|
+
const _error = require("../log/error");
|
|
11
|
+
const _task = require("./task");
|
|
12
|
+
const _edgeManager = require("./edgeManager");
|
|
13
|
+
const _utils = require("./utils");
|
|
14
|
+
function _define_property(obj, key, value) {
|
|
15
|
+
if (key in obj) {
|
|
16
|
+
Object.defineProperty(obj, key, {
|
|
17
|
+
value,
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
obj[key] = value;
|
|
47
24
|
}
|
|
25
|
+
return obj;
|
|
26
|
+
}
|
|
27
|
+
function _interop_require_default(obj) {
|
|
28
|
+
return obj && obj.__esModule ? obj : {
|
|
29
|
+
default: obj
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
class DagOperator {
|
|
48
33
|
checkNodeDataExist(name) {
|
|
49
34
|
return this._projectsMap.has(name);
|
|
50
35
|
}
|
|
51
|
-
getNodeData(name, option = {
|
|
36
|
+
getNodeData(name, option = {
|
|
37
|
+
checkExist: false
|
|
38
|
+
}) {
|
|
52
39
|
if (option.checkExist) {
|
|
53
40
|
if (this._projectsMap.has(name)) {
|
|
54
41
|
return this._projectsMap.get(name);
|
|
55
42
|
} else {
|
|
56
|
-
(0,
|
|
43
|
+
(0, _error.errorLog)(`No '${name}' project exist`);
|
|
57
44
|
}
|
|
58
45
|
}
|
|
59
46
|
return this._projectsMap.get(name);
|
|
60
47
|
}
|
|
61
48
|
getNodeDependencyData(name) {
|
|
62
|
-
var
|
|
63
|
-
return ((
|
|
49
|
+
var _this__projectsMap_get;
|
|
50
|
+
return ((_this__projectsMap_get = this._projectsMap.get(name)) === null || _this__projectsMap_get === void 0 ? void 0 : _this__projectsMap_get.dependency) || [];
|
|
64
51
|
}
|
|
65
52
|
getNodeDependentData(name) {
|
|
66
|
-
var
|
|
67
|
-
return ((
|
|
53
|
+
var _this__projectsMap_get;
|
|
54
|
+
return ((_this__projectsMap_get = this._projectsMap.get(name)) === null || _this__projectsMap_get === void 0 ? void 0 : _this__projectsMap_get.dependent) || [];
|
|
68
55
|
}
|
|
69
|
-
getNodeAllDependencyData(name, option = {
|
|
56
|
+
getNodeAllDependencyData(name, option = {
|
|
57
|
+
skipCircleCheck: false
|
|
58
|
+
}) {
|
|
70
59
|
const { skipCircleCheck } = option;
|
|
71
60
|
if (!skipCircleCheck) {
|
|
72
61
|
this.checkCircle();
|
|
73
62
|
}
|
|
74
63
|
if (!this._projectsMap.has(name)) {
|
|
75
|
-
(0,
|
|
64
|
+
(0, _error.errorLog)(`No '${name}' project exist`);
|
|
76
65
|
}
|
|
77
66
|
const currentNode = this._projectsMap.get(name);
|
|
78
|
-
return (0,
|
|
67
|
+
return (0, _utils.recursiveGetDependency)(currentNode, skipCircleCheck);
|
|
79
68
|
}
|
|
80
69
|
setNodeData(name, task) {
|
|
81
70
|
if (this._projectsMap.has(name)) {
|
|
82
71
|
task(this._projectsMap.get(name));
|
|
83
72
|
} else {
|
|
84
|
-
(0,
|
|
73
|
+
(0, _error.errorLog)(`No '${name}' project exist`);
|
|
85
74
|
}
|
|
86
75
|
}
|
|
87
76
|
async traverseAllNodes(task) {
|
|
88
|
-
const sortedNodes = this._sortedProjects.length > 0 ? this._sortedProjects : (0,
|
|
77
|
+
const sortedNodes = this._sortedProjects.length > 0 ? this._sortedProjects : (0, _utils.sortProjects)(this._projects);
|
|
89
78
|
const finishTaskHash = {};
|
|
90
79
|
let preNodes = [];
|
|
91
80
|
let earlyFinish = false;
|
|
@@ -93,22 +82,22 @@ class DagOperator {
|
|
|
93
82
|
if (earlyFinish) {
|
|
94
83
|
break;
|
|
95
84
|
}
|
|
96
|
-
await (0,
|
|
85
|
+
await (0, _pmap.default)(
|
|
97
86
|
projects,
|
|
98
87
|
// eslint-disable-next-line @typescript-eslint/no-loop-func
|
|
99
88
|
async (project) => {
|
|
100
89
|
if (!finishTaskHash[project.name]) {
|
|
101
90
|
finishTaskHash[project.name] = true;
|
|
102
|
-
await task(
|
|
103
|
-
project,
|
|
104
|
-
this._getProjectPreviousNode(project.dependent || [], preNodes),
|
|
105
|
-
() => earlyFinish = true
|
|
106
|
-
);
|
|
91
|
+
await task(project, this._getProjectPreviousNode(project.dependent || [], preNodes), () => earlyFinish = true);
|
|
107
92
|
}
|
|
108
93
|
},
|
|
109
|
-
{
|
|
94
|
+
{
|
|
95
|
+
concurrency: projects.length
|
|
96
|
+
}
|
|
110
97
|
);
|
|
111
|
-
preNodes = [
|
|
98
|
+
preNodes = [
|
|
99
|
+
...projects
|
|
100
|
+
];
|
|
112
101
|
}
|
|
113
102
|
}
|
|
114
103
|
checkCircle() {
|
|
@@ -122,35 +111,34 @@ class DagOperator {
|
|
|
122
111
|
});
|
|
123
112
|
}
|
|
124
113
|
/**
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
114
|
+
* 1. 把目标节点当做叶子节点集合 A 中的元素
|
|
115
|
+
* 2. 当叶子节点集合中某个 a 元素结束任务的时候进行如下操作:
|
|
116
|
+
* 2.1 剪(去额外的)枝:获取 a 元素的 dependent集合,将该集合中元素的依赖列表进行过滤,过滤条件为:排除 a 以及 a 元素的 dependent集合以外的元素。
|
|
117
|
+
* 2.2 入度减一:对 a 元素的 dependent 集合元素的 dependencyEdge 减一
|
|
118
|
+
* 3. 检查是否存在 dependencyEdge === 0 的节点,加入叶子节点集合 A中。
|
|
119
|
+
* 4. 根据情况(是否存在空闲的进程)选择是否执行新加入的节点对应的任务。
|
|
120
|
+
*/
|
|
132
121
|
async traverseProjectToDependent(name, task, { withSelf = false, runTaskConcurrency } = {}) {
|
|
133
122
|
if (!this._projectsMap.has(name)) {
|
|
134
|
-
(0,
|
|
123
|
+
(0, _error.errorLog)(`No '${name}' project exist`);
|
|
135
124
|
}
|
|
136
125
|
const traverseTargetNode = this._projectsMap.get(name);
|
|
137
126
|
const leafNodeTasks = [
|
|
138
127
|
withSelf ? this._createTask(traverseTargetNode, task) : async () => Promise.resolve(traverseTargetNode.name)
|
|
139
128
|
];
|
|
140
|
-
const taskRunner = new
|
|
129
|
+
const taskRunner = new _task.TaskRunner(leafNodeTasks, {
|
|
141
130
|
concurrency: runTaskConcurrency
|
|
142
131
|
});
|
|
143
|
-
const edgeManager = new
|
|
144
|
-
taskRunner.on(
|
|
132
|
+
const edgeManager = new _edgeManager.EdgeManager();
|
|
133
|
+
taskRunner.on(_task.TaskRunner.TASK_FINISH, (projectName) => {
|
|
145
134
|
const projectNode = this.getNodeData(projectName);
|
|
146
135
|
const dependent = projectNode.dependent || [];
|
|
147
136
|
for (const dependentProject of dependent) {
|
|
148
137
|
const dependency = dependentProject.dependency || [];
|
|
149
|
-
const removeNodes = dependency.filter(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
);
|
|
138
|
+
const removeNodes = dependency.filter((dependencyProject) => ![
|
|
139
|
+
projectName,
|
|
140
|
+
...dependent.map((p) => p.name)
|
|
141
|
+
].includes(dependencyProject.name));
|
|
154
142
|
edgeManager.reduceEdges(dependentProject, removeNodes.length + 1);
|
|
155
143
|
if (edgeManager.getEdge(dependentProject) === 0) {
|
|
156
144
|
taskRunner.addTask(this._createTask(dependentProject, task));
|
|
@@ -160,37 +148,36 @@ class DagOperator {
|
|
|
160
148
|
await taskRunner.run();
|
|
161
149
|
}
|
|
162
150
|
/**
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
151
|
+
* 1. 找到叶子节点集合 A
|
|
152
|
+
* 2. 找到直接连接叶子节点的节点集合 B
|
|
153
|
+
* 3. 当有某个叶子节点结束任务,则对该节点的直接连接的节点(或者理解成dependent)的枝数(或者叫入度)减一。
|
|
154
|
+
* 4. 检查 B 集合中是否存在入度为0的节点,则此节点为叶子节点,并加入叶子节点集合 A
|
|
155
|
+
* 5. 根据情况(是否存在空闲的进程)选择是否执行新加入的节点对应的任务。
|
|
156
|
+
*/
|
|
169
157
|
// TODO: 执行顺序还需要再确定一下
|
|
170
158
|
async traverseDependenciesToProject(name, task, { withSelf = false, runTaskConcurrency } = {}) {
|
|
171
159
|
if (!this._projectsMap.has(name)) {
|
|
172
|
-
(0,
|
|
160
|
+
(0, _error.errorLog)(`No '${name}' project exist`);
|
|
173
161
|
}
|
|
174
162
|
const traverseTargetNode = this._projectsMap.get(name);
|
|
175
163
|
const leafNodes = this._getDependencyLeafNodes(traverseTargetNode);
|
|
176
|
-
if ((leafNodes
|
|
164
|
+
if ((leafNodes === null || leafNodes === void 0 ? void 0 : leafNodes.length) === 0) {
|
|
177
165
|
await this._createTask(traverseTargetNode, task)();
|
|
178
166
|
return;
|
|
179
167
|
}
|
|
180
|
-
const leafNodeTasks = leafNodes.map(
|
|
181
|
-
|
|
182
|
-
);
|
|
183
|
-
const taskRunner = new import_task.TaskRunner(leafNodeTasks, {
|
|
168
|
+
const leafNodeTasks = leafNodes.map((project) => this._createTask(project, task));
|
|
169
|
+
const taskRunner = new _task.TaskRunner(leafNodeTasks, {
|
|
184
170
|
concurrency: runTaskConcurrency
|
|
185
171
|
});
|
|
186
|
-
const edgeManager = new
|
|
187
|
-
taskRunner.on(
|
|
172
|
+
const edgeManager = new _edgeManager.EdgeManager();
|
|
173
|
+
taskRunner.on(_task.TaskRunner.TASK_FINISH, (projectName) => {
|
|
188
174
|
const projectNode = this.getNodeData(projectName);
|
|
189
175
|
const dependent = projectNode.dependent || [];
|
|
190
176
|
for (const dependentProject of dependent) {
|
|
191
|
-
if (![
|
|
192
|
-
|
|
193
|
-
|
|
177
|
+
if (![
|
|
178
|
+
traverseTargetNode,
|
|
179
|
+
...leafNodes
|
|
180
|
+
].some((n) => n.name === dependentProject.name)) {
|
|
194
181
|
continue;
|
|
195
182
|
}
|
|
196
183
|
edgeManager.reduceOneEdge(dependentProject);
|
|
@@ -217,22 +204,16 @@ class DagOperator {
|
|
|
217
204
|
_checkForCyclicDependencies(projects, dependencyChain, alreadyCheckedProjects) {
|
|
218
205
|
for (const project of projects) {
|
|
219
206
|
if (dependencyChain.includes(project.name)) {
|
|
220
|
-
throw new Error(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
`
|
|
226
|
-
);
|
|
207
|
+
throw new Error(`${"A cyclic dependency was encountered:\n"} ${[
|
|
208
|
+
...dependencyChain,
|
|
209
|
+
project.name
|
|
210
|
+
].reverse().join("\n -> ")}
|
|
211
|
+
`);
|
|
227
212
|
}
|
|
228
213
|
if (!alreadyCheckedProjects.has(project.name)) {
|
|
229
214
|
alreadyCheckedProjects.add(project.name);
|
|
230
215
|
dependencyChain.push(project.name);
|
|
231
|
-
this._checkForCyclicDependencies(
|
|
232
|
-
project.dependent,
|
|
233
|
-
dependencyChain,
|
|
234
|
-
alreadyCheckedProjects
|
|
235
|
-
);
|
|
216
|
+
this._checkForCyclicDependencies(project.dependent, dependencyChain, alreadyCheckedProjects);
|
|
236
217
|
dependencyChain.pop();
|
|
237
218
|
}
|
|
238
219
|
}
|
|
@@ -242,7 +223,9 @@ class DagOperator {
|
|
|
242
223
|
if (dependency.length === 0) {
|
|
243
224
|
return [];
|
|
244
225
|
}
|
|
245
|
-
let leafNodes = [
|
|
226
|
+
let leafNodes = [
|
|
227
|
+
...dependency
|
|
228
|
+
];
|
|
246
229
|
for (const dependencyNode of dependency) {
|
|
247
230
|
leafNodes = [
|
|
248
231
|
...leafNodes,
|
|
@@ -252,18 +235,18 @@ class DagOperator {
|
|
|
252
235
|
return leafNodes;
|
|
253
236
|
}
|
|
254
237
|
_getProjectPreviousNode(searchProjects, preNodes) {
|
|
255
|
-
return searchProjects.filter(
|
|
256
|
-
|
|
257
|
-
|
|
238
|
+
return searchProjects.filter((p) => preNodes.map((preP) => preP.name).includes(p.name));
|
|
239
|
+
}
|
|
240
|
+
constructor(projects, projectsMap) {
|
|
241
|
+
_define_property(this, "_projects", void 0);
|
|
242
|
+
_define_property(this, "_projectsMap", void 0);
|
|
243
|
+
_define_property(this, "_sortedProjects", void 0);
|
|
244
|
+
_define_property(this, "_createTask", (project, task) => async (stopTask = () => void 0) => {
|
|
245
|
+
await task(project, project.dependency || [], () => stopTask());
|
|
246
|
+
return project.name;
|
|
247
|
+
});
|
|
248
|
+
this._projects = projects;
|
|
249
|
+
this._projectsMap = projectsMap;
|
|
250
|
+
this._sortedProjects = [];
|
|
258
251
|
}
|
|
259
|
-
// public async getOrderTasks() {
|
|
260
|
-
// // Precalculate the number of dependent packages
|
|
261
|
-
// for (const project of this._projects) {
|
|
262
|
-
// calculateCriticalPaths(project);
|
|
263
|
-
// }
|
|
264
|
-
// }
|
|
265
252
|
}
|
|
266
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
267
|
-
0 && (module.exports = {
|
|
268
|
-
DagOperator
|
|
269
|
-
});
|
package/dist/cjs/dag/task.js
CHANGED
|
@@ -1,55 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var task_exports = {};
|
|
29
|
-
__export(task_exports, {
|
|
30
|
-
TaskRunner: () => TaskRunner
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
31
4
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
5
|
+
Object.defineProperty(exports, "TaskRunner", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: () => TaskRunner
|
|
8
|
+
});
|
|
9
|
+
const _events = require("events");
|
|
10
|
+
const _pmap = /* @__PURE__ */ _interop_require_default(require("p-map"));
|
|
11
|
+
function _define_property(obj, key, value) {
|
|
12
|
+
if (key in obj) {
|
|
13
|
+
Object.defineProperty(obj, key, {
|
|
14
|
+
value,
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true
|
|
18
|
+
});
|
|
19
|
+
} else {
|
|
20
|
+
obj[key] = value;
|
|
42
21
|
}
|
|
22
|
+
return obj;
|
|
23
|
+
}
|
|
24
|
+
function _interop_require_default(obj) {
|
|
25
|
+
return obj && obj.__esModule ? obj : {
|
|
26
|
+
default: obj
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
class TaskRunner extends _events.EventEmitter {
|
|
43
30
|
async run() {
|
|
44
31
|
const tasks = this._tasks.splice(0, this._concurrency);
|
|
45
32
|
this._usableConcurrency = this._concurrency - tasks.length;
|
|
46
|
-
await (0,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
{ concurrency: tasks.length }
|
|
52
|
-
);
|
|
33
|
+
await (0, _pmap.default)(tasks, async (task) => {
|
|
34
|
+
await this._runTask(task);
|
|
35
|
+
}, {
|
|
36
|
+
concurrency: tasks.length
|
|
37
|
+
});
|
|
53
38
|
}
|
|
54
39
|
addTask(task) {
|
|
55
40
|
this._tasks.push(task);
|
|
@@ -60,29 +45,33 @@ const _TaskRunner = class extends import_events.EventEmitter {
|
|
|
60
45
|
}
|
|
61
46
|
const emitValue = await task(this._stopTask.bind(this));
|
|
62
47
|
this._usableConcurrency--;
|
|
63
|
-
this.emit(
|
|
48
|
+
this.emit(TaskRunner.TASK_FINISH, emitValue);
|
|
64
49
|
if (this._tasks.length > 0) {
|
|
65
50
|
const nextTasks = this._tasks.splice(0, this._usableConcurrency);
|
|
66
51
|
this._usableConcurrency -= nextTasks.length;
|
|
67
52
|
if (nextTasks.length > 0) {
|
|
68
|
-
await (0,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
{ concurrency: nextTasks.length }
|
|
74
|
-
);
|
|
53
|
+
await (0, _pmap.default)(nextTasks, async (_task) => {
|
|
54
|
+
await this._runTask(_task);
|
|
55
|
+
}, {
|
|
56
|
+
concurrency: nextTasks.length
|
|
57
|
+
});
|
|
75
58
|
}
|
|
76
59
|
}
|
|
77
60
|
}
|
|
78
61
|
_stopTask() {
|
|
79
62
|
this._stopFlag = true;
|
|
80
63
|
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
64
|
+
constructor(tasks, { concurrency }) {
|
|
65
|
+
super();
|
|
66
|
+
_define_property(this, "_tasks", void 0);
|
|
67
|
+
_define_property(this, "_concurrency", void 0);
|
|
68
|
+
_define_property(this, "_usableConcurrency", void 0);
|
|
69
|
+
_define_property(this, "_stopFlag", void 0);
|
|
70
|
+
this._tasks = tasks;
|
|
71
|
+
this._concurrency = concurrency || TaskRunner.DefaultConcurrency;
|
|
72
|
+
this._usableConcurrency = this._concurrency;
|
|
73
|
+
this._stopFlag = false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
_define_property(TaskRunner, "DefaultConcurrency", 10);
|
|
77
|
+
_define_property(TaskRunner, "TASK_FINISH", "task-finish");
|
package/dist/cjs/dag/utils.js
CHANGED
|
@@ -1,61 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
6
|
for (var name in all)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
var utils_exports = {};
|
|
19
|
-
__export(utils_exports, {
|
|
7
|
+
Object.defineProperty(target, name, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: all[name]
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
_export(exports, {
|
|
20
13
|
calculateCriticalPaths: () => calculateCriticalPaths,
|
|
21
|
-
findCircle: () => findCircle,
|
|
22
14
|
recursiveGetDependency: () => recursiveGetDependency,
|
|
23
|
-
sortProjects: () => sortProjects
|
|
15
|
+
sortProjects: () => sortProjects,
|
|
16
|
+
findCircle: () => findCircle
|
|
24
17
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
var import_edgeManager = require("./edgeManager");
|
|
18
|
+
const _error = require("../log/error");
|
|
19
|
+
const _edgeManager = require("./edgeManager");
|
|
28
20
|
const calculateCriticalPaths = (project) => {
|
|
29
|
-
var
|
|
21
|
+
var _project_dependent;
|
|
30
22
|
if (project.criticalPathLength !== void 0) {
|
|
31
23
|
return project.criticalPathLength;
|
|
32
24
|
}
|
|
33
|
-
if (((
|
|
25
|
+
if (((_project_dependent = project.dependent) === null || _project_dependent === void 0 ? void 0 : _project_dependent.length) === 0) {
|
|
34
26
|
project.criticalPathLength = 0;
|
|
35
27
|
return project.criticalPathLength;
|
|
36
28
|
} else {
|
|
29
|
+
var _project_dependent1;
|
|
37
30
|
const depsLengths = [];
|
|
38
|
-
(
|
|
39
|
-
(dependentProject) => depsLengths.push(calculateCriticalPaths(dependentProject))
|
|
40
|
-
);
|
|
31
|
+
(_project_dependent1 = project.dependent) === null || _project_dependent1 === void 0 ? void 0 : _project_dependent1.forEach((dependentProject) => depsLengths.push(calculateCriticalPaths(dependentProject)));
|
|
41
32
|
project.criticalPathLength = Math.max(...depsLengths) + 1;
|
|
42
33
|
return project.criticalPathLength;
|
|
43
34
|
}
|
|
44
35
|
};
|
|
45
36
|
const _recursiveGetDependencySkipCircleDeps = (node) => {
|
|
46
37
|
let allDeps = [];
|
|
47
|
-
const foundDepsNameSet = /* @__PURE__ */ new Set([
|
|
48
|
-
|
|
38
|
+
const foundDepsNameSet = /* @__PURE__ */ new Set([
|
|
39
|
+
node.name
|
|
40
|
+
]);
|
|
41
|
+
let queue = [
|
|
42
|
+
node
|
|
43
|
+
];
|
|
49
44
|
while (queue.length > 0) {
|
|
50
45
|
const checkNode = queue.pop();
|
|
51
46
|
const checkNodeDeps = checkNode.dependency || [];
|
|
52
47
|
if (checkNodeDeps.length > 0) {
|
|
53
|
-
const willIntoQueue = checkNodeDeps.filter(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
48
|
+
const willIntoQueue = checkNodeDeps.filter((dep) => !foundDepsNameSet.has(dep.name));
|
|
49
|
+
allDeps = [
|
|
50
|
+
...allDeps,
|
|
51
|
+
...willIntoQueue
|
|
52
|
+
];
|
|
57
53
|
willIntoQueue.forEach((dep) => foundDepsNameSet.add(dep.name));
|
|
58
|
-
queue = [
|
|
54
|
+
queue = [
|
|
55
|
+
...queue,
|
|
56
|
+
...willIntoQueue
|
|
57
|
+
];
|
|
59
58
|
}
|
|
60
59
|
}
|
|
61
60
|
return allDeps;
|
|
@@ -65,7 +64,9 @@ const recursiveGetDependency = (project, skipCircleProjects = false) => {
|
|
|
65
64
|
return _recursiveGetDependencySkipCircleDeps(project);
|
|
66
65
|
}
|
|
67
66
|
const dependency = project.dependency || [];
|
|
68
|
-
let allDependency = [
|
|
67
|
+
let allDependency = [
|
|
68
|
+
...dependency
|
|
69
|
+
];
|
|
69
70
|
for (const dependencyProject of dependency) {
|
|
70
71
|
allDependency = [
|
|
71
72
|
...allDependency,
|
|
@@ -78,14 +79,16 @@ const sortProjects = (projects) => {
|
|
|
78
79
|
const sortedQueue = [];
|
|
79
80
|
let readyIntoSortedQueue = [];
|
|
80
81
|
let queue = [];
|
|
81
|
-
const edgeManager = new
|
|
82
|
+
const edgeManager = new _edgeManager.EdgeManager();
|
|
82
83
|
for (const project of projects) {
|
|
83
84
|
edgeManager.setEdge(project);
|
|
84
85
|
if (edgeManager.getEdge(project) === 0) {
|
|
85
86
|
queue.push(project);
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
|
-
sortedQueue.push([
|
|
89
|
+
sortedQueue.push([
|
|
90
|
+
...queue
|
|
91
|
+
]);
|
|
89
92
|
let shiftNodesCount = 0;
|
|
90
93
|
while (queue.length > 0) {
|
|
91
94
|
const checkNode = queue.shift();
|
|
@@ -97,13 +100,17 @@ const sortProjects = (projects) => {
|
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
if (queue.length === 0 && readyIntoSortedQueue.length > 0) {
|
|
100
|
-
queue = [
|
|
101
|
-
|
|
103
|
+
queue = [
|
|
104
|
+
...readyIntoSortedQueue
|
|
105
|
+
];
|
|
106
|
+
sortedQueue.push([
|
|
107
|
+
...readyIntoSortedQueue
|
|
108
|
+
]);
|
|
102
109
|
readyIntoSortedQueue = [];
|
|
103
110
|
}
|
|
104
111
|
}
|
|
105
112
|
if (shiftNodesCount < projects.length) {
|
|
106
|
-
(0,
|
|
113
|
+
(0, _error.errorLog)("Items with a dependency loop");
|
|
107
114
|
} else {
|
|
108
115
|
}
|
|
109
116
|
return sortedQueue;
|
|
@@ -111,7 +118,10 @@ const sortProjects = (projects) => {
|
|
|
111
118
|
const findCircle = (projects) => {
|
|
112
119
|
let result = projects.reduce((circleNodes, project) => {
|
|
113
120
|
if (project.dependencyEdge > 0) {
|
|
114
|
-
return [
|
|
121
|
+
return [
|
|
122
|
+
...circleNodes,
|
|
123
|
+
project
|
|
124
|
+
];
|
|
115
125
|
}
|
|
116
126
|
return circleNodes;
|
|
117
127
|
}, []);
|
|
@@ -121,10 +131,3 @@ const findCircle = (projects) => {
|
|
|
121
131
|
checkNode.dependencyEdge--;
|
|
122
132
|
}
|
|
123
133
|
};
|
|
124
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
125
|
-
0 && (module.exports = {
|
|
126
|
-
calculateCriticalPaths,
|
|
127
|
-
findCircle,
|
|
128
|
-
recursiveGetDependency,
|
|
129
|
-
sortProjects
|
|
130
|
-
});
|