electron-json-rpc 1.0.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +978 -0
  3. package/README.zh-CN.md +978 -0
  4. package/dist/debug.d.mts +92 -0
  5. package/dist/debug.d.mts.map +1 -0
  6. package/dist/debug.mjs +206 -0
  7. package/dist/debug.mjs.map +1 -0
  8. package/dist/error-xVRu7Lxq.mjs +131 -0
  9. package/dist/error-xVRu7Lxq.mjs.map +1 -0
  10. package/dist/event.d.mts +71 -0
  11. package/dist/event.d.mts.map +1 -0
  12. package/dist/event.mjs +60 -0
  13. package/dist/event.mjs.map +1 -0
  14. package/dist/index.d.mts +78 -0
  15. package/dist/index.d.mts.map +1 -0
  16. package/dist/index.mjs +4 -0
  17. package/dist/internal-BZK_0O3n.mjs +23 -0
  18. package/dist/internal-BZK_0O3n.mjs.map +1 -0
  19. package/dist/main.d.mts +151 -0
  20. package/dist/main.d.mts.map +1 -0
  21. package/dist/main.mjs +329 -0
  22. package/dist/main.mjs.map +1 -0
  23. package/dist/preload.d.mts +23 -0
  24. package/dist/preload.d.mts.map +1 -0
  25. package/dist/preload.mjs +417 -0
  26. package/dist/preload.mjs.map +1 -0
  27. package/dist/renderer/builder.d.mts +64 -0
  28. package/dist/renderer/builder.d.mts.map +1 -0
  29. package/dist/renderer/builder.mjs +101 -0
  30. package/dist/renderer/builder.mjs.map +1 -0
  31. package/dist/renderer/client.d.mts +42 -0
  32. package/dist/renderer/client.d.mts.map +1 -0
  33. package/dist/renderer/client.mjs +136 -0
  34. package/dist/renderer/client.mjs.map +1 -0
  35. package/dist/renderer/event.d.mts +17 -0
  36. package/dist/renderer/event.d.mts.map +1 -0
  37. package/dist/renderer/event.mjs +117 -0
  38. package/dist/renderer/event.mjs.map +1 -0
  39. package/dist/renderer/index.d.mts +6 -0
  40. package/dist/renderer/index.mjs +6 -0
  41. package/dist/stream.d.mts +38 -0
  42. package/dist/stream.d.mts.map +1 -0
  43. package/dist/stream.mjs +80 -0
  44. package/dist/stream.mjs.map +1 -0
  45. package/dist/types-BnGse9DF.d.mts +201 -0
  46. package/dist/types-BnGse9DF.d.mts.map +1 -0
  47. package/package.json +92 -0
@@ -0,0 +1,201 @@
1
+ //#region src/types.d.ts
2
+ /**
3
+ * JSON-RPC 2.0 types for Electron IPC communication
4
+ */
5
+ /**
6
+ * JSON-RPC 2.0 Request
7
+ * id is optional for notifications (one-way calls)
8
+ */
9
+ interface JsonRpcRequest {
10
+ jsonrpc: "2.0";
11
+ id?: string | number | null;
12
+ method: string;
13
+ params?: unknown[] | Record<string, unknown>;
14
+ }
15
+ /**
16
+ * JSON-RPC 2.0 Response
17
+ */
18
+ interface JsonRpcResponse {
19
+ jsonrpc: "2.0";
20
+ id: string | number | null;
21
+ result?: unknown;
22
+ error?: JsonRpcError;
23
+ }
24
+ /**
25
+ * JSON-RPC 2.0 Error
26
+ */
27
+ interface JsonRpcError {
28
+ code: number;
29
+ message: string;
30
+ data?: unknown;
31
+ }
32
+ /**
33
+ * JSON-RPC 2.0 Error codes
34
+ */
35
+ declare enum JsonRpcErrorCode {
36
+ ParseError = -32700,
37
+ InvalidRequest = -32600,
38
+ MethodNotFound = -32601,
39
+ InvalidParams = -32602,
40
+ InternalError = -32603,
41
+ }
42
+ /**
43
+ * RPC method handler type
44
+ */
45
+ type RpcHandler = (...params: unknown[]) => unknown | Promise<unknown>;
46
+ /**
47
+ * Validator function for params
48
+ * Throw an error to reject the request with InvalidParams error
49
+ */
50
+ type RpcValidator = (params: unknown[]) => void | Promise<void>;
51
+ /**
52
+ * RPC method registration options
53
+ */
54
+ interface RpcMethodOptions {
55
+ /** Optional validator for parameters */
56
+ validate?: RpcValidator;
57
+ /** Optional description for documentation */
58
+ description?: string;
59
+ }
60
+ /**
61
+ * Typed API interface for RPC client
62
+ * Converts method signatures to match JSON-RPC behavior
63
+ */
64
+ type RpcApi<T extends Record<string, (...args: any[]) => any>> = { [K in keyof T]: T[K] extends ((...args: infer P) => infer R) ? R extends void ? (...params: P) => void : (...params: P) => Promise<Awaited<R>> : never };
65
+ /**
66
+ * Options for RPC client
67
+ */
68
+ interface RpcClientOptions {
69
+ /** Timeout in milliseconds (default: 30000) */
70
+ timeout?: number;
71
+ /** API name exposed by preload (default: 'rpc') */
72
+ apiName?: string;
73
+ }
74
+ /**
75
+ * Options for exposing RPC API in preload
76
+ */
77
+ interface ExposeRpcApiOptions {
78
+ contextBridge: {
79
+ exposeInMainWorld: (name: string, api: Record<string, unknown>) => void;
80
+ };
81
+ ipcRenderer: {
82
+ send: (channel: string, ...args: unknown[]) => void;
83
+ on: (channel: string, listener: (event: unknown, ...args: unknown[]) => void) => void;
84
+ removeListener: (channel: string, listener: (...args: unknown[]) => void) => void;
85
+ };
86
+ /** Optional whitelist of methods to expose */
87
+ methods?: string[];
88
+ /** API name exposed to renderer (default: 'rpc') */
89
+ apiName?: string;
90
+ }
91
+ /**
92
+ * Stream chunk message for IPC
93
+ */
94
+ interface StreamChunk {
95
+ streamId: string | number;
96
+ type: "chunk" | "end" | "error";
97
+ data?: unknown;
98
+ error?: JsonRpcError;
99
+ }
100
+ /**
101
+ * Stream request with stream flag
102
+ */
103
+ interface StreamRequest extends JsonRpcRequest {
104
+ stream?: true;
105
+ }
106
+ /**
107
+ * Stream handler - returns a ReadableStream
108
+ */
109
+ type StreamHandler = (...params: unknown[]) => ReadableStream;
110
+ /**
111
+ * Stream method registration options
112
+ */
113
+ interface StreamMethodOptions extends RpcMethodOptions {
114
+ /** Indicates this method returns a stream */
115
+ stream?: true;
116
+ }
117
+ /**
118
+ * Underlying source for ReadableStream
119
+ */
120
+ type UnderlyingSource<T> = {
121
+ start?: (controller: ReadableStreamDefaultController<T>) => void | Promise<void>;
122
+ pull?: (controller: ReadableStreamDefaultController<T>) => void | Promise<void>;
123
+ cancel?: (reason?: unknown) => void | Promise<void>;
124
+ type?: undefined;
125
+ };
126
+ /**
127
+ * Event handler callback type
128
+ */
129
+ type EventHandler<T = unknown> = (data: T) => void;
130
+ /**
131
+ * Event subscriber information
132
+ */
133
+ interface EventSubscriber {
134
+ windowId: number;
135
+ eventName: string;
136
+ }
137
+ /**
138
+ * Event bus API type
139
+ * Maps event names to their data types
140
+ */
141
+ type EventBusEvents<T extends Record<string, unknown>> = { [K in keyof T]: T[K] };
142
+ /**
143
+ * Typed event bus interface
144
+ */
145
+ type EventBus<T extends Record<string, unknown> = Record<string, unknown>> = {
146
+ /**
147
+ * Subscribe to an event
148
+ * @returns Unsubscribe function
149
+ */
150
+ on<K extends keyof T>(eventName: K, callback: EventHandler<T[K]>): () => void;
151
+ /**
152
+ * Unsubscribe from an event
153
+ * If no callback is provided, removes all handlers for the event
154
+ */
155
+ off<K extends keyof T>(eventName: K, callback?: EventHandler<T[K]>): void;
156
+ /**
157
+ * Subscribe to an event once (auto-unsubscribe after first call)
158
+ */
159
+ once<K extends keyof T>(eventName: K, callback: EventHandler<T[K]>): void;
160
+ /**
161
+ * Get list of subscribed event names
162
+ */
163
+ getSubscribedEvents(): string[];
164
+ };
165
+ /**
166
+ * RPC debug log entry type
167
+ */
168
+ interface RpcLogEntry {
169
+ /** Log entry type */
170
+ type: "request" | "response" | "error" | "notify" | "stream" | "event";
171
+ /** RPC method or event name */
172
+ method: string;
173
+ /** Request parameters */
174
+ params?: unknown[];
175
+ /** Response result */
176
+ result?: unknown;
177
+ /** Error message */
178
+ error?: string;
179
+ /** Timestamp in milliseconds */
180
+ timestamp: number;
181
+ /** Duration in milliseconds (for responses/errors) */
182
+ duration?: number;
183
+ /** Request ID for correlating request/response */
184
+ requestId?: string | number;
185
+ }
186
+ /**
187
+ * RPC logger function type
188
+ */
189
+ type RpcLogger = (entry: RpcLogEntry) => void;
190
+ /**
191
+ * Debug options for RPC clients
192
+ */
193
+ interface RpcDebugOptions {
194
+ /** Enable debug logging */
195
+ debug?: boolean;
196
+ /** Custom logger function */
197
+ logger?: RpcLogger;
198
+ }
199
+ //#endregion
200
+ export { UnderlyingSource as S, RpcValidator as _, ExposeRpcApiOptions as a, StreamMethodOptions as b, JsonRpcRequest as c, RpcClientOptions as d, RpcDebugOptions as f, RpcMethodOptions as g, RpcLogger as h, EventSubscriber as i, JsonRpcResponse as l, RpcLogEntry as m, EventBusEvents as n, JsonRpcError as o, RpcHandler as p, EventHandler as r, JsonRpcErrorCode as s, EventBus as t, RpcApi as u, StreamChunk as v, StreamRequest as x, StreamHandler as y };
201
+ //# sourceMappingURL=types-BnGse9DF.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BnGse9DF.d.mts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "electron-json-rpc",
3
+ "version": "1.0.0",
4
+ "description": "JSON-RPC implementation for Electron",
5
+ "license": "MIT",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "type": "module",
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ },
17
+ "./main": {
18
+ "types": "./dist/main.d.ts",
19
+ "import": "./dist/main.js"
20
+ },
21
+ "./preload": {
22
+ "types": "./dist/preload.d.ts",
23
+ "import": "./dist/preload.js"
24
+ },
25
+ "./renderer": {
26
+ "types": "./dist/renderer/index.d.ts",
27
+ "import": "./dist/renderer/index.js"
28
+ },
29
+ "./renderer/client": {
30
+ "types": "./dist/renderer/client.d.ts",
31
+ "import": "./dist/renderer/client.js"
32
+ },
33
+ "./renderer/builder": {
34
+ "types": "./dist/renderer/builder.d.ts",
35
+ "import": "./dist/renderer/builder.js"
36
+ },
37
+ "./renderer/event": {
38
+ "types": "./dist/renderer/event.d.ts",
39
+ "import": "./dist/renderer/event.js"
40
+ },
41
+ "./stream": {
42
+ "types": "./dist/stream.d.ts",
43
+ "import": "./dist/stream.js"
44
+ },
45
+ "./event": {
46
+ "types": "./dist/event.d.ts",
47
+ "import": "./dist/event.js"
48
+ },
49
+ "./debug": {
50
+ "types": "./dist/debug.d.ts",
51
+ "import": "./dist/debug.js"
52
+ }
53
+ },
54
+ "scripts": {
55
+ "lint": "oxlint",
56
+ "format": "oxfmt .",
57
+ "format:check": "oxfmt --check .",
58
+ "typecheck": "tsc --noEmit",
59
+ "build": "tsdown",
60
+ "dev": "tsdown --watch",
61
+ "prepublishOnly": "bun run typecheck && bun run lint && bun run test:run && bun run build",
62
+ "test": "vitest",
63
+ "test:run": "vitest run",
64
+ "test:coverage": "vitest run --coverage",
65
+ "test:ui": "vitest --ui",
66
+ "release": "semantic-release"
67
+ },
68
+ "devDependencies": {
69
+ "@commitlint/cli": "^20.3.1",
70
+ "@commitlint/config-conventional": "^20.3.1",
71
+ "@semantic-release/changelog": "^6.0.3",
72
+ "@semantic-release/commit-analyzer": "^13.0.0",
73
+ "@semantic-release/git": "^10.0.1",
74
+ "@semantic-release/npm": "^12.0.0",
75
+ "@semantic-release/release-notes-generator": "^14.0.0",
76
+ "@types/bun": "latest",
77
+ "@types/node": "^25.0.8",
78
+ "@vitest/coverage-v8": "^4.0.17",
79
+ "@vitest/ui": "^4.0.17",
80
+ "electron": "^39.2.7",
81
+ "happy-dom": "^20.3.1",
82
+ "oxfmt": "^0.24.0",
83
+ "oxlint": "^1.39.0",
84
+ "semantic-release": "^25.0.2",
85
+ "tsdown": "^0.20.0-beta.3",
86
+ "typescript": "^5.9.3",
87
+ "vitest": "^4.0.17"
88
+ },
89
+ "peerDependencies": {
90
+ "electron": "*"
91
+ }
92
+ }