@lspeasy/client 1.0.1 → 2.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.
- package/README.md +46 -0
- package/dist/capability-proxy.d.ts.map +1 -1
- package/dist/capability-proxy.js +9 -2
- package/dist/capability-proxy.js.map +1 -1
- package/dist/client.d.ts +21 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +199 -6
- package/dist/client.js.map +1 -1
- package/dist/connection/health.d.ts +31 -2
- package/dist/connection/health.d.ts.map +1 -1
- package/dist/connection/health.js +35 -12
- package/dist/connection/health.js.map +1 -1
- package/dist/connection/heartbeat.d.ts +18 -0
- package/dist/connection/heartbeat.d.ts.map +1 -1
- package/dist/connection/heartbeat.js +15 -0
- package/dist/connection/heartbeat.js.map +1 -1
- package/dist/connection/partial-result-collector.d.ts +11 -0
- package/dist/connection/partial-result-collector.d.ts.map +1 -0
- package/dist/connection/partial-result-collector.js +34 -0
- package/dist/connection/partial-result-collector.js.map +1 -0
- package/dist/connection/registration-store.d.ts +11 -0
- package/dist/connection/registration-store.d.ts.map +1 -0
- package/dist/connection/registration-store.js +22 -0
- package/dist/connection/registration-store.js.map +1 -0
- package/dist/connection/types.d.ts +15 -0
- package/dist/connection/types.d.ts.map +1 -1
- package/dist/connection/types.js +3 -0
- package/dist/connection/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/notifications/wait.d.ts +21 -0
- package/dist/notifications/wait.d.ts.map +1 -1
- package/dist/notifications/wait.js +18 -0
- package/dist/notifications/wait.js.map +1 -1
- package/dist/types.d.ts +22 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -11
- package/LICENSE +0 -21
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DisposableEventEmitter } from '@lspeasy/core';
|
|
2
2
|
import { ConnectionState } from './types.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Tracks connection state transitions and message activity timestamps.
|
|
5
|
+
*/
|
|
6
|
+
export class ConnectionHealthTracker extends DisposableEventEmitter {
|
|
5
7
|
health = {
|
|
6
8
|
state: ConnectionState.Disconnected,
|
|
7
9
|
lastMessageSent: null,
|
|
8
10
|
lastMessageReceived: null
|
|
9
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Returns a defensive copy of the current health snapshot.
|
|
14
|
+
*/
|
|
10
15
|
getHealth() {
|
|
11
16
|
const baseHealth = {
|
|
12
17
|
...this.health
|
|
@@ -19,6 +24,9 @@ export class ConnectionHealthTracker {
|
|
|
19
24
|
}
|
|
20
25
|
return baseHealth;
|
|
21
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Updates connection state and emits state/health change events.
|
|
29
|
+
*/
|
|
22
30
|
setState(next, reason) {
|
|
23
31
|
if (this.health.state === next) {
|
|
24
32
|
return;
|
|
@@ -31,16 +39,22 @@ export class ConnectionHealthTracker {
|
|
|
31
39
|
timestamp: new Date()
|
|
32
40
|
};
|
|
33
41
|
const event = reason ? { ...baseEvent, reason } : baseEvent;
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
42
|
+
this.emit('stateChanged', event);
|
|
43
|
+
this.emit('healthChanged', this.getHealth());
|
|
36
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Records outbound message activity.
|
|
47
|
+
*/
|
|
37
48
|
markMessageSent() {
|
|
38
49
|
this.health = {
|
|
39
50
|
...this.health,
|
|
40
51
|
lastMessageSent: new Date()
|
|
41
52
|
};
|
|
42
|
-
this.
|
|
53
|
+
this.emit('healthChanged', this.getHealth());
|
|
43
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Records inbound message activity.
|
|
57
|
+
*/
|
|
44
58
|
markMessageReceived() {
|
|
45
59
|
this.health = {
|
|
46
60
|
...this.health,
|
|
@@ -56,22 +70,31 @@ export class ConnectionHealthTracker {
|
|
|
56
70
|
}
|
|
57
71
|
};
|
|
58
72
|
}
|
|
59
|
-
this.
|
|
73
|
+
this.emit('healthChanged', this.getHealth());
|
|
60
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Updates the heartbeat subsection of the current health snapshot.
|
|
77
|
+
*/
|
|
61
78
|
setHeartbeat(status) {
|
|
62
79
|
this.health = {
|
|
63
80
|
...this.health,
|
|
64
81
|
heartbeat: status
|
|
65
82
|
};
|
|
66
|
-
this.
|
|
83
|
+
this.emit('healthChanged', this.getHealth());
|
|
67
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Subscribes to connection state transitions.
|
|
87
|
+
*/
|
|
68
88
|
onStateChange(handler) {
|
|
69
|
-
this.
|
|
70
|
-
return () =>
|
|
89
|
+
const disposable = this.on('stateChanged', handler);
|
|
90
|
+
return () => disposable.dispose();
|
|
71
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Subscribes to health snapshot updates.
|
|
94
|
+
*/
|
|
72
95
|
onHealthChange(handler) {
|
|
73
|
-
this.
|
|
74
|
-
return () =>
|
|
96
|
+
const disposable = this.on('healthChanged', handler);
|
|
97
|
+
return () => disposable.dispose();
|
|
75
98
|
}
|
|
76
99
|
}
|
|
77
100
|
//# sourceMappingURL=health.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/connection/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/connection/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,36 @@
|
|
|
1
1
|
import type { HeartbeatConfig, HeartbeatStatus } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Callback and configuration options for heartbeat monitoring.
|
|
4
|
+
*/
|
|
2
5
|
export interface HeartbeatMonitorOptions {
|
|
3
6
|
config: HeartbeatConfig;
|
|
4
7
|
onPing: () => void;
|
|
5
8
|
onUnresponsive: () => void;
|
|
6
9
|
onResponsive?: () => void;
|
|
7
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Runs interval-based heartbeat checks for active transports.
|
|
13
|
+
*/
|
|
8
14
|
export declare class HeartbeatMonitor {
|
|
9
15
|
private readonly options;
|
|
10
16
|
private timer;
|
|
11
17
|
private status;
|
|
12
18
|
constructor(options: HeartbeatMonitorOptions);
|
|
19
|
+
/**
|
|
20
|
+
* Starts heartbeat interval checks.
|
|
21
|
+
*/
|
|
13
22
|
start(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Stops heartbeat interval checks.
|
|
25
|
+
*/
|
|
14
26
|
stop(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Marks a successful heartbeat response.
|
|
29
|
+
*/
|
|
15
30
|
markPong(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Returns the latest heartbeat status snapshot.
|
|
33
|
+
*/
|
|
16
34
|
getStatus(): HeartbeatStatus;
|
|
17
35
|
}
|
|
18
36
|
//# sourceMappingURL=heartbeat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/connection/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAkB;IAEhC,YAA6B,OAAO,EAAE,uBAAuB,EAS5D;IAED,KAAK,IAAI,IAAI,CAuBZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED,QAAQ,IAAI,IAAI,CAWf;IAED,SAAS,IAAI,eAAe,CAE3B;CACF"}
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/connection/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAkB;IAEhC,YAA6B,OAAO,EAAE,uBAAuB,EAS5D;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAuBZ;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,CAKX;IAED;;OAEG;IACH,QAAQ,IAAI,IAAI,CAWf;IAED;;OAEG;IACH,SAAS,IAAI,eAAe,CAE3B;CACF"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs interval-based heartbeat checks for active transports.
|
|
3
|
+
*/
|
|
1
4
|
export class HeartbeatMonitor {
|
|
2
5
|
options;
|
|
3
6
|
timer;
|
|
@@ -13,6 +16,9 @@ export class HeartbeatMonitor {
|
|
|
13
16
|
isResponsive: true
|
|
14
17
|
};
|
|
15
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Starts heartbeat interval checks.
|
|
21
|
+
*/
|
|
16
22
|
start() {
|
|
17
23
|
if (!this.status.enabled || this.timer) {
|
|
18
24
|
return;
|
|
@@ -33,12 +39,18 @@ export class HeartbeatMonitor {
|
|
|
33
39
|
}
|
|
34
40
|
}, this.status.interval);
|
|
35
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Stops heartbeat interval checks.
|
|
44
|
+
*/
|
|
36
45
|
stop() {
|
|
37
46
|
if (this.timer) {
|
|
38
47
|
clearInterval(this.timer);
|
|
39
48
|
this.timer = undefined;
|
|
40
49
|
}
|
|
41
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Marks a successful heartbeat response.
|
|
53
|
+
*/
|
|
42
54
|
markPong() {
|
|
43
55
|
const wasUnresponsive = !this.status.isResponsive;
|
|
44
56
|
this.status = {
|
|
@@ -50,6 +62,9 @@ export class HeartbeatMonitor {
|
|
|
50
62
|
this.options.onResponsive?.();
|
|
51
63
|
}
|
|
52
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Returns the latest heartbeat status snapshot.
|
|
67
|
+
*/
|
|
53
68
|
getStatus() {
|
|
54
69
|
return { ...this.status };
|
|
55
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/connection/heartbeat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/connection/heartbeat.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAIE,OAAO;IAH5B,KAAK,CAA6B;IAClC,MAAM,CAAkB;IAEhC,YAA6B,OAAgC,EAAE;uBAAlC,OAAO;QAClC,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;YACxC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;YACjC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;YAC/B,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC;IAAA,CACH;IAED;;OAEG;IACH,KAAK,GAAS;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG;gBACZ,GAAG,IAAI,CAAC,MAAM;gBACd,QAAQ,EAAE,IAAI,IAAI,EAAE;aACrB,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAEtB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YAE3C,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1F,IAAI,CAAC,MAAM,GAAG;oBACZ,GAAG,IAAI,CAAC,MAAM;oBACd,YAAY,EAAE,KAAK;iBACpB,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAChC,CAAC;QAAA,CACF,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAAA,CAC1B;IAED;;OAEG;IACH,IAAI,GAAS;QACX,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;IAAA,CACF;IAED;;OAEG;IACH,QAAQ,GAAS;QACf,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,IAAI,CAAC,MAAM;YACd,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,YAAY,EAAE,IAAI;SACnB,CAAC;QAEF,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAChC,CAAC;IAAA,CACF;IAED;;OAEG;IACH,SAAS,GAAoB;QAC3B,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAAA,CAC3B;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProgressToken } from '@lspeasy/core';
|
|
2
|
+
/** Collects partial result batches by progress token and dispatches callback updates. */
|
|
3
|
+
export declare class PartialResultCollector {
|
|
4
|
+
private readonly collectors;
|
|
5
|
+
start<TPartial>(token: ProgressToken, onPartial: (value: TPartial) => void): void;
|
|
6
|
+
push(token: ProgressToken, value: unknown): boolean;
|
|
7
|
+
finish<TPartial>(token: ProgressToken): TPartial[];
|
|
8
|
+
abort(token: ProgressToken): void;
|
|
9
|
+
clear(): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=partial-result-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partial-result-collector.d.ts","sourceRoot":"","sources":["../../src/connection/partial-result-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,yFAAyF;AACzF,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgD;IAE3E,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAKhF;IAED,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CASlD;IAED,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,CAQjD;IAED,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEhC;IAED,KAAK,IAAI,IAAI,CAEZ;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Collects partial result batches by progress token and dispatches callback updates. */
|
|
2
|
+
export class PartialResultCollector {
|
|
3
|
+
collectors = new Map();
|
|
4
|
+
start(token, onPartial) {
|
|
5
|
+
this.collectors.set(token, {
|
|
6
|
+
partials: [],
|
|
7
|
+
onPartial: onPartial
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
push(token, value) {
|
|
11
|
+
const collector = this.collectors.get(token);
|
|
12
|
+
if (!collector) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
collector.partials.push(value);
|
|
16
|
+
collector.onPartial(value);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
finish(token) {
|
|
20
|
+
const collector = this.collectors.get(token);
|
|
21
|
+
if (!collector) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
this.collectors.delete(token);
|
|
25
|
+
return collector.partials;
|
|
26
|
+
}
|
|
27
|
+
abort(token) {
|
|
28
|
+
this.collectors.delete(token);
|
|
29
|
+
}
|
|
30
|
+
clear() {
|
|
31
|
+
this.collectors.clear();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=partial-result-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partial-result-collector.js","sourceRoot":"","sources":["../../src/connection/partial-result-collector.ts"],"names":[],"mappings":"AAOA,yFAAyF;AACzF,MAAM,OAAO,sBAAsB;IAChB,UAAU,GAAG,IAAI,GAAG,EAAqC,CAAC;IAE3E,KAAK,CAAW,KAAoB,EAAE,SAAoC,EAAQ;QAChF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE;YACzB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,SAAqC;SACjD,CAAC,CAAC;IAAA,CACJ;IAED,IAAI,CAAC,KAAoB,EAAE,KAAc,EAAW;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAAA,CACb;IAED,MAAM,CAAW,KAAoB,EAAc;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,SAAS,CAAC,QAAsB,CAAC;IAAA,CACzC;IAED,KAAK,CAAC,KAAoB,EAAQ;QAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAAA,CAC/B;IAED,KAAK,GAAS;QACZ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAAA,CACzB;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DynamicRegistration } from '@lspeasy/core';
|
|
2
|
+
/** In-memory registry for active dynamic capability registrations keyed by registration id. */
|
|
3
|
+
export declare class RegistrationStore {
|
|
4
|
+
private readonly registrationsById;
|
|
5
|
+
upsert(registration: DynamicRegistration): void;
|
|
6
|
+
remove(id: string): DynamicRegistration | undefined;
|
|
7
|
+
getAll(): DynamicRegistration[];
|
|
8
|
+
has(id: string): boolean;
|
|
9
|
+
clear(): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=registration-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration-store.d.ts","sourceRoot":"","sources":["../../src/connection/registration-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,+FAA+F;AAC/F,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0C;IAE5E,MAAM,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAE9C;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAIlD;IAED,MAAM,IAAI,mBAAmB,EAAE,CAE9B;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEvB;IAED,KAAK,IAAI,IAAI,CAEZ;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** In-memory registry for active dynamic capability registrations keyed by registration id. */
|
|
2
|
+
export class RegistrationStore {
|
|
3
|
+
registrationsById = new Map();
|
|
4
|
+
upsert(registration) {
|
|
5
|
+
this.registrationsById.set(registration.id, registration);
|
|
6
|
+
}
|
|
7
|
+
remove(id) {
|
|
8
|
+
const existing = this.registrationsById.get(id);
|
|
9
|
+
this.registrationsById.delete(id);
|
|
10
|
+
return existing;
|
|
11
|
+
}
|
|
12
|
+
getAll() {
|
|
13
|
+
return Array.from(this.registrationsById.values());
|
|
14
|
+
}
|
|
15
|
+
has(id) {
|
|
16
|
+
return this.registrationsById.has(id);
|
|
17
|
+
}
|
|
18
|
+
clear() {
|
|
19
|
+
this.registrationsById.clear();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=registration-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration-store.js","sourceRoot":"","sources":["../../src/connection/registration-store.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,MAAM,OAAO,iBAAiB;IACX,iBAAiB,GAAG,IAAI,GAAG,EAA+B,CAAC;IAE5E,MAAM,CAAC,YAAiC,EAAQ;QAC9C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAAA,CAC3D;IAED,MAAM,CAAC,EAAU,EAAmC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,QAAQ,CAAC;IAAA,CACjB;IAED,MAAM,GAA0B;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;IAAA,CACpD;IAED,GAAG,CAAC,EAAU,EAAW;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAAA,CACvC;IAED,KAAK,GAAS;QACZ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAAA,CAChC;CACF"}
|
|
@@ -1,14 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifecycle state for the client connection.
|
|
3
|
+
*/
|
|
1
4
|
export declare enum ConnectionState {
|
|
2
5
|
Connecting = "connecting",
|
|
3
6
|
Connected = "connected",
|
|
4
7
|
Disconnecting = "disconnecting",
|
|
5
8
|
Disconnected = "disconnected"
|
|
6
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for optional heartbeat monitoring.
|
|
12
|
+
*/
|
|
7
13
|
export interface HeartbeatConfig {
|
|
8
14
|
enabled?: boolean;
|
|
9
15
|
interval: number;
|
|
10
16
|
timeout: number;
|
|
11
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Runtime heartbeat status snapshot.
|
|
20
|
+
*/
|
|
12
21
|
export interface HeartbeatStatus {
|
|
13
22
|
enabled: boolean;
|
|
14
23
|
interval: number;
|
|
@@ -17,12 +26,18 @@ export interface HeartbeatStatus {
|
|
|
17
26
|
lastPong: Date | null;
|
|
18
27
|
isResponsive: boolean;
|
|
19
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Aggregated connection health details.
|
|
31
|
+
*/
|
|
20
32
|
export interface ConnectionHealth {
|
|
21
33
|
state: ConnectionState;
|
|
22
34
|
lastMessageSent: Date | null;
|
|
23
35
|
lastMessageReceived: Date | null;
|
|
24
36
|
heartbeat?: HeartbeatStatus;
|
|
25
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Event payload emitted when connection state changes.
|
|
40
|
+
*/
|
|
26
41
|
export interface StateChangeEvent {
|
|
27
42
|
previous: ConnectionState;
|
|
28
43
|
current: ConnectionState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,eAAe,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,eAAe;IACzB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,eAAe,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/connection/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"SAGY,eAAe;AAH3B;;GAEG;AACH,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,4CAAyB,CAAA;IACzB,0CAAuB,CAAA;IACvB,kDAA+B,CAAA;IAC/B,gDAA6B,CAAA;AAAA,CAC/B,EALY,eAAe,KAAf,eAAe,QAK1B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { LSPClient } from './client.js';
|
|
5
5
|
export { CapabilityGuard, ClientCapabilityGuard } from './capability-guard.js';
|
|
6
|
-
export type { ClientOptions, InitializeResult, CancellableRequest } from './types.js';
|
|
6
|
+
export type { ClientOptions, InitializeResult, CancellableRequest, NotebookDocumentNamespace, PartialRequestOptions, PartialRequestResult } from './types.js';
|
|
7
7
|
export { ConnectionState, ConnectionHealthTracker, HeartbeatMonitor } from './connection/index.js';
|
|
8
8
|
export type { ConnectionHealth, HeartbeatConfig, HeartbeatStatus, StateChangeEvent } from './connection/index.js';
|
|
9
9
|
export { NotificationWaiter } from './notifications/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnG,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGxE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAS/E,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for waiting on a specific notification.
|
|
3
|
+
*/
|
|
1
4
|
export interface NotificationWaitOptions<TParams> {
|
|
2
5
|
timeout: number;
|
|
3
6
|
filter?: (params: TParams) => boolean;
|
|
4
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Tracks a single wait-for-notification operation and timeout lifecycle.
|
|
10
|
+
*/
|
|
5
11
|
export declare class NotificationWaiter<TParams> {
|
|
6
12
|
private readonly method;
|
|
7
13
|
private readonly options;
|
|
@@ -10,10 +16,25 @@ export declare class NotificationWaiter<TParams> {
|
|
|
10
16
|
private readonly resolveFn;
|
|
11
17
|
private readonly rejectFn;
|
|
12
18
|
constructor(method: string, options: NotificationWaitOptions<TParams>, resolve: (params: TParams) => void, reject: (error: Error) => void, onCleanup: () => void);
|
|
19
|
+
/**
|
|
20
|
+
* Starts timeout tracking for the wait operation.
|
|
21
|
+
*/
|
|
13
22
|
start(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Returns whether an incoming notification satisfies this waiter.
|
|
25
|
+
*/
|
|
14
26
|
matches(method: string, params: TParams): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Resolves the waiter and performs cleanup.
|
|
29
|
+
*/
|
|
15
30
|
resolve(params: TParams): void;
|
|
31
|
+
/**
|
|
32
|
+
* Rejects the waiter and performs cleanup.
|
|
33
|
+
*/
|
|
16
34
|
reject(error: Error): void;
|
|
35
|
+
/**
|
|
36
|
+
* Clears timeout state and detaches waiter resources.
|
|
37
|
+
*/
|
|
17
38
|
cleanup(): void;
|
|
18
39
|
}
|
|
19
40
|
//# sourceMappingURL=wait.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/notifications/wait.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB,CAAC,OAAO;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CACvC;AAED,qBAAa,kBAAkB,CAAC,OAAO;IAMnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAGxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAElD,YACmB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC,EAC1D,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAClC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EACb,SAAS,EAAE,MAAM,IAAI,EAIvC;IAED,KAAK,IAAI,IAAI,CASZ;IAED,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAUhD;IAED,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAG7B;IAED,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAGzB;IAED,OAAO,IAAI,IAAI,CAOd;CACF"}
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/notifications/wait.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,OAAO;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CACvC;AAED;;GAEG;AACH,qBAAa,kBAAkB,CAAC,OAAO;IAMnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAGxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAElD,YACmB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC,EAC1D,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAClC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EACb,SAAS,EAAE,MAAM,IAAI,EAIvC;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CASZ;IAED;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAUhD;IAED;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAG7B;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAGzB;IAED;;OAEG;IACH,OAAO,IAAI,IAAI,CAOd;CACF"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks a single wait-for-notification operation and timeout lifecycle.
|
|
3
|
+
*/
|
|
1
4
|
export class NotificationWaiter {
|
|
2
5
|
method;
|
|
3
6
|
options;
|
|
@@ -12,12 +15,18 @@ export class NotificationWaiter {
|
|
|
12
15
|
this.resolveFn = resolve;
|
|
13
16
|
this.rejectFn = reject;
|
|
14
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Starts timeout tracking for the wait operation.
|
|
20
|
+
*/
|
|
15
21
|
start() {
|
|
16
22
|
this.timeoutHandle = setTimeout(() => {
|
|
17
23
|
this.cleanup();
|
|
18
24
|
this.rejectFn(new Error(`Timed out waiting for notification '${this.method}' after ${this.options.timeout}ms`));
|
|
19
25
|
}, this.options.timeout);
|
|
20
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns whether an incoming notification satisfies this waiter.
|
|
29
|
+
*/
|
|
21
30
|
matches(method, params) {
|
|
22
31
|
if (method !== this.method) {
|
|
23
32
|
return false;
|
|
@@ -27,14 +36,23 @@ export class NotificationWaiter {
|
|
|
27
36
|
}
|
|
28
37
|
return true;
|
|
29
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolves the waiter and performs cleanup.
|
|
41
|
+
*/
|
|
30
42
|
resolve(params) {
|
|
31
43
|
this.cleanup();
|
|
32
44
|
this.resolveFn(params);
|
|
33
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Rejects the waiter and performs cleanup.
|
|
48
|
+
*/
|
|
34
49
|
reject(error) {
|
|
35
50
|
this.cleanup();
|
|
36
51
|
this.rejectFn(error);
|
|
37
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Clears timeout state and detaches waiter resources.
|
|
55
|
+
*/
|
|
38
56
|
cleanup() {
|
|
39
57
|
if (this.timeoutHandle) {
|
|
40
58
|
clearTimeout(this.timeoutHandle);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/notifications/wait.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/notifications/wait.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAMV,MAAM;IACN,OAAO;IAGP,SAAS;IATpB,aAAa,CAA6B;IACjC,SAAS,CAA4B;IACrC,QAAQ,CAAyB;IAElD,YACmB,MAAc,EACd,OAAyC,EAC1D,OAAkC,EAClC,MAA8B,EACb,SAAqB,EACtC;sBALiB,MAAM;uBACN,OAAO;yBAGP,SAAS;QAE1B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IAAA,CACxB;IAED;;OAEG;IACH,KAAK,GAAS;QACZ,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CACX,IAAI,KAAK,CACP,uCAAuC,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CACtF,CACF,CAAC;QAAA,CACH,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAAA,CAC1B;IAED;;OAEG;IACH,OAAO,CAAC,MAAc,EAAE,MAAe,EAAW;QAChD,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IAAA,CACb;IAED;;OAEG;IACH,OAAO,CAAC,MAAe,EAAQ;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAAA,CACxB;IAED;;OAEG;IACH,MAAM,CAAC,KAAY,EAAQ;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAAA,CACtB;IAED;;OAEG;IACH,OAAO,GAAS;QACd,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;IAAA,CAClB;CACF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type definitions for LSP Client
|
|
3
3
|
*/
|
|
4
|
-
import type { ClientCapabilities, Logger, LogLevel, Middleware, ScopedMiddleware } from '@lspeasy/core';
|
|
4
|
+
import type { ClientCapabilities, DynamicRegistrationBehavior, DidOpenNotebookDocumentParams, DidChangeNotebookDocumentParams, DidSaveNotebookDocumentParams, DidCloseNotebookDocumentParams, PartialRequestOutcome, Logger, LogLevel, Middleware, ScopedMiddleware } from '@lspeasy/core';
|
|
5
5
|
import type { ZodError } from 'zod';
|
|
6
6
|
import type { ResponseMessage } from '@lspeasy/core';
|
|
7
7
|
import type { HeartbeatConfig } from './connection/types.js';
|
|
@@ -51,6 +51,10 @@ export interface ClientOptions<ClientCaps extends Partial<ClientCapabilities> =
|
|
|
51
51
|
* Optional heartbeat configuration (disabled by default).
|
|
52
52
|
*/
|
|
53
53
|
heartbeat?: HeartbeatConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Behavior controls for server-driven dynamic registration.
|
|
56
|
+
*/
|
|
57
|
+
dynamicRegistration?: DynamicRegistrationBehavior;
|
|
54
58
|
/**
|
|
55
59
|
* Callback for response validation errors
|
|
56
60
|
*/
|
|
@@ -79,4 +83,21 @@ export interface CancellableRequest<T> {
|
|
|
79
83
|
*/
|
|
80
84
|
cancel: () => void;
|
|
81
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Options for sending a request with partial-result streaming.
|
|
88
|
+
*/
|
|
89
|
+
export interface PartialRequestOptions<TPartial> {
|
|
90
|
+
token?: string | number;
|
|
91
|
+
onPartial: (partial: TPartial) => void;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Result returned by partial-result enabled requests.
|
|
95
|
+
*/
|
|
96
|
+
export type PartialRequestResult<TPartial, TResult> = PartialRequestOutcome<TPartial, TResult>;
|
|
97
|
+
export interface NotebookDocumentNamespace {
|
|
98
|
+
didOpen(params: DidOpenNotebookDocumentParams): Promise<void>;
|
|
99
|
+
didChange(params: DidChangeNotebookDocumentParams): Promise<void>;
|
|
100
|
+
didSave(params: DidSaveNotebookDocumentParams): Promise<void>;
|
|
101
|
+
didClose(params: DidCloseNotebookDocumentParams): Promise<void>;
|
|
102
|
+
}
|
|
82
103
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAClB,MAAM,EACN,QAAQ,EACR,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,aAAa,CAC5B,UAAU,SAAS,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB;IAEnE;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;IAElD;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;CAC1E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,OAAO,gCAAgC,EAAE,kBAAkB,CAAC;IAC1E,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAClB,2BAA2B,EAC3B,6BAA6B,EAC7B,+BAA+B,EAC/B,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,EACrB,MAAM,EACN,QAAQ,EACR,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,aAAa,CAC5B,UAAU,SAAS,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB;IAEnE;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;IAElD;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;IAElD;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;CAC1E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,OAAO,gCAAgC,EAAE,kBAAkB,CAAC;IAC1E,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,QAAQ;IAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,IAAI,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAE/F,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,SAAS,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,QAAQ,CAAC,MAAM,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lspeasy/client",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Connect to LSP servers with typed client API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lsp",
|
|
@@ -35,11 +35,17 @@
|
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsgo --build",
|
|
40
|
+
"clean": "rm -rf dist *.tsbuildinfo",
|
|
41
|
+
"dev": "tsgo --build --watch",
|
|
42
|
+
"type-check": "tsgo --noEmit"
|
|
43
|
+
},
|
|
38
44
|
"dependencies": {
|
|
39
|
-
"@lspeasy/core": "
|
|
45
|
+
"@lspeasy/core": "workspace:*"
|
|
40
46
|
},
|
|
41
|
-
"
|
|
42
|
-
"zod": "^3.
|
|
47
|
+
"optionalDependencies": {
|
|
48
|
+
"zod": "^4.3.6"
|
|
43
49
|
},
|
|
44
50
|
"devDependencies": {
|
|
45
51
|
"typescript": "^5.9.3",
|
|
@@ -48,11 +54,5 @@
|
|
|
48
54
|
},
|
|
49
55
|
"engines": {
|
|
50
56
|
"node": ">=20.0.0"
|
|
51
|
-
},
|
|
52
|
-
"scripts": {
|
|
53
|
-
"build": "tsgo --build",
|
|
54
|
-
"clean": "rm -rf dist *.tsbuildinfo",
|
|
55
|
-
"dev": "tsgo --build --watch",
|
|
56
|
-
"type-check": "tsgo --noEmit"
|
|
57
57
|
}
|
|
58
|
-
}
|
|
58
|
+
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024-present Pradeep Mouli
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|