@procwire/transport 0.1.3 → 0.2.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/README.md +130 -4
- package/dist/channel/builder.d.ts +17 -0
- package/dist/channel/builder.d.ts.map +1 -1
- package/dist/channel/builder.js +34 -0
- package/dist/channel/builder.js.map +1 -1
- package/dist/channel/index.d.ts +1 -1
- package/dist/channel/index.d.ts.map +1 -1
- package/dist/channel/index.js +1 -1
- package/dist/channel/index.js.map +1 -1
- package/dist/channel/quickstart.d.ts.map +1 -1
- package/dist/channel/quickstart.js +16 -10
- package/dist/channel/quickstart.js.map +1 -1
- package/dist/channel/request-channel.d.ts +6 -1
- package/dist/channel/request-channel.d.ts.map +1 -1
- package/dist/channel/request-channel.js +138 -34
- package/dist/channel/request-channel.js.map +1 -1
- package/dist/channel/types.d.ts +129 -7
- package/dist/channel/types.d.ts.map +1 -1
- package/dist/framing/length-prefixed.d.ts +5 -1
- package/dist/framing/length-prefixed.d.ts.map +1 -1
- package/dist/framing/length-prefixed.js +94 -15
- package/dist/framing/length-prefixed.js.map +1 -1
- package/dist/framing/line-delimited.d.ts +4 -1
- package/dist/framing/line-delimited.d.ts.map +1 -1
- package/dist/framing/line-delimited.js +89 -23
- package/dist/framing/line-delimited.js.map +1 -1
- package/dist/process/handle.d.ts.map +1 -1
- package/dist/process/handle.js.map +1 -1
- package/dist/process/manager.d.ts +16 -0
- package/dist/process/manager.d.ts.map +1 -1
- package/dist/process/manager.js +132 -82
- package/dist/process/manager.js.map +1 -1
- package/dist/process/types.d.ts +110 -1
- package/dist/process/types.d.ts.map +1 -1
- package/dist/protocol/jsonrpc.d.ts.map +1 -1
- package/dist/protocol/jsonrpc.js.map +1 -1
- package/dist/protocol/simple.d.ts.map +1 -1
- package/dist/protocol/simple.js.map +1 -1
- package/dist/serialization/json.d.ts.map +1 -1
- package/dist/serialization/json.js.map +1 -1
- package/dist/transport/socket-server.d.ts.map +1 -1
- package/dist/transport/socket-server.js.map +1 -1
- package/dist/transport/socket-transport.d.ts +11 -13
- package/dist/transport/socket-transport.d.ts.map +1 -1
- package/dist/transport/socket-transport.js +57 -26
- package/dist/transport/socket-transport.js.map +1 -1
- package/dist/transport/stdio-transport.d.ts +12 -19
- package/dist/transport/stdio-transport.d.ts.map +1 -1
- package/dist/transport/stdio-transport.js +54 -33
- package/dist/transport/stdio-transport.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/metrics.d.ts +6 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +2 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/pipe-path.d.ts +8 -2
- package/dist/utils/pipe-path.d.ts.map +1 -1
- package/dist/utils/pipe-path.js +27 -4
- package/dist/utils/pipe-path.js.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/platform.js +1 -1
- package/dist/utils/platform.js.map +1 -1
- package/package.json +1 -1
|
@@ -17,11 +17,17 @@ import { FramingError } from "../utils/errors.js";
|
|
|
17
17
|
export class LengthPrefixedFraming {
|
|
18
18
|
static HEADER_SIZE = 4;
|
|
19
19
|
maxMessageSize;
|
|
20
|
-
|
|
20
|
+
buffers;
|
|
21
|
+
totalLength;
|
|
21
22
|
expectedLength;
|
|
22
23
|
constructor(options = {}) {
|
|
24
|
+
// Validate options
|
|
25
|
+
if (options.maxMessageSize !== undefined && options.maxMessageSize <= 0) {
|
|
26
|
+
throw new Error("LengthPrefixedFraming: maxMessageSize must be positive");
|
|
27
|
+
}
|
|
23
28
|
this.maxMessageSize = options.maxMessageSize ?? 32 * 1024 * 1024; // 32MB
|
|
24
|
-
this.
|
|
29
|
+
this.buffers = [];
|
|
30
|
+
this.totalLength = 0;
|
|
25
31
|
this.expectedLength = null;
|
|
26
32
|
}
|
|
27
33
|
/**
|
|
@@ -37,19 +43,26 @@ export class LengthPrefixedFraming {
|
|
|
37
43
|
* Buffers partial headers and payloads.
|
|
38
44
|
*/
|
|
39
45
|
decode(chunk) {
|
|
40
|
-
// Append chunk to buffer
|
|
41
|
-
|
|
46
|
+
// Append chunk to buffer list
|
|
47
|
+
if (chunk.length > 0) {
|
|
48
|
+
this.buffers.push(chunk);
|
|
49
|
+
this.totalLength += chunk.length;
|
|
50
|
+
}
|
|
42
51
|
const frames = [];
|
|
43
52
|
// Process all complete frames in buffer
|
|
44
53
|
while (true) {
|
|
45
54
|
// Do we need to read the header?
|
|
46
55
|
if (this.expectedLength === null) {
|
|
47
56
|
// Need at least HEADER_SIZE bytes
|
|
48
|
-
if (this.
|
|
57
|
+
if (this.totalLength < LengthPrefixedFraming.HEADER_SIZE) {
|
|
49
58
|
break; // Wait for more data
|
|
50
59
|
}
|
|
51
60
|
// Read length from header
|
|
52
|
-
const
|
|
61
|
+
const header = this.peekBytes(LengthPrefixedFraming.HEADER_SIZE);
|
|
62
|
+
if (!header) {
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
const length = header.readUInt32BE(0);
|
|
53
66
|
// Validate length
|
|
54
67
|
if (length > this.maxMessageSize) {
|
|
55
68
|
const error = new FramingError(`Message length ${length} exceeds maximum ${this.maxMessageSize}`);
|
|
@@ -57,23 +70,22 @@ export class LengthPrefixedFraming {
|
|
|
57
70
|
throw error;
|
|
58
71
|
}
|
|
59
72
|
this.expectedLength = length;
|
|
60
|
-
this.
|
|
73
|
+
this.consumeBytes(LengthPrefixedFraming.HEADER_SIZE);
|
|
61
74
|
}
|
|
62
75
|
// Do we have the complete payload?
|
|
63
|
-
if (this.
|
|
76
|
+
if (this.totalLength < this.expectedLength) {
|
|
64
77
|
break; // Wait for more data
|
|
65
78
|
}
|
|
66
79
|
// Extract frame
|
|
67
|
-
const frame = this.
|
|
80
|
+
const frame = this.takeBytes(this.expectedLength);
|
|
68
81
|
frames.push(frame);
|
|
69
82
|
// Move past this frame
|
|
70
|
-
this.buffer = this.buffer.subarray(this.expectedLength);
|
|
71
83
|
this.expectedLength = null;
|
|
72
84
|
}
|
|
73
85
|
// Validate buffer doesn't grow unbounded
|
|
74
86
|
const maxBufferSize = LengthPrefixedFraming.HEADER_SIZE + this.maxMessageSize;
|
|
75
|
-
if (this.
|
|
76
|
-
const error = new FramingError(`Buffer size ${this.
|
|
87
|
+
if (this.totalLength > maxBufferSize) {
|
|
88
|
+
const error = new FramingError(`Buffer size ${this.totalLength} exceeds maximum ${maxBufferSize}`);
|
|
77
89
|
this.reset();
|
|
78
90
|
throw error;
|
|
79
91
|
}
|
|
@@ -83,20 +95,87 @@ export class LengthPrefixedFraming {
|
|
|
83
95
|
* Resets internal buffer state.
|
|
84
96
|
*/
|
|
85
97
|
reset() {
|
|
86
|
-
this.
|
|
98
|
+
this.buffers = [];
|
|
99
|
+
this.totalLength = 0;
|
|
87
100
|
this.expectedLength = null;
|
|
88
101
|
}
|
|
89
102
|
/**
|
|
90
103
|
* Returns true if there is buffered partial data.
|
|
91
104
|
*/
|
|
92
105
|
hasBufferedData() {
|
|
93
|
-
return this.
|
|
106
|
+
return this.totalLength > 0 || this.expectedLength !== null;
|
|
94
107
|
}
|
|
95
108
|
/**
|
|
96
109
|
* Returns current buffer size in bytes.
|
|
97
110
|
*/
|
|
98
111
|
getBufferSize() {
|
|
99
|
-
return this.
|
|
112
|
+
return this.totalLength;
|
|
113
|
+
}
|
|
114
|
+
peekBytes(length) {
|
|
115
|
+
if (length > this.totalLength || this.buffers.length === 0) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const first = this.buffers[0];
|
|
119
|
+
if (first.length >= length) {
|
|
120
|
+
return first.subarray(0, length);
|
|
121
|
+
}
|
|
122
|
+
const parts = [];
|
|
123
|
+
let remaining = length;
|
|
124
|
+
for (const buffer of this.buffers) {
|
|
125
|
+
const slice = buffer.subarray(0, Math.min(buffer.length, remaining));
|
|
126
|
+
parts.push(slice);
|
|
127
|
+
remaining -= slice.length;
|
|
128
|
+
if (remaining === 0) {
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return Buffer.concat(parts, length);
|
|
133
|
+
}
|
|
134
|
+
takeBytes(length) {
|
|
135
|
+
if (length === 0) {
|
|
136
|
+
return Buffer.allocUnsafe(0);
|
|
137
|
+
}
|
|
138
|
+
if (length > this.totalLength) {
|
|
139
|
+
return Buffer.allocUnsafe(0);
|
|
140
|
+
}
|
|
141
|
+
const first = this.buffers[0];
|
|
142
|
+
if (first.length >= length) {
|
|
143
|
+
const slice = first.subarray(0, length);
|
|
144
|
+
this.consumeBytes(length);
|
|
145
|
+
return slice;
|
|
146
|
+
}
|
|
147
|
+
const parts = [];
|
|
148
|
+
let remaining = length;
|
|
149
|
+
while (remaining > 0 && this.buffers.length > 0) {
|
|
150
|
+
const buffer = this.buffers[0];
|
|
151
|
+
if (remaining >= buffer.length) {
|
|
152
|
+
parts.push(buffer);
|
|
153
|
+
this.buffers.shift();
|
|
154
|
+
remaining -= buffer.length;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
parts.push(buffer.subarray(0, remaining));
|
|
158
|
+
this.buffers[0] = buffer.subarray(remaining);
|
|
159
|
+
remaining = 0;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
this.totalLength -= length;
|
|
163
|
+
return parts.length === 1 ? parts[0] : Buffer.concat(parts, length);
|
|
164
|
+
}
|
|
165
|
+
consumeBytes(length) {
|
|
166
|
+
let remaining = length;
|
|
167
|
+
while (remaining > 0 && this.buffers.length > 0) {
|
|
168
|
+
const buffer = this.buffers[0];
|
|
169
|
+
if (remaining >= buffer.length) {
|
|
170
|
+
this.buffers.shift();
|
|
171
|
+
remaining -= buffer.length;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
this.buffers[0] = buffer.subarray(remaining);
|
|
175
|
+
remaining = 0;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
this.totalLength -= length;
|
|
100
179
|
}
|
|
101
180
|
}
|
|
102
181
|
//# sourceMappingURL=length-prefixed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"length-prefixed.js","sourceRoot":"","sources":["../../src/framing/length-prefixed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAclD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAU,WAAW,GAAG,CAAC,CAAC;IAEvB,cAAc,CAAS;IAChC,
|
|
1
|
+
{"version":3,"file":"length-prefixed.js","sourceRoot":"","sources":["../../src/framing/length-prefixed.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,8 @@ export declare class LineDelimitedFraming implements FramingCodec {
|
|
|
33
33
|
private readonly delimiter;
|
|
34
34
|
private readonly maxBufferSize;
|
|
35
35
|
private readonly stripDelimiter;
|
|
36
|
-
private
|
|
36
|
+
private buffers;
|
|
37
|
+
private totalLength;
|
|
37
38
|
constructor(options?: LineDelimitedFramingOptions);
|
|
38
39
|
/**
|
|
39
40
|
* Encodes a payload with delimiter.
|
|
@@ -57,5 +58,7 @@ export declare class LineDelimitedFraming implements FramingCodec {
|
|
|
57
58
|
* Returns current buffer size in bytes.
|
|
58
59
|
*/
|
|
59
60
|
getBufferSize(): number;
|
|
61
|
+
private buildFrame;
|
|
62
|
+
private compactBuffers;
|
|
60
63
|
}
|
|
61
64
|
//# sourceMappingURL=line-delimited.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-delimited.d.ts","sourceRoot":"","sources":["../../src/framing/line-delimited.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"line-delimited.d.ts","sourceRoot":"","sources":["../../src/framing/line-delimited.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,2BAAgC;IAgBrD;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAa/B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA6D/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB,OAAO,CAAC,UAAU;IA8BlB,OAAO,CAAC,cAAc;CA4BvB"}
|
|
@@ -15,12 +15,21 @@ export class LineDelimitedFraming {
|
|
|
15
15
|
delimiter;
|
|
16
16
|
maxBufferSize;
|
|
17
17
|
stripDelimiter;
|
|
18
|
-
|
|
18
|
+
buffers;
|
|
19
|
+
totalLength;
|
|
19
20
|
constructor(options = {}) {
|
|
21
|
+
// Validate options
|
|
22
|
+
if (options.delimiter !== undefined && (options.delimiter < 0 || options.delimiter > 255)) {
|
|
23
|
+
throw new Error("LineDelimitedFraming: delimiter must be a byte value (0-255)");
|
|
24
|
+
}
|
|
25
|
+
if (options.maxBufferSize !== undefined && options.maxBufferSize <= 0) {
|
|
26
|
+
throw new Error("LineDelimitedFraming: maxBufferSize must be positive");
|
|
27
|
+
}
|
|
20
28
|
this.delimiter = options.delimiter ?? 0x0a; // '\n'
|
|
21
29
|
this.maxBufferSize = options.maxBufferSize ?? 8 * 1024 * 1024; // 8MB
|
|
22
30
|
this.stripDelimiter = options.stripDelimiter ?? true;
|
|
23
|
-
this.
|
|
31
|
+
this.buffers = [];
|
|
32
|
+
this.totalLength = 0;
|
|
24
33
|
}
|
|
25
34
|
/**
|
|
26
35
|
* Encodes a payload with delimiter.
|
|
@@ -42,53 +51,110 @@ export class LineDelimitedFraming {
|
|
|
42
51
|
* Buffers partial data until delimiter is found.
|
|
43
52
|
*/
|
|
44
53
|
decode(chunk) {
|
|
45
|
-
// Append chunk to buffer
|
|
46
|
-
|
|
54
|
+
// Append chunk to buffer list
|
|
55
|
+
if (chunk.length > 0) {
|
|
56
|
+
this.buffers.push(chunk);
|
|
57
|
+
this.totalLength += chunk.length;
|
|
58
|
+
}
|
|
47
59
|
// Check buffer size limit
|
|
48
|
-
if (this.
|
|
49
|
-
const error = new FramingError(`Buffer size ${this.
|
|
60
|
+
if (this.totalLength > this.maxBufferSize) {
|
|
61
|
+
const error = new FramingError(`Buffer size ${this.totalLength} exceeds maximum ${this.maxBufferSize}`);
|
|
50
62
|
this.reset();
|
|
51
63
|
throw error;
|
|
52
64
|
}
|
|
53
65
|
const frames = [];
|
|
54
|
-
let
|
|
66
|
+
let frameStartBufferIndex = 0;
|
|
67
|
+
let frameStartOffset = 0;
|
|
68
|
+
let bufferIndex = 0;
|
|
69
|
+
let searchOffset = 0;
|
|
55
70
|
// Find all complete frames (terminated by delimiter)
|
|
56
|
-
while (
|
|
57
|
-
const
|
|
71
|
+
while (bufferIndex < this.buffers.length) {
|
|
72
|
+
const buffer = this.buffers[bufferIndex];
|
|
73
|
+
const delimiterIndex = buffer.indexOf(this.delimiter, searchOffset);
|
|
58
74
|
if (delimiterIndex === -1) {
|
|
59
|
-
|
|
60
|
-
|
|
75
|
+
bufferIndex++;
|
|
76
|
+
searchOffset = 0;
|
|
77
|
+
continue;
|
|
61
78
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const frame = this.buffer.subarray(searchStart, frameEnd);
|
|
65
|
-
frames.push(frame);
|
|
79
|
+
const frameEndOffset = this.stripDelimiter ? delimiterIndex : delimiterIndex + 1;
|
|
80
|
+
frames.push(this.buildFrame(frameStartBufferIndex, frameStartOffset, bufferIndex, frameEndOffset));
|
|
66
81
|
// Move past delimiter
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
82
|
+
if (delimiterIndex + 1 < buffer.length) {
|
|
83
|
+
frameStartBufferIndex = bufferIndex;
|
|
84
|
+
frameStartOffset = delimiterIndex + 1;
|
|
85
|
+
searchOffset = frameStartOffset;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
frameStartBufferIndex = bufferIndex + 1;
|
|
89
|
+
frameStartOffset = 0;
|
|
90
|
+
bufferIndex = frameStartBufferIndex;
|
|
91
|
+
searchOffset = 0;
|
|
92
|
+
}
|
|
72
93
|
}
|
|
94
|
+
this.compactBuffers(frameStartBufferIndex, frameStartOffset);
|
|
73
95
|
return frames;
|
|
74
96
|
}
|
|
75
97
|
/**
|
|
76
98
|
* Resets internal buffer state.
|
|
77
99
|
*/
|
|
78
100
|
reset() {
|
|
79
|
-
this.
|
|
101
|
+
this.buffers = [];
|
|
102
|
+
this.totalLength = 0;
|
|
80
103
|
}
|
|
81
104
|
/**
|
|
82
105
|
* Returns true if there is buffered partial data.
|
|
83
106
|
*/
|
|
84
107
|
hasBufferedData() {
|
|
85
|
-
return this.
|
|
108
|
+
return this.totalLength > 0;
|
|
86
109
|
}
|
|
87
110
|
/**
|
|
88
111
|
* Returns current buffer size in bytes.
|
|
89
112
|
*/
|
|
90
113
|
getBufferSize() {
|
|
91
|
-
return this.
|
|
114
|
+
return this.totalLength;
|
|
115
|
+
}
|
|
116
|
+
buildFrame(startIndex, startOffset, endIndex, endOffset) {
|
|
117
|
+
if (startIndex === endIndex) {
|
|
118
|
+
return this.buffers[startIndex].subarray(startOffset, endOffset);
|
|
119
|
+
}
|
|
120
|
+
const parts = [];
|
|
121
|
+
let totalLength = 0;
|
|
122
|
+
const first = this.buffers[startIndex].subarray(startOffset);
|
|
123
|
+
parts.push(first);
|
|
124
|
+
totalLength += first.length;
|
|
125
|
+
for (let i = startIndex + 1; i < endIndex; i++) {
|
|
126
|
+
const buffer = this.buffers[i];
|
|
127
|
+
parts.push(buffer);
|
|
128
|
+
totalLength += buffer.length;
|
|
129
|
+
}
|
|
130
|
+
const last = this.buffers[endIndex].subarray(0, endOffset);
|
|
131
|
+
parts.push(last);
|
|
132
|
+
totalLength += last.length;
|
|
133
|
+
return Buffer.concat(parts, totalLength);
|
|
134
|
+
}
|
|
135
|
+
compactBuffers(startIndex, startOffset) {
|
|
136
|
+
if (startIndex === 0 && startOffset === 0) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (startIndex >= this.buffers.length) {
|
|
140
|
+
this.buffers = [];
|
|
141
|
+
this.totalLength = 0;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const nextBuffers = [];
|
|
145
|
+
let nextLength = 0;
|
|
146
|
+
for (let i = startIndex; i < this.buffers.length; i++) {
|
|
147
|
+
let buffer = this.buffers[i];
|
|
148
|
+
if (i === startIndex && startOffset > 0) {
|
|
149
|
+
buffer = buffer.subarray(startOffset);
|
|
150
|
+
}
|
|
151
|
+
if (buffer.length > 0) {
|
|
152
|
+
nextBuffers.push(buffer);
|
|
153
|
+
nextLength += buffer.length;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
this.buffers = nextBuffers;
|
|
157
|
+
this.totalLength = nextLength;
|
|
92
158
|
}
|
|
93
159
|
}
|
|
94
160
|
//# sourceMappingURL=line-delimited.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-delimited.js","sourceRoot":"","sources":["../../src/framing/line-delimited.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAwBlD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,oBAAoB;IACd,SAAS,CAAS;IAClB,aAAa,CAAS;IACtB,cAAc,CAAU;IACjC,
|
|
1
|
+
{"version":3,"file":"line-delimited.js","sourceRoot":"","sources":["../../src/framing/line-delimited.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,cAAc,EAC/B,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAGhE,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,cAAc,EAAE,OAAO,EACvB,WAAW,GAAE,OAAO,GAAG,IAAW;IASpC,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,WAAW,IAAI,OAAO,GAAG,IAAI,CAEhC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAUtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInF;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;OAGG;IACG,cAAc,
|
|
1
|
+
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,cAAc,EAC/B,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAGhE,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,cAAc,EAAE,OAAO,EACvB,WAAW,GAAE,OAAO,GAAG,IAAW;IASpC,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,WAAW,IAAI,OAAO,GAAG,IAAI,CAEhC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAUtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInF;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1F;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EACpC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC9C,WAAW;IAId;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI1D;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAG9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,OAAO,aAAa;IACP,GAAG,CAAS;IACrB,IAAI,CAAgB;IACpB,MAAM,CAAe;IACZ,eAAe,CAAU;IACzB,YAAY,CAAiB;IAC7B,MAAM,GAAG,IAAI,YAAY,EAAuB,CAAC;IAElE,YACE,EAAU,EACV,GAAkB,EAClB,cAAuB,EACvB,cAA8B,IAAI;QAElC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAkB;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAsB;QAC7B,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,MAAgB,EAAE,OAAgB;QAC9D,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAgB;QAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,18 @@ export declare class ProcessManager implements IProcessManager {
|
|
|
9
9
|
private readonly config;
|
|
10
10
|
private readonly processes;
|
|
11
11
|
private readonly events;
|
|
12
|
+
private signalHandler;
|
|
12
13
|
constructor(config?: ProcessManagerConfig);
|
|
14
|
+
/**
|
|
15
|
+
* Sets up signal handlers for graceful shutdown.
|
|
16
|
+
* Called automatically if handleSignals is enabled.
|
|
17
|
+
*/
|
|
18
|
+
private setupSignalHandlers;
|
|
19
|
+
/**
|
|
20
|
+
* Removes signal handlers.
|
|
21
|
+
* Useful for cleanup in tests or when you want to handle signals differently.
|
|
22
|
+
*/
|
|
23
|
+
removeSignalHandlers(): void;
|
|
13
24
|
/**
|
|
14
25
|
* Spawns a new managed process.
|
|
15
26
|
*/
|
|
@@ -20,6 +31,8 @@ export declare class ProcessManager implements IProcessManager {
|
|
|
20
31
|
terminate(id: string): Promise<void>;
|
|
21
32
|
/**
|
|
22
33
|
* Terminates all managed processes.
|
|
34
|
+
* Uses Promise.allSettled to ensure all processes are attempted to be terminated
|
|
35
|
+
* even if some fail. Emits error events for failed terminations.
|
|
23
36
|
*/
|
|
24
37
|
terminateAll(): Promise<void>;
|
|
25
38
|
/**
|
|
@@ -46,6 +59,9 @@ export declare class ProcessManager implements IProcessManager {
|
|
|
46
59
|
* Cleans up process resources.
|
|
47
60
|
*/
|
|
48
61
|
private cleanupProcess;
|
|
62
|
+
private createTransport;
|
|
63
|
+
private setupProcessListeners;
|
|
64
|
+
private startManagedProcess;
|
|
49
65
|
/**
|
|
50
66
|
* Builds control channel from stdio transport.
|
|
51
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,IAAI,eAAe,EACjC,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,IAAI,eAAe,EACjC,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA8C3D;;;GAGG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IACnE,OAAO,CAAC,aAAa,CAAsC;gBAE/C,MAAM,GAAE,oBAAyB;IAgD7C;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAQ5B;;OAEG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAiDvE;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1C;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBnC;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAI5C;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK9B;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,WAAW;IAId;;OAEG;YACW,iBAAiB;IA+D/B;;OAEG;YACW,cAAc;IAsC5B;;OAEG;YACW,cAAc;IAiB5B,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,qBAAqB;YAef,mBAAmB;IAuBjC;;OAEG;YACW,mBAAmB;IAoDjC;;OAEG;YACW,gBAAgB;CAqD/B"}
|