@monotykamary/localterm-server 2.4.0 → 2.4.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.
- package/dist/git-diff-watcher.d.ts +1 -1
- package/dist/git-diff-watcher.d.ts.map +1 -1
- package/dist/git-diff-watcher.js +13 -15
- package/dist/git-diff-watcher.js.map +1 -1
- package/dist/utils/throttle.d.ts +13 -0
- package/dist/utils/throttle.d.ts.map +1 -0
- package/dist/utils/throttle.js +53 -0
- package/dist/utils/throttle.js.map +1 -0
- package/package.json +1 -1
|
@@ -22,7 +22,7 @@ export declare const buildGitSnapshot: (gitDir: string) => GitSnapshot | null;
|
|
|
22
22
|
export declare const classifyGitChanges: (previous: GitSnapshot, current: GitSnapshot) => GitRefEventName[];
|
|
23
23
|
export declare class GitDiffWatcher extends EventEmitter<GitDiffWatcherEvents> {
|
|
24
24
|
private watchers;
|
|
25
|
-
private
|
|
25
|
+
private throttle;
|
|
26
26
|
private disposed;
|
|
27
27
|
private gitDir;
|
|
28
28
|
private lastSnapshot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-diff-watcher.d.ts","sourceRoot":"","sources":["../src/git-diff-watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"git-diff-watcher.d.ts","sourceRoot":"","sources":["../src/git-diff-watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsC3C,eAAO,MAAM,4BAA4B,gPAgBC,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpF,MAAM,MAAM,oBAAoB,GAAG;KAChC,CAAC,IAAI,uBAAuB,GAAG,EAAE;CACnC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAkBD,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,WAAW,GAAG,IAwC/D,CAAC;AA8CF,eAAO,MAAM,kBAAkB,GAC7B,UAAU,WAAW,EACrB,SAAS,WAAW,KACnB,eAAe,EAiCjB,CAAC;AAEF,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAA4B;IAEhD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA2CxB,IAAI,IAAI,IAAI;IAaZ,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,qBAAqB;CAY9B"}
|
package/dist/git-diff-watcher.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { EventEmitter } from "node:events";
|
|
4
4
|
import { GIT_DIRTY_THROTTLE_MS } from "./constants.js";
|
|
5
|
+
import { Throttle } from "./utils/throttle.js";
|
|
5
6
|
const resolveGitDir = (cwd) => {
|
|
6
7
|
let current = path.resolve(cwd);
|
|
7
8
|
while (true) {
|
|
@@ -184,7 +185,7 @@ export const classifyGitChanges = (previous, current) => {
|
|
|
184
185
|
};
|
|
185
186
|
export class GitDiffWatcher extends EventEmitter {
|
|
186
187
|
watchers = [];
|
|
187
|
-
|
|
188
|
+
throttle = null;
|
|
188
189
|
disposed = false;
|
|
189
190
|
gitDir = null;
|
|
190
191
|
lastSnapshot = null;
|
|
@@ -197,6 +198,14 @@ export class GitDiffWatcher extends EventEmitter {
|
|
|
197
198
|
const { gitDir, repoRoot } = result;
|
|
198
199
|
this.gitDir = gitDir;
|
|
199
200
|
this.lastSnapshot = buildGitSnapshot(gitDir);
|
|
201
|
+
// Leading + trailing throttle: emit `git-dirty` on the first fs event of a
|
|
202
|
+
// burst, then once more after the burst settles so the final tree state is
|
|
203
|
+
// always signaled (a burst often starts mid-rename, so the leading snapshot
|
|
204
|
+
// alone can leave the diff cache stale).
|
|
205
|
+
this.throttle = new Throttle(() => {
|
|
206
|
+
this.emit("git-dirty");
|
|
207
|
+
this.emitRefEventsIfNeeded();
|
|
208
|
+
}, GIT_DIRTY_THROTTLE_MS);
|
|
200
209
|
const watch = (target, options) => {
|
|
201
210
|
try {
|
|
202
211
|
const watcher = fs.watch(target, options ?? {}, (event) => {
|
|
@@ -224,10 +233,8 @@ export class GitDiffWatcher extends EventEmitter {
|
|
|
224
233
|
}
|
|
225
234
|
}
|
|
226
235
|
stop() {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
this.throttleTimer = null;
|
|
230
|
-
}
|
|
236
|
+
this.throttle?.dispose();
|
|
237
|
+
this.throttle = null;
|
|
231
238
|
for (const watcher of this.watchers) {
|
|
232
239
|
try {
|
|
233
240
|
watcher.close();
|
|
@@ -244,16 +251,7 @@ export class GitDiffWatcher extends EventEmitter {
|
|
|
244
251
|
this.removeAllListeners();
|
|
245
252
|
}
|
|
246
253
|
throttledEmit() {
|
|
247
|
-
|
|
248
|
-
return;
|
|
249
|
-
if (!this.disposed) {
|
|
250
|
-
this.emit("git-dirty");
|
|
251
|
-
this.emitRefEventsIfNeeded();
|
|
252
|
-
}
|
|
253
|
-
this.throttleTimer = setTimeout(() => {
|
|
254
|
-
this.throttleTimer = null;
|
|
255
|
-
}, GIT_DIRTY_THROTTLE_MS);
|
|
256
|
-
this.throttleTimer.unref?.();
|
|
254
|
+
this.throttle?.trigger();
|
|
257
255
|
}
|
|
258
256
|
emitRefEventsIfNeeded() {
|
|
259
257
|
if (!this.gitDir)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-diff-watcher.js","sourceRoot":"","sources":["../src/git-diff-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"git-diff-watcher.js","sourceRoot":"","sources":["../src/git-diff-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class Throttle {
|
|
2
|
+
private readonly callback;
|
|
3
|
+
private readonly intervalMs;
|
|
4
|
+
private timer;
|
|
5
|
+
private trailingPending;
|
|
6
|
+
private disposed;
|
|
7
|
+
constructor(callback: () => void, intervalMs: number);
|
|
8
|
+
trigger(): void;
|
|
9
|
+
private flush;
|
|
10
|
+
reset(): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=throttle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../src/utils/throttle.ts"],"names":[],"mappings":"AAQA,qBAAa,QAAQ;IAMjB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN7B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAS;gBAGN,QAAQ,EAAE,MAAM,IAAI,EACpB,UAAU,EAAE,MAAM;IAGrC,OAAO,IAAI,IAAI;IAWf,OAAO,CAAC,KAAK;IAWb,KAAK,IAAI,IAAI;IAQb,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Leading-edge throttle with a trailing flush.
|
|
2
|
+
//
|
|
3
|
+
// The first `trigger()` after a quiet period runs the callback immediately
|
|
4
|
+
// (low latency for the start of a burst). Further `trigger()` calls within the
|
|
5
|
+
// interval are coalesced and flushed exactly once when the interval elapses so
|
|
6
|
+
// the FINAL state of the burst is always signaled. A leading-edge-only
|
|
7
|
+
// throttle would drop that trailing flush and leave consumers reading a
|
|
8
|
+
// snapshot taken mid-burst (e.g. a partial write before an atomic rename).
|
|
9
|
+
export class Throttle {
|
|
10
|
+
callback;
|
|
11
|
+
intervalMs;
|
|
12
|
+
timer = null;
|
|
13
|
+
trailingPending = false;
|
|
14
|
+
disposed = false;
|
|
15
|
+
constructor(callback, intervalMs) {
|
|
16
|
+
this.callback = callback;
|
|
17
|
+
this.intervalMs = intervalMs;
|
|
18
|
+
}
|
|
19
|
+
trigger() {
|
|
20
|
+
if (this.disposed)
|
|
21
|
+
return;
|
|
22
|
+
if (this.timer !== null) {
|
|
23
|
+
this.trailingPending = true;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.callback();
|
|
27
|
+
this.timer = setTimeout(() => this.flush(), this.intervalMs);
|
|
28
|
+
this.timer.unref?.();
|
|
29
|
+
}
|
|
30
|
+
flush() {
|
|
31
|
+
this.timer = null;
|
|
32
|
+
if (!this.trailingPending)
|
|
33
|
+
return;
|
|
34
|
+
this.trailingPending = false;
|
|
35
|
+
// Re-enter trigger so a burst that's still ongoing starts a fresh window
|
|
36
|
+
// rather than collapsing to a single trailing flush.
|
|
37
|
+
this.trigger();
|
|
38
|
+
}
|
|
39
|
+
// Cancel any pending trailing flush without running it. Used on stop/restart
|
|
40
|
+
// so a stale callback can't fire into a new state.
|
|
41
|
+
reset() {
|
|
42
|
+
if (this.timer !== null) {
|
|
43
|
+
clearTimeout(this.timer);
|
|
44
|
+
this.timer = null;
|
|
45
|
+
}
|
|
46
|
+
this.trailingPending = false;
|
|
47
|
+
}
|
|
48
|
+
dispose() {
|
|
49
|
+
this.disposed = true;
|
|
50
|
+
this.reset();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=throttle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../src/utils/throttle.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,+EAA+E;AAC/E,uEAAuE;AACvE,wEAAwE;AACxE,2EAA2E;AAC3E,MAAM,OAAO,QAAQ;IAMA;IACA;IANX,KAAK,GAA0B,IAAI,CAAC;IACpC,eAAe,GAAG,KAAK,CAAC;IACxB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACmB,QAAoB,EACpB,UAAkB;QADlB,aAAQ,GAAR,QAAQ,CAAY;QACpB,eAAU,GAAV,UAAU,CAAQ;IAClC,CAAC;IAEJ,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAClC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,yEAAyE;QACzE,qDAAqD;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,6EAA6E;IAC7E,mDAAmD;IACnD,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
|