@modern-js/monorepo-tools 2.4.1-beta.0 → 2.5.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 +19 -8
- package/cli.js +1 -1
- package/dist/{js/node → cjs}/cli/build-watch.js +3 -23
- package/dist/{js/node → cjs}/cli/build.js +3 -23
- package/dist/{js/node → cjs}/cli/clear.js +3 -23
- package/dist/{js/node → cjs}/cli/deploy.js +3 -23
- package/dist/{js/node → cjs}/cli/index.js +0 -0
- package/dist/cjs/cli/install.js +34 -0
- package/dist/{js/node → cjs}/cli/new.js +3 -40
- package/dist/{js/node → cjs}/commands/build-watch.js +4 -24
- package/dist/{js/node → cjs}/commands/build.js +8 -41
- package/dist/{js/node → cjs}/commands/clear.js +3 -23
- package/dist/{js/node → cjs}/commands/deploy.js +4 -24
- package/dist/{js/node → cjs}/commands/index.js +0 -0
- package/dist/{js/node → cjs}/commands/install.js +4 -24
- package/dist/{js/node → cjs}/constants.js +0 -0
- package/dist/{js/node → cjs}/dag/create.js +5 -15
- package/dist/{js/node → cjs}/dag/edge-manager.js +0 -0
- package/dist/{js/node → cjs}/dag/index.js +0 -0
- package/dist/cjs/dag/operator.js +232 -0
- package/dist/{js/node → cjs}/dag/task.js +29 -53
- package/dist/{js/node → cjs}/dag/utils.js +0 -0
- package/dist/{js/node → cjs}/features/build/index.js +13 -33
- package/dist/{js/node → cjs}/features/clear/index.js +0 -0
- package/dist/{js/node → cjs}/features/deploy/index.js +10 -30
- package/dist/{js/node → cjs}/features/dev/cmds.js +0 -0
- package/dist/{js/node → cjs}/features/dev/create-task.js +6 -26
- package/dist/{js/node → cjs}/features/dev/index.js +14 -34
- package/dist/{js/node → cjs}/features/dev/watch-projects-state.js +3 -19
- package/dist/{js/node → cjs}/features/install/index.js +3 -23
- package/dist/{js/node → cjs}/hooks/index.js +0 -0
- package/dist/{js/node → cjs}/index.js +0 -0
- package/dist/{js/node → cjs}/locale/en.js +0 -0
- package/dist/{js/node → cjs}/locale/index.js +0 -0
- package/dist/{js/node → cjs}/locale/zh.js +0 -0
- package/dist/{js/node → cjs}/log/error.js +0 -0
- package/dist/{js/node → cjs}/log/multi-tasks-log.js +0 -0
- package/dist/{js/node → cjs}/log/time.js +1 -15
- package/dist/{js/node → cjs}/log/utils.js +0 -0
- package/dist/{js/node → cjs}/package/index.js +0 -0
- package/dist/{js/node → cjs}/parse-config/index.js +4 -38
- package/dist/{js/node → cjs}/parse-config/monorepo.js +0 -0
- package/dist/{js/node → cjs}/projects/check-project-change.js +12 -32
- package/dist/{js/node → cjs}/projects/clear-memory-files.js +0 -0
- package/dist/{js/node → cjs}/projects/get-projects-by-packages-config.js +11 -45
- package/dist/{js/node → cjs}/projects/get-projects-by-workspace-file.js +4 -24
- package/dist/{js/node → cjs}/projects/get-projects.js +15 -47
- package/dist/{js/node → cjs}/type.js +0 -0
- package/dist/{js/node → cjs}/utils/install.js +4 -24
- package/dist/{js/node → cjs}/utils/language.js +0 -0
- package/dist/{js/node → cjs}/utils/types.js +0 -0
- package/dist/esm/cli/build-watch.js +11 -0
- package/dist/esm/cli/build.js +12 -0
- package/dist/esm/cli/clear.js +11 -0
- package/dist/esm/cli/deploy.js +16 -0
- package/dist/{js/modern → esm}/cli/index.js +0 -0
- package/dist/esm/cli/install.js +11 -0
- package/dist/esm/cli/new.js +18 -0
- package/dist/esm/commands/build-watch.js +24 -0
- package/dist/esm/commands/build.js +55 -0
- package/dist/esm/commands/clear.js +19 -0
- package/dist/{js/modern → esm}/commands/deploy.js +4 -24
- package/dist/{js/modern → esm}/commands/index.js +0 -0
- package/dist/esm/commands/install.js +23 -0
- package/dist/{js/modern → esm}/constants.js +0 -0
- package/dist/{js/modern → esm}/dag/create.js +5 -17
- package/dist/{js/modern → esm}/dag/edge-manager.js +0 -0
- package/dist/{js/modern → esm}/dag/index.js +0 -0
- package/dist/esm/dag/operator.js +203 -0
- package/dist/esm/dag/task.js +55 -0
- package/dist/{js/modern → esm}/dag/utils.js +0 -0
- package/dist/{js/modern → esm}/features/build/index.js +13 -33
- package/dist/{js/modern → esm}/features/clear/index.js +0 -0
- package/dist/{js/modern → esm}/features/deploy/index.js +10 -30
- package/dist/{js/modern → esm}/features/dev/cmds.js +0 -0
- package/dist/{js/modern → esm}/features/dev/create-task.js +6 -26
- package/dist/{js/modern → esm}/features/dev/index.js +14 -34
- package/dist/{js/modern → esm}/features/dev/watch-projects-state.js +3 -21
- package/dist/{js/modern → esm}/features/install/index.js +3 -23
- package/dist/{js/modern → esm}/hooks/index.js +0 -0
- package/dist/{js/modern → esm}/index.js +0 -0
- package/dist/{js/modern → esm}/locale/en.js +0 -0
- package/dist/{js/modern → esm}/locale/index.js +0 -0
- package/dist/{js/modern → esm}/locale/zh.js +0 -0
- package/dist/{js/modern → esm}/log/error.js +0 -0
- package/dist/{js/modern → esm}/log/multi-tasks-log.js +0 -0
- package/dist/esm/log/time.js +13 -0
- package/dist/{js/modern → esm}/log/utils.js +0 -0
- package/dist/{js/modern → esm}/package/index.js +0 -0
- package/dist/esm/parse-config/index.js +15 -0
- package/dist/{js/modern → esm}/parse-config/monorepo.js +0 -0
- package/dist/{js/modern → esm}/projects/check-project-change.js +12 -32
- package/dist/{js/modern → esm}/projects/clear-memory-files.js +0 -0
- package/dist/{js/modern → esm}/projects/get-projects-by-packages-config.js +11 -47
- package/dist/{js/modern → esm}/projects/get-projects-by-workspace-file.js +4 -24
- package/dist/{js/modern → esm}/projects/get-projects.js +15 -49
- package/dist/{js/modern → esm}/type.js +0 -0
- package/dist/esm/utils/install.js +27 -0
- package/dist/{js/modern → esm}/utils/language.js +0 -0
- package/dist/{js/modern → esm}/utils/types.js +0 -0
- package/package.json +16 -16
- package/dist/js/modern/cli/build-watch.js +0 -31
- package/dist/js/modern/cli/build.js +0 -32
- package/dist/js/modern/cli/clear.js +0 -31
- package/dist/js/modern/cli/deploy.js +0 -36
- package/dist/js/modern/cli/install.js +0 -31
- package/dist/js/modern/cli/new.js +0 -57
- package/dist/js/modern/commands/build-watch.js +0 -44
- package/dist/js/modern/commands/build.js +0 -90
- package/dist/js/modern/commands/clear.js +0 -39
- package/dist/js/modern/commands/install.js +0 -43
- package/dist/js/modern/dag/operator.js +0 -251
- package/dist/js/modern/dag/task.js +0 -79
- package/dist/js/modern/log/time.js +0 -29
- package/dist/js/modern/parse-config/index.js +0 -51
- package/dist/js/modern/utils/install.js +0 -47
- package/dist/js/node/cli/install.js +0 -54
- package/dist/js/node/dag/operator.js +0 -278
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import pMap from "p-map";
|
|
2
|
+
import { errorLog } from "../log/error";
|
|
3
|
+
import { TaskRunner } from "./task";
|
|
4
|
+
import { EdgeManager } from "./edge-manager";
|
|
5
|
+
import { recursiveGetDependency, sortProjects } from "./utils";
|
|
6
|
+
class DagOperator {
|
|
7
|
+
constructor(projects, projectsMap) {
|
|
8
|
+
this._createTask = (project, task) => async (stopTask = () => void 0) => {
|
|
9
|
+
await task(project, project.dependency || [], () => stopTask());
|
|
10
|
+
return project.name;
|
|
11
|
+
};
|
|
12
|
+
this._projects = projects;
|
|
13
|
+
this._projectsMap = projectsMap;
|
|
14
|
+
this._sortedProjects = [];
|
|
15
|
+
}
|
|
16
|
+
checkNodeDataExist(name) {
|
|
17
|
+
return this._projectsMap.has(name);
|
|
18
|
+
}
|
|
19
|
+
getNodeData(name, option = { checkExist: false }) {
|
|
20
|
+
if (option.checkExist) {
|
|
21
|
+
if (this._projectsMap.has(name)) {
|
|
22
|
+
return this._projectsMap.get(name);
|
|
23
|
+
} else {
|
|
24
|
+
errorLog(`No '${name}' project exist`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return this._projectsMap.get(name);
|
|
28
|
+
}
|
|
29
|
+
getNodeDependencyData(name) {
|
|
30
|
+
var _a;
|
|
31
|
+
return ((_a = this._projectsMap.get(name)) == null ? void 0 : _a.dependency) || [];
|
|
32
|
+
}
|
|
33
|
+
getNodeDependentData(name) {
|
|
34
|
+
var _a;
|
|
35
|
+
return ((_a = this._projectsMap.get(name)) == null ? void 0 : _a.dependent) || [];
|
|
36
|
+
}
|
|
37
|
+
getNodeAllDependencyData(name, option = { skipCircleCheck: false }) {
|
|
38
|
+
const { skipCircleCheck } = option;
|
|
39
|
+
if (!skipCircleCheck) {
|
|
40
|
+
this.checkCircle();
|
|
41
|
+
}
|
|
42
|
+
if (!this._projectsMap.has(name)) {
|
|
43
|
+
errorLog(`No '${name}' project exist`);
|
|
44
|
+
}
|
|
45
|
+
const currentNode = this._projectsMap.get(name);
|
|
46
|
+
return recursiveGetDependency(currentNode, skipCircleCheck);
|
|
47
|
+
}
|
|
48
|
+
setNodeData(name, task) {
|
|
49
|
+
if (this._projectsMap.has(name)) {
|
|
50
|
+
task(this._projectsMap.get(name));
|
|
51
|
+
} else {
|
|
52
|
+
errorLog(`No '${name}' project exist`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async traverseAllNodes(task) {
|
|
56
|
+
const sortedNodes = this._sortedProjects.length > 0 ? this._sortedProjects : sortProjects(this._projects);
|
|
57
|
+
const finishTaskHash = {};
|
|
58
|
+
let preNodes = [];
|
|
59
|
+
let earlyFinish = false;
|
|
60
|
+
for (const projects of sortedNodes) {
|
|
61
|
+
if (earlyFinish) {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
await pMap(
|
|
65
|
+
projects,
|
|
66
|
+
async (project) => {
|
|
67
|
+
if (!finishTaskHash[project.name]) {
|
|
68
|
+
finishTaskHash[project.name] = true;
|
|
69
|
+
await task(
|
|
70
|
+
project,
|
|
71
|
+
this._getProjectPreviousNode(project.dependent || [], preNodes),
|
|
72
|
+
() => earlyFinish = true
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
{ concurrency: projects.length }
|
|
77
|
+
);
|
|
78
|
+
preNodes = [...projects];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
checkCircle() {
|
|
82
|
+
this._checkForCyclicDependencies(this._projects, [], /* @__PURE__ */ new Set());
|
|
83
|
+
}
|
|
84
|
+
async traverseDependenciesToProjectToDependent(name, task, config = {}) {
|
|
85
|
+
await this.traverseDependenciesToProject(name, task, config);
|
|
86
|
+
await this.traverseProjectToDependent(name, task, {
|
|
87
|
+
...config,
|
|
88
|
+
withSelf: false
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async traverseProjectToDependent(name, task, { withSelf = false, runTaskConcurrency } = {}) {
|
|
92
|
+
if (!this._projectsMap.has(name)) {
|
|
93
|
+
errorLog(`No '${name}' project exist`);
|
|
94
|
+
}
|
|
95
|
+
const traverseTargetNode = this._projectsMap.get(name);
|
|
96
|
+
const leafNodeTasks = [
|
|
97
|
+
withSelf ? this._createTask(traverseTargetNode, task) : async () => Promise.resolve(traverseTargetNode.name)
|
|
98
|
+
];
|
|
99
|
+
const taskRunner = new TaskRunner(leafNodeTasks, {
|
|
100
|
+
concurrency: runTaskConcurrency
|
|
101
|
+
});
|
|
102
|
+
const edgeManager = new EdgeManager();
|
|
103
|
+
taskRunner.on(TaskRunner.TASK_FINISH, (projectName) => {
|
|
104
|
+
const projectNode = this.getNodeData(projectName);
|
|
105
|
+
const dependent = projectNode.dependent || [];
|
|
106
|
+
for (const dependentProject of dependent) {
|
|
107
|
+
const dependency = dependentProject.dependency || [];
|
|
108
|
+
const removeNodes = dependency.filter(
|
|
109
|
+
(dependencyProject) => ![projectName, ...dependent.map((p) => p.name)].includes(
|
|
110
|
+
dependencyProject.name
|
|
111
|
+
)
|
|
112
|
+
);
|
|
113
|
+
edgeManager.reduceEdges(dependentProject, removeNodes.length + 1);
|
|
114
|
+
if (edgeManager.getEdge(dependentProject) === 0) {
|
|
115
|
+
taskRunner.addTask(this._createTask(dependentProject, task));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
await taskRunner.run();
|
|
120
|
+
}
|
|
121
|
+
async traverseDependenciesToProject(name, task, { withSelf = false, runTaskConcurrency } = {}) {
|
|
122
|
+
if (!this._projectsMap.has(name)) {
|
|
123
|
+
errorLog(`No '${name}' project exist`);
|
|
124
|
+
}
|
|
125
|
+
const traverseTargetNode = this._projectsMap.get(name);
|
|
126
|
+
const leafNodes = this._getDependencyLeafNodes(traverseTargetNode);
|
|
127
|
+
if ((leafNodes == null ? void 0 : leafNodes.length) === 0) {
|
|
128
|
+
await this._createTask(traverseTargetNode, task)();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const leafNodeTasks = leafNodes.map(
|
|
132
|
+
(project) => this._createTask(project, task)
|
|
133
|
+
);
|
|
134
|
+
const taskRunner = new TaskRunner(leafNodeTasks, {
|
|
135
|
+
concurrency: runTaskConcurrency
|
|
136
|
+
});
|
|
137
|
+
const edgeManager = new EdgeManager();
|
|
138
|
+
taskRunner.on(TaskRunner.TASK_FINISH, (projectName) => {
|
|
139
|
+
const projectNode = this.getNodeData(projectName);
|
|
140
|
+
const dependent = projectNode.dependent || [];
|
|
141
|
+
for (const dependentProject of dependent) {
|
|
142
|
+
if (![traverseTargetNode, ...leafNodes].some(
|
|
143
|
+
(n) => n.name === dependentProject.name
|
|
144
|
+
)) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
edgeManager.reduceOneEdge(dependentProject);
|
|
148
|
+
if (dependentProject.name === traverseTargetNode.name && !withSelf) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (edgeManager.getEdge(dependentProject) === 0) {
|
|
152
|
+
taskRunner.addTask(this._createTask(dependentProject, task));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
await taskRunner.run();
|
|
157
|
+
}
|
|
158
|
+
_checkForCyclicDependencies(projects, dependencyChain, alreadyCheckedProjects) {
|
|
159
|
+
for (const project of projects) {
|
|
160
|
+
if (dependencyChain.includes(project.name)) {
|
|
161
|
+
throw new Error(
|
|
162
|
+
`${"A cyclic dependency was encountered:\n"} ${[
|
|
163
|
+
...dependencyChain,
|
|
164
|
+
project.name
|
|
165
|
+
].reverse().join("\n -> ")}
|
|
166
|
+
`
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
if (!alreadyCheckedProjects.has(project.name)) {
|
|
170
|
+
alreadyCheckedProjects.add(project.name);
|
|
171
|
+
dependencyChain.push(project.name);
|
|
172
|
+
this._checkForCyclicDependencies(
|
|
173
|
+
project.dependent,
|
|
174
|
+
dependencyChain,
|
|
175
|
+
alreadyCheckedProjects
|
|
176
|
+
);
|
|
177
|
+
dependencyChain.pop();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
_getDependencyLeafNodes(node) {
|
|
182
|
+
const dependency = node.dependency;
|
|
183
|
+
if (dependency.length === 0) {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
let leafNodes = [...dependency];
|
|
187
|
+
for (const dependencyNode of dependency) {
|
|
188
|
+
leafNodes = [
|
|
189
|
+
...leafNodes,
|
|
190
|
+
...this._getDependencyLeafNodes(dependencyNode)
|
|
191
|
+
];
|
|
192
|
+
}
|
|
193
|
+
return leafNodes;
|
|
194
|
+
}
|
|
195
|
+
_getProjectPreviousNode(searchProjects, preNodes) {
|
|
196
|
+
return searchProjects.filter(
|
|
197
|
+
(p) => preNodes.map((preP) => preP.name).includes(p.name)
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export {
|
|
202
|
+
DagOperator
|
|
203
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
import pMap from "p-map";
|
|
3
|
+
const _TaskRunner = class extends EventEmitter {
|
|
4
|
+
constructor(tasks, { concurrency }) {
|
|
5
|
+
super();
|
|
6
|
+
this._tasks = tasks;
|
|
7
|
+
this._concurrency = concurrency || _TaskRunner.DefaultConcurrency;
|
|
8
|
+
this._usableConcurrency = this._concurrency;
|
|
9
|
+
this._stopFlag = false;
|
|
10
|
+
}
|
|
11
|
+
async run() {
|
|
12
|
+
const tasks = this._tasks.splice(0, this._concurrency);
|
|
13
|
+
this._usableConcurrency = this._concurrency - tasks.length;
|
|
14
|
+
await pMap(
|
|
15
|
+
tasks,
|
|
16
|
+
async (task) => {
|
|
17
|
+
await this._runTask(task);
|
|
18
|
+
},
|
|
19
|
+
{ concurrency: tasks.length }
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
addTask(task) {
|
|
23
|
+
this._tasks.push(task);
|
|
24
|
+
}
|
|
25
|
+
async _runTask(task) {
|
|
26
|
+
if (this._stopFlag) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const emitValue = await task(this._stopTask.bind(this));
|
|
30
|
+
this._usableConcurrency--;
|
|
31
|
+
this.emit(_TaskRunner.TASK_FINISH, emitValue);
|
|
32
|
+
if (this._tasks.length > 0) {
|
|
33
|
+
const nextTasks = this._tasks.splice(0, this._usableConcurrency);
|
|
34
|
+
this._usableConcurrency -= nextTasks.length;
|
|
35
|
+
if (nextTasks.length > 0) {
|
|
36
|
+
await pMap(
|
|
37
|
+
nextTasks,
|
|
38
|
+
async (_task) => {
|
|
39
|
+
await this._runTask(_task);
|
|
40
|
+
},
|
|
41
|
+
{ concurrency: nextTasks.length }
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
_stopTask() {
|
|
47
|
+
this._stopFlag = true;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
let TaskRunner = _TaskRunner;
|
|
51
|
+
TaskRunner.DefaultConcurrency = 10;
|
|
52
|
+
TaskRunner.TASK_FINISH = "task-finish";
|
|
53
|
+
export {
|
|
54
|
+
TaskRunner
|
|
55
|
+
};
|
|
File without changes
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
var __async = (__this, __arguments, generator) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
var fulfilled = (value) => {
|
|
4
|
-
try {
|
|
5
|
-
step(generator.next(value));
|
|
6
|
-
} catch (e) {
|
|
7
|
-
reject(e);
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
var rejected = (value) => {
|
|
11
|
-
try {
|
|
12
|
-
step(generator.throw(value));
|
|
13
|
-
} catch (e) {
|
|
14
|
-
reject(e);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
1
|
import os from "os";
|
|
22
2
|
import { execa, signale } from "@modern-js/utils";
|
|
23
3
|
import {
|
|
@@ -33,17 +13,17 @@ const createTask = (config, taskCmds = defaultBuildCmds, taskLogger) => {
|
|
|
33
13
|
disableContentHash = false,
|
|
34
14
|
enableGitHash = false
|
|
35
15
|
} = config;
|
|
36
|
-
const task = (project) =>
|
|
16
|
+
const task = async (project) => {
|
|
37
17
|
console.info("run ", project.name);
|
|
38
18
|
if (!disableContentHash) {
|
|
39
|
-
const changed =
|
|
19
|
+
const changed = await checkProjectChangeByContent(project);
|
|
40
20
|
if (!changed) {
|
|
41
21
|
console.info(`${project.name} content not change, skip`);
|
|
42
22
|
return;
|
|
43
23
|
}
|
|
44
24
|
}
|
|
45
25
|
if (enableGitHash) {
|
|
46
|
-
const changed =
|
|
26
|
+
const changed = await checkProjectChangeByGit(project, rootPath);
|
|
47
27
|
if (!changed) {
|
|
48
28
|
console.info(`${project.name} not change, skip`);
|
|
49
29
|
return;
|
|
@@ -65,7 +45,7 @@ const createTask = (config, taskCmds = defaultBuildCmds, taskLogger) => {
|
|
|
65
45
|
stderr: childProcess.stderr,
|
|
66
46
|
logConfig: { label: "BUILD: " }
|
|
67
47
|
});
|
|
68
|
-
|
|
48
|
+
await childProcess;
|
|
69
49
|
signale.timeEnd(prefix);
|
|
70
50
|
} catch (e) {
|
|
71
51
|
errorLog(project.name, e.message);
|
|
@@ -74,11 +54,11 @@ const createTask = (config, taskCmds = defaultBuildCmds, taskLogger) => {
|
|
|
74
54
|
console.info(`${project.name} not have ${taskCmd}, skip it.`);
|
|
75
55
|
}
|
|
76
56
|
}
|
|
77
|
-
}
|
|
57
|
+
};
|
|
78
58
|
return task;
|
|
79
59
|
};
|
|
80
60
|
const defaultBuildCmds = ["build"];
|
|
81
|
-
const runBuildTask =
|
|
61
|
+
const runBuildTask = async (projectName, operator, config, taskCmds = defaultBuildCmds) => {
|
|
82
62
|
const {
|
|
83
63
|
withSelf = true,
|
|
84
64
|
onlySelf = false,
|
|
@@ -88,14 +68,14 @@ const runBuildTask = (_0, _1, _2, ..._3) => __async(void 0, [_0, _1, _2, ..._3],
|
|
|
88
68
|
const taskLogger = new MultitasksLogger();
|
|
89
69
|
const task = createTask(config, taskCmds, taskLogger);
|
|
90
70
|
if (onlySelf) {
|
|
91
|
-
|
|
71
|
+
await task(operator.getNodeData(projectName, { checkExist: true }));
|
|
92
72
|
} else if (!disableWithDeps && withDept) {
|
|
93
|
-
|
|
73
|
+
await operator.traverseDependenciesToProjectToDependent(projectName, task, {
|
|
94
74
|
withSelf,
|
|
95
75
|
runTaskConcurrency: os.cpus().length
|
|
96
76
|
});
|
|
97
77
|
} else if (disableWithDeps && withDept) {
|
|
98
|
-
|
|
78
|
+
await operator.traverseProjectToDependent(projectName, task, {
|
|
99
79
|
withSelf,
|
|
100
80
|
runTaskConcurrency: os.cpus().length
|
|
101
81
|
});
|
|
@@ -105,12 +85,12 @@ const runBuildTask = (_0, _1, _2, ..._3) => __async(void 0, [_0, _1, _2, ..._3],
|
|
|
105
85
|
runTaskConcurrency: os.cpus().length
|
|
106
86
|
});
|
|
107
87
|
}
|
|
108
|
-
}
|
|
109
|
-
const runAllBuildTask =
|
|
88
|
+
};
|
|
89
|
+
const runAllBuildTask = async (operator, config, taskCmds = defaultBuildCmds) => {
|
|
110
90
|
const taskLogger = new MultitasksLogger();
|
|
111
91
|
const task = createTask(config, taskCmds, taskLogger);
|
|
112
|
-
|
|
113
|
-
}
|
|
92
|
+
await operator.traverseAllNodes(task);
|
|
93
|
+
};
|
|
114
94
|
export {
|
|
115
95
|
runAllBuildTask,
|
|
116
96
|
runBuildTask
|
|
File without changes
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
var __async = (__this, __arguments, generator) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
var fulfilled = (value) => {
|
|
4
|
-
try {
|
|
5
|
-
step(generator.next(value));
|
|
6
|
-
} catch (e) {
|
|
7
|
-
reject(e);
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
var rejected = (value) => {
|
|
11
|
-
try {
|
|
12
|
-
step(generator.throw(value));
|
|
13
|
-
} catch (e) {
|
|
14
|
-
reject(e);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
1
|
import * as path from "path";
|
|
22
2
|
import {
|
|
23
3
|
FileSystem,
|
|
@@ -85,7 +65,7 @@ const generatorAndCopyRequiredFiles = (rootPath, deployDir) => {
|
|
|
85
65
|
copy("package-lock.json");
|
|
86
66
|
checkAndUpdatePMWorkspaces(deployDir);
|
|
87
67
|
};
|
|
88
|
-
const checkAndRunDeployCommand = (monorepoPath, targetProject, packageManager) =>
|
|
68
|
+
const checkAndRunDeployCommand = async (monorepoPath, targetProject, packageManager) => {
|
|
89
69
|
var _a, _b, _c;
|
|
90
70
|
const scripts = ((_a = targetProject.extra) == null ? void 0 : _a.scripts) || {};
|
|
91
71
|
if (scripts.deploy) {
|
|
@@ -94,7 +74,7 @@ const checkAndRunDeployCommand = (monorepoPath, targetProject, packageManager) =
|
|
|
94
74
|
);
|
|
95
75
|
let runDeployCommands = ["run", "deploy"];
|
|
96
76
|
if (packageManager === "pnpm") {
|
|
97
|
-
const pnpmVersion =
|
|
77
|
+
const pnpmVersion = await getPnpmVersion();
|
|
98
78
|
if (pnpmVersion.startsWith("6")) {
|
|
99
79
|
runDeployCommands = ["run", "deploy", "--filter", targetProject.name];
|
|
100
80
|
} else {
|
|
@@ -110,10 +90,10 @@ const checkAndRunDeployCommand = (monorepoPath, targetProject, packageManager) =
|
|
|
110
90
|
});
|
|
111
91
|
(_b = childProcess.stdout) == null ? void 0 : _b.pipe(process.stdout);
|
|
112
92
|
(_c = childProcess.stderr) == null ? void 0 : _c.pipe(process.stderr);
|
|
113
|
-
|
|
93
|
+
await childProcess;
|
|
114
94
|
}
|
|
115
|
-
}
|
|
116
|
-
const installDependency = (deployDir, packageManager) =>
|
|
95
|
+
};
|
|
96
|
+
const installDependency = async (deployDir, packageManager) => {
|
|
117
97
|
const packageJsonPath = path.join(deployDir, "package.json");
|
|
118
98
|
const packageJson = JsonFile.load(packageJsonPath);
|
|
119
99
|
const scripts = (packageJson == null ? void 0 : packageJson.scripts) || {};
|
|
@@ -135,11 +115,11 @@ const installDependency = (deployDir, packageManager) => __async(void 0, null, f
|
|
|
135
115
|
cwd: deployDir,
|
|
136
116
|
env: { NODE_ENV: void 0 }
|
|
137
117
|
});
|
|
138
|
-
|
|
139
|
-
}
|
|
118
|
+
await childProcess;
|
|
119
|
+
};
|
|
140
120
|
const excludeDirs = (filePath, dirs) => dirs.some((dir) => filePath.includes(dir));
|
|
141
121
|
const defaultDeployPath = "output";
|
|
142
|
-
const deploy = (deployProjectNames, operator, config) =>
|
|
122
|
+
const deploy = async (deployProjectNames, operator, config) => {
|
|
143
123
|
const { rootPath, packageManager, deployPath = defaultDeployPath } = config;
|
|
144
124
|
const realDeployPath = path.isAbsolute(deployPath) ? deployPath : path.join(rootPath, deployPath);
|
|
145
125
|
FileSystem.deleteFolder(realDeployPath);
|
|
@@ -154,7 +134,7 @@ const deploy = (deployProjectNames, operator, config) => __async(void 0, null, f
|
|
|
154
134
|
alldeps,
|
|
155
135
|
realDeployPath
|
|
156
136
|
);
|
|
157
|
-
|
|
137
|
+
await checkAndRunDeployCommand(rootPath, currentProject, packageManager);
|
|
158
138
|
FileSystem.ensureFolder(realDeployPath);
|
|
159
139
|
for (const [from, to] of copyMap) {
|
|
160
140
|
FileSystem.copyFiles({
|
|
@@ -172,7 +152,7 @@ const deploy = (deployProjectNames, operator, config) => __async(void 0, null, f
|
|
|
172
152
|
}
|
|
173
153
|
generatorAndCopyRequiredFiles(rootPath, realDeployPath);
|
|
174
154
|
logger.success(`Deploy success. The deploy dir is in '${rootPath}/output'`);
|
|
175
|
-
}
|
|
155
|
+
};
|
|
176
156
|
export {
|
|
177
157
|
deploy
|
|
178
158
|
};
|
|
File without changes
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
var __async = (__this, __arguments, generator) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
var fulfilled = (value) => {
|
|
4
|
-
try {
|
|
5
|
-
step(generator.next(value));
|
|
6
|
-
} catch (e) {
|
|
7
|
-
reject(e);
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
var rejected = (value) => {
|
|
11
|
-
try {
|
|
12
|
-
step(generator.throw(value));
|
|
13
|
-
} catch (e) {
|
|
14
|
-
reject(e);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
1
|
import { execa, logger } from "@modern-js/utils";
|
|
22
2
|
import { errorLog } from "../../log/error";
|
|
23
3
|
import * as timeLog from "../../log/time";
|
|
@@ -38,7 +18,7 @@ const getFinalTaskCmds = (taskCmds, project) => {
|
|
|
38
18
|
const createDependenciesTask = (config, taskCmds = defaultBuildWatchCmds, taskLogger) => {
|
|
39
19
|
const { packageManager } = config;
|
|
40
20
|
const timelogInstance = timeLog.initTimeLog();
|
|
41
|
-
const task = (project) =>
|
|
21
|
+
const task = async (project) => {
|
|
42
22
|
const finalTaskCmds = getFinalTaskCmds(taskCmds, project);
|
|
43
23
|
const cmd = project.extra.scripts || {};
|
|
44
24
|
for (const taskCmd of finalTaskCmds) {
|
|
@@ -55,7 +35,7 @@ const createDependenciesTask = (config, taskCmds = defaultBuildWatchCmds, taskLo
|
|
|
55
35
|
stderr: childProcess.stderr,
|
|
56
36
|
logConfig: { label: "WATCH: " }
|
|
57
37
|
});
|
|
58
|
-
|
|
38
|
+
await childProcess;
|
|
59
39
|
} catch (e) {
|
|
60
40
|
errorLog(project.name, e);
|
|
61
41
|
}
|
|
@@ -64,12 +44,12 @@ const createDependenciesTask = (config, taskCmds = defaultBuildWatchCmds, taskLo
|
|
|
64
44
|
logger.info(`${project.name} not have ${taskCmd}, skip it.`);
|
|
65
45
|
}
|
|
66
46
|
}
|
|
67
|
-
}
|
|
47
|
+
};
|
|
68
48
|
return task;
|
|
69
49
|
};
|
|
70
50
|
const createDevTask = (config, taskCmds = defaultBuildWatchCmds, taskLogger) => {
|
|
71
51
|
const { packageManager } = config;
|
|
72
|
-
const task = (project) =>
|
|
52
|
+
const task = async (project) => {
|
|
73
53
|
const devCmds = [taskCmds[0]];
|
|
74
54
|
const cmd = project.extra.scripts || {};
|
|
75
55
|
for (const taskCmd of devCmds) {
|
|
@@ -85,7 +65,7 @@ const createDevTask = (config, taskCmds = defaultBuildWatchCmds, taskLogger) =>
|
|
|
85
65
|
stderr: childProcess.stderr,
|
|
86
66
|
logConfig: { label: `${taskCmd.toUpperCase()}: ` }
|
|
87
67
|
});
|
|
88
|
-
const ret =
|
|
68
|
+
const ret = await childProcess;
|
|
89
69
|
console.info(ret);
|
|
90
70
|
} catch (e) {
|
|
91
71
|
errorLog(project.name, e);
|
|
@@ -94,7 +74,7 @@ const createDevTask = (config, taskCmds = defaultBuildWatchCmds, taskLogger) =>
|
|
|
94
74
|
logger.info(`${project.name} not have ${taskCmd}, skip it.`);
|
|
95
75
|
}
|
|
96
76
|
}
|
|
97
|
-
}
|
|
77
|
+
};
|
|
98
78
|
return task;
|
|
99
79
|
};
|
|
100
80
|
export {
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
var __async = (__this, __arguments, generator) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
var fulfilled = (value) => {
|
|
4
|
-
try {
|
|
5
|
-
step(generator.next(value));
|
|
6
|
-
} catch (e) {
|
|
7
|
-
reject(e);
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
var rejected = (value) => {
|
|
11
|
-
try {
|
|
12
|
-
step(generator.throw(value));
|
|
13
|
-
} catch (e) {
|
|
14
|
-
reject(e);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
1
|
import anymatch from "anymatch";
|
|
22
2
|
import { chokidar } from "@modern-js/utils";
|
|
23
3
|
import { MultitasksLogger } from "../../log/multi-tasks-log";
|
|
@@ -34,7 +14,7 @@ const getIgnored = (config) => (watchFilePath) => {
|
|
|
34
14
|
}
|
|
35
15
|
return false;
|
|
36
16
|
};
|
|
37
|
-
const runBuildWatchTask =
|
|
17
|
+
const runBuildWatchTask = async (projectName, operator, config, taskCmds = defaultBuildWatchCmds) => {
|
|
38
18
|
const { needInit = true } = config;
|
|
39
19
|
const taskLogger = new MultitasksLogger();
|
|
40
20
|
const dependenciesTask = createDependenciesTask(config, taskCmds, taskLogger);
|
|
@@ -52,24 +32,24 @@ const runBuildWatchTask = (_0, _1, _2, ..._3) => __async(void 0, [_0, _1, _2, ..
|
|
|
52
32
|
});
|
|
53
33
|
watcher.add(watchedProjectState.getWatchedProjectsPath());
|
|
54
34
|
if (needInit) {
|
|
55
|
-
|
|
35
|
+
await operator.traverseDependenciesToProject(
|
|
56
36
|
projectName,
|
|
57
|
-
(currentProject) =>
|
|
58
|
-
|
|
59
|
-
}
|
|
37
|
+
async (currentProject) => {
|
|
38
|
+
await dependenciesTask(currentProject);
|
|
39
|
+
}
|
|
60
40
|
);
|
|
61
41
|
}
|
|
62
|
-
|
|
42
|
+
await new Promise((resolve) => {
|
|
63
43
|
console.info("start watch");
|
|
64
|
-
watcher.on("all", (eventName, changeFilePath) =>
|
|
44
|
+
watcher.on("all", async (eventName, changeFilePath) => {
|
|
65
45
|
if (eventName === "add") {
|
|
66
46
|
watchedProjectState.updateState();
|
|
67
47
|
}
|
|
68
48
|
const changedProject = watchedProjectState.getChangedProject(changeFilePath);
|
|
69
49
|
if (changedProject) {
|
|
70
|
-
|
|
50
|
+
await operator.traverseProjectToDependent(
|
|
71
51
|
changedProject.name,
|
|
72
|
-
(currentProject, _, earlyFinish) =>
|
|
52
|
+
async (currentProject, _, earlyFinish) => {
|
|
73
53
|
if (currentProject.name === projectName) {
|
|
74
54
|
earlyFinish();
|
|
75
55
|
return;
|
|
@@ -78,20 +58,20 @@ const runBuildWatchTask = (_0, _1, _2, ..._3) => __async(void 0, [_0, _1, _2, ..
|
|
|
78
58
|
currentProject.name
|
|
79
59
|
)) {
|
|
80
60
|
console.info("run build", currentProject.name);
|
|
81
|
-
|
|
61
|
+
await dependenciesTask(currentProject);
|
|
82
62
|
}
|
|
83
|
-
}
|
|
63
|
+
},
|
|
84
64
|
{ withSelf: true }
|
|
85
65
|
);
|
|
86
66
|
resolve(null);
|
|
87
67
|
} else {
|
|
88
68
|
console.info("changed is not in monorepo manager");
|
|
89
69
|
}
|
|
90
|
-
})
|
|
70
|
+
});
|
|
91
71
|
resolve(null);
|
|
92
72
|
});
|
|
93
|
-
|
|
94
|
-
}
|
|
73
|
+
await devTask(operator.getNodeData(projectName, { checkExist: true }));
|
|
74
|
+
};
|
|
95
75
|
export {
|
|
96
76
|
runBuildWatchTask
|
|
97
77
|
};
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
if (__hasOwnProp.call(b, prop))
|
|
11
|
-
__defNormalProp(a, prop, b[prop]);
|
|
12
|
-
if (__getOwnPropSymbols)
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
17
|
-
return a;
|
|
18
|
-
};
|
|
19
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
1
|
import * as path from "path";
|
|
21
2
|
import { globby } from "@modern-js/utils";
|
|
22
3
|
class WatchedProjectsState {
|
|
@@ -44,9 +25,10 @@ class WatchedProjectsState {
|
|
|
44
25
|
node.extra.path
|
|
45
26
|
);
|
|
46
27
|
}
|
|
47
|
-
return
|
|
28
|
+
return {
|
|
29
|
+
...ret,
|
|
48
30
|
[node.extra.path]: node
|
|
49
|
-
}
|
|
31
|
+
};
|
|
50
32
|
},
|
|
51
33
|
{}
|
|
52
34
|
);
|