@mpis/client 0.0.18 → 0.0.20
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/lib/api.d.ts +1 -1
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +1 -1
- package/lib/api.js.map +1 -1
- package/lib/bin.js +2 -2
- package/lib/bin.js.map +1 -1
- package/lib/channel-client/abs.js +3 -3
- package/lib/channel-client/abs.js.map +1 -1
- package/lib/handlers/stdout.d.ts +8 -2
- package/lib/handlers/stdout.d.ts.map +1 -1
- package/lib/handlers/stdout.js +48 -12
- package/lib/handlers/stdout.js.map +1 -1
- package/package.json +10 -10
- package/src/api.ts +1 -1
- package/src/bin.ts +2 -2
- package/src/channel-client/abs.ts +3 -3
- package/src/handlers/stdout.ts +60 -13
package/lib/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { make_message, type IMessageObject } from '@mpis/shared';
|
|
2
2
|
export { channelClient } from './common/message-channel.js';
|
|
3
|
-
export { hookCurrentProcessOutput,
|
|
3
|
+
export { hookCurrentProcessOutput, joinMultipleTextStream, listenOnStream } from './handlers/stdout.js';
|
|
4
4
|
//# sourceMappingURL=api.d.ts.map
|
package/lib/api.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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,sBAAsB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
package/lib/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { make_message } from '@mpis/shared';
|
|
2
2
|
export { channelClient } from './common/message-channel.js';
|
|
3
|
-
export { hookCurrentProcessOutput,
|
|
3
|
+
export { hookCurrentProcessOutput, joinMultipleTextStream, listenOnStream } from './handlers/stdout.js';
|
|
4
4
|
//# sourceMappingURL=api.js.map
|
package/lib/api.js.map
CHANGED
|
@@ -1 +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,
|
|
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,sBAAsB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
package/lib/bin.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { argv } from '@idlebox/args/default';
|
|
2
2
|
import { execa } from 'execa';
|
|
3
3
|
import { basename } from 'node:path';
|
|
4
|
-
import {
|
|
4
|
+
import { listenOnStream } from './api.js';
|
|
5
5
|
const stdinMode = argv.flag(['--stdin']) > 0;
|
|
6
6
|
const startSignal = argv.single(['--start']) || '';
|
|
7
7
|
const finishSignal = argv.single(['--finish']);
|
|
@@ -52,7 +52,7 @@ const startRegex = startSignal ? new RegExp(startSignal, 'iv') : undefined;
|
|
|
52
52
|
const finishRegex = new RegExp(finishSignal, 'iv');
|
|
53
53
|
const errorRegex = errorSignal ? new RegExp(errorSignal, 'imv') : undefined;
|
|
54
54
|
const successRegex = successSignal ? new RegExp(successSignal, 'imv') : undefined;
|
|
55
|
-
|
|
55
|
+
listenOnStream(reading_stream, {
|
|
56
56
|
title,
|
|
57
57
|
start: startRegex,
|
|
58
58
|
stop: finishRegex,
|
package/lib/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,7 +70,7 @@ export class AbstractChannelClient extends EnhancedAsyncDisposable {
|
|
|
70
70
|
async send(message) {
|
|
71
71
|
try {
|
|
72
72
|
if (this.cstate === ConnectionState.Connected) {
|
|
73
|
-
this.logger.debug `emit: ${message.event}()`;
|
|
73
|
+
this.logger.debug `emit buildstate: ${message.event}()`;
|
|
74
74
|
await this._send({
|
|
75
75
|
...message,
|
|
76
76
|
__brand__: messageBrand,
|
|
@@ -79,7 +79,7 @@ export class AbstractChannelClient extends EnhancedAsyncDisposable {
|
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
else {
|
|
82
|
-
this.logger.debug `(${ConnectionState[this.cstate]}) will emit: ${message.event}()`;
|
|
82
|
+
this.logger.debug `(${ConnectionState[this.cstate]}) will emit buildstate: ${message.event}()`;
|
|
83
83
|
this.queuedMessage = message;
|
|
84
84
|
if (this.cstate === ConnectionState.Disconnected) {
|
|
85
85
|
await this.connect();
|
|
@@ -139,7 +139,7 @@ export class VoidClient extends AbstractChannelClient {
|
|
|
139
139
|
async _disconnect() { }
|
|
140
140
|
async _connect() { }
|
|
141
141
|
_send(message) {
|
|
142
|
-
this.logger.warn `VoidClient: sending: \x1B[38;5;11m${message.event}\x1B[39m message=[${message.message}] output=stripe<${message.output}>`;
|
|
142
|
+
this.logger.warn `VoidClient: sending: \x1B[1;38;5;11m${message.event}\x1B[39m message=[${message.message}] output=stripe<${message.output ?? ''}>`;
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
//# sourceMappingURL=abs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abs.js","sourceRoot":"","sources":["../../src/channel-client/abs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"abs.js","sourceRoot":"","sources":["../../src/channel-client/abs.ts"],"names":[],"mappings":"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"}
|
package/lib/handlers/stdout.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import { PassThrough, type TransformOptions } from 'node:stream';
|
|
1
2
|
interface IOptions {
|
|
2
3
|
title?: string;
|
|
3
4
|
start?: RegExp;
|
|
4
5
|
stop: RegExp;
|
|
5
6
|
isFailed(stop_line: string, full_output: string): boolean;
|
|
6
7
|
}
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function listenOnStream(stream: NodeJS.ReadableStream, options: IOptions): void;
|
|
9
|
+
export declare function joinMultipleTextStream(streams: NodeJS.ReadableStream[]): PassThrough;
|
|
10
|
+
interface IHookOptions {
|
|
11
|
+
injection?(who: 'stdout' | 'stderr'): NodeJS.ReadWriteStream | undefined;
|
|
12
|
+
transform?: TransformOptions['transform'];
|
|
13
|
+
}
|
|
14
|
+
export declare function hookCurrentProcessOutput({ transform, injection }: IHookOptions): void;
|
|
9
15
|
export {};
|
|
10
16
|
//# sourceMappingURL=stdout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../src/handlers/stdout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../src/handlers/stdout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAa,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK5E,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,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,QA6D9E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,eAgBtE;AAED,UAAU,YAAY;IACrB,SAAS,CAAC,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC;IACzE,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;CAC1C;AAED,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,YAAY,QAiC9E"}
|
package/lib/handlers/stdout.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { PassThrough } from 'node:stream';
|
|
1
|
+
import { PassThrough, Transform } from 'node:stream';
|
|
2
2
|
import split2 from 'split2';
|
|
3
3
|
import { channelClient } from '../common/message-channel.js';
|
|
4
|
-
export function
|
|
4
|
+
export function listenOnStream(stream, options) {
|
|
5
5
|
if (options.title)
|
|
6
6
|
channelClient.friendlyTitle = options.title;
|
|
7
7
|
function emit_failed() {
|
|
@@ -32,6 +32,7 @@ export function listenOutputStream(stream, options) {
|
|
|
32
32
|
memory += '\n';
|
|
33
33
|
if (!options.stop.test(line))
|
|
34
34
|
return;
|
|
35
|
+
started = false;
|
|
35
36
|
lastFailed = options.isFailed(line, memory);
|
|
36
37
|
if (lastFailed) {
|
|
37
38
|
emit_failed();
|
|
@@ -58,16 +59,51 @@ export function listenOutputStream(stream, options) {
|
|
|
58
59
|
});
|
|
59
60
|
stream.pipe(reading_stream, { end: true });
|
|
60
61
|
}
|
|
61
|
-
export function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
export function joinMultipleTextStream(streams) {
|
|
63
|
+
streams = [...streams];
|
|
64
|
+
const joinStream = new PassThrough({});
|
|
65
|
+
for (const stream of streams) {
|
|
66
|
+
stream.pipe(joinStream, { end: false });
|
|
67
|
+
stream.on('end', () => {
|
|
68
|
+
const index = streams.indexOf(stream);
|
|
69
|
+
if (index !== -1) {
|
|
70
|
+
streams.splice(index, 1);
|
|
71
|
+
}
|
|
72
|
+
if (streams.length === 0) {
|
|
73
|
+
joinStream.end();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return joinStream;
|
|
78
|
+
}
|
|
79
|
+
export function hookCurrentProcessOutput({ transform, injection }) {
|
|
80
|
+
function makePipeFunction(who, original) {
|
|
81
|
+
const injection_stream = injection?.(who);
|
|
82
|
+
if (!injection_stream && !transform) {
|
|
83
|
+
// 没有注入流,也没有转换需求
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const hook = transform ? new Transform({ transform }) : new PassThrough();
|
|
87
|
+
const originalWrite = original.write.bind(original);
|
|
88
|
+
original.write = hook.write.bind(hook); // 任何对stdout/err的写入都会改成对hook流的写入
|
|
89
|
+
// 但是hook本身向stdout/err写入时需要绕过hook,否则就死循环了
|
|
90
|
+
// mocked 等价于原始版本的 stdout/err
|
|
91
|
+
const mocked = new Proxy(original, {
|
|
92
|
+
get(target, prop, receiver) {
|
|
93
|
+
if (prop === 'write') {
|
|
94
|
+
return originalWrite;
|
|
95
|
+
}
|
|
96
|
+
return Reflect.get(target, prop, receiver);
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
if (injection_stream) {
|
|
100
|
+
hook.pipe(injection_stream, { end: true }).pipe(mocked, { end: false });
|
|
101
|
+
}
|
|
102
|
+
else if (transform) {
|
|
103
|
+
hook.pipe(mocked, { end: false });
|
|
104
|
+
}
|
|
69
105
|
}
|
|
70
|
-
|
|
71
|
-
|
|
106
|
+
makePipeFunction('stdout', process.stdout);
|
|
107
|
+
makePipeFunction('stderr', process.stderr);
|
|
72
108
|
}
|
|
73
109
|
//# sourceMappingURL=stdout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdout.js","sourceRoot":"","sources":["../../src/handlers/stdout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"stdout.js","sourceRoot":"","sources":["../../src/handlers/stdout.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mpis/client",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.20",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
@@ -16,24 +16,24 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"execa": "^9.6.1",
|
|
18
18
|
"split2": "^4.2.0",
|
|
19
|
-
"@idlebox/args": "^0.0.
|
|
20
|
-
"@idlebox/common": "^1.5.
|
|
21
|
-
"@
|
|
22
|
-
"@idlebox/
|
|
23
|
-
"@
|
|
19
|
+
"@idlebox/args": "^0.0.26",
|
|
20
|
+
"@idlebox/common": "^1.5.17",
|
|
21
|
+
"@mpis/shared": "^0.0.13",
|
|
22
|
+
"@idlebox/logger": "^0.0.21",
|
|
23
|
+
"@idlebox/source-map-support": "^0.0.19"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@types/node": "^25.0
|
|
26
|
+
"@types/node": "^25.5.0",
|
|
27
|
+
"@idlebox/esbuild-executer": "^0.0.15",
|
|
27
28
|
"@build-script/baseline-rig": "latest",
|
|
28
|
-
"@
|
|
29
|
-
"@mpis/run": "^0.0.20"
|
|
29
|
+
"@mpis/run": "^0.0.22"
|
|
30
30
|
},
|
|
31
31
|
"sideEffects": false,
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"author": "GongT <admin@gongt.me>",
|
|
34
34
|
"repository": {
|
|
35
35
|
"type": "git",
|
|
36
|
-
"url": "https://github.com/GongT/baobao",
|
|
36
|
+
"url": "git+https://github.com/GongT/baobao.git",
|
|
37
37
|
"directory": "@mpis/client"
|
|
38
38
|
},
|
|
39
39
|
"main": "./lib/api.js",
|
package/src/api.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { make_message, type IMessageObject } from '@mpis/shared';
|
|
2
2
|
export { channelClient } from './common/message-channel.js';
|
|
3
|
-
export { hookCurrentProcessOutput,
|
|
3
|
+
export { hookCurrentProcessOutput, joinMultipleTextStream, listenOnStream } from './handlers/stdout.js';
|
package/src/bin.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { argv } from '@idlebox/args/default';
|
|
2
2
|
import { execa } from 'execa';
|
|
3
3
|
import { basename } from 'node:path';
|
|
4
|
-
import {
|
|
4
|
+
import { listenOnStream } from './api.js';
|
|
5
5
|
|
|
6
6
|
const stdinMode = argv.flag(['--stdin']) > 0;
|
|
7
7
|
const startSignal = argv.single(['--start']) || '';
|
|
@@ -58,7 +58,7 @@ const finishRegex = new RegExp(finishSignal, 'iv');
|
|
|
58
58
|
const errorRegex = errorSignal ? new RegExp(errorSignal, 'imv') : undefined;
|
|
59
59
|
const successRegex = successSignal ? new RegExp(successSignal, 'imv') : undefined;
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
listenOnStream(reading_stream, {
|
|
62
62
|
title,
|
|
63
63
|
start: startRegex,
|
|
64
64
|
stop: finishRegex,
|
|
@@ -81,7 +81,7 @@ export abstract class AbstractChannelClient extends EnhancedAsyncDisposable {
|
|
|
81
81
|
private async send(message: IUserMessageObject) {
|
|
82
82
|
try {
|
|
83
83
|
if (this.cstate === ConnectionState.Connected) {
|
|
84
|
-
this.logger.debug`emit: ${message.event}()`;
|
|
84
|
+
this.logger.debug`emit buildstate: ${message.event}()`;
|
|
85
85
|
await this._send({
|
|
86
86
|
...message,
|
|
87
87
|
__brand__: messageBrand,
|
|
@@ -89,7 +89,7 @@ export abstract class AbstractChannelClient extends EnhancedAsyncDisposable {
|
|
|
89
89
|
pid: process.pid,
|
|
90
90
|
});
|
|
91
91
|
} else {
|
|
92
|
-
this.logger.debug`(${ConnectionState[this.cstate]}) will emit: ${message.event}()`;
|
|
92
|
+
this.logger.debug`(${ConnectionState[this.cstate]}) will emit buildstate: ${message.event}()`;
|
|
93
93
|
this.queuedMessage = message;
|
|
94
94
|
|
|
95
95
|
if (this.cstate === ConnectionState.Disconnected) {
|
|
@@ -156,6 +156,6 @@ export class VoidClient extends AbstractChannelClient {
|
|
|
156
156
|
protected override async _disconnect(): Promise<void> {}
|
|
157
157
|
protected override async _connect(): Promise<void> {}
|
|
158
158
|
protected override _send(message: IMessageObject): void {
|
|
159
|
-
this.logger.warn`VoidClient: sending: \x1B[38;5;11m${message.event}\x1B[39m message=[${message.message}] output=stripe<${message.output}>`;
|
|
159
|
+
this.logger.warn`VoidClient: sending: \x1B[1;38;5;11m${message.event}\x1B[39m message=[${message.message}] output=stripe<${message.output ?? ''}>`;
|
|
160
160
|
}
|
|
161
161
|
}
|
package/src/handlers/stdout.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { PassThrough } from 'node:stream';
|
|
1
|
+
import { PassThrough, Transform, type TransformOptions } from 'node:stream';
|
|
2
|
+
import type { WriteStream } from 'node:tty';
|
|
2
3
|
import split2 from 'split2';
|
|
3
4
|
import { channelClient } from '../common/message-channel.js';
|
|
4
5
|
|
|
@@ -9,7 +10,7 @@ interface IOptions {
|
|
|
9
10
|
isFailed(stop_line: string, full_output: string): boolean;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
export function
|
|
13
|
+
export function listenOnStream(stream: NodeJS.ReadableStream, options: IOptions) {
|
|
13
14
|
if (options.title) channelClient.friendlyTitle = options.title;
|
|
14
15
|
|
|
15
16
|
function emit_failed() {
|
|
@@ -45,6 +46,8 @@ export function listenOutputStream(stream: NodeJS.ReadableStream, options: IOpti
|
|
|
45
46
|
memory += '\n';
|
|
46
47
|
if (!options.stop.test(line)) return;
|
|
47
48
|
|
|
49
|
+
started = false;
|
|
50
|
+
|
|
48
51
|
lastFailed = options.isFailed(line, memory);
|
|
49
52
|
if (lastFailed) {
|
|
50
53
|
emit_failed();
|
|
@@ -69,17 +72,61 @@ export function listenOutputStream(stream: NodeJS.ReadableStream, options: IOpti
|
|
|
69
72
|
|
|
70
73
|
stream.pipe(reading_stream, { end: true });
|
|
71
74
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
|
|
76
|
+
export function joinMultipleTextStream(streams: NodeJS.ReadableStream[]) {
|
|
77
|
+
streams = [...streams];
|
|
78
|
+
const joinStream = new PassThrough({});
|
|
79
|
+
for (const stream of streams) {
|
|
80
|
+
stream.pipe(joinStream, { end: false });
|
|
81
|
+
stream.on('end', () => {
|
|
82
|
+
const index = streams.indexOf(stream);
|
|
83
|
+
if (index !== -1) {
|
|
84
|
+
streams.splice(index, 1);
|
|
85
|
+
}
|
|
86
|
+
if (streams.length === 0) {
|
|
87
|
+
joinStream.end();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return joinStream;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface IHookOptions {
|
|
95
|
+
injection?(who: 'stdout' | 'stderr'): NodeJS.ReadWriteStream | undefined;
|
|
96
|
+
transform?: TransformOptions['transform'];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function hookCurrentProcessOutput({ transform, injection }: IHookOptions) {
|
|
100
|
+
function makePipeFunction(who: 'stdout' | 'stderr', original: WriteStream) {
|
|
101
|
+
const injection_stream = injection?.(who);
|
|
102
|
+
if (!injection_stream && !transform) {
|
|
103
|
+
// 没有注入流,也没有转换需求
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const hook = transform ? new Transform({ transform }) : new PassThrough();
|
|
108
|
+
const originalWrite = original.write.bind(original);
|
|
109
|
+
|
|
110
|
+
original.write = hook.write.bind(hook); // 任何对stdout/err的写入都会改成对hook流的写入
|
|
111
|
+
|
|
112
|
+
// 但是hook本身向stdout/err写入时需要绕过hook,否则就死循环了
|
|
113
|
+
// mocked 等价于原始版本的 stdout/err
|
|
114
|
+
const mocked = new Proxy(original, {
|
|
115
|
+
get(target, prop, receiver) {
|
|
116
|
+
if (prop === 'write') {
|
|
117
|
+
return originalWrite;
|
|
118
|
+
}
|
|
119
|
+
return Reflect.get(target, prop, receiver);
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
if (injection_stream) {
|
|
124
|
+
hook.pipe(injection_stream, { end: true }).pipe(mocked, { end: false });
|
|
125
|
+
} else if (transform) {
|
|
126
|
+
hook.pipe(mocked, { end: false });
|
|
127
|
+
}
|
|
81
128
|
}
|
|
82
129
|
|
|
83
|
-
|
|
84
|
-
|
|
130
|
+
makePipeFunction('stdout', process.stdout);
|
|
131
|
+
makePipeFunction('stderr', process.stderr);
|
|
85
132
|
}
|