@rahul_ur/devlink-bridge 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.
- package/dist/bridge.d.ts +78 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +361 -0
- package/dist/bridge.js.map +1 -0
- package/dist/cache.d.ts +23 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +92 -0
- package/dist/cache.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist-cjs/bridge.js +364 -0
- package/dist-cjs/cache.js +95 -0
- package/dist-cjs/index.js +7 -0
- package/dist-cjs/types.js +3 -0
- package/package.json +77 -0
- package/server.mjs +234 -0
- package/setup-devlink.mjs +388 -0
package/dist/bridge.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { BridgeOptions, BridgeStatus, DirEntry } from './types';
|
|
2
|
+
type FileChangeHandler = (path: string, content: string) => void;
|
|
3
|
+
type FileDeleteHandler = (path: string) => void;
|
|
4
|
+
type StatusHandler = (status: BridgeStatus) => void;
|
|
5
|
+
export declare class DevlinkBridge {
|
|
6
|
+
private ws;
|
|
7
|
+
private status;
|
|
8
|
+
private pending;
|
|
9
|
+
private fileHandlers;
|
|
10
|
+
private deleteHandlers;
|
|
11
|
+
private statusHandlers;
|
|
12
|
+
private eventHandlers;
|
|
13
|
+
private cache;
|
|
14
|
+
private opts;
|
|
15
|
+
private reconnectAttempts;
|
|
16
|
+
private reconnectTimer;
|
|
17
|
+
private heartbeatTimer;
|
|
18
|
+
private missedPongs;
|
|
19
|
+
private activePort;
|
|
20
|
+
private lastWriteId;
|
|
21
|
+
private workspaceRoot;
|
|
22
|
+
private clientId;
|
|
23
|
+
private destroyed;
|
|
24
|
+
constructor(opts?: BridgeOptions);
|
|
25
|
+
private connect;
|
|
26
|
+
private findOpenPort;
|
|
27
|
+
private canConnect;
|
|
28
|
+
private scheduleReconnect;
|
|
29
|
+
private startHeartbeat;
|
|
30
|
+
private stopHeartbeat;
|
|
31
|
+
private handleMessage;
|
|
32
|
+
private restoreWatchers;
|
|
33
|
+
private request;
|
|
34
|
+
private send;
|
|
35
|
+
private rejectAllPending;
|
|
36
|
+
private setStatus;
|
|
37
|
+
/** Read a file. Returns cached content if available, otherwise fetches. */
|
|
38
|
+
readFile(path: string): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Write a file. Debounce on the caller side (500ms recommended).
|
|
41
|
+
* The extension will push the change back via fileChanged,
|
|
42
|
+
* but we dedup it so the editor doesn't re-render its own save.
|
|
43
|
+
*/
|
|
44
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
45
|
+
/** Read a directory tree */
|
|
46
|
+
readDir(path: string, recursive?: boolean): Promise<DirEntry[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Watch a file for changes pushed from the extension.
|
|
49
|
+
* Handler is called whenever the file changes on disk.
|
|
50
|
+
* Returns an unwatch function.
|
|
51
|
+
*/
|
|
52
|
+
watchFile(path: string, handler: FileChangeHandler): Promise<() => void>;
|
|
53
|
+
/** Watch a file for deletion */
|
|
54
|
+
onFileDeleted(path: string, handler: FileDeleteHandler): () => void;
|
|
55
|
+
private unwatchFile;
|
|
56
|
+
/** Subscribe to arbitrary events from the bridge server */
|
|
57
|
+
on(type: string, handler: (data: any) => void): () => void;
|
|
58
|
+
/** Send an event to the bridge server without expecting a response */
|
|
59
|
+
publish(type: string, payload: any): void;
|
|
60
|
+
/** Subscribe to connection status changes */
|
|
61
|
+
onStatusChange(handler: StatusHandler): () => void;
|
|
62
|
+
/** Current connection status */
|
|
63
|
+
getStatus(): BridgeStatus;
|
|
64
|
+
/** Workspace root path (available after handshake) */
|
|
65
|
+
getWorkspaceRoot(): string | null;
|
|
66
|
+
/** Active port (available after connection) */
|
|
67
|
+
getActivePort(): number | null;
|
|
68
|
+
/** Cache snapshot for debugging */
|
|
69
|
+
getCacheSnapshot(): Record<string, {
|
|
70
|
+
version: number;
|
|
71
|
+
size: number;
|
|
72
|
+
watched: boolean;
|
|
73
|
+
}>;
|
|
74
|
+
/** Destroy the bridge — cleans up all timers and closes the socket */
|
|
75
|
+
destroy(): void;
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EAGZ,QAAQ,EACT,MAAM,SAAS,CAAC;AAajB,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AACjE,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAChD,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;AAEpD,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,IAAI,CAAuF;IACnG,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,GAAE,aAAkB;YAgBtB,OAAO;YAgDP,YAAY;IAqB1B,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;YAgDP,eAAe;IAa7B,OAAO,CAAC,OAAO;IA2Bf,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,SAAS;IASjB,2EAA2E;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS7C;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7D,4BAA4B;IACtB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAInE;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAc9E,gCAAgC;IAChC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI;YAUrD,WAAW;IAgBzB,2DAA2D;IAC3D,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ1D,sEAAsE;IACtE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAIzC,6CAA6C;IAC7C,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,IAAI;IAMlD,gCAAgC;IAChC,SAAS,IAAI,YAAY;IAIzB,sDAAsD;IACtD,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,+CAA+C;IAC/C,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,mCAAmC;IACnC,gBAAgB;;;;;IAIhB,sEAAsE;IACtE,OAAO,IAAI,IAAI;CAShB"}
|
package/dist/bridge.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import { FileCache } from './cache';
|
|
2
|
+
const PROTOCOL_VERSION = '1.0';
|
|
3
|
+
const DEFAULT_PORTS = [7100, 7101, 7102, 7103, 7104];
|
|
4
|
+
const PORT_RANGE_DEFAULT = [7100, 7200];
|
|
5
|
+
export class DevlinkBridge {
|
|
6
|
+
constructor(opts = {}) {
|
|
7
|
+
var _a, _b, _c, _d, _e, _f;
|
|
8
|
+
this.ws = null;
|
|
9
|
+
this.status = 'disconnected';
|
|
10
|
+
this.pending = new Map();
|
|
11
|
+
this.fileHandlers = new Map();
|
|
12
|
+
this.deleteHandlers = new Map();
|
|
13
|
+
this.statusHandlers = new Set();
|
|
14
|
+
this.eventHandlers = new Map();
|
|
15
|
+
this.cache = new FileCache();
|
|
16
|
+
this.reconnectAttempts = 0;
|
|
17
|
+
this.reconnectTimer = null;
|
|
18
|
+
this.heartbeatTimer = null;
|
|
19
|
+
this.missedPongs = 0;
|
|
20
|
+
this.activePort = null;
|
|
21
|
+
this.lastWriteId = null;
|
|
22
|
+
this.workspaceRoot = null;
|
|
23
|
+
this.destroyed = false;
|
|
24
|
+
this.opts = {
|
|
25
|
+
portRange: (_a = opts.portRange) !== null && _a !== void 0 ? _a : PORT_RANGE_DEFAULT,
|
|
26
|
+
port: (_b = opts.port) !== null && _b !== void 0 ? _b : 0,
|
|
27
|
+
heartbeatMs: (_c = opts.heartbeatMs) !== null && _c !== void 0 ? _c : 5000,
|
|
28
|
+
timeoutMs: (_d = opts.timeoutMs) !== null && _d !== void 0 ? _d : 10000,
|
|
29
|
+
maxReconnectAttempts: (_e = opts.maxReconnectAttempts) !== null && _e !== void 0 ? _e : Infinity,
|
|
30
|
+
reconnectBaseMs: (_f = opts.reconnectBaseMs) !== null && _f !== void 0 ? _f : 500,
|
|
31
|
+
onStatusChange: opts.onStatusChange,
|
|
32
|
+
};
|
|
33
|
+
this.clientId = `devlink-${Math.random().toString(36).slice(2, 10)}`;
|
|
34
|
+
this.connect();
|
|
35
|
+
}
|
|
36
|
+
// ─── Connection lifecycle ───────────────────────────────────────────────────
|
|
37
|
+
async connect() {
|
|
38
|
+
if (this.destroyed)
|
|
39
|
+
return;
|
|
40
|
+
this.setStatus('connecting');
|
|
41
|
+
const port = await this.findOpenPort();
|
|
42
|
+
if (port === null) {
|
|
43
|
+
console.warn('[devlink-bridge] No VSCode extension found on ports', this.opts.portRange);
|
|
44
|
+
this.scheduleReconnect();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.activePort = port;
|
|
48
|
+
const url = `ws://127.0.0.1:${port}`;
|
|
49
|
+
try {
|
|
50
|
+
this.ws = new WebSocket(url);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
this.scheduleReconnect();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.ws.onopen = () => {
|
|
57
|
+
this.reconnectAttempts = 0;
|
|
58
|
+
this.missedPongs = 0;
|
|
59
|
+
this.send({ type: 'handshake', protocolVersion: PROTOCOL_VERSION, clientId: this.clientId });
|
|
60
|
+
this.startHeartbeat();
|
|
61
|
+
};
|
|
62
|
+
this.ws.onmessage = (event) => {
|
|
63
|
+
try {
|
|
64
|
+
const msg = JSON.parse(event.data);
|
|
65
|
+
this.handleMessage(msg);
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
console.error('[devlink-bridge] Failed to parse message:', e);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
this.ws.onclose = () => {
|
|
72
|
+
this.stopHeartbeat();
|
|
73
|
+
this.rejectAllPending('Connection closed');
|
|
74
|
+
if (!this.destroyed)
|
|
75
|
+
this.scheduleReconnect();
|
|
76
|
+
};
|
|
77
|
+
this.ws.onerror = () => {
|
|
78
|
+
// onerror is always followed by onclose, so we handle there
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async findOpenPort() {
|
|
82
|
+
// Try specific port first if provided
|
|
83
|
+
if (this.opts.port) {
|
|
84
|
+
if (await this.canConnect(this.opts.port))
|
|
85
|
+
return this.opts.port;
|
|
86
|
+
}
|
|
87
|
+
// Try default ports first (fast path)
|
|
88
|
+
for (const p of DEFAULT_PORTS) {
|
|
89
|
+
if (await this.canConnect(p))
|
|
90
|
+
return p;
|
|
91
|
+
}
|
|
92
|
+
// Full range scan
|
|
93
|
+
const [min, max] = this.opts.portRange;
|
|
94
|
+
for (let p = min; p <= max; p++) {
|
|
95
|
+
if (DEFAULT_PORTS.includes(p))
|
|
96
|
+
continue; // already tried
|
|
97
|
+
if (await this.canConnect(p))
|
|
98
|
+
return p;
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
canConnect(port) {
|
|
103
|
+
return new Promise(resolve => {
|
|
104
|
+
const ws = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
105
|
+
const timer = setTimeout(() => { ws.close(); resolve(false); }, 2000);
|
|
106
|
+
ws.onopen = () => { clearTimeout(timer); ws.close(); resolve(true); };
|
|
107
|
+
ws.onerror = () => { clearTimeout(timer); resolve(false); };
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
scheduleReconnect() {
|
|
111
|
+
if (this.destroyed)
|
|
112
|
+
return;
|
|
113
|
+
if (this.reconnectAttempts >= this.opts.maxReconnectAttempts) {
|
|
114
|
+
this.setStatus('disconnected');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.setStatus('reconnecting');
|
|
118
|
+
this.reconnectAttempts++;
|
|
119
|
+
// Exponential backoff capped at 30s
|
|
120
|
+
const delay = Math.min(this.opts.reconnectBaseMs * Math.pow(2, this.reconnectAttempts - 1), 30000);
|
|
121
|
+
this.reconnectTimer = setTimeout(() => this.connect(), delay);
|
|
122
|
+
}
|
|
123
|
+
startHeartbeat() {
|
|
124
|
+
this.stopHeartbeat();
|
|
125
|
+
this.heartbeatTimer = setInterval(() => {
|
|
126
|
+
var _a;
|
|
127
|
+
if (this.missedPongs >= 2) {
|
|
128
|
+
// Extension is gone — force reconnect
|
|
129
|
+
(_a = this.ws) === null || _a === void 0 ? void 0 : _a.close();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.missedPongs++;
|
|
133
|
+
this.send({ type: 'ping', id: `ping-${Date.now()}` });
|
|
134
|
+
}, this.opts.heartbeatMs);
|
|
135
|
+
}
|
|
136
|
+
stopHeartbeat() {
|
|
137
|
+
if (this.heartbeatTimer) {
|
|
138
|
+
clearInterval(this.heartbeatTimer);
|
|
139
|
+
this.heartbeatTimer = null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ─── Message handling ───────────────────────────────────────────────────────
|
|
143
|
+
handleMessage(msg) {
|
|
144
|
+
var _a, _b;
|
|
145
|
+
switch (msg.type) {
|
|
146
|
+
case 'handshakeAck': {
|
|
147
|
+
this.workspaceRoot = msg.workspaceRoot;
|
|
148
|
+
this.setStatus('connected');
|
|
149
|
+
// Re-establish watchers for all files that were being watched before disconnect
|
|
150
|
+
this.restoreWatchers();
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
case 'response': {
|
|
154
|
+
const pending = this.pending.get(msg.id);
|
|
155
|
+
if (!pending)
|
|
156
|
+
return;
|
|
157
|
+
clearTimeout(pending.timer);
|
|
158
|
+
this.pending.delete(msg.id);
|
|
159
|
+
if (msg.ok) {
|
|
160
|
+
pending.resolve(msg.result);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
pending.reject(new Error(msg.error));
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case 'fileChanged': {
|
|
168
|
+
// Dedup our own saves — if writeId matches last write, skip UI notification
|
|
169
|
+
const updated = this.cache.update(msg.path, msg.content, (_a = msg.writeId) !== null && _a !== void 0 ? _a : undefined, (_b = this.lastWriteId) !== null && _b !== void 0 ? _b : undefined);
|
|
170
|
+
if (updated) {
|
|
171
|
+
// Notify all registered handlers for this path
|
|
172
|
+
const handlers = this.fileHandlers.get(msg.path);
|
|
173
|
+
handlers === null || handlers === void 0 ? void 0 : handlers.forEach(h => h(msg.path, msg.content));
|
|
174
|
+
}
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case 'fileDeleted': {
|
|
178
|
+
this.cache.delete(msg.path);
|
|
179
|
+
const handlers = this.deleteHandlers.get(msg.path);
|
|
180
|
+
handlers === null || handlers === void 0 ? void 0 : handlers.forEach(h => h(msg.path));
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
case 'pong': {
|
|
184
|
+
this.missedPongs = 0;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async restoreWatchers() {
|
|
190
|
+
const paths = this.cache.watchedPaths();
|
|
191
|
+
for (const path of paths) {
|
|
192
|
+
try {
|
|
193
|
+
await this.request('watchFile', { path });
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// Non-fatal — file may have been deleted during disconnect
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// ─── Core request/response ──────────────────────────────────────────────────
|
|
201
|
+
request(type, payload) {
|
|
202
|
+
return new Promise((resolve, reject) => {
|
|
203
|
+
if (this.status !== 'connected') {
|
|
204
|
+
reject(new Error(`[devlink-bridge] Not connected (status: ${this.status})`));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const id = `${type}-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
|
|
208
|
+
const timer = setTimeout(() => {
|
|
209
|
+
var _a;
|
|
210
|
+
this.pending.delete(id);
|
|
211
|
+
reject(new Error(`[devlink-bridge] Request timed out: ${type} ${(_a = payload.path) !== null && _a !== void 0 ? _a : ''}`));
|
|
212
|
+
}, this.opts.timeoutMs);
|
|
213
|
+
this.pending.set(id, {
|
|
214
|
+
resolve: resolve,
|
|
215
|
+
reject,
|
|
216
|
+
timer,
|
|
217
|
+
});
|
|
218
|
+
this.send({ type, id, ...payload });
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
send(msg) {
|
|
222
|
+
var _a;
|
|
223
|
+
if (((_a = this.ws) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
|
|
224
|
+
this.ws.send(JSON.stringify(msg));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
rejectAllPending(reason) {
|
|
228
|
+
for (const [id, pending] of this.pending) {
|
|
229
|
+
clearTimeout(pending.timer);
|
|
230
|
+
pending.reject(new Error(`[devlink-bridge] ${reason}`));
|
|
231
|
+
this.pending.delete(id);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
setStatus(status) {
|
|
235
|
+
var _a, _b;
|
|
236
|
+
if (this.status === status)
|
|
237
|
+
return;
|
|
238
|
+
this.status = status;
|
|
239
|
+
(_b = (_a = this.opts).onStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, status);
|
|
240
|
+
this.statusHandlers.forEach(h => h(status));
|
|
241
|
+
}
|
|
242
|
+
// ─── Public API ─────────────────────────────────────────────────────────────
|
|
243
|
+
/** Read a file. Returns cached content if available, otherwise fetches. */
|
|
244
|
+
async readFile(path) {
|
|
245
|
+
const cached = this.cache.getContent(path);
|
|
246
|
+
if (cached !== undefined)
|
|
247
|
+
return cached;
|
|
248
|
+
const content = await this.request('readFile', { path });
|
|
249
|
+
this.cache.set(path, content, false);
|
|
250
|
+
return content;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Write a file. Debounce on the caller side (500ms recommended).
|
|
254
|
+
* The extension will push the change back via fileChanged,
|
|
255
|
+
* but we dedup it so the editor doesn't re-render its own save.
|
|
256
|
+
*/
|
|
257
|
+
async writeFile(path, content) {
|
|
258
|
+
var _a, _b;
|
|
259
|
+
// Generate a writeId to dedup the incoming push
|
|
260
|
+
const writeId = `write-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
|
|
261
|
+
this.lastWriteId = writeId;
|
|
262
|
+
// Optimistically update cache so the editor stays responsive
|
|
263
|
+
this.cache.set(path, content, (_b = (_a = this.cache.get(path)) === null || _a === void 0 ? void 0 : _a.watchActive) !== null && _b !== void 0 ? _b : false);
|
|
264
|
+
await this.request('writeFile', { path, content, writeId });
|
|
265
|
+
}
|
|
266
|
+
/** Read a directory tree */
|
|
267
|
+
async readDir(path, recursive = false) {
|
|
268
|
+
return this.request('readDir', { path, recursive });
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Watch a file for changes pushed from the extension.
|
|
272
|
+
* Handler is called whenever the file changes on disk.
|
|
273
|
+
* Returns an unwatch function.
|
|
274
|
+
*/
|
|
275
|
+
async watchFile(path, handler) {
|
|
276
|
+
var _a;
|
|
277
|
+
if (!this.fileHandlers.has(path)) {
|
|
278
|
+
this.fileHandlers.set(path, new Set());
|
|
279
|
+
}
|
|
280
|
+
this.fileHandlers.get(path).add(handler);
|
|
281
|
+
if (!((_a = this.cache.get(path)) === null || _a === void 0 ? void 0 : _a.watchActive)) {
|
|
282
|
+
await this.request('watchFile', { path });
|
|
283
|
+
this.cache.markWatched(path);
|
|
284
|
+
}
|
|
285
|
+
return () => this.unwatchFile(path, handler);
|
|
286
|
+
}
|
|
287
|
+
/** Watch a file for deletion */
|
|
288
|
+
onFileDeleted(path, handler) {
|
|
289
|
+
if (!this.deleteHandlers.has(path)) {
|
|
290
|
+
this.deleteHandlers.set(path, new Set());
|
|
291
|
+
}
|
|
292
|
+
this.deleteHandlers.get(path).add(handler);
|
|
293
|
+
return () => {
|
|
294
|
+
var _a;
|
|
295
|
+
(_a = this.deleteHandlers.get(path)) === null || _a === void 0 ? void 0 : _a.delete(handler);
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
async unwatchFile(path, handler) {
|
|
299
|
+
const handlers = this.fileHandlers.get(path);
|
|
300
|
+
if (!handlers)
|
|
301
|
+
return;
|
|
302
|
+
handlers.delete(handler);
|
|
303
|
+
if (handlers.size === 0) {
|
|
304
|
+
this.fileHandlers.delete(path);
|
|
305
|
+
this.cache.markUnwatched(path);
|
|
306
|
+
try {
|
|
307
|
+
await this.request('unwatchFile', { path });
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
// Non-fatal
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/** Subscribe to arbitrary events from the bridge server */
|
|
315
|
+
on(type, handler) {
|
|
316
|
+
if (!this.eventHandlers.has(type)) {
|
|
317
|
+
this.eventHandlers.set(type, new Set());
|
|
318
|
+
}
|
|
319
|
+
this.eventHandlers.get(type).add(handler);
|
|
320
|
+
return () => { var _a; return (_a = this.eventHandlers.get(type)) === null || _a === void 0 ? void 0 : _a.delete(handler); };
|
|
321
|
+
}
|
|
322
|
+
/** Send an event to the bridge server without expecting a response */
|
|
323
|
+
publish(type, payload) {
|
|
324
|
+
this.send({ type, ...payload });
|
|
325
|
+
}
|
|
326
|
+
/** Subscribe to connection status changes */
|
|
327
|
+
onStatusChange(handler) {
|
|
328
|
+
this.statusHandlers.add(handler);
|
|
329
|
+
handler(this.status); // emit current status immediately
|
|
330
|
+
return () => this.statusHandlers.delete(handler);
|
|
331
|
+
}
|
|
332
|
+
/** Current connection status */
|
|
333
|
+
getStatus() {
|
|
334
|
+
return this.status;
|
|
335
|
+
}
|
|
336
|
+
/** Workspace root path (available after handshake) */
|
|
337
|
+
getWorkspaceRoot() {
|
|
338
|
+
return this.workspaceRoot;
|
|
339
|
+
}
|
|
340
|
+
/** Active port (available after connection) */
|
|
341
|
+
getActivePort() {
|
|
342
|
+
return this.activePort;
|
|
343
|
+
}
|
|
344
|
+
/** Cache snapshot for debugging */
|
|
345
|
+
getCacheSnapshot() {
|
|
346
|
+
return this.cache.snapshot();
|
|
347
|
+
}
|
|
348
|
+
/** Destroy the bridge — cleans up all timers and closes the socket */
|
|
349
|
+
destroy() {
|
|
350
|
+
var _a;
|
|
351
|
+
this.destroyed = true;
|
|
352
|
+
this.stopHeartbeat();
|
|
353
|
+
if (this.reconnectTimer)
|
|
354
|
+
clearTimeout(this.reconnectTimer);
|
|
355
|
+
this.rejectAllPending('Bridge destroyed');
|
|
356
|
+
(_a = this.ws) === null || _a === void 0 ? void 0 : _a.close();
|
|
357
|
+
this.ws = null;
|
|
358
|
+
this.setStatus('disconnected');
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/cache.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CacheEntry } from './types';
|
|
2
|
+
export declare class FileCache {
|
|
3
|
+
private store;
|
|
4
|
+
private maxSize;
|
|
5
|
+
constructor(maxSize?: number);
|
|
6
|
+
get(path: string): CacheEntry | undefined;
|
|
7
|
+
getContent(path: string): string | undefined;
|
|
8
|
+
has(path: string): boolean;
|
|
9
|
+
set(path: string, content: string, watchActive?: boolean): CacheEntry;
|
|
10
|
+
update(path: string, content: string, writeId?: string, lastWriteId?: string): boolean;
|
|
11
|
+
delete(path: string): void;
|
|
12
|
+
markWatched(path: string): void;
|
|
13
|
+
markUnwatched(path: string): void;
|
|
14
|
+
watchedPaths(): string[];
|
|
15
|
+
clear(): void;
|
|
16
|
+
size(): number;
|
|
17
|
+
snapshot(): Record<string, {
|
|
18
|
+
version: number;
|
|
19
|
+
size: number;
|
|
20
|
+
watched: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,SAAM;IAIzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,UAAU;IAoBnE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAgBtF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMjC,YAAY,IAAI,MAAM,EAAE;IAQxB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,MAAM;IAKd,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAWhF"}
|
package/dist/cache.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export class FileCache {
|
|
2
|
+
constructor(maxSize = 500) {
|
|
3
|
+
this.store = new Map();
|
|
4
|
+
this.maxSize = maxSize;
|
|
5
|
+
}
|
|
6
|
+
get(path) {
|
|
7
|
+
return this.store.get(path);
|
|
8
|
+
}
|
|
9
|
+
getContent(path) {
|
|
10
|
+
var _a;
|
|
11
|
+
return (_a = this.store.get(path)) === null || _a === void 0 ? void 0 : _a.content;
|
|
12
|
+
}
|
|
13
|
+
has(path) {
|
|
14
|
+
return this.store.has(path);
|
|
15
|
+
}
|
|
16
|
+
set(path, content, watchActive = false) {
|
|
17
|
+
// Evict oldest entry if at capacity
|
|
18
|
+
if (!this.store.has(path) && this.store.size >= this.maxSize) {
|
|
19
|
+
const oldest = this.store.keys().next().value;
|
|
20
|
+
if (oldest)
|
|
21
|
+
this.store.delete(oldest);
|
|
22
|
+
}
|
|
23
|
+
const existing = this.store.get(path);
|
|
24
|
+
const entry = {
|
|
25
|
+
content,
|
|
26
|
+
version: existing ? existing.version + 1 : 1,
|
|
27
|
+
lastFetched: Date.now(),
|
|
28
|
+
watchActive,
|
|
29
|
+
};
|
|
30
|
+
this.store.set(path, entry);
|
|
31
|
+
return entry;
|
|
32
|
+
}
|
|
33
|
+
// Called when extension pushes a file change
|
|
34
|
+
// Returns false if writeId matches the last write (dedup own saves)
|
|
35
|
+
update(path, content, writeId, lastWriteId) {
|
|
36
|
+
var _a;
|
|
37
|
+
if (writeId && writeId === lastWriteId) {
|
|
38
|
+
// This push was triggered by our own save — skip
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const existing = this.store.get(path);
|
|
42
|
+
const entry = {
|
|
43
|
+
content,
|
|
44
|
+
version: existing ? existing.version + 1 : 1,
|
|
45
|
+
lastFetched: Date.now(),
|
|
46
|
+
watchActive: (_a = existing === null || existing === void 0 ? void 0 : existing.watchActive) !== null && _a !== void 0 ? _a : true,
|
|
47
|
+
};
|
|
48
|
+
this.store.set(path, entry);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
delete(path) {
|
|
52
|
+
this.store.delete(path);
|
|
53
|
+
}
|
|
54
|
+
markWatched(path) {
|
|
55
|
+
const entry = this.store.get(path);
|
|
56
|
+
if (entry)
|
|
57
|
+
entry.watchActive = true;
|
|
58
|
+
}
|
|
59
|
+
markUnwatched(path) {
|
|
60
|
+
const entry = this.store.get(path);
|
|
61
|
+
if (entry)
|
|
62
|
+
entry.watchActive = false;
|
|
63
|
+
}
|
|
64
|
+
// Returns all currently watched paths (needed after reconnect)
|
|
65
|
+
watchedPaths() {
|
|
66
|
+
const paths = [];
|
|
67
|
+
for (const [path, entry] of this.store) {
|
|
68
|
+
if (entry.watchActive)
|
|
69
|
+
paths.push(path);
|
|
70
|
+
}
|
|
71
|
+
return paths;
|
|
72
|
+
}
|
|
73
|
+
clear() {
|
|
74
|
+
this.store.clear();
|
|
75
|
+
}
|
|
76
|
+
size() {
|
|
77
|
+
return this.store.size;
|
|
78
|
+
}
|
|
79
|
+
// Debug snapshot
|
|
80
|
+
snapshot() {
|
|
81
|
+
const out = {};
|
|
82
|
+
for (const [path, entry] of this.store) {
|
|
83
|
+
out[path] = {
|
|
84
|
+
version: entry.version,
|
|
85
|
+
size: entry.content.length,
|
|
86
|
+
watched: entry.watchActive,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,YAAY,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
|