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.
Files changed (55) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/README.md +936 -0
  3. package/dist/child/agent.d.ts +3 -0
  4. package/dist/child/agent.d.ts.map +1 -0
  5. package/dist/child/agent.js +126 -0
  6. package/dist/child/agent.js.map +1 -0
  7. package/dist/child/child-proxy.d.ts +23 -0
  8. package/dist/child/child-proxy.d.ts.map +1 -0
  9. package/dist/child/child-proxy.js +193 -0
  10. package/dist/child/child-proxy.js.map +1 -0
  11. package/dist/child/event-bridge.d.ts +15 -0
  12. package/dist/child/event-bridge.d.ts.map +1 -0
  13. package/dist/child/event-bridge.js +51 -0
  14. package/dist/child/event-bridge.js.map +1 -0
  15. package/dist/index.d.ts +11 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +8 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/parent/ipc-client.d.ts +31 -0
  20. package/dist/parent/ipc-client.d.ts.map +1 -0
  21. package/dist/parent/ipc-client.js +316 -0
  22. package/dist/parent/ipc-client.js.map +1 -0
  23. package/dist/parent/parent-proxy.d.ts +4 -0
  24. package/dist/parent/parent-proxy.d.ts.map +1 -0
  25. package/dist/parent/parent-proxy.js +76 -0
  26. package/dist/parent/parent-proxy.js.map +1 -0
  27. package/dist/parent/procxy.d.ts +6 -0
  28. package/dist/parent/procxy.d.ts.map +1 -0
  29. package/dist/parent/procxy.js +120 -0
  30. package/dist/parent/procxy.js.map +1 -0
  31. package/dist/shared/errors.d.ts +31 -0
  32. package/dist/shared/errors.d.ts.map +1 -0
  33. package/dist/shared/errors.js +85 -0
  34. package/dist/shared/errors.js.map +1 -0
  35. package/dist/shared/module-resolver.d.ts +6 -0
  36. package/dist/shared/module-resolver.d.ts.map +1 -0
  37. package/dist/shared/module-resolver.js +99 -0
  38. package/dist/shared/module-resolver.js.map +1 -0
  39. package/dist/shared/protocol.d.ts +86 -0
  40. package/dist/shared/protocol.d.ts.map +1 -0
  41. package/dist/shared/protocol.js +2 -0
  42. package/dist/shared/protocol.js.map +1 -0
  43. package/dist/shared/serialization.d.ts +20 -0
  44. package/dist/shared/serialization.d.ts.map +1 -0
  45. package/dist/shared/serialization.js +96 -0
  46. package/dist/shared/serialization.js.map +1 -0
  47. package/dist/types/options.d.ts +9 -0
  48. package/dist/types/options.d.ts.map +1 -0
  49. package/dist/types/options.js +2 -0
  50. package/dist/types/options.js.map +1 -0
  51. package/dist/types/procxy.d.ts +50 -0
  52. package/dist/types/procxy.d.ts.map +1 -0
  53. package/dist/types/procxy.js +2 -0
  54. package/dist/types/procxy.js.map +1 -0
  55. package/package.json +87 -0
@@ -0,0 +1,85 @@
1
+ export class ProcxyError extends Error {
2
+ context;
3
+ constructor(message, context) {
4
+ super(message);
5
+ this.context = context;
6
+ this.name = 'ProcxyError';
7
+ Error.captureStackTrace(this, this.constructor);
8
+ }
9
+ }
10
+ export class TimeoutError extends ProcxyError {
11
+ methodName;
12
+ timeoutMs;
13
+ constructor(methodName, timeoutMs, context) {
14
+ super(`Method '${methodName}' timed out after ${timeoutMs}ms. The child process continues running.`, context);
15
+ this.methodName = methodName;
16
+ this.timeoutMs = timeoutMs;
17
+ this.name = 'TimeoutError';
18
+ }
19
+ }
20
+ export class ModuleResolutionError extends ProcxyError {
21
+ className;
22
+ reason;
23
+ constructor(className, reason, context) {
24
+ super(`Failed to resolve module path for class '${className}': ${reason}. ` +
25
+ `Provide 'modulePath' explicitly in ProcxyOptions.`, context);
26
+ this.className = className;
27
+ this.reason = reason;
28
+ this.name = 'ModuleResolutionError';
29
+ }
30
+ }
31
+ export class ChildCrashedError extends ProcxyError {
32
+ exitCode;
33
+ signal;
34
+ constructor(exitCode, signal, context) {
35
+ const reason = signal
36
+ ? `received signal ${signal}`
37
+ : `exited with code ${exitCode ?? 'unknown'}`;
38
+ super(`Child process crashed: ${reason}. All pending method calls have been rejected.`, context);
39
+ this.exitCode = exitCode;
40
+ this.signal = signal;
41
+ this.name = 'ChildCrashedError';
42
+ }
43
+ }
44
+ export class SerializationError extends ProcxyError {
45
+ value;
46
+ context_;
47
+ constructor(value, context_, context) {
48
+ super(`Cannot serialize ${context_}: ${formatValue(value)}. ` +
49
+ `Only JSON-serializable values (Jsonifiable) are supported.`, context);
50
+ this.value = value;
51
+ this.context_ = context_;
52
+ this.name = 'SerializationError';
53
+ }
54
+ }
55
+ export class OptionsValidationError extends ProcxyError {
56
+ optionName;
57
+ optionValue;
58
+ reason;
59
+ constructor(optionName, optionValue, reason, context) {
60
+ super(`ProcxyOptions.${optionName} is invalid: ${reason}. ` +
61
+ `Received: ${formatValue(optionValue)}`, context);
62
+ this.optionName = optionName;
63
+ this.optionValue = optionValue;
64
+ this.reason = reason;
65
+ this.name = 'OptionsValidationError';
66
+ }
67
+ }
68
+ function formatValue(value) {
69
+ if (value === null)
70
+ return 'null';
71
+ if (value === undefined)
72
+ return 'undefined';
73
+ if (typeof value === 'string')
74
+ return `"${value.slice(0, 50)}"`;
75
+ if (typeof value === 'function')
76
+ return `[Function: ${value.name || 'anonymous'}]`;
77
+ try {
78
+ const str = JSON.stringify(value);
79
+ return str.length > 100 ? `${str.slice(0, 97)}...` : str;
80
+ }
81
+ catch {
82
+ return Object.prototype.toString.call(value);
83
+ }
84
+ }
85
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function resolveConstructorModule(_constructor: Function, className: string, explicitModulePath?: string): {
2
+ modulePath: string;
3
+ className: string;
4
+ };
5
+ export declare function isValidModulePath(modulePath: string): boolean;
6
+ //# sourceMappingURL=module-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-resolver.d.ts","sourceRoot":"","sources":["../../src/shared/module-resolver.ts"],"names":[],"mappings":"AAyBA,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,QAAQ,EACtB,SAAS,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,GAC1B;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAkCA;AAkJD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAY7D"}
@@ -0,0 +1,99 @@
1
+ import { fileURLToPath } from 'url';
2
+ import { readFileSync } from 'fs';
3
+ import { dirname, resolve } from 'path';
4
+ import { ModuleResolutionError } from './errors.js';
5
+ export function resolveConstructorModule(_constructor, className, explicitModulePath) {
6
+ if (explicitModulePath) {
7
+ return {
8
+ modulePath: explicitModulePath,
9
+ className
10
+ };
11
+ }
12
+ if (!className || className === 'Function') {
13
+ throw new ModuleResolutionError(className, 'Constructor must be a named class (not an anonymous function)', { receivedName: className });
14
+ }
15
+ const callerPath = detectCallerPathFromStackTrace(_constructor);
16
+ if (callerPath) {
17
+ const detectedPath = parseCallerFileForClassPath(callerPath, className);
18
+ if (detectedPath) {
19
+ return { modulePath: detectedPath, className };
20
+ }
21
+ }
22
+ throw new ModuleResolutionError(className, 'Could not determine module path from stack trace or source parsing. Provide explicit modulePath in ProcxyOptions.');
23
+ }
24
+ function detectCallerPathFromStackTrace(_constructor) {
25
+ const err = new Error('resolveModulePath', { cause: _constructor });
26
+ Error.captureStackTrace(err, detectCallerPathFromStackTrace);
27
+ const stack = err.stack?.split('\n') ?? [];
28
+ for (const frame of stack) {
29
+ const pathMatch = frame.match(/\(([^)]+?):(\d+):(\d+)\)|at\s+([^:(\s]+?):(\d+):(\d+)/);
30
+ if (!pathMatch)
31
+ continue;
32
+ let filePath = pathMatch[1] || pathMatch[4];
33
+ if (!filePath)
34
+ continue;
35
+ if (filePath.includes('<anonymous>') || filePath.includes('node:internal')) {
36
+ continue;
37
+ }
38
+ if (filePath.includes('/src/parent/') ||
39
+ filePath.includes('/src/child/') ||
40
+ filePath.includes('/src/shared/') ||
41
+ filePath.includes('/src/types/') ||
42
+ filePath.includes('module-resolver')) {
43
+ continue;
44
+ }
45
+ if (filePath.startsWith('file://')) {
46
+ try {
47
+ filePath = fileURLToPath(filePath.split(':')[0] ? filePath : `file://${filePath}`);
48
+ }
49
+ catch {
50
+ }
51
+ }
52
+ return filePath;
53
+ }
54
+ return undefined;
55
+ }
56
+ function parseCallerFileForClassPath(callerPath, className) {
57
+ try {
58
+ const source = readFileSync(callerPath, 'utf-8');
59
+ const callerDir = dirname(callerPath);
60
+ const patterns = [
61
+ new RegExp(`import\\s+{[^}]*\\b${className}\\b[^}]*}\\s+from\\s+['"]([^'"]+)['"]`, 'g'),
62
+ new RegExp(`import\\s+${className}\\s+from\\s+['"]([^'"]+)['"]`, 'g'),
63
+ new RegExp(`import\\s+\\*\\s+as\\s+\\w+\\s+from\\s+['"]([^'"]+)['"].*\\b${className}\\b`, 'g'),
64
+ new RegExp(`(?:const|let|var)\\s+{[^}]*\\b${className}\\b[^}]*}\\s*=\\s*require\\(['"]([^'"]+)['"]\\)`, 'g'),
65
+ new RegExp(`(?:const|let|var)\\s+${className}\\s*=\\s*require\\(['"]([^'"]+)['"]\\)`, 'g')
66
+ ];
67
+ for (const pattern of patterns) {
68
+ const matches = [...source.matchAll(pattern)];
69
+ for (const match of matches) {
70
+ const importPath = match[1];
71
+ if (importPath) {
72
+ const resolvedPath = resolve(callerDir, importPath);
73
+ if (!importPath.match(/\.(ts|js|mts|cts|mjs|cjs)$/)) {
74
+ return resolvedPath + '.ts';
75
+ }
76
+ return resolvedPath;
77
+ }
78
+ }
79
+ }
80
+ const classDefPattern = new RegExp(`(?:export\\s+)?class\\s+${className}\\b`);
81
+ if (classDefPattern.test(source)) {
82
+ return callerPath;
83
+ }
84
+ return undefined;
85
+ }
86
+ catch {
87
+ return undefined;
88
+ }
89
+ }
90
+ export function isValidModulePath(modulePath) {
91
+ if (!modulePath || typeof modulePath !== 'string') {
92
+ return false;
93
+ }
94
+ if (modulePath.includes('function') || modulePath.includes('class')) {
95
+ return false;
96
+ }
97
+ return true;
98
+ }
99
+ //# sourceMappingURL=module-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["../../src/shared/module-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { Jsonifiable } from 'type-fest';
2
+ export interface InitMessage {
3
+ type: 'INIT';
4
+ modulePath: string;
5
+ className: string;
6
+ constructorArgs: [...Jsonifiable[]];
7
+ }
8
+ export interface Request {
9
+ id: string;
10
+ type: 'CALL';
11
+ prop: string;
12
+ args: [...Jsonifiable[]];
13
+ }
14
+ export interface DisposeRequest {
15
+ type: 'DISPOSE';
16
+ }
17
+ export interface EventSubscribe {
18
+ type: 'EVENT_SUBSCRIBE';
19
+ eventName: string;
20
+ }
21
+ export interface EventUnsubscribe {
22
+ type: 'EVENT_UNSUBSCRIBE';
23
+ eventName: string;
24
+ }
25
+ export interface CallbackInvoke {
26
+ id: string;
27
+ type: 'CALLBACK_INVOKE';
28
+ callbackId: string;
29
+ args: [...Jsonifiable[]];
30
+ }
31
+ export interface CallbackResult {
32
+ id: string;
33
+ type: 'CALLBACK_RESULT';
34
+ value: Jsonifiable;
35
+ }
36
+ export interface CallbackError {
37
+ id: string;
38
+ type: 'CALLBACK_ERROR';
39
+ error: ErrorInfo;
40
+ }
41
+ export interface PropertyGet {
42
+ id: string;
43
+ type: 'PROPERTY_GET';
44
+ prop: string;
45
+ }
46
+ export interface PropertyResult {
47
+ id: string;
48
+ type: 'PROPERTY_RESULT';
49
+ value: Jsonifiable;
50
+ }
51
+ export interface PropertySet {
52
+ type: 'PROPERTY_SET';
53
+ prop: string;
54
+ value: Jsonifiable;
55
+ }
56
+ export interface DisposeResponse {
57
+ type: 'DISPOSE_COMPLETE';
58
+ error?: ErrorInfo;
59
+ }
60
+ export interface Response {
61
+ id: string;
62
+ type: 'RESULT' | 'ERROR';
63
+ value?: Jsonifiable;
64
+ error?: ErrorInfo;
65
+ }
66
+ export interface ErrorInfo {
67
+ message: string;
68
+ stack?: string;
69
+ name: string;
70
+ code?: string;
71
+ }
72
+ export interface EventMessage {
73
+ type: 'EVENT';
74
+ eventName: string;
75
+ args: [...Jsonifiable[]];
76
+ }
77
+ export interface InitSuccess {
78
+ type: 'INIT_SUCCESS';
79
+ }
80
+ export interface InitFailure {
81
+ type: 'INIT_FAILURE';
82
+ error: ErrorInfo;
83
+ }
84
+ export type ParentToChildMessage = InitMessage | Request | DisposeRequest | EventSubscribe | EventUnsubscribe | CallbackResult | CallbackError | PropertyResult;
85
+ export type ChildToParentMessage = Response | EventMessage | InitSuccess | InitFailure | DisposeResponse | CallbackInvoke | PropertyGet | PropertySet;
86
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/shared/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/shared/protocol.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { Jsonifiable } from 'type-fest';
2
+ export interface SerializedCallback {
3
+ __callbackId: string;
4
+ __isCallback: true;
5
+ }
6
+ export declare function isSerializedCallback(value: unknown): value is SerializedCallback;
7
+ export declare class CallbackRegistry {
8
+ private callbacks;
9
+ private nextId;
10
+ register(callback: Function): string;
11
+ get(id: string): Function | undefined;
12
+ unregister(id: string): void;
13
+ clear(): void;
14
+ }
15
+ export declare function serializeWithCallbacks(value: unknown, callbackRegistry: CallbackRegistry): Jsonifiable;
16
+ export declare function validateJsonifiable(value: unknown, context: string): asserts value is Jsonifiable;
17
+ export declare function validateJsonifiableArray(values: unknown[], context: string, callbackRegistry?: CallbackRegistry): asserts values is Jsonifiable[];
18
+ export declare function serializeToJson(value: Jsonifiable, context: string): string;
19
+ export declare function deserializeFromJson(json: string, context: string): Jsonifiable;
20
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/shared/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAW7C,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,IAAI,CAAC;CACpB;AAKD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAQhF;AAKD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,MAAM,CAAK;IAKnB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IASpC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAOrC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAO5B,KAAK,IAAI,IAAI;CAGd;AAKD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,gBAAgB,EAAE,gBAAgB,GACjC,WAAW,CAmBb;AAUD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,CAQjG;AAWD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,MAAM,IAAI,WAAW,EAAE,CAuBjC;AAWD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ3E;AAWD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAQ9E"}
@@ -0,0 +1,96 @@
1
+ import { SerializationError } from './errors.js';
2
+ export function isSerializedCallback(value) {
3
+ return (typeof value === 'object' &&
4
+ value !== null &&
5
+ '__callbackId' in value &&
6
+ '__isCallback' in value &&
7
+ value.__isCallback === true);
8
+ }
9
+ export class CallbackRegistry {
10
+ callbacks = new Map();
11
+ nextId = 0;
12
+ register(callback) {
13
+ const id = `cb_${this.nextId++}_${Date.now()}`;
14
+ this.callbacks.set(id, callback);
15
+ return id;
16
+ }
17
+ get(id) {
18
+ return this.callbacks.get(id);
19
+ }
20
+ unregister(id) {
21
+ this.callbacks.delete(id);
22
+ }
23
+ clear() {
24
+ this.callbacks.clear();
25
+ }
26
+ }
27
+ export function serializeWithCallbacks(value, callbackRegistry) {
28
+ if (typeof value === 'function') {
29
+ const callbackId = callbackRegistry.register(value);
30
+ return { __callbackId: callbackId, __isCallback: true };
31
+ }
32
+ if (Array.isArray(value)) {
33
+ return value.map((item) => serializeWithCallbacks(item, callbackRegistry));
34
+ }
35
+ if (value && typeof value === 'object' && !(value instanceof Date)) {
36
+ const result = {};
37
+ for (const [key, val] of Object.entries(value)) {
38
+ result[key] = serializeWithCallbacks(val, callbackRegistry);
39
+ }
40
+ return result;
41
+ }
42
+ return value;
43
+ }
44
+ export function validateJsonifiable(value, context) {
45
+ try {
46
+ JSON.stringify(value);
47
+ }
48
+ catch (error) {
49
+ throw new SerializationError(value, context, {
50
+ error: error instanceof Error ? error.message : String(error)
51
+ });
52
+ }
53
+ }
54
+ export function validateJsonifiableArray(values, context, callbackRegistry) {
55
+ for (let i = 0; i < values.length; i++) {
56
+ if (typeof values[i] === 'function') {
57
+ if (!callbackRegistry) {
58
+ throw new SerializationError(values[i], `${context}[${i}]`, {
59
+ error: 'Functions are not JSON-serializable. Callback support not available in this context.',
60
+ index: i
61
+ });
62
+ }
63
+ continue;
64
+ }
65
+ try {
66
+ JSON.stringify(values[i]);
67
+ }
68
+ catch (error) {
69
+ throw new SerializationError(values[i], `${context}[${i}]`, {
70
+ error: error instanceof Error ? error.message : String(error),
71
+ index: i
72
+ });
73
+ }
74
+ }
75
+ }
76
+ export function serializeToJson(value, context) {
77
+ try {
78
+ return JSON.stringify(value);
79
+ }
80
+ catch (error) {
81
+ throw new SerializationError(value, context, {
82
+ error: error instanceof Error ? error.message : String(error)
83
+ });
84
+ }
85
+ }
86
+ export function deserializeFromJson(json, context) {
87
+ try {
88
+ return JSON.parse(json);
89
+ }
90
+ catch (error) {
91
+ throw new SerializationError(json, context, {
92
+ error: error instanceof Error ? error.message : String(error)
93
+ });
94
+ }
95
+ }
96
+ //# sourceMappingURL=serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/shared/serialization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Jsonifiable } from 'type-fest';
2
+ export interface ProcxyOptions {
3
+ args?: [...Jsonifiable[]];
4
+ env?: Record<string, string>;
5
+ cwd?: string;
6
+ timeout?: number;
7
+ retries?: number;
8
+ }
9
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAO7C,MAAM,WAAW,aAAa;IAO5B,IAAI,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC;IAQ1B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQ7B,GAAG,CAAC,EAAE,MAAM,CAAC;IASb,OAAO,CAAC,EAAE,MAAM,CAAC;IASjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import type { ChildProcess } from 'child_process';
2
+ import type { EventEmitter } from 'events';
3
+ import type { Jsonifiable, ArrayValues, UnionToIntersection } from 'type-fest';
4
+ type IsJsonifiable<T> = T extends Jsonifiable | void | undefined | Function ? true : T extends void ? true : T extends undefined ? true : false;
5
+ type AreParamsJsonifiable<P extends readonly any[]> = UnionToIntersection<IsJsonifiable<ArrayValues<P>>>;
6
+ type JsonifiableMethodKeys<T> = {
7
+ [K in keyof T]: T[K] extends (...args: infer A) => infer R ? AreParamsJsonifiable<A> extends true ? IsJsonifiable<Awaited<R>> extends true ? K : never : never : never;
8
+ }[keyof T];
9
+ type JsonifiableMethods<T> = Pick<T, JsonifiableMethodKeys<T>>;
10
+ type ExtractEventMap<T> = T extends EventEmitter<infer E> ? E extends Record<string | symbol, any[]> ? {
11
+ [K in keyof E]: (...args: E[K]) => void;
12
+ } : never : never;
13
+ type JsonifiableEventMap<E extends Record<string | symbol, (...args: any[]) => any>> = {
14
+ [K in keyof E as E[K] extends (...args: infer A) => any ? AreParamsJsonifiable<A> extends true ? K : never : never]: E[K];
15
+ };
16
+ type JsonifiablePropertyKeys<T> = {
17
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? never : T[K] extends Jsonifiable ? K : never;
18
+ }[keyof T];
19
+ type ReadonlyProperties<T> = {
20
+ readonly [K in JsonifiablePropertyKeys<T>]: T[K];
21
+ };
22
+ export type Procxy<T> = {
23
+ [K in keyof JsonifiableMethods<T>]: JsonifiableMethods<T>[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : never;
24
+ } & ReadonlyProperties<T> & {
25
+ $terminate(): Promise<void>;
26
+ $process: ChildProcess;
27
+ [Symbol.dispose](): void;
28
+ [Symbol.asyncDispose](): Promise<void>;
29
+ } & (T extends EventEmitter<infer E> ? E extends Record<string | symbol, any[]> ? {
30
+ on<K extends keyof JsonifiableEventMap<ExtractEventMap<T>>>(event: K, listener: JsonifiableEventMap<ExtractEventMap<T>>[K]): Procxy<T>;
31
+ on(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
32
+ once<K extends keyof JsonifiableEventMap<ExtractEventMap<T>>>(event: K, listener: JsonifiableEventMap<ExtractEventMap<T>>[K]): Procxy<T>;
33
+ once(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
34
+ off<K extends keyof JsonifiableEventMap<ExtractEventMap<T>>>(event: K, listener: JsonifiableEventMap<ExtractEventMap<T>>[K]): Procxy<T>;
35
+ off(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
36
+ removeListener<K extends keyof JsonifiableEventMap<ExtractEventMap<T>>>(event: K, listener: JsonifiableEventMap<ExtractEventMap<T>>[K]): Procxy<T>;
37
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
38
+ } : {
39
+ on(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
40
+ once(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
41
+ off(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
42
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
43
+ } : T extends EventEmitter ? {
44
+ on(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
45
+ once(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
46
+ off(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
47
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): Procxy<T>;
48
+ } : {});
49
+ export {};
50
+ //# sourceMappingURL=procxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procxy.d.ts","sourceRoot":"","sources":["../../src/types/procxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAW/E,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,GACvE,IAAI,GACJ,CAAC,SAAS,IAAI,GACZ,IAAI,GACJ,CAAC,SAAS,SAAS,GACjB,IAAI,GACJ,KAAK,CAAC;AAOd,KAAK,oBAAoB,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE,IAAI,mBAAmB,CACvE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;AAKF,KAAK,qBAAqB,CAAC,CAAC,IAAI;KAC7B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACtD,oBAAoB,CAAC,CAAC,CAAC,SAAS,IAAI,GAClC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACpC,CAAC,GACD,KAAK,GACP,KAAK,GACP,KAAK;CACV,CAAC,MAAM,CAAC,CAAC,CAAC;AAKX,KAAK,kBAAkB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AAM/D,KAAK,eAAe,CAAC,CAAC,IACpB,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,CAAC,GAC3B,CAAC,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC,GACtC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;CAAE,GAC3C,KAAK,GACP,KAAK,CAAC;AA0BZ,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,IAAI;KACpF,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GACnD,oBAAoB,CAAC,CAAC,CAAC,SAAS,IAAI,GAClC,CAAC,GACD,KAAK,GACP,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CACjB,CAAC;AAKF,KAAK,uBAAuB,CAAC,CAAC,IAAI;KAC/B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAChD,KAAK,GACL,CAAC,CAAC,CAAC,CAAC,SAAS,WAAW,GACtB,CAAC,GACD,KAAK;CACZ,CAAC,MAAM,CAAC,CAAC,CAAC;AAMX,KAAK,kBAAkB,CAAC,CAAC,IAAI;IAC3B,QAAQ,EAAE,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACjD,CAAC;AA4CF,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;KAKrB,CAAC,IAAI,MAAM,kBAAkB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAC9F,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACnC,KAAK;CACV,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG;IAMxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAM5B,QAAQ,EAAE,YAAY,CAAC;IAOvB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAOzB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,GAAG,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,CAAC,GAChC,CAAC,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC,GAEtC;IACE,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EACxD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACnD,MAAM,CAAC,CAAC,CAAC,CAAC;IACb,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC,SAAS,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAC1D,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACnD,MAAM,CAAC,CAAC,CAAC,CAAC;IACb,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,CAAC,SAAS,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EACzD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACnD,MAAM,CAAC,CAAC,CAAC,CAAC;IACb,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3E,cAAc,CAAC,CAAC,SAAS,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EACpE,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACnD,MAAM,CAAC,CAAC,CAAC,CAAC;IACb,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CACvF,GACD;IAEE,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3E,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CACvF,GACH,CAAC,SAAS,YAAY,GACpB;IAEE,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3E,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CACvF,GACD,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procxy.js","sourceRoot":"","sources":["../../src/types/procxy.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "procxy",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "Type-safe process-based proxy for Node.js - Run class instances in isolated child processes with full TypeScript support",
5
+ "keywords": [
6
+ "proxy",
7
+ "ipc",
8
+ "child-process",
9
+ "typescript",
10
+ "process",
11
+ "isolation",
12
+ "worker",
13
+ "eventemitter",
14
+ "type-safe",
15
+ "async",
16
+ "rpc",
17
+ "concurrency"
18
+ ],
19
+ "homepage": "https://github.com/pradeepmouli/procxy#readme",
20
+ "bugs": {
21
+ "url": "https://github.com/pradeepmouli/procxy/issues"
22
+ },
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/pradeepmouli/procxy.git"
26
+ },
27
+ "license": "MIT",
28
+ "author": "Your Name <your.email@example.com>",
29
+ "type": "module",
30
+ "main": "dist/index.js",
31
+ "types": "dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "import": "./dist/index.js",
35
+ "types": "./dist/index.d.ts"
36
+ }
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "README.md",
41
+ "CHANGELOG.md",
42
+ "LICENSE"
43
+ ],
44
+ "scripts": {
45
+ "build": "tsc -p tsconfig.json",
46
+ "dev": "tsx watch src/index.ts",
47
+ "start": "node dist/index.js",
48
+ "test": "vitest run",
49
+ "test:coverage": "vitest run --coverage",
50
+ "lint": "oxlint src",
51
+ "format": "oxfmt src",
52
+ "format:check": "oxfmt --check src",
53
+ "type-check": "tsc --noEmit -p tsconfig.json",
54
+ "clean": "rm -rf dist",
55
+ "docs": "typedoc",
56
+ "docs:watch": "typedoc --watch",
57
+ "changeset": "changeset",
58
+ "version": "changeset version",
59
+ "release": "pnpm build && changeset publish",
60
+ "prepare": "husky"
61
+ },
62
+ "optionalDependencies": {
63
+ "pino": "^10.1.0",
64
+ "zod": "^4.2.1"
65
+ },
66
+ "devDependencies": {
67
+ "@changesets/cli": "^2.29.8",
68
+ "@types/node": "^25.0.3",
69
+ "@typescript/native-preview": "7.0.0-dev.20251230.1",
70
+ "@vitest/coverage-v8": "^4.0.16",
71
+ "husky": "^9.1.7",
72
+ "lint-staged": "^16.2.7",
73
+ "oxfmt": "^0.21.0",
74
+ "oxlint": "^1.36.0",
75
+ "tinypool": "^2.0.0",
76
+ "tsx": "^4.21.0",
77
+ "type-fest": "^5.3.1",
78
+ "typedoc": "^0.28.15",
79
+ "typescript": "^5.9.3",
80
+ "vitest": "^4.0.16"
81
+ },
82
+ "engines": {
83
+ "node": ">=20.0.0",
84
+ "pnpm": ">=9.0.0"
85
+ },
86
+ "packageManager": "pnpm@9.15.0"
87
+ }