1
>
/*---------------------------------------------------------------------------------------------
jsonRpcProtocol.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { DeferredPromise } from './async.js';
7
>
import { CancellationToken, CancellationTokenSource } from './cancellation.js';
8
>
import { CancellationError } from './errors.js';
9
>
import { Disposable, toDisposable } from './lifecycle.js';
10
>
import { hasKey } from './types.js';
11
>
12
>
export type JsonRpcId = string | number;
13
>
14
>
export interface IJsonRpcError {
15
>
code: number;
16
>
message: string;
17
>
data?: unknown;
18
>
}
19
>
20
>
export interface IJsonRpcRequest {
21
>
jsonrpc: '2.0';
22
>
id: JsonRpcId;
23
>
method: string;
24
>
params?: unknown;
25
>
}
26
>
27
>
export interface IJsonRpcNotification {
28
>
jsonrpc: '2.0';
29
>
method: string;
30
>
params?: unknown;
31
>
}
32
>
33
>
export interface IJsonRpcSuccessResponse {
34
>
jsonrpc: '2.0';
35
>
id: JsonRpcId;
36
>
result: unknown;
37
>
}
38
>
39
>
export interface IJsonRpcErrorResponse {
40
>
jsonrpc: '2.0';
41
>
id?: JsonRpcId;
42
>
error: IJsonRpcError;
43
>
}
44
>
45
>
export type JsonRpcMessage = IJsonRpcRequest | IJsonRpcNotification | IJsonRpcSuccessResponse | IJsonRpcErrorResponse;
46
>
export type JsonRpcResponse = IJsonRpcSuccessResponse | IJsonRpcErrorResponse;
47
>
48
>
interface IPendingRequest {
49
>
promise: DeferredPromise<unknown>;
50
>
cts: CancellationTokenSource;
51
>
}
52
>
53
>
export interface IJsonRpcProtocolHandlers {
54
>
handleRequest?(request: IJsonRpcRequest, token: CancellationToken): Promise<unknown> | unknown;
55
>
handleNotification?(notification: IJsonRpcNotification): void;
56
>
}
57
>
58
>
export class JsonRpcError extends Error {
59
>
constructor(
60
public readonly code: number,
61
message: string,