@mpis/client 0.0.1
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/LICENSE +21 -0
- package/README.md +51 -0
- package/config/rig.json +5 -0
- package/lib/api.d.ts +4 -0
- package/lib/api.d.ts.map +1 -0
- package/lib/api.js +4 -0
- package/lib/api.js.map +1 -0
- package/lib/bin.d.ts +2 -0
- package/lib/bin.d.ts.map +1 -0
- package/lib/bin.js +80 -0
- package/lib/bin.js.map +1 -0
- package/lib/bins/execute-stdout.d.ts +2 -0
- package/lib/bins/execute-stdout.d.ts.map +1 -0
- package/lib/bins/execute-stdout.js +2 -0
- package/lib/bins/execute-stdout.js.map +1 -0
- package/lib/channel-client/abs.d.ts +35 -0
- package/lib/channel-client/abs.d.ts.map +1 -0
- package/lib/channel-client/abs.js +145 -0
- package/lib/channel-client/abs.js.map +1 -0
- package/lib/channel-client/http.d.ts +13 -0
- package/lib/channel-client/http.d.ts.map +1 -0
- package/lib/channel-client/http.js +30 -0
- package/lib/channel-client/http.js.map +1 -0
- package/lib/channel-client/nodejs.d.ts +9 -0
- package/lib/channel-client/nodejs.d.ts.map +1 -0
- package/lib/channel-client/nodejs.js +16 -0
- package/lib/channel-client/nodejs.js.map +1 -0
- package/lib/channel-client/tcp.d.ts +15 -0
- package/lib/channel-client/tcp.d.ts.map +1 -0
- package/lib/channel-client/tcp.js +41 -0
- package/lib/channel-client/tcp.js.map +1 -0
- package/lib/common/message-channel.d.ts +3 -0
- package/lib/common/message-channel.d.ts.map +1 -0
- package/lib/common/message-channel.js +21 -0
- package/lib/common/message-channel.js.map +1 -0
- package/lib/handlers/stdout.d.ts +10 -0
- package/lib/handlers/stdout.d.ts.map +1 -0
- package/lib/handlers/stdout.js +73 -0
- package/lib/handlers/stdout.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/loader/bin.devel.js +4 -0
- package/loader/bin.js +8 -0
- package/package.json +39 -0
- package/src/api.ts +3 -0
- package/src/bin.ts +88 -0
- package/src/bins/execute-stdout.ts +0 -0
- package/src/channel-client/abs.ts +161 -0
- package/src/channel-client/http.ts +33 -0
- package/src/channel-client/nodejs.ts +20 -0
- package/src/channel-client/tcp.ts +47 -0
- package/src/common/message-channel.ts +19 -0
- package/src/handlers/stdout.ts +85 -0
- package/src/tsconfig.json +9 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 GongT<admin@gongt.me>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 构建协议客户端接口
|
|
2
|
+
|
|
3
|
+
将构建开始、成功或失败的事件发送到构建协议服务器。
|
|
4
|
+
|
|
5
|
+
### API
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { BuildProtocolClient } from '@mpis/client';
|
|
9
|
+
|
|
10
|
+
const protocol = BuildProtocolClient();
|
|
11
|
+
|
|
12
|
+
await protocol.connect().catch((err) => {
|
|
13
|
+
console.error('构建连接失败', err.message);
|
|
14
|
+
});
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### CLI
|
|
18
|
+
|
|
19
|
+
##### 标准输入模式
|
|
20
|
+
|
|
21
|
+
> build-protocol-client --stdin [--start <开始>] --finish <完成> [--success <成功>] [--error <错误>]
|
|
22
|
+
|
|
23
|
+
* `--start` <开始>:可选,匹配行。如果不设置,则完成状态下输出任何内容都认为是开始。flag = iv
|
|
24
|
+
* `--finish` <完成>:必须,匹配行,匹配到则发送成功或失败事件。flag = iv
|
|
25
|
+
* `--error` <失败>:匹配全部输出,匹配到则认为失败。flag = imv
|
|
26
|
+
* `--success` <成功>:匹配全部输出,匹配到则认为成功。flag = imv
|
|
27
|
+
|
|
28
|
+
全部输出指的是: 从开始(不含)直到本次完成(包含)的输出内容。如果没有 `--start`,则“开始”是从上次完成(不含)。
|
|
29
|
+
|
|
30
|
+
`--error` 和 `--success` 至少要设置一个
|
|
31
|
+
|
|
32
|
+
同时匹配或同时没有匹配到 `--error` 和 `--success` 时,优先认定为发生了错误。
|
|
33
|
+
但如果输入被关闭(例如前面的进程结束),则在没有匹配到 `--error` 时候认定为成功。且即使没有匹配到 `--finish`,也会发送完成事件。
|
|
34
|
+
|
|
35
|
+
所有字符串都是正则表达式,带有flag=`umi`,可以设置对应的 `--xxx-fixed yyyy` ,只进行字符串搜索。
|
|
36
|
+
|
|
37
|
+
例如:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
tsc -p . -w | \
|
|
41
|
+
build-protocol-client --stdin \
|
|
42
|
+
--success "Found 0 errors" \
|
|
43
|
+
--finish "Watching for file changes\\." \
|
|
44
|
+
--start "Starting (incremental)? compilation"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
##### 运行命令并同时监听stdout和stderr
|
|
48
|
+
> build-protocol-client [--start <开始>] --finish <完成> [--success <成功>] [--error <错误>] -- <命令> [<参数>...]
|
|
49
|
+
|
|
50
|
+
* `--` 必须存在,后面的内容会被认定为命令和参数。
|
|
51
|
+
* 其他选项见上方说明
|
package/config/rig.json
ADDED
package/lib/api.d.ts
ADDED
package/lib/api.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/lib/api.js
ADDED
package/lib/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/lib/bin.d.ts
ADDED
package/lib/bin.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
|
package/lib/bin.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { argv } from '@idlebox/args/default';
|
|
2
|
+
import { execa } from 'execa';
|
|
3
|
+
import { basename } from 'path';
|
|
4
|
+
import { listenOutputStream } from './api.js';
|
|
5
|
+
const stdinMode = argv.flag('--stdin') > 0;
|
|
6
|
+
const startSignal = argv.single('--start') || '';
|
|
7
|
+
const finishSignal = argv.single('--finish');
|
|
8
|
+
const errorSignal = argv.single('--error');
|
|
9
|
+
const successSignal = argv.single('--success');
|
|
10
|
+
if (!finishSignal) {
|
|
11
|
+
console.error('the --finish signal must be provided.');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
if (!startSignal && !finishSignal) {
|
|
15
|
+
console.error('at least one of --start and --finish signal must be provided.');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
function throwUnused() {
|
|
19
|
+
const unused = argv.unused();
|
|
20
|
+
if (unused.length > 0) {
|
|
21
|
+
console.error('unexpected arguments: %s', unused.join(' '));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
let reading_stream;
|
|
26
|
+
let title = '';
|
|
27
|
+
if (stdinMode) {
|
|
28
|
+
throwUnused();
|
|
29
|
+
reading_stream = process.stdin;
|
|
30
|
+
process.stdin.pipe(process.stdout, { end: false });
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const command = argv.at(0);
|
|
34
|
+
if (!command) {
|
|
35
|
+
throw new Error('missing command to run');
|
|
36
|
+
}
|
|
37
|
+
const args = argv.range(1);
|
|
38
|
+
title = basename(command);
|
|
39
|
+
const p = execa(command, args, {
|
|
40
|
+
all: true,
|
|
41
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
42
|
+
reject: false,
|
|
43
|
+
});
|
|
44
|
+
p.then((r) => {
|
|
45
|
+
process.exitCode = r.exitCode ?? 1;
|
|
46
|
+
});
|
|
47
|
+
p.stdout.pipe(process.stdout, { end: false });
|
|
48
|
+
p.stderr.pipe(process.stderr, { end: false });
|
|
49
|
+
reading_stream = p.all;
|
|
50
|
+
}
|
|
51
|
+
const startRegex = startSignal ? new RegExp(startSignal, 'iv') : undefined;
|
|
52
|
+
const finishRegex = new RegExp(finishSignal, 'iv');
|
|
53
|
+
const errorRegex = errorSignal ? new RegExp(errorSignal, 'imv') : undefined;
|
|
54
|
+
const successRegex = successSignal ? new RegExp(successSignal, 'imv') : undefined;
|
|
55
|
+
listenOutputStream(reading_stream, {
|
|
56
|
+
title,
|
|
57
|
+
start: startRegex,
|
|
58
|
+
stop: finishRegex,
|
|
59
|
+
isFailed(_stop_line, full_output) {
|
|
60
|
+
if (successRegex && errorRegex) {
|
|
61
|
+
const succeed = successRegex.test(full_output);
|
|
62
|
+
const errored = errorRegex.test(full_output);
|
|
63
|
+
if (errored) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (succeed) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (successRegex) {
|
|
72
|
+
return successRegex.test(full_output);
|
|
73
|
+
}
|
|
74
|
+
if (errorRegex) {
|
|
75
|
+
return !errorRegex.test(full_output);
|
|
76
|
+
}
|
|
77
|
+
throw new Error('this is impossible');
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=bin.js.map
|
package/lib/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-stdout.d.ts","sourceRoot":"","sources":["../../src/bins/execute-stdout.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-stdout.js","sourceRoot":"","sources":["../../src/bins/execute-stdout.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AsyncDisposable, Emitter } from '@idlebox/common';
|
|
2
|
+
import { type IMyLogger } from '@idlebox/logger';
|
|
3
|
+
import { type IMessageObject } from '@mpis/shared';
|
|
4
|
+
export type IUserMessageObject = Omit<IMessageObject, '__brand__' | 'title' | 'pid'>;
|
|
5
|
+
export declare const messageBrand: any;
|
|
6
|
+
export declare abstract class AbstractChannelClient extends AsyncDisposable {
|
|
7
|
+
private cstate;
|
|
8
|
+
protected connecting?: Promise<any>;
|
|
9
|
+
private queuedMessage?;
|
|
10
|
+
logger: IMyLogger;
|
|
11
|
+
protected readonly _onFailure: Emitter<Error>;
|
|
12
|
+
readonly onFailure: import("@idlebox/common").EventRegister<Error>;
|
|
13
|
+
constructor();
|
|
14
|
+
private _title;
|
|
15
|
+
get friendlyTitle(): string;
|
|
16
|
+
set friendlyTitle(title: string);
|
|
17
|
+
success(message: string, output?: string): Promise<void>;
|
|
18
|
+
failed(message: string, output: string): Promise<void>;
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
private send;
|
|
21
|
+
/** @internal */
|
|
22
|
+
connect(): Promise<void>;
|
|
23
|
+
private reset;
|
|
24
|
+
protected disconnect(): Promise<void>;
|
|
25
|
+
protected abstract _disconnect(): Promise<void>;
|
|
26
|
+
protected abstract _connect(): Promise<void>;
|
|
27
|
+
protected abstract _send(message: IMessageObject): void | Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare class VoidClient extends AbstractChannelClient {
|
|
30
|
+
constructor();
|
|
31
|
+
protected _disconnect(): Promise<void>;
|
|
32
|
+
protected _connect(): Promise<void>;
|
|
33
|
+
protected _send(message: IMessageObject): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=abs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abs.d.ts","sourceRoot":"","sources":["../../src/channel-client/abs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAI/D,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;AAErF,eAAO,MAAM,YAAY,EAAa,GAAG,CAAC;AAuB1C,8BAAsB,qBAAsB,SAAQ,eAAe;IAClE,OAAO,CAAC,MAAM,CAAgC;IAC9C,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,CAAC,aAAa,CAAC,CAAqB;IAC5B,MAAM,EAAE,SAAS,CAAC;IAEjC,SAAS,CAAC,QAAQ,CAAC,UAAU,iBAAwB;IACrD,SAAgB,SAAS,iDAA4B;;IAWrD,QAAgB,MAAM,CAAS;IAC/B,IAAI,aAAa,IAGQ,MAAM,CAD9B;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,EAI9B;IAED,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAOxC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOtC,KAAK;YAOS,IAAI;IAwBlB,gBAAgB;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBrC,OAAO,CAAC,KAAK;cAMG,UAAU;IAS1B,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAC5C,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CACvE;AAED,qBAAa,UAAW,SAAQ,qBAAqB;;cAM3B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;cAC5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;cAC/B,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CAGvD"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { AsyncDisposable, Emitter } from '@idlebox/common';
|
|
2
|
+
import { createLogger } from '@idlebox/logger';
|
|
3
|
+
import { BuildEvent } from '@mpis/shared';
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { findPackageJSON } from 'node:module';
|
|
6
|
+
export const messageBrand = 'BPCM';
|
|
7
|
+
var ConnectionState;
|
|
8
|
+
(function (ConnectionState) {
|
|
9
|
+
ConnectionState[ConnectionState["Disconnected"] = 0] = "Disconnected";
|
|
10
|
+
ConnectionState[ConnectionState["Connecting"] = 1] = "Connecting";
|
|
11
|
+
ConnectionState[ConnectionState["Connected"] = 2] = "Connected";
|
|
12
|
+
})(ConnectionState || (ConnectionState = {}));
|
|
13
|
+
function getDefaultTitle() {
|
|
14
|
+
if (process.env.BUILD_PROTOCOL_TITLE) {
|
|
15
|
+
return process.env.BUILD_PROTOCOL_TITLE;
|
|
16
|
+
}
|
|
17
|
+
if (process.title !== 'node') {
|
|
18
|
+
return process.title;
|
|
19
|
+
}
|
|
20
|
+
const packagePath = findPackageJSON(process.argv[1]);
|
|
21
|
+
if (packagePath) {
|
|
22
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
23
|
+
return packageJson.name.replace('@mpis/', '').replace('@', '').replace('/', ':');
|
|
24
|
+
}
|
|
25
|
+
return 'unknown';
|
|
26
|
+
}
|
|
27
|
+
export class AbstractChannelClient extends AsyncDisposable {
|
|
28
|
+
cstate = ConnectionState.Disconnected;
|
|
29
|
+
connecting;
|
|
30
|
+
queuedMessage;
|
|
31
|
+
_onFailure = new Emitter();
|
|
32
|
+
onFailure = this._onFailure.register;
|
|
33
|
+
constructor() {
|
|
34
|
+
super();
|
|
35
|
+
this._onFailure.register(() => {
|
|
36
|
+
this.cstate = ConnectionState.Disconnected;
|
|
37
|
+
this.connecting = undefined;
|
|
38
|
+
});
|
|
39
|
+
this.friendlyTitle = getDefaultTitle();
|
|
40
|
+
}
|
|
41
|
+
get friendlyTitle() {
|
|
42
|
+
return this._title;
|
|
43
|
+
}
|
|
44
|
+
set friendlyTitle(title) {
|
|
45
|
+
if (this._title === title)
|
|
46
|
+
return;
|
|
47
|
+
this._title = title;
|
|
48
|
+
this.logger = createLogger(`mpis:${title}`);
|
|
49
|
+
}
|
|
50
|
+
success(message, output) {
|
|
51
|
+
return this.send({
|
|
52
|
+
event: BuildEvent.Success,
|
|
53
|
+
output,
|
|
54
|
+
message,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
failed(message, output) {
|
|
58
|
+
return this.send({
|
|
59
|
+
event: BuildEvent.Failed,
|
|
60
|
+
output,
|
|
61
|
+
message,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
start() {
|
|
65
|
+
return this.send({
|
|
66
|
+
event: BuildEvent.Start,
|
|
67
|
+
message: '',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async send(message) {
|
|
71
|
+
try {
|
|
72
|
+
if (this.cstate === ConnectionState.Connected) {
|
|
73
|
+
this.logger.debug `emit: ${message.event}()`;
|
|
74
|
+
await this._send({
|
|
75
|
+
...message,
|
|
76
|
+
__brand__: messageBrand,
|
|
77
|
+
title: this.friendlyTitle,
|
|
78
|
+
pid: process.pid,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.logger.debug `(${ConnectionState[this.cstate]}) will emit: ${message.event}()`;
|
|
83
|
+
this.queuedMessage = message;
|
|
84
|
+
if (this.cstate === ConnectionState.Disconnected) {
|
|
85
|
+
await this.connect();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
this.logger.warn `send message failed: ${e?.message ?? e}`;
|
|
91
|
+
this._onFailure.fireNoError(e);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** @internal */
|
|
95
|
+
async connect() {
|
|
96
|
+
this.logger.verbose `connect(${process.env.BUILD_PROTOCOL_SERVER}) [current state=${ConnectionState[this.cstate]}]`;
|
|
97
|
+
if (this.cstate === ConnectionState.Connecting) {
|
|
98
|
+
await this.connecting;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
else if (this.cstate === ConnectionState.Connected) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.cstate = ConnectionState.Connecting;
|
|
105
|
+
try {
|
|
106
|
+
await this._connect();
|
|
107
|
+
this.logger.debug `success connect server!`;
|
|
108
|
+
this.cstate = ConnectionState.Connected;
|
|
109
|
+
if (this.queuedMessage) {
|
|
110
|
+
const v = this.queuedMessage;
|
|
111
|
+
this.queuedMessage = undefined;
|
|
112
|
+
await this.send(v);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
this.logger.error `failed to connect server: ${err?.message ?? err}`;
|
|
117
|
+
this._onFailure.fire(err);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
reset() {
|
|
121
|
+
this.connecting = undefined;
|
|
122
|
+
this.queuedMessage = undefined;
|
|
123
|
+
this.cstate = ConnectionState.Disconnected;
|
|
124
|
+
}
|
|
125
|
+
async disconnect() {
|
|
126
|
+
this.logger.verbose('disconnect()');
|
|
127
|
+
if (this.cstate !== ConnectionState.Connected) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
await this._disconnect();
|
|
131
|
+
this.reset();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export class VoidClient extends AbstractChannelClient {
|
|
135
|
+
constructor() {
|
|
136
|
+
super();
|
|
137
|
+
this.logger.debug;
|
|
138
|
+
}
|
|
139
|
+
async _disconnect() { }
|
|
140
|
+
async _connect() { }
|
|
141
|
+
_send(message) {
|
|
142
|
+
this.logger.warn `VoidClient: sending: \x1B[38;5;10m${message.event}\x1B[39m output=${message.output}...`;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=abs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abs.js","sourceRoot":"","sources":["../../src/channel-client/abs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IMessageObject } from '@mpis/shared';
|
|
2
|
+
import { AbstractChannelClient } from './abs.js';
|
|
3
|
+
/**
|
|
4
|
+
* HTTP连接的客户端实现
|
|
5
|
+
*/
|
|
6
|
+
export declare class HttpClient extends AbstractChannelClient {
|
|
7
|
+
private readonly remote;
|
|
8
|
+
constructor(remote: string);
|
|
9
|
+
protected _disconnect(): Promise<void>;
|
|
10
|
+
protected _connect(): Promise<void>;
|
|
11
|
+
protected _send(message: IMessageObject): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/channel-client/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD;;GAEG;AACH,qBAAa,UAAW,SAAQ,qBAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;cAIlB,WAAW;cACX,QAAQ;cAER,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBtE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AbstractChannelClient } from './abs.js';
|
|
2
|
+
/**
|
|
3
|
+
* HTTP连接的客户端实现
|
|
4
|
+
*/
|
|
5
|
+
export class HttpClient extends AbstractChannelClient {
|
|
6
|
+
remote;
|
|
7
|
+
constructor(remote) {
|
|
8
|
+
super();
|
|
9
|
+
this.remote = remote;
|
|
10
|
+
}
|
|
11
|
+
async _disconnect() { }
|
|
12
|
+
async _connect() { }
|
|
13
|
+
async _send(message) {
|
|
14
|
+
const response = await fetch(this.remote, {
|
|
15
|
+
method: 'POST',
|
|
16
|
+
headers: {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify(message),
|
|
20
|
+
});
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
throw new Error(`HTTP request failed with status ${response.status}: ${response.statusText}`);
|
|
23
|
+
}
|
|
24
|
+
const body = await response.json();
|
|
25
|
+
if (!body.success) {
|
|
26
|
+
throw new Error(body.message);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/channel-client/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,qBAAqB;IACvB;IAA7B,YAA6B,MAAc;QAC1C,KAAK,EAAE,CAAC;QADoB,WAAM,GAAN,MAAM,CAAQ;IAE3C,CAAC;IAEkB,KAAK,CAAC,WAAW,KAAI,CAAC;IACtB,KAAK,CAAC,QAAQ,KAAI,CAAC;IAEnB,KAAK,CAAC,KAAK,CAAC,OAAuB;QACrD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YACzC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IMessageObject } from '@mpis/shared';
|
|
2
|
+
import { AbstractChannelClient } from './abs.js';
|
|
3
|
+
export declare class NodejsIpcClient extends AbstractChannelClient {
|
|
4
|
+
constructor();
|
|
5
|
+
protected _disconnect(): Promise<void>;
|
|
6
|
+
protected _connect(): Promise<void>;
|
|
7
|
+
protected _send(message: IMessageObject): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=nodejs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodejs.d.ts","sourceRoot":"","sources":["../../src/channel-client/nodejs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,qBAAa,eAAgB,SAAQ,qBAAqB;;cAShC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;cAC5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;cAE/B,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CAIvD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AbstractChannelClient } from './abs.js';
|
|
2
|
+
export class NodejsIpcClient extends AbstractChannelClient {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
if (typeof process.send !== 'function') {
|
|
6
|
+
throw new Error('process.send is not a function, this is not a valid child process');
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
async _disconnect() { }
|
|
10
|
+
async _connect() { }
|
|
11
|
+
_send(message) {
|
|
12
|
+
// biome-ignore lint/style/noNonNullAssertion: checked in constructor
|
|
13
|
+
process.send(message);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=nodejs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodejs.js","sourceRoot":"","sources":["../../src/channel-client/nodejs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,OAAO,eAAgB,SAAQ,qBAAqB;IACzD;QACC,KAAK,EAAE,CAAC;QAER,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACtF,CAAC;IACF,CAAC;IAEkB,KAAK,CAAC,WAAW,KAAmB,CAAC;IACrC,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAElC,KAAK,CAAC,OAAuB;QAC/C,qEAAqE;QACrE,OAAO,CAAC,IAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;CACD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AbstractChannelClient } from './abs.js';
|
|
2
|
+
import type { IMessageObject } from '@mpis/shared';
|
|
3
|
+
export { make_message, type IMessageObject } from '@mpis/shared';
|
|
4
|
+
/**
|
|
5
|
+
* TCP连接的客户端实现
|
|
6
|
+
*/
|
|
7
|
+
export declare class TcpClient extends AbstractChannelClient {
|
|
8
|
+
private readonly remote;
|
|
9
|
+
private socket;
|
|
10
|
+
constructor(remote: string);
|
|
11
|
+
protected _disconnect(): Promise<void>;
|
|
12
|
+
protected _connect(): Promise<void>;
|
|
13
|
+
protected _send(message: IMessageObject): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=tcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../src/channel-client/tcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE;;GAEG;AACH,qBAAa,SAAU,SAAQ,qBAAqB;IAGvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,QAAgB,MAAM,CAAS;gBAEF,MAAM,EAAE,MAAM;cAIlB,WAAW;cAKX,QAAQ;cAuBd,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CAGvD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createConnection } from 'node:net';
|
|
2
|
+
import { AbstractChannelClient } from './abs.js';
|
|
3
|
+
export { make_message } from '@mpis/shared';
|
|
4
|
+
/**
|
|
5
|
+
* TCP连接的客户端实现
|
|
6
|
+
*/
|
|
7
|
+
export class TcpClient extends AbstractChannelClient {
|
|
8
|
+
remote;
|
|
9
|
+
constructor(remote) {
|
|
10
|
+
super();
|
|
11
|
+
this.remote = remote;
|
|
12
|
+
}
|
|
13
|
+
async _disconnect() {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
this.socket.end(resolve);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async _connect() {
|
|
19
|
+
let socket;
|
|
20
|
+
const remote = this.remote.trim();
|
|
21
|
+
if (remote.includes(':')) {
|
|
22
|
+
const [host, port] = remote.split(':');
|
|
23
|
+
socket = createConnection({ port: Number.parseInt(port), host });
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
socket = createConnection({ path: remote });
|
|
27
|
+
}
|
|
28
|
+
await new Promise((resolve, reject) => {
|
|
29
|
+
socket.once('connect', () => resolve());
|
|
30
|
+
socket.once('error', (err) => reject(err));
|
|
31
|
+
});
|
|
32
|
+
socket.on('error', (err) => {
|
|
33
|
+
this._onFailure.fireNoError(err);
|
|
34
|
+
});
|
|
35
|
+
this.socket = socket;
|
|
36
|
+
}
|
|
37
|
+
_send(message) {
|
|
38
|
+
this.socket.write(`${JSON.stringify(message)}\n`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=tcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/channel-client/tcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AAEjE;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,qBAAqB;IAGtB;IAA7B,YAA6B,MAAc;QAC1C,KAAK,EAAE,CAAC;QADoB,WAAM,GAAN,MAAM,CAAQ;IAE3C,CAAC;IAEkB,KAAK,CAAC,WAAW;QACnC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACJ,CAAC;IACkB,KAAK,CAAC,QAAQ;QAChC,IAAI,MAAc,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACP,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAEkB,KAAK,CAAC,OAAuB;QAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-channel.d.ts","sourceRoot":"","sources":["../../src/common/message-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAMlF,eAAO,IAAI,aAAa,EAAE,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { VoidClient } from '../channel-client/abs.js';
|
|
2
|
+
import { HttpClient } from '../channel-client/http.js';
|
|
3
|
+
import { NodejsIpcClient } from '../channel-client/nodejs.js';
|
|
4
|
+
const server = process.env.BUILD_PROTOCOL_SERVER;
|
|
5
|
+
export let channelClient;
|
|
6
|
+
if (!server) {
|
|
7
|
+
channelClient = new VoidClient();
|
|
8
|
+
if (!process.stderr.isTTY) {
|
|
9
|
+
channelClient.logger.error('BUILD_PROTOCOL_SERVER environment variable is not set, sending messages to void.');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
else if (server === 'ipc:nodejs') {
|
|
13
|
+
channelClient = new NodejsIpcClient();
|
|
14
|
+
}
|
|
15
|
+
else if (server.startsWith('http://')) {
|
|
16
|
+
channelClient = new HttpClient(server);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw new TypeError(`Unknown BUILD_PROTOCOL_SERVER: ${server}`);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=message-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-channel.js","sourceRoot":"","sources":["../../src/common/message-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA8B,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAEjD,MAAM,CAAC,IAAI,aAAoC,CAAC;AAChD,IAAI,CAAC,MAAM,EAAE,CAAC;IACb,aAAa,GAAG,IAAI,UAAU,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;IAChH,CAAC;AACF,CAAC;KAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;IACpC,aAAa,GAAG,IAAI,eAAe,EAAE,CAAC;AACvC,CAAC;KAAM,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IACzC,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;KAAM,CAAC;IACP,MAAM,IAAI,SAAS,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface IOptions {
|
|
2
|
+
title?: string;
|
|
3
|
+
start?: RegExp;
|
|
4
|
+
stop: RegExp;
|
|
5
|
+
isFailed(stop_line: string, full_output: string): boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function listenOutputStream(stream: NodeJS.ReadableStream, options: IOptions): void;
|
|
8
|
+
export declare function hookCurrentProcessOutput(options: IOptions): void;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=stdout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../src/handlers/stdout.ts"],"names":[],"mappings":"AAIA,UAAU,QAAQ;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,QA2DlF;AACD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,QAazD"}
|