procxy 0.1.0-alpha.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/CHANGELOG.md +125 -0
- package/README.md +936 -0
- package/dist/child/agent.d.ts +3 -0
- package/dist/child/agent.d.ts.map +1 -0
- package/dist/child/agent.js +126 -0
- package/dist/child/agent.js.map +1 -0
- package/dist/child/child-proxy.d.ts +23 -0
- package/dist/child/child-proxy.d.ts.map +1 -0
- package/dist/child/child-proxy.js +193 -0
- package/dist/child/child-proxy.js.map +1 -0
- package/dist/child/event-bridge.d.ts +15 -0
- package/dist/child/event-bridge.d.ts.map +1 -0
- package/dist/child/event-bridge.js +51 -0
- package/dist/child/event-bridge.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/parent/ipc-client.d.ts +31 -0
- package/dist/parent/ipc-client.d.ts.map +1 -0
- package/dist/parent/ipc-client.js +316 -0
- package/dist/parent/ipc-client.js.map +1 -0
- package/dist/parent/parent-proxy.d.ts +4 -0
- package/dist/parent/parent-proxy.d.ts.map +1 -0
- package/dist/parent/parent-proxy.js +76 -0
- package/dist/parent/parent-proxy.js.map +1 -0
- package/dist/parent/procxy.d.ts +6 -0
- package/dist/parent/procxy.d.ts.map +1 -0
- package/dist/parent/procxy.js +120 -0
- package/dist/parent/procxy.js.map +1 -0
- package/dist/shared/errors.d.ts +31 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +85 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/module-resolver.d.ts +6 -0
- package/dist/shared/module-resolver.d.ts.map +1 -0
- package/dist/shared/module-resolver.js +99 -0
- package/dist/shared/module-resolver.js.map +1 -0
- package/dist/shared/protocol.d.ts +86 -0
- package/dist/shared/protocol.d.ts.map +1 -0
- package/dist/shared/protocol.js +2 -0
- package/dist/shared/protocol.js.map +1 -0
- package/dist/shared/serialization.d.ts +20 -0
- package/dist/shared/serialization.d.ts.map +1 -0
- package/dist/shared/serialization.js +96 -0
- package/dist/shared/serialization.js.map +1 -0
- package/dist/types/options.d.ts +9 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +2 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/procxy.d.ts +50 -0
- package/dist/types/procxy.d.ts.map +1 -0
- package/dist/types/procxy.js +2 -0
- package/dist/types/procxy.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { TimeoutError, ChildCrashedError } from '../shared/errors.js';
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
4
|
+
import { CallbackRegistry, serializeWithCallbacks } from '../shared/serialization.js';
|
|
5
|
+
export class IPCClient extends EventEmitter {
|
|
6
|
+
childProcess;
|
|
7
|
+
pendingRequests = new Map();
|
|
8
|
+
callbackRegistry = new CallbackRegistry();
|
|
9
|
+
propertyStore = new Map();
|
|
10
|
+
timeout;
|
|
11
|
+
retries;
|
|
12
|
+
isTerminated = false;
|
|
13
|
+
subscribedEvents = new Set();
|
|
14
|
+
constructor(childProcess, timeout = 30000, retries = 3) {
|
|
15
|
+
super();
|
|
16
|
+
this.childProcess = childProcess;
|
|
17
|
+
this.timeout = timeout;
|
|
18
|
+
this.retries = retries;
|
|
19
|
+
this.childProcess.on('message', this.handleMessage.bind(this));
|
|
20
|
+
this.childProcess.on('exit', this.handleExit.bind(this));
|
|
21
|
+
this.setupEventTracking();
|
|
22
|
+
}
|
|
23
|
+
get process() {
|
|
24
|
+
return this.childProcess;
|
|
25
|
+
}
|
|
26
|
+
setupEventTracking() {
|
|
27
|
+
const originalOn = this.on.bind(this);
|
|
28
|
+
const originalOnce = this.once.bind(this);
|
|
29
|
+
const originalOff = this.off.bind(this);
|
|
30
|
+
const originalRemoveListener = this.removeListener.bind(this);
|
|
31
|
+
const originalRemoveAllListeners = this.removeAllListeners.bind(this);
|
|
32
|
+
this.on = (event, listener) => {
|
|
33
|
+
const hadListeners = this.listenerCount(event) > 0;
|
|
34
|
+
const result = originalOn(event, listener);
|
|
35
|
+
if (!hadListeners && this.listenerCount(event) === 1) {
|
|
36
|
+
this.subscribeInChild(event);
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
this.once = (event, listener) => {
|
|
41
|
+
const hadListeners = this.listenerCount(event) > 0;
|
|
42
|
+
const result = originalOnce(event, listener);
|
|
43
|
+
if (!hadListeners && this.listenerCount(event) > 0) {
|
|
44
|
+
this.subscribeInChild(event);
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
this.off = (event, listener) => {
|
|
49
|
+
const result = originalOff(event, listener);
|
|
50
|
+
if (this.listenerCount(event) === 0) {
|
|
51
|
+
this.unsubscribeInChild(event);
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
this.removeListener = (event, listener) => {
|
|
56
|
+
const result = originalRemoveListener(event, listener);
|
|
57
|
+
if (this.listenerCount(event) === 0) {
|
|
58
|
+
this.unsubscribeInChild(event);
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
};
|
|
62
|
+
this.removeAllListeners = (event) => {
|
|
63
|
+
if (event) {
|
|
64
|
+
const hadListeners = this.listenerCount(event) > 0;
|
|
65
|
+
const result = originalRemoveAllListeners(event);
|
|
66
|
+
if (hadListeners) {
|
|
67
|
+
this.unsubscribeInChild(event);
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const events = this.eventNames();
|
|
73
|
+
const result = originalRemoveAllListeners();
|
|
74
|
+
for (const evt of events) {
|
|
75
|
+
this.unsubscribeInChild(evt);
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
subscribeInChild(event) {
|
|
82
|
+
if (this.isTerminated) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (this.subscribedEvents.has(event)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.subscribedEvents.add(event);
|
|
89
|
+
const eventName = typeof event === 'symbol' ? event.toString() : event;
|
|
90
|
+
const message = {
|
|
91
|
+
type: 'EVENT_SUBSCRIBE',
|
|
92
|
+
eventName
|
|
93
|
+
};
|
|
94
|
+
this.childProcess.send(message);
|
|
95
|
+
}
|
|
96
|
+
unsubscribeInChild(event) {
|
|
97
|
+
if (this.isTerminated) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (!this.subscribedEvents.has(event)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this.subscribedEvents.delete(event);
|
|
104
|
+
const eventName = typeof event === 'symbol' ? event.toString() : event;
|
|
105
|
+
const message = {
|
|
106
|
+
type: 'EVENT_UNSUBSCRIBE',
|
|
107
|
+
eventName
|
|
108
|
+
};
|
|
109
|
+
this.childProcess.send(message);
|
|
110
|
+
}
|
|
111
|
+
async sendRequest(method, args, attemptNumber = 0) {
|
|
112
|
+
if (this.isTerminated) {
|
|
113
|
+
throw new Error('Child process has been terminated');
|
|
114
|
+
}
|
|
115
|
+
const id = randomUUID();
|
|
116
|
+
const serializedArgs = args.map((arg) => serializeWithCallbacks(arg, this.callbackRegistry));
|
|
117
|
+
const request = {
|
|
118
|
+
type: 'CALL',
|
|
119
|
+
id,
|
|
120
|
+
prop: method,
|
|
121
|
+
args: serializedArgs
|
|
122
|
+
};
|
|
123
|
+
return new Promise((resolve, reject) => {
|
|
124
|
+
const timeoutId = setTimeout(() => {
|
|
125
|
+
this.pendingRequests.delete(id);
|
|
126
|
+
if (attemptNumber < this.retries) {
|
|
127
|
+
this.sendRequest(method, args, attemptNumber + 1)
|
|
128
|
+
.then(resolve)
|
|
129
|
+
.catch(reject);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
reject(new TimeoutError(method, this.timeout));
|
|
133
|
+
}
|
|
134
|
+
}, this.timeout);
|
|
135
|
+
this.pendingRequests.set(id, {
|
|
136
|
+
resolve,
|
|
137
|
+
reject,
|
|
138
|
+
method,
|
|
139
|
+
timeoutId
|
|
140
|
+
});
|
|
141
|
+
this.childProcess.send(request);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
handleMessage(message) {
|
|
145
|
+
if (message.type === 'RESULT' || message.type === 'ERROR') {
|
|
146
|
+
this.handleResponse(message);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (message.type === 'EVENT') {
|
|
150
|
+
this.handleEvent(message);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (message.type === 'CALLBACK_INVOKE') {
|
|
154
|
+
this.handleCallbackInvoke(message);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (message.type === 'PROPERTY_GET') {
|
|
158
|
+
this.handlePropertyGet(message);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (message.type === 'PROPERTY_SET') {
|
|
162
|
+
this.handlePropertySet(message);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (message.type === 'INIT_SUCCESS') {
|
|
166
|
+
this.emit('init_success');
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (message.type === 'INIT_FAILURE') {
|
|
170
|
+
this.emit('init_failure', this.toError(message.error));
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
handleResponse(response) {
|
|
175
|
+
const pending = this.pendingRequests.get(response.id);
|
|
176
|
+
if (!pending) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (pending.timeoutId) {
|
|
180
|
+
clearTimeout(pending.timeoutId);
|
|
181
|
+
}
|
|
182
|
+
this.pendingRequests.delete(response.id);
|
|
183
|
+
if (response.type === 'RESULT') {
|
|
184
|
+
pending.resolve(response.value ?? null);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
pending.reject(this.toError(response.error));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
handleEvent(message) {
|
|
191
|
+
this.emit(message.eventName, ...message.args);
|
|
192
|
+
}
|
|
193
|
+
async handleCallbackInvoke(message) {
|
|
194
|
+
const callback = this.callbackRegistry.get(message.callbackId);
|
|
195
|
+
if (!callback) {
|
|
196
|
+
const errorResponse = {
|
|
197
|
+
id: message.id,
|
|
198
|
+
type: 'CALLBACK_ERROR',
|
|
199
|
+
error: {
|
|
200
|
+
name: 'Error',
|
|
201
|
+
message: `Callback ${message.callbackId} not found`,
|
|
202
|
+
stack: undefined
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
this.childProcess.send(errorResponse);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
const result = await callback(...message.args);
|
|
210
|
+
const successResponse = {
|
|
211
|
+
id: message.id,
|
|
212
|
+
type: 'CALLBACK_RESULT',
|
|
213
|
+
value: result ?? null
|
|
214
|
+
};
|
|
215
|
+
this.childProcess.send(successResponse);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
const errorResponse = {
|
|
219
|
+
id: message.id,
|
|
220
|
+
type: 'CALLBACK_ERROR',
|
|
221
|
+
error: {
|
|
222
|
+
name: error instanceof Error ? error.name : 'Error',
|
|
223
|
+
message: error instanceof Error ? error.message : String(error),
|
|
224
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
this.childProcess.send(errorResponse);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
handlePropertyGet(message) {
|
|
231
|
+
const value = this.propertyStore.get(message.prop) ?? null;
|
|
232
|
+
const response = {
|
|
233
|
+
id: message.id,
|
|
234
|
+
type: 'PROPERTY_RESULT',
|
|
235
|
+
value
|
|
236
|
+
};
|
|
237
|
+
this.childProcess.send(response);
|
|
238
|
+
}
|
|
239
|
+
handlePropertySet(message) {
|
|
240
|
+
this.propertyStore.set(message.prop, message.value);
|
|
241
|
+
}
|
|
242
|
+
hasProperty(prop) {
|
|
243
|
+
return this.propertyStore.has(prop);
|
|
244
|
+
}
|
|
245
|
+
getPropertySync(prop) {
|
|
246
|
+
return this.propertyStore.get(prop) ?? null;
|
|
247
|
+
}
|
|
248
|
+
handleExit(code, signal) {
|
|
249
|
+
this.isTerminated = true;
|
|
250
|
+
const error = new ChildCrashedError(code, signal);
|
|
251
|
+
for (const [_id, pending] of this.pendingRequests.entries()) {
|
|
252
|
+
if (pending.timeoutId) {
|
|
253
|
+
clearTimeout(pending.timeoutId);
|
|
254
|
+
}
|
|
255
|
+
pending.reject(error);
|
|
256
|
+
}
|
|
257
|
+
this.pendingRequests.clear();
|
|
258
|
+
this.emit('child_exit', code, signal);
|
|
259
|
+
}
|
|
260
|
+
async terminate() {
|
|
261
|
+
this.childProcess.off('message', this.handleMessage);
|
|
262
|
+
if (this.isTerminated) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
this.isTerminated = true;
|
|
266
|
+
try {
|
|
267
|
+
if (this.childProcess.connected && !this.childProcess.killed) {
|
|
268
|
+
const disposeRequest = { type: 'DISPOSE' };
|
|
269
|
+
this.childProcess.send(disposeRequest);
|
|
270
|
+
await Promise.race([
|
|
271
|
+
new Promise((resolve) => {
|
|
272
|
+
const handler = (msg) => {
|
|
273
|
+
if (msg.type === 'DISPOSE_COMPLETE') {
|
|
274
|
+
this.childProcess.off('message', handler);
|
|
275
|
+
resolve();
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
this.childProcess.on('message', handler);
|
|
279
|
+
}),
|
|
280
|
+
new Promise((resolve) => setTimeout(resolve, 1000))
|
|
281
|
+
]);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
}
|
|
286
|
+
for (const [_id, pending] of this.pendingRequests.entries()) {
|
|
287
|
+
if (pending.timeoutId) {
|
|
288
|
+
clearTimeout(pending.timeoutId);
|
|
289
|
+
}
|
|
290
|
+
pending.reject(new Error('Child process terminated'));
|
|
291
|
+
}
|
|
292
|
+
this.pendingRequests.clear();
|
|
293
|
+
this.childProcess.kill();
|
|
294
|
+
return new Promise((resolve) => {
|
|
295
|
+
if (!this.childProcess.connected) {
|
|
296
|
+
resolve();
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
this.childProcess.once('exit', () => {
|
|
300
|
+
resolve();
|
|
301
|
+
});
|
|
302
|
+
setTimeout(() => {
|
|
303
|
+
this.childProcess.kill('SIGKILL');
|
|
304
|
+
resolve();
|
|
305
|
+
}, 5000);
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
toError(info) {
|
|
309
|
+
const error = new Error(info?.message ?? 'Unknown error');
|
|
310
|
+
error.name = info?.name ?? 'Error';
|
|
311
|
+
error.stack = info?.stack;
|
|
312
|
+
error.code = info?.code;
|
|
313
|
+
return error;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=ipc-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-client.js","sourceRoot":"","sources":["../../src/parent/ipc-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-proxy.d.ts","sourceRoot":"","sources":["../../src/parent/parent-proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAsB5C,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAkFnF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { ProcxyError } from '../shared/errors.js';
|
|
2
|
+
const eventMethods = new Set([
|
|
3
|
+
'on',
|
|
4
|
+
'once',
|
|
5
|
+
'off',
|
|
6
|
+
'addListener',
|
|
7
|
+
'removeListener',
|
|
8
|
+
'removeAllListeners',
|
|
9
|
+
'emit',
|
|
10
|
+
'listeners',
|
|
11
|
+
'listenerCount',
|
|
12
|
+
'eventNames'
|
|
13
|
+
]);
|
|
14
|
+
function isValidIdentifier(name) {
|
|
15
|
+
return /^[A-Za-z_$][\w$]*$/.test(name);
|
|
16
|
+
}
|
|
17
|
+
export function createParentProxy(ipcClient) {
|
|
18
|
+
const base = {};
|
|
19
|
+
const proxy = new Proxy(base, {
|
|
20
|
+
get: (_target, prop) => {
|
|
21
|
+
if (prop === 'then') {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
if (prop === '$terminate') {
|
|
25
|
+
return () => ipcClient.terminate();
|
|
26
|
+
}
|
|
27
|
+
if (prop === '$process') {
|
|
28
|
+
return ipcClient.process;
|
|
29
|
+
}
|
|
30
|
+
if (prop === Symbol.dispose) {
|
|
31
|
+
return () => {
|
|
32
|
+
void ipcClient.terminate();
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (prop === Symbol.asyncDispose) {
|
|
36
|
+
return () => ipcClient.terminate();
|
|
37
|
+
}
|
|
38
|
+
if (typeof prop === 'symbol') {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
if (eventMethods.has(prop)) {
|
|
42
|
+
const handler = ipcClient[prop];
|
|
43
|
+
return typeof handler === 'function' ? handler.bind(ipcClient) : undefined;
|
|
44
|
+
}
|
|
45
|
+
if (typeof prop !== 'string') {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
if (prop.startsWith('$')) {
|
|
49
|
+
throw new ProcxyError(`Method '${prop}' is reserved and cannot be invoked`);
|
|
50
|
+
}
|
|
51
|
+
if (!isValidIdentifier(prop)) {
|
|
52
|
+
throw new ProcxyError(`Invalid method name '${prop}' (FR-014)`);
|
|
53
|
+
}
|
|
54
|
+
if (ipcClient.hasProperty(prop)) {
|
|
55
|
+
return ipcClient.getPropertySync(prop);
|
|
56
|
+
}
|
|
57
|
+
return (...args) => {
|
|
58
|
+
return ipcClient.sendRequest(prop, args);
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
set: (_target, prop, _value) => {
|
|
62
|
+
if (typeof prop !== 'string') {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (prop.startsWith('$')) {
|
|
66
|
+
throw new ProcxyError(`Property '${prop}' is reserved and cannot be set`);
|
|
67
|
+
}
|
|
68
|
+
if (!isValidIdentifier(prop)) {
|
|
69
|
+
throw new ProcxyError(`Invalid property name '${prop}'`);
|
|
70
|
+
}
|
|
71
|
+
throw new ProcxyError(`Cannot set property '${prop}' from parent. Properties are read-only on parent and can only be modified by child.`);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return proxy;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=parent-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-proxy.js","sourceRoot":"","sources":["../../src/parent/parent-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Constructor } from 'type-fest';
|
|
2
|
+
import type { Procxy } from '../types/procxy.js';
|
|
3
|
+
import type { ProcxyOptions } from '../types/options.js';
|
|
4
|
+
export declare function procxy<T extends Record<string, typeof Object>, C extends keyof T>(className: keyof T, modulePath?: string, options?: ProcxyOptions, ...constructorArgs: T[keyof T] extends Constructor<any> ? ConstructorParameters<T[keyof T]> : never): Promise<T[C] extends Constructor<infer U> ? Procxy<U> : never>;
|
|
5
|
+
export declare function procxy<T extends object>(Class: Constructor<T>, modulePath?: string, options?: ProcxyOptions, ...constructorArgs: ConstructorParameters<Constructor<T>>): Promise<Procxy<T>>;
|
|
6
|
+
//# sourceMappingURL=procxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procxy.d.ts","sourceRoot":"","sources":["../../src/parent/procxy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,WAAW,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAwMzD,wBAAsB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EACrF,SAAS,EAAE,MAAM,CAAC,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,EACvB,GAAG,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,GACnD,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GACjC,KAAK,GACR,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAClE,wBAAsB,MAAM,CAAC,CAAC,SAAS,MAAM,EAC3C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,EACvB,GAAG,eAAe,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { fork } from 'node:child_process';
|
|
2
|
+
import { existsSync, statSync } from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { resolve, dirname } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { resolveConstructorModule } from '../shared/module-resolver.js';
|
|
7
|
+
import { validateJsonifiableArray } from '../shared/serialization.js';
|
|
8
|
+
import { createParentProxy } from './parent-proxy.js';
|
|
9
|
+
import { IPCClient } from './ipc-client.js';
|
|
10
|
+
import { ChildCrashedError, OptionsValidationError, TimeoutError } from '../shared/errors.js';
|
|
11
|
+
const DEFAULT_TIMEOUT_MS = 30000;
|
|
12
|
+
const DEFAULT_RETRIES = 3;
|
|
13
|
+
const MIN_INIT_TIMEOUT_MS = 1000;
|
|
14
|
+
function validateOptions(options) {
|
|
15
|
+
if (options.timeout !== undefined &&
|
|
16
|
+
(typeof options.timeout !== 'number' || options.timeout <= 0)) {
|
|
17
|
+
throw new OptionsValidationError('timeout', options.timeout, 'must be a positive number');
|
|
18
|
+
}
|
|
19
|
+
if (options.retries !== undefined &&
|
|
20
|
+
(typeof options.retries !== 'number' || options.retries < 0)) {
|
|
21
|
+
throw new OptionsValidationError('retries', options.retries, 'must be a non-negative number');
|
|
22
|
+
}
|
|
23
|
+
if (options.env) {
|
|
24
|
+
for (const [key, value] of Object.entries(options.env)) {
|
|
25
|
+
if (typeof value !== 'string') {
|
|
26
|
+
throw new OptionsValidationError(`env.${key}`, value, 'environment variables must be strings');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (options.args) {
|
|
31
|
+
validateJsonifiableArray(options.args, 'ProcxyOptions.args');
|
|
32
|
+
}
|
|
33
|
+
if (options.cwd) {
|
|
34
|
+
if (!existsSync(options.cwd) || !statSync(options.cwd).isDirectory()) {
|
|
35
|
+
throw new OptionsValidationError('cwd', options.cwd, 'must be an existing directory');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function pickAgentPath() {
|
|
40
|
+
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
41
|
+
const built = resolve(currentDir, '../child/agent.js');
|
|
42
|
+
if (existsSync(built)) {
|
|
43
|
+
return built;
|
|
44
|
+
}
|
|
45
|
+
return resolve(currentDir, '../child/agent.ts');
|
|
46
|
+
}
|
|
47
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
48
|
+
function pickExecArgv(agentPath) {
|
|
49
|
+
if (!agentPath.endsWith('.ts'))
|
|
50
|
+
return [];
|
|
51
|
+
const tsxImportPath = requireFromHere.resolve('tsx/esm');
|
|
52
|
+
return ['--import', tsxImportPath];
|
|
53
|
+
}
|
|
54
|
+
function toArgStrings(args) {
|
|
55
|
+
if (!args)
|
|
56
|
+
return [];
|
|
57
|
+
return args.map((arg) => (typeof arg === 'string' ? arg : JSON.stringify(arg)));
|
|
58
|
+
}
|
|
59
|
+
async function waitForInitialization(ipcClient, timeoutMs) {
|
|
60
|
+
const effectiveTimeout = Math.max(timeoutMs, MIN_INIT_TIMEOUT_MS);
|
|
61
|
+
return new Promise((resolveInit, rejectInit) => {
|
|
62
|
+
const onSuccess = () => {
|
|
63
|
+
cleanup();
|
|
64
|
+
resolveInit();
|
|
65
|
+
};
|
|
66
|
+
const onFailure = (error) => {
|
|
67
|
+
cleanup();
|
|
68
|
+
rejectInit(error);
|
|
69
|
+
};
|
|
70
|
+
const onExit = (code, signal) => {
|
|
71
|
+
cleanup();
|
|
72
|
+
rejectInit(new ChildCrashedError(code, signal));
|
|
73
|
+
};
|
|
74
|
+
const timer = setTimeout(() => {
|
|
75
|
+
cleanup();
|
|
76
|
+
rejectInit(new TimeoutError('init', effectiveTimeout));
|
|
77
|
+
}, effectiveTimeout);
|
|
78
|
+
const cleanup = () => {
|
|
79
|
+
clearTimeout(timer);
|
|
80
|
+
ipcClient.off('init_success', onSuccess);
|
|
81
|
+
ipcClient.off('init_failure', onFailure);
|
|
82
|
+
ipcClient.off('child_exit', onExit);
|
|
83
|
+
};
|
|
84
|
+
ipcClient.once('init_success', onSuccess);
|
|
85
|
+
ipcClient.once('init_failure', onFailure);
|
|
86
|
+
ipcClient.once('child_exit', onExit);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
export async function procxy(classOrClassName, modulePath, options, ...constructorArgs) {
|
|
90
|
+
validateOptions(options ?? {});
|
|
91
|
+
validateJsonifiableArray(constructorArgs, 'constructor arguments');
|
|
92
|
+
const moduleResolution = resolveConstructorModule(classOrClassName, typeof classOrClassName === 'string'
|
|
93
|
+
? classOrClassName
|
|
94
|
+
: classOrClassName.name, modulePath);
|
|
95
|
+
const resolvedModulePath = moduleResolution.modulePath.startsWith('file://')
|
|
96
|
+
? fileURLToPath(moduleResolution.modulePath)
|
|
97
|
+
: resolve(moduleResolution.modulePath);
|
|
98
|
+
const timeout = options?.timeout ?? DEFAULT_TIMEOUT_MS;
|
|
99
|
+
const retries = options?.retries ?? DEFAULT_RETRIES;
|
|
100
|
+
const agentPath = pickAgentPath();
|
|
101
|
+
const execArgv = pickExecArgv(agentPath);
|
|
102
|
+
const forkOptions = {
|
|
103
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
104
|
+
cwd: options?.cwd ?? process.cwd(),
|
|
105
|
+
env: { ...process.env, ...options?.env },
|
|
106
|
+
execArgv
|
|
107
|
+
};
|
|
108
|
+
const child = fork(agentPath, toArgStrings(options?.args), forkOptions);
|
|
109
|
+
const ipcClient = new IPCClient(child, timeout, retries);
|
|
110
|
+
const initMessage = {
|
|
111
|
+
type: 'INIT',
|
|
112
|
+
modulePath: resolvedModulePath,
|
|
113
|
+
className: moduleResolution.className,
|
|
114
|
+
constructorArgs: [...constructorArgs]
|
|
115
|
+
};
|
|
116
|
+
child.send(initMessage);
|
|
117
|
+
await waitForInitialization(ipcClient, timeout);
|
|
118
|
+
return createParentProxy(ipcClient);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=procxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procxy.js","sourceRoot":"","sources":["../../src/parent/procxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare class ProcxyError extends Error {
|
|
2
|
+
readonly context?: Record<string, unknown> | undefined;
|
|
3
|
+
constructor(message: string, context?: Record<string, unknown> | undefined);
|
|
4
|
+
}
|
|
5
|
+
export declare class TimeoutError extends ProcxyError {
|
|
6
|
+
readonly methodName: string;
|
|
7
|
+
readonly timeoutMs: number;
|
|
8
|
+
constructor(methodName: string, timeoutMs: number, context?: Record<string, unknown>);
|
|
9
|
+
}
|
|
10
|
+
export declare class ModuleResolutionError extends ProcxyError {
|
|
11
|
+
readonly className: string;
|
|
12
|
+
readonly reason: string;
|
|
13
|
+
constructor(className: string, reason: string, context?: Record<string, unknown>);
|
|
14
|
+
}
|
|
15
|
+
export declare class ChildCrashedError extends ProcxyError {
|
|
16
|
+
readonly exitCode?: number | null | undefined;
|
|
17
|
+
readonly signal?: string | null | undefined;
|
|
18
|
+
constructor(exitCode?: number | null | undefined, signal?: string | null | undefined, context?: Record<string, unknown>);
|
|
19
|
+
}
|
|
20
|
+
export declare class SerializationError extends ProcxyError {
|
|
21
|
+
readonly value: unknown;
|
|
22
|
+
readonly context_: string;
|
|
23
|
+
constructor(value: unknown, context_: string, context?: Record<string, unknown>);
|
|
24
|
+
}
|
|
25
|
+
export declare class OptionsValidationError extends ProcxyError {
|
|
26
|
+
readonly optionName: string;
|
|
27
|
+
readonly optionValue: unknown;
|
|
28
|
+
readonly reason: string;
|
|
29
|
+
constructor(optionName: string, optionValue: unknown, reason: string, context?: Record<string, unknown>);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AASA,qBAAa,WAAY,SAAQ,KAAK;aAGlB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBADjD,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAMpD;AAMD,qBAAa,YAAa,SAAQ,WAAW;aAEzB,UAAU,EAAE,MAAM;aAClB,SAAS,EAAE,MAAM;gBADjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQpC;AAMD,qBAAa,qBAAsB,SAAQ,WAAW;aAElC,SAAS,EAAE,MAAM;aACjB,MAAM,EAAE,MAAM;gBADd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASpC;AAMD,qBAAa,iBAAkB,SAAQ,WAAW;aAE9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;aACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;gBADtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,YAAA,EACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,YAAA,EACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAWpC;AAMD,qBAAa,kBAAmB,SAAQ,WAAW;aAE/B,KAAK,EAAE,OAAO;aACd,QAAQ,EAAE,MAAM;gBADhB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASpC;AAMD,qBAAa,sBAAuB,SAAQ,WAAW;aAEnC,UAAU,EAAE,MAAM;aAClB,WAAW,EAAE,OAAO;aACpB,MAAM,EAAE,MAAM;gBAFd,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,MAAM,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASpC"}
|