@ms-cloudpack/cli 0.5.0 → 0.6.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.json +34 -1
- package/CHANGELOG.md +13 -2
- package/lib/commands/start/TaskRunner.d.ts +23 -0
- package/lib/commands/start/TaskRunner.js +64 -1
- package/lib/commands/start/TaskRunner.js.map +1 -1
- package/lib/commands/start/startApiServer.d.ts +3 -0
- package/lib/commands/start/startApiServer.js +9 -0
- package/lib/commands/start/startApiServer.js.map +1 -1
- package/lib/commands/start/startBundleServer.js +68 -83
- package/lib/commands/start/startBundleServer.js.map +1 -1
- package/lib/commands/start/taskRunner.test.js +29 -10
- package/lib/commands/start/taskRunner.test.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +4 -4
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,40 @@
|
|
|
2
2
|
"name": "@ms-cloudpack/cli",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "
|
|
5
|
+
"date": "Sat, 03 Sep 2022 08:15:01 GMT",
|
|
6
|
+
"tag": "@ms-cloudpack/cli_v0.6.0",
|
|
7
|
+
"version": "0.6.0",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"author": "dake.3601@gmail.com",
|
|
12
|
+
"package": "@ms-cloudpack/cli",
|
|
13
|
+
"commit": "5edd43e769c3fa7fa1f2fb16952e0031f57cbb43",
|
|
14
|
+
"comment": "Add method of Task Runner deduplicates pending Tasks"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"author": "beachball",
|
|
18
|
+
"package": "@ms-cloudpack/cli",
|
|
19
|
+
"comment": "Bump @ms-cloudpack/bundler to v0.3.10",
|
|
20
|
+
"commit": "ec909bf967a54b174cb1d50e7e55bd4b3ed02884"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"author": "beachball",
|
|
24
|
+
"package": "@ms-cloudpack/cli",
|
|
25
|
+
"comment": "Bump @ms-cloudpack/package-utilities to v0.8.1",
|
|
26
|
+
"commit": "ec909bf967a54b174cb1d50e7e55bd4b3ed02884"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"author": "beachball",
|
|
30
|
+
"package": "@ms-cloudpack/cli",
|
|
31
|
+
"comment": "Bump @ms-cloudpack/path-utilities to v0.3.2",
|
|
32
|
+
"commit": "ec909bf967a54b174cb1d50e7e55bd4b3ed02884"
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"date": "Thu, 01 Sep 2022 08:12:24 GMT",
|
|
6
39
|
"tag": "@ms-cloudpack/cli_v0.5.0",
|
|
7
40
|
"version": "0.5.0",
|
|
8
41
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
# Change Log - @ms-cloudpack/cli
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Sat, 03 Sep 2022 08:15:01 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 0.6.0
|
|
8
|
+
|
|
9
|
+
Sat, 03 Sep 2022 08:15:01 GMT
|
|
10
|
+
|
|
11
|
+
### Minor changes
|
|
12
|
+
|
|
13
|
+
- Add method of Task Runner deduplicates pending Tasks (dake.3601@gmail.com)
|
|
14
|
+
- Bump @ms-cloudpack/bundler to v0.3.10
|
|
15
|
+
- Bump @ms-cloudpack/package-utilities to v0.8.1
|
|
16
|
+
- Bump @ms-cloudpack/path-utilities to v0.3.2
|
|
17
|
+
|
|
7
18
|
## 0.5.0
|
|
8
19
|
|
|
9
|
-
Thu, 01 Sep 2022 08:12:
|
|
20
|
+
Thu, 01 Sep 2022 08:12:24 GMT
|
|
10
21
|
|
|
11
22
|
### Minor changes
|
|
12
23
|
|
|
@@ -3,8 +3,31 @@ export interface Task<TReturn> {
|
|
|
3
3
|
id: string;
|
|
4
4
|
execute: () => Promise<TReturn>;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* TaskRunner class manages the state of Tasks.
|
|
8
|
+
* This class is to be called by the api server.
|
|
9
|
+
*/
|
|
6
10
|
export declare class TaskRunner {
|
|
7
11
|
private _queue;
|
|
12
|
+
private _pendingTasks;
|
|
13
|
+
private _completedTasks;
|
|
8
14
|
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* The add method enqueues a Task and returns its Promise.
|
|
17
|
+
* If a Task with the same id has already been processed,
|
|
18
|
+
* it returns either the result or the promise.
|
|
19
|
+
*/
|
|
9
20
|
add<TReturn>(task: Task<TReturn>): Promise<TReturn>;
|
|
21
|
+
/**
|
|
22
|
+
* Returns Task with id.
|
|
23
|
+
*/
|
|
24
|
+
get(id: string): any;
|
|
25
|
+
/**
|
|
26
|
+
* Returns if Task with id is pending.
|
|
27
|
+
*/
|
|
28
|
+
pending(id: string): Promise<any> | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Deletes Task with id.
|
|
31
|
+
*/
|
|
32
|
+
delete(id: string): void;
|
|
10
33
|
}
|
|
@@ -1,10 +1,73 @@
|
|
|
1
1
|
import PQueue from 'p-queue';
|
|
2
|
+
const log = (...messages) => {
|
|
3
|
+
console.log(`TaskRunner:`, ...messages);
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* TaskRunner class manages the state of Tasks.
|
|
7
|
+
* This class is to be called by the api server.
|
|
8
|
+
*/
|
|
2
9
|
export class TaskRunner {
|
|
3
10
|
constructor() {
|
|
4
11
|
this._queue = new PQueue({ concurrency: 10 });
|
|
12
|
+
this._pendingTasks = new Map();
|
|
13
|
+
this._completedTasks = new Map();
|
|
5
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* The add method enqueues a Task and returns its Promise.
|
|
17
|
+
* If a Task with the same id has already been processed,
|
|
18
|
+
* it returns either the result or the promise.
|
|
19
|
+
*/
|
|
6
20
|
add(task) {
|
|
7
|
-
|
|
21
|
+
const { name, id, execute } = task;
|
|
22
|
+
// Check if we are already completed the task with that id.
|
|
23
|
+
const action = this._completedTasks.get(id);
|
|
24
|
+
if (action !== undefined) {
|
|
25
|
+
log(`Previous action found, returning: "${name}:${id}"`);
|
|
26
|
+
return action;
|
|
27
|
+
}
|
|
28
|
+
// Check if we are already running the task with that id.
|
|
29
|
+
const pending = this._pendingTasks.get(id);
|
|
30
|
+
if (pending !== undefined) {
|
|
31
|
+
log(`Previous action found, waiting: "${name}:${id}"`);
|
|
32
|
+
return pending;
|
|
33
|
+
}
|
|
34
|
+
// Create a promise to track the task.
|
|
35
|
+
const resultPromise = new Promise((resolve, reject) => {
|
|
36
|
+
this._queue
|
|
37
|
+
.add(execute)
|
|
38
|
+
.then((result) => {
|
|
39
|
+
// If an existing bundle was created, dispose.
|
|
40
|
+
// this._createdTasks.get(id)?.dispose?.();
|
|
41
|
+
// Update finished Tasks.
|
|
42
|
+
this._completedTasks.set(id, result);
|
|
43
|
+
resolve(result);
|
|
44
|
+
})
|
|
45
|
+
.catch(reject);
|
|
46
|
+
}).finally(() => {
|
|
47
|
+
this._pendingTasks.delete(id);
|
|
48
|
+
});
|
|
49
|
+
this._pendingTasks.set(id, resultPromise);
|
|
50
|
+
return resultPromise;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns Task with id.
|
|
54
|
+
*/
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
get(id) {
|
|
57
|
+
return this._completedTasks.get(id);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Returns if Task with id is pending.
|
|
61
|
+
*/
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
+
pending(id) {
|
|
64
|
+
return this._pendingTasks.get(id);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Deletes Task with id.
|
|
68
|
+
*/
|
|
69
|
+
delete(id) {
|
|
70
|
+
this._completedTasks.delete(id);
|
|
8
71
|
}
|
|
9
72
|
}
|
|
10
73
|
//# sourceMappingURL=TaskRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../../src/commands/start/TaskRunner.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../../src/commands/start/TaskRunner.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAG7B,MAAM,GAAG,GAAG,CAAC,GAAG,QAAmB,EAAE,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC1C,CAAC,CAAC;AAQF;;;GAGG;AACH,MAAM,OAAO,UAAU;IAOrB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAU,IAAmB;QAC9B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEnC,2DAA2D;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,GAAG,CAAC,sCAAsC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;YACzD,OAAO,MAAM,CAAC;SACf;QAED,yDAAyD;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,GAAG,CAAC,oCAAoC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;YACvD,OAAO,OAAO,CAAC;SAChB;QAED,sCAAsC;QACtC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,IAAI,CAAC,MAAM;iBACR,GAAG,CAAC,OAAO,CAAC;iBACZ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,8CAA8C;gBAC9C,2CAA2C;gBAE3C,yBAAyB;gBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAErC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;iBACD,KAAK,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAE1C,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,8DAA8D;IAC9D,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,8DAA8D;IAC9D,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -14,6 +14,9 @@ export interface ApiServer {
|
|
|
14
14
|
reportStart: (options: TaskStartDescription) => void;
|
|
15
15
|
reportEnd: (options: TaskEndDescription) => void;
|
|
16
16
|
addTask: <TReturn>(task: Task<TReturn>) => Promise<TReturn>;
|
|
17
|
+
getTask: (id: string) => any;
|
|
18
|
+
pendingTask: (id: string) => Promise<any> | undefined;
|
|
19
|
+
deleteTask: (id: string) => void;
|
|
17
20
|
close: () => void;
|
|
18
21
|
}
|
|
19
22
|
interface TaskError {
|
|
@@ -146,6 +146,15 @@ export async function startApiServer({ session }) {
|
|
|
146
146
|
addTask: (task) => {
|
|
147
147
|
return taskRunner.add(task);
|
|
148
148
|
},
|
|
149
|
+
getTask: (id) => {
|
|
150
|
+
return taskRunner.get(id);
|
|
151
|
+
},
|
|
152
|
+
pendingTask: (id) => {
|
|
153
|
+
return taskRunner.pending(id);
|
|
154
|
+
},
|
|
155
|
+
deleteTask: (id) => {
|
|
156
|
+
taskRunner.delete(id);
|
|
157
|
+
},
|
|
149
158
|
close: () => server.close(),
|
|
150
159
|
};
|
|
151
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startApiServer.js","sourceRoot":"","sources":["../../../src/commands/start/startApiServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,SAAS,EAAE,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAa,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"startApiServer.js","sourceRoot":"","sources":["../../../src/commands/start/startApiServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,8 +20,6 @@ const log = (...messages) => {
|
|
|
20
20
|
* on each request.
|
|
21
21
|
*/
|
|
22
22
|
export async function startBundleServer({ session, apiServer, }) {
|
|
23
|
-
const createdBundles = {};
|
|
24
|
-
const pendingBundles = {};
|
|
25
23
|
const { resolveMap } = session;
|
|
26
24
|
const { server, port } = await createExpressApp([5500, 5501, 5502, 5503], (app) => {
|
|
27
25
|
// Set up the express app routes.
|
|
@@ -53,7 +51,7 @@ export async function startBundleServer({ session, apiServer, }) {
|
|
|
53
51
|
}
|
|
54
52
|
// If it's an unrecognized package, 404.
|
|
55
53
|
if (!packagePath) {
|
|
56
|
-
log(`
|
|
54
|
+
log(`Response (404): "${packageName}@${version}${filePath}"`);
|
|
57
55
|
res
|
|
58
56
|
.status(404)
|
|
59
57
|
.send(`The requested package "${packageName}@${version}${filePath}" was not found in the resolve map.`);
|
|
@@ -68,98 +66,87 @@ export async function startBundleServer({ session, apiServer, }) {
|
|
|
68
66
|
});
|
|
69
67
|
// Derive where the output should be.
|
|
70
68
|
const outputPath = path.join(os.tmpdir(), 'cloudpack-output', `${filenamify(packageName)}-${version}-${bundleId}`);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
// Set up for bundling.
|
|
70
|
+
let action = apiServer.getTask(bundleId);
|
|
71
|
+
const pendingBundle = apiServer.pendingTask(bundleId);
|
|
72
|
+
const restart = action && !isFolder;
|
|
73
|
+
let bundling;
|
|
74
|
+
// Does it need to bundle?
|
|
75
|
+
if (!pendingBundle && (!action || restart)) {
|
|
76
|
+
// Bundling promise wrapper.
|
|
77
|
+
bundling = new Promise((resolve) => {
|
|
78
|
+
const bundleRequest = {
|
|
79
|
+
id: bundleId,
|
|
80
|
+
packageName,
|
|
81
|
+
version: version,
|
|
82
|
+
packagePath,
|
|
83
|
+
outputPath,
|
|
84
|
+
isExternal,
|
|
85
|
+
};
|
|
86
|
+
// Call to async helper so that we can await and call resolve.
|
|
87
|
+
(async () => {
|
|
88
|
+
// Start tracking work.
|
|
89
|
+
apiServer.reportStart({
|
|
84
90
|
id: bundleId,
|
|
85
|
-
packageName
|
|
86
|
-
|
|
87
|
-
packagePath,
|
|
91
|
+
name: `Bundle ${packageName}@${version}`,
|
|
92
|
+
inputPath: packagePath || '',
|
|
88
93
|
outputPath,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
});
|
|
95
|
+
try {
|
|
96
|
+
log(`No previous action found, bundling: "${packageName}@${version}"`);
|
|
97
|
+
await ensureDir(outputPath);
|
|
98
|
+
log(`Finished ensureDir: "${packageName}@${version}"`);
|
|
99
|
+
log(`Trying to bundle "${packageName}@${version}"`);
|
|
100
|
+
if (restart) {
|
|
101
|
+
// TODO: Implement apiServer.restart
|
|
102
|
+
apiServer.deleteTask(bundleId);
|
|
103
|
+
}
|
|
104
|
+
await apiServer.addTask({
|
|
96
105
|
name: `Bundle ${packageName}@${version}`,
|
|
97
|
-
|
|
98
|
-
|
|
106
|
+
id: bundleId,
|
|
107
|
+
execute: () => bundleTask(bundleRequest, force),
|
|
99
108
|
});
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
// but TypeScript insists it is necessary.
|
|
106
|
-
if (packagePath) {
|
|
107
|
-
log(`Trying to bundle "${packageName}@${version}"`);
|
|
108
|
-
await apiServer.addTask({
|
|
109
|
-
name: `Bundle ${packageName}@${version}`,
|
|
110
|
-
id: bundleId,
|
|
111
|
-
execute: () => bundleTask(bundleRequest, force),
|
|
112
|
-
});
|
|
113
|
-
// If this is going to be incremental, start a watcher to re-bundle when source
|
|
114
|
-
// changes.
|
|
115
|
-
if (!isExternal) {
|
|
116
|
-
initializeFileWatcher(session, bundleId, outputPath, bundleRequest, pendingBundles, apiServer);
|
|
117
|
-
log(`Bundle complete: ${outputPath}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
catch (_) {
|
|
122
|
-
/* no-op */
|
|
109
|
+
// If this is going to be incremental, start a watcher to re-bundle when source
|
|
110
|
+
// changes.
|
|
111
|
+
if (!isExternal) {
|
|
112
|
+
initializeFileWatcher(session, bundleId, outputPath, bundleRequest, apiServer);
|
|
113
|
+
log(`Bundle complete: ${outputPath}`);
|
|
123
114
|
}
|
|
124
115
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
|
-
errors: bundleRequest.result?.errors,
|
|
138
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
-
warnings: bundleRequest.result?.warnings,
|
|
140
|
-
});
|
|
141
|
-
resolve(bundleRequest);
|
|
116
|
+
catch (_) {
|
|
117
|
+
/* no-op */
|
|
118
|
+
}
|
|
119
|
+
resolve(bundleRequest);
|
|
120
|
+
// TODO: errors and warnings typings don't match up. We need to reconcile.
|
|
121
|
+
apiServer.reportEnd({
|
|
122
|
+
id: bundleId,
|
|
123
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
124
|
+
errors: bundleRequest.result?.errors,
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
126
|
+
warnings: bundleRequest.result?.warnings,
|
|
142
127
|
});
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
action = await pendingAction;
|
|
128
|
+
})();
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else if (pendingBundle) {
|
|
132
|
+
log(`Previous action found, waiting: "${packageName}@${version}${filePath}"`);
|
|
149
133
|
}
|
|
150
134
|
else {
|
|
151
|
-
log(`
|
|
135
|
+
log(`Bundle cached, returning: "${packageName}@${version}${filePath}"`);
|
|
152
136
|
}
|
|
137
|
+
await apiServer.pendingTask(bundleId);
|
|
138
|
+
await bundling;
|
|
139
|
+
action = apiServer.getTask(bundleId);
|
|
153
140
|
// If this is a pre-built local package we haven't set up for incremental builds, set it up.
|
|
154
141
|
if (!isExternal && !action.dispose) {
|
|
155
|
-
initializeFileWatcher(session, bundleId, outputPath, action,
|
|
142
|
+
initializeFileWatcher(session, bundleId, outputPath, action, apiServer);
|
|
156
143
|
}
|
|
157
144
|
// At this point we should have an action completed.
|
|
158
145
|
if ((action.result?.errors?.length || 0) > 0) {
|
|
159
146
|
res.status(500).type('json').send(action);
|
|
160
147
|
}
|
|
161
148
|
else {
|
|
162
|
-
log(`
|
|
149
|
+
log(`Bundle returning: "${packageName}@${version}${filePath}"`);
|
|
163
150
|
// Try to return the result.
|
|
164
151
|
if (isExternal) {
|
|
165
152
|
res.setHeader('Cache-Control', 'public, max-age=31536000');
|
|
@@ -169,27 +156,26 @@ export async function startBundleServer({ session, apiServer, }) {
|
|
|
169
156
|
});
|
|
170
157
|
});
|
|
171
158
|
const url = `http://localhost:${port}`;
|
|
172
|
-
log(`
|
|
159
|
+
log(`started (${url})`);
|
|
173
160
|
return {
|
|
174
161
|
close: async () => {
|
|
175
|
-
// await writeJson(bundleLookupPath, createdBundles);
|
|
176
162
|
server.close();
|
|
177
163
|
},
|
|
178
164
|
port,
|
|
179
165
|
url,
|
|
180
166
|
};
|
|
181
167
|
}
|
|
182
|
-
function initializeFileWatcher(session, bundleId, outputPath, bundleRequest,
|
|
168
|
+
function initializeFileWatcher(session, bundleId, outputPath, bundleRequest, apiServer) {
|
|
183
169
|
const { id, packageName, packagePath, version } = bundleRequest;
|
|
184
170
|
let bundleOutput = bundleRequest.result;
|
|
185
171
|
log(`Initializing file watcher for ${packageName}@${version}`);
|
|
186
172
|
// TODO: This is a bit of a hack. We should be able to use the watch API, but it doesn't seem to work.
|
|
187
173
|
const watcher = chokidar.watch(path.join(packagePath, 'src')).on('change', (event) => {
|
|
188
|
-
if (!
|
|
174
|
+
if (!apiServer.pendingTask(id)) {
|
|
189
175
|
bundleRequest.isRebuildRequired = true;
|
|
190
176
|
log(`Detected change "${event}", rebuilding "${packageName}@${version}"`);
|
|
191
177
|
// eslint-disable-next-line no-async-promise-executor
|
|
192
|
-
|
|
178
|
+
new Promise(async (resolveIncremental) => {
|
|
193
179
|
do {
|
|
194
180
|
bundleRequest.isRebuildRequired = false;
|
|
195
181
|
log(`[Start] >> Bundling "${packageName}@${version}" to "${outputPath}"`);
|
|
@@ -221,7 +207,6 @@ function initializeFileWatcher(session, bundleId, outputPath, bundleRequest, pen
|
|
|
221
207
|
});
|
|
222
208
|
log(`[ End ] << Bundled "${packageName}@${version}" (${bundleOutput?.outputFiles?.length || 0} file(s), ${bundleOutput?.errors?.length || 0} errors)`);
|
|
223
209
|
} while (bundleRequest.isRebuildRequired);
|
|
224
|
-
delete pendingBundles[id];
|
|
225
210
|
if (!bundleOutput?.errors?.length) {
|
|
226
211
|
log(`Notifying rebuild: ${packageName}@${version}`);
|
|
227
212
|
apiServer.notifyReload();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startBundleServer.js","sourceRoot":"","sources":["../../../src/commands/start/startBundleServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAgB,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;AAE9B,2FAA2F;AAE3F,MAAM,GAAG,GAAG,CAAC,GAAG,QAAmB,EAAE,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC;AAQF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,OAAO,EACP,SAAS,GAIV;IACC,MAAM,
|
|
1
|
+
{"version":3,"file":"startBundleServer.js","sourceRoot":"","sources":["../../../src/commands/start/startBundleServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
2
|
import { TaskRunner } from './TaskRunner.js';
|
|
3
|
+
const tasks = [
|
|
4
|
+
{
|
|
5
|
+
name: 'Task 1',
|
|
6
|
+
id: '1',
|
|
7
|
+
execute: () => new Promise((r) => r('test value')),
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
name: 'Task 2',
|
|
11
|
+
id: '1',
|
|
12
|
+
execute: () => new Promise((r) => r('wrong value')),
|
|
13
|
+
},
|
|
14
|
+
];
|
|
3
15
|
describe('addTask', () => {
|
|
4
|
-
it('verify it
|
|
16
|
+
it('verify it resolves the promise', async () => {
|
|
5
17
|
const taskRunner = new TaskRunner();
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
expect(await taskRunner.add(
|
|
18
|
+
expect(await taskRunner.add(tasks[0])).toEqual('test value');
|
|
19
|
+
});
|
|
20
|
+
it('verify it returns previous completed task with same id', async () => {
|
|
21
|
+
const taskRunner = new TaskRunner();
|
|
22
|
+
await taskRunner.add(tasks[0]);
|
|
23
|
+
// Task Runner should return task with same id
|
|
24
|
+
// since previous task is already completed.
|
|
25
|
+
expect(await taskRunner.add(tasks[1])).toEqual('test value');
|
|
26
|
+
});
|
|
27
|
+
it('verify it returns previous pending task with same id', async () => {
|
|
28
|
+
const taskRunner = new TaskRunner();
|
|
29
|
+
taskRunner.add(tasks[0]);
|
|
30
|
+
// Even though task[0].excute() and task[1].execute() return different strings,
|
|
31
|
+
// since their tasks share id, the task runner will return the promise of the first.
|
|
32
|
+
expect(await taskRunner.add(tasks[1])).toEqual('test value');
|
|
14
33
|
});
|
|
15
34
|
});
|
|
16
35
|
//# sourceMappingURL=taskRunner.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskRunner.test.js","sourceRoot":"","sources":["../../../src/commands/start/taskRunner.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"taskRunner.test.js","sourceRoot":"","sources":["../../../src/commands/start/taskRunner.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAa,MAAM,iBAAiB,CAAC;AAExD,MAAM,KAAK,GAAwB;IACjC;QACE,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;KAC3D;IACD;QACE,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;KAC5D;CACF,CAAC;AAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,MAAM,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/B,8CAA8C;QAC9C,4CAA4C;QAC5C,MAAM,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzB,+EAA+E;QAC/E,oFAAoF;QACpF,MAAM,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/tsdoc-metadata.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "The Cloudpack command line interface - a tool for managing fast inner and outer looping in web apps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
"cloudpack": "./lib/cloudpack.js"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@ms-cloudpack/bundler": "^0.3.
|
|
19
|
+
"@ms-cloudpack/bundler": "^0.3.10",
|
|
20
20
|
"@ms-cloudpack/create-express-app": "^0.1.0",
|
|
21
21
|
"@ms-cloudpack/data-bus": "^0.1.0",
|
|
22
22
|
"@ms-cloudpack/json-utilities": "^0.0.3",
|
|
23
23
|
"@ms-cloudpack/overlay": "^0.1.1",
|
|
24
|
-
"@ms-cloudpack/package-utilities": "^0.8.
|
|
25
|
-
"@ms-cloudpack/path-utilities": "^0.3.
|
|
24
|
+
"@ms-cloudpack/package-utilities": "^0.8.1",
|
|
25
|
+
"@ms-cloudpack/path-utilities": "^0.3.2",
|
|
26
26
|
"chokidar": "^3.5.3",
|
|
27
27
|
"commander": "^9.1.0",
|
|
28
28
|
"filenamify": "^5.1.0",
|