@telepath-computer/stash 0.1.5 → 0.2.2

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/watch.js CHANGED
@@ -1,16 +1,22 @@
1
1
  import watcher from "@parcel/watcher";
2
- import { DisposableGroup } from "@rupertsworld/disposable";
3
2
  import { lstatSync } from "node:fs";
4
3
  import { relative } from "node:path";
5
4
  import { isTrackedPath } from "./utils/is-tracked-path.js";
6
- import { formatCountdown } from "./ui/format.js";
5
+ import { formatSummary } from "./ui/format.js";
7
6
  import { LiveLine } from "./ui/live-line.js";
8
- import { SyncRenderer } from "./ui/sync-renderer.js";
7
+ import { WatchRenderer } from "./ui/watch-renderer.js";
9
8
  const DEFAULT_DEBOUNCE_MS = 1_000;
10
- const DEFAULT_POLL_MS = 30_000;
9
+ const DEFAULT_POLL_MS = 10_000;
11
10
  const CTRL_C = "\u0003";
12
- function asDisposable(dispose) {
13
- return { dispose };
11
+ function disposeCleanup(cleanup) {
12
+ if (!cleanup) {
13
+ return;
14
+ }
15
+ if (typeof cleanup === "function") {
16
+ cleanup();
17
+ return;
18
+ }
19
+ cleanup.dispose();
14
20
  }
15
21
  function eventPath(dir, absolutePath) {
16
22
  const relPath = relative(dir, absolutePath).split("\\").join("/");
@@ -30,262 +36,301 @@ function isSymlink(path) {
30
36
  return false;
31
37
  }
32
38
  }
33
- export async function watch(stash, options = {}) {
34
- if (Object.keys(stash.connections).length === 0) {
35
- throw new Error("no connection configured — run `stash connect <provider>` first");
36
- }
37
- const dir = options.dir ?? process.cwd();
38
- const stdin = options.stdin ?? process.stdin;
39
- const stdout = options.stdout ?? process.stdout;
40
- const debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;
41
- const pollMs = options.pollMs ?? DEFAULT_POLL_MS;
42
- const resources = new DisposableGroup();
43
- const line = resources.add(new LiveLine(stdout));
44
- const { dim, green, red } = line.colors;
45
- let state = "idle";
46
- let pendingEvents = false;
47
- let debounceTimer = null;
48
- let pollTimer = null;
49
- let tickTimer = null;
50
- let syncPromise = null;
51
- let subscription = null;
52
- let shuttingDown = false;
53
- let status = null;
54
- let resolveDone = null;
55
- const done = new Promise((resolve) => {
56
- resolveDone = resolve;
39
+ export class Watch {
40
+ stash;
41
+ dir;
42
+ debounceMs;
43
+ pollMs;
44
+ subscribeFn;
45
+ onSyncStart;
46
+ onStatus;
47
+ doneResolve = null;
48
+ donePromise = new Promise((resolve) => {
49
+ this.doneResolve = resolve;
57
50
  });
58
- const interactive = stdin.isTTY && stdout.isTTY;
59
- const renderStatus = () => {
60
- if (!stdout.isTTY || state === "syncing" || !status) {
51
+ stateValue = "idle";
52
+ started = false;
53
+ stopping = false;
54
+ pendingEvents = false;
55
+ debounceTimer = null;
56
+ pollTimer = null;
57
+ subscription = null;
58
+ syncPromise = null;
59
+ stopPromise = null;
60
+ lastSuccessfulSync = null;
61
+ nextCheckAt = new Date(Date.now() + DEFAULT_POLL_MS);
62
+ constructor(stash, options = {}) {
63
+ this.stash = stash;
64
+ this.dir = options.dir ?? process.cwd();
65
+ this.debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;
66
+ this.pollMs = options.pollMs ?? DEFAULT_POLL_MS;
67
+ this.subscribeFn = options.subscribe ?? watcher.subscribe;
68
+ this.onSyncStart = options.onSyncStart;
69
+ this.onStatus = options.onStatus;
70
+ }
71
+ get state() {
72
+ return this.stateValue;
73
+ }
74
+ async start() {
75
+ if (this.started) {
76
+ return;
77
+ }
78
+ this.started = true;
79
+ try {
80
+ this.subscription = await this.subscribeFn(this.dir, (error, events) => {
81
+ if (error) {
82
+ this.schedulePoll();
83
+ this.onStatus?.({
84
+ kind: "error",
85
+ error: error instanceof Error ? error.message : String(error),
86
+ lastSync: this.lastSuccessfulSync,
87
+ nextCheck: this.nextCheckAt,
88
+ });
89
+ return;
90
+ }
91
+ for (const event of events) {
92
+ const relPath = eventPath(this.dir, event.path);
93
+ if (!relPath) {
94
+ continue;
95
+ }
96
+ if (event.type !== "delete" && isSymlink(event.path)) {
97
+ continue;
98
+ }
99
+ this.queueFilesystemEvent();
100
+ break;
101
+ }
102
+ });
103
+ }
104
+ catch {
105
+ // Native FS watcher unavailable (e.g. Docker, missing inotify).
106
+ // Continue in poll-only mode — schedulePoll will still fire.
107
+ }
108
+ this.startSync();
109
+ }
110
+ wait() {
111
+ return this.donePromise;
112
+ }
113
+ triggerSync() {
114
+ if (this.stopping) {
61
115
  return;
62
116
  }
63
- const countdown = dim(`checking in ${formatCountdown(status.nextCheck)}`);
64
- if (status.kind === "synced") {
65
- line.update(`${green("●")} ${status.summary} ${dim("·")} ${countdown}`);
117
+ if (this.stateValue === "debouncing") {
118
+ this.clearDebounceTimer();
119
+ }
120
+ if (this.stateValue === "syncing") {
121
+ this.pendingEvents = true;
66
122
  return;
67
123
  }
68
- if (status.kind === "error") {
69
- line.update(`${red("✗")} sync failed: ${status.message} ${dim("·")} ${dim(`retrying in ${formatCountdown(status.nextCheck)}`)}`);
124
+ this.startSync();
125
+ }
126
+ async stop() {
127
+ if (!this.started) {
70
128
  return;
71
129
  }
72
- line.update(`${green("●")} ${dim("up to date")} ${dim("·")} ${countdown}`);
73
- };
74
- const clearDebounceTimer = () => {
75
- if (!debounceTimer) {
130
+ if (this.stopPromise) {
131
+ return this.stopPromise;
132
+ }
133
+ this.stopping = true;
134
+ this.clearDebounceTimer();
135
+ this.clearPollTimer();
136
+ this.stopPromise = (async () => {
137
+ if (this.subscription) {
138
+ await this.subscription.unsubscribe();
139
+ this.subscription = null;
140
+ }
141
+ if (this.syncPromise) {
142
+ await this.syncPromise;
143
+ }
144
+ if (this.doneResolve) {
145
+ this.doneResolve();
146
+ this.doneResolve = null;
147
+ }
148
+ })();
149
+ return this.stopPromise;
150
+ }
151
+ clearDebounceTimer() {
152
+ if (!this.debounceTimer) {
76
153
  return;
77
154
  }
78
- clearTimeout(debounceTimer);
79
- debounceTimer = null;
80
- };
81
- const clearPollTimer = () => {
82
- if (!pollTimer) {
155
+ clearTimeout(this.debounceTimer);
156
+ this.debounceTimer = null;
157
+ }
158
+ clearPollTimer() {
159
+ if (!this.pollTimer) {
83
160
  return;
84
161
  }
85
- clearTimeout(pollTimer);
86
- pollTimer = null;
87
- };
88
- let nextCheckAt = new Date(Date.now() + pollMs);
89
- const schedulePoll = () => {
90
- clearPollTimer();
91
- nextCheckAt = new Date(Date.now() + pollMs);
92
- pollTimer = setTimeout(() => {
93
- if (shuttingDown) {
162
+ clearTimeout(this.pollTimer);
163
+ this.pollTimer = null;
164
+ }
165
+ schedulePoll() {
166
+ this.clearPollTimer();
167
+ this.nextCheckAt = new Date(Date.now() + this.pollMs);
168
+ this.pollTimer = setTimeout(() => {
169
+ if (this.stopping) {
94
170
  return;
95
171
  }
96
- if (state === "idle") {
97
- startSync();
172
+ if (this.stateValue === "idle") {
173
+ this.startSync();
98
174
  }
99
- }, pollMs);
100
- };
101
- const startDebounce = () => {
102
- clearDebounceTimer();
103
- debounceTimer = setTimeout(() => {
104
- debounceTimer = null;
105
- if (shuttingDown || state !== "debouncing") {
175
+ }, this.pollMs);
176
+ }
177
+ startDebounce() {
178
+ this.clearDebounceTimer();
179
+ this.debounceTimer = setTimeout(() => {
180
+ this.debounceTimer = null;
181
+ if (this.stopping || this.stateValue !== "debouncing") {
106
182
  return;
107
183
  }
108
- startSync();
109
- }, debounceMs);
110
- };
111
- const startSync = () => {
112
- if (shuttingDown || state === "syncing") {
184
+ this.startSync();
185
+ }, this.debounceMs);
186
+ }
187
+ startSync() {
188
+ if (this.stopping || this.stateValue === "syncing") {
113
189
  return;
114
190
  }
115
- clearDebounceTimer();
116
- state = "syncing";
117
- pendingEvents = false;
118
- syncPromise = (async () => {
119
- const renderer = new SyncRenderer(line);
120
- const sub = stash.on("mutation", (mutation) => {
121
- renderer.onMutation(mutation);
122
- });
123
- line.startSpinner("checking...");
191
+ this.clearDebounceTimer();
192
+ this.stateValue = "syncing";
193
+ this.pendingEvents = false;
194
+ const mutations = [];
195
+ const mutationSubscription = this.stash.on("mutation", (mutation) => {
196
+ mutations.push(mutation);
197
+ });
198
+ const cleanup = this.onSyncStart?.(this.stash);
199
+ this.syncPromise = (async () => {
124
200
  try {
125
- await stash.sync();
126
- const summary = renderer.done();
127
- schedulePoll();
201
+ await this.stash.sync();
202
+ const completedAt = new Date();
203
+ this.lastSuccessfulSync = completedAt;
204
+ this.schedulePoll();
205
+ const summary = formatSummary(mutations);
128
206
  if (summary) {
129
- status = { kind: "synced", summary, nextCheck: nextCheckAt };
130
- if (!stdout.isTTY) {
131
- line.print(`✓ synced (${summary})`);
132
- }
207
+ this.onStatus?.({
208
+ kind: "synced",
209
+ summary,
210
+ nextCheck: this.nextCheckAt,
211
+ lastSync: completedAt,
212
+ error: null,
213
+ });
133
214
  }
134
215
  else {
135
- status = { kind: "checked", nextCheck: nextCheckAt };
136
- if (!stdout.isTTY) {
137
- line.print("✓ up to date");
138
- }
216
+ this.onStatus?.({
217
+ kind: "checked",
218
+ nextCheck: this.nextCheckAt,
219
+ lastSync: completedAt,
220
+ error: null,
221
+ });
139
222
  }
140
- if (pendingEvents) {
141
- state = "debouncing";
142
- startDebounce();
223
+ if (this.pendingEvents) {
224
+ this.stateValue = "debouncing";
225
+ this.startDebounce();
143
226
  }
144
227
  else {
145
- state = "idle";
228
+ this.stateValue = "idle";
146
229
  }
147
- renderStatus();
148
230
  }
149
231
  catch (error) {
150
- renderer.error(error);
151
- state = "idle";
152
- schedulePoll();
232
+ this.stateValue = "idle";
233
+ this.schedulePoll();
153
234
  const message = error instanceof Error ? error.message : String(error);
154
- status = { kind: "error", message, nextCheck: nextCheckAt };
155
- if (stdout.isTTY) {
156
- renderStatus();
157
- }
158
- else {
159
- line.print(`${red("✗")} sync failed: ${message}`);
160
- }
235
+ this.onStatus?.({
236
+ kind: "error",
237
+ error: message,
238
+ nextCheck: this.nextCheckAt,
239
+ lastSync: this.lastSuccessfulSync,
240
+ });
161
241
  }
162
242
  finally {
163
- sub.dispose();
164
- renderer.dispose();
243
+ mutationSubscription.dispose();
244
+ disposeCleanup(cleanup);
165
245
  }
166
246
  })();
167
- syncPromise.finally(() => {
168
- syncPromise = null;
247
+ this.syncPromise.finally(() => {
248
+ this.syncPromise = null;
169
249
  });
170
- };
171
- const queueFilesystemEvent = () => {
172
- if (shuttingDown) {
250
+ }
251
+ queueFilesystemEvent() {
252
+ if (this.stopping) {
173
253
  return;
174
254
  }
175
- if (state === "syncing") {
176
- pendingEvents = true;
255
+ if (this.stateValue === "syncing") {
256
+ this.pendingEvents = true;
177
257
  return;
178
258
  }
179
- state = "debouncing";
180
- startDebounce();
181
- };
182
- const requestStop = (force) => {
183
- if (shuttingDown) {
184
- if (force && syncPromise) {
185
- process.exit(130);
186
- }
187
- return;
259
+ this.stateValue = "debouncing";
260
+ this.startDebounce();
261
+ }
262
+ }
263
+ export async function watch(stash, options = {}) {
264
+ if (Object.keys(stash.connections).length === 0) {
265
+ throw new Error("no connection configured — run `stash connect <provider>` first");
266
+ }
267
+ const dir = options.dir ?? process.cwd();
268
+ const stdin = options.stdin ?? process.stdin;
269
+ const stdout = options.stdout ?? process.stdout;
270
+ const interactive = stdin.isTTY && stdout.isTTY;
271
+ const line = new LiveLine(stdout);
272
+ const renderer = new WatchRenderer(line, dir, stdout.isTTY);
273
+ let lastStatus = null;
274
+ const watchInstance = new Watch(stash, {
275
+ ...options,
276
+ dir,
277
+ onSyncStart: (currentStash) => renderer.startSync(currentStash),
278
+ onStatus: (status) => {
279
+ lastStatus = status;
280
+ renderer.onStatus(status);
281
+ },
282
+ });
283
+ let stopPromise = null;
284
+ const requestStop = () => {
285
+ if (!stopPromise) {
286
+ stopPromise = watchInstance.stop();
188
287
  }
189
- shuttingDown = true;
190
- clearDebounceTimer();
191
- clearPollTimer();
192
- void (async () => {
193
- if (subscription) {
194
- await subscription.unsubscribe();
195
- }
196
- if (syncPromise) {
197
- await syncPromise;
198
- }
199
- if (interactive) {
200
- stdin.setRawMode?.(false);
201
- }
202
- line.print(dim(`stopped watching ${dir}`));
203
- resources.dispose();
204
- if (resolveDone) {
205
- resolveDone();
206
- }
207
- })();
208
288
  };
209
- subscription = await watcher.subscribe(dir, (error, events) => {
210
- if (error) {
211
- const message = error instanceof Error ? error.message : String(error);
212
- schedulePoll();
213
- status = { kind: "error", message, nextCheck: nextCheckAt };
214
- if (stdout.isTTY) {
215
- renderStatus();
216
- }
217
- else {
218
- line.print(`${red("✗")} watcher error: ${message}`);
219
- }
220
- return;
221
- }
222
- for (const event of events) {
223
- const relPath = eventPath(dir, event.path);
224
- if (!relPath) {
289
+ const onData = (chunk) => {
290
+ for (const key of chunk.toString("utf8")) {
291
+ if (key === ".") {
292
+ watchInstance.triggerSync();
225
293
  continue;
226
294
  }
227
- if (event.type !== "delete" && isSymlink(event.path)) {
228
- continue;
295
+ if (key === "q" || key === CTRL_C) {
296
+ requestStop();
297
+ return;
229
298
  }
230
- queueFilesystemEvent();
231
- break;
232
299
  }
233
- });
234
- resources.add(asDisposable(() => {
235
- if (subscription) {
236
- void subscription.unsubscribe();
300
+ };
301
+ const onSigInt = () => {
302
+ requestStop();
303
+ };
304
+ let tickTimer = null;
305
+ try {
306
+ if (interactive) {
307
+ stdin.setRawMode?.(true);
308
+ stdin.resume();
309
+ stdin.on("data", onData);
237
310
  }
238
- }));
239
- if (interactive) {
240
- stdin.setRawMode?.(true);
241
- stdin.resume();
242
- const onData = (chunk) => {
243
- for (const key of chunk.toString("utf8")) {
244
- if (key === "." && !shuttingDown) {
245
- if (state === "debouncing") {
246
- clearDebounceTimer();
247
- }
248
- if (state === "syncing") {
249
- pendingEvents = true;
250
- continue;
251
- }
252
- startSync();
253
- continue;
311
+ process.on("SIGINT", onSigInt);
312
+ if (stdout.isTTY) {
313
+ tickTimer = setInterval(() => {
314
+ if (lastStatus && watchInstance.state !== "syncing") {
315
+ renderer.onStatus(lastStatus);
254
316
  }
255
- if (key === "q") {
256
- requestStop(false);
257
- return;
258
- }
259
- if (key === CTRL_C) {
260
- requestStop(true);
261
- }
262
- }
263
- };
264
- stdin.on("data", onData);
265
- resources.add(asDisposable(() => {
266
- stdin.off("data", onData);
267
- }));
317
+ }, 1_000);
318
+ }
319
+ renderer.printWatching();
320
+ await watchInstance.start();
321
+ await watchInstance.wait();
322
+ renderer.printStopped();
268
323
  }
269
- const onSigInt = () => {
270
- requestStop(true);
271
- };
272
- process.on("SIGINT", onSigInt);
273
- resources.add(asDisposable(() => {
324
+ finally {
325
+ if (tickTimer) {
326
+ clearInterval(tickTimer);
327
+ }
328
+ if (interactive) {
329
+ stdin.off("data", onData);
330
+ stdin.setRawMode?.(false);
331
+ }
274
332
  process.off("SIGINT", onSigInt);
275
- }));
276
- if (stdout.isTTY) {
277
- tickTimer = setInterval(() => {
278
- renderStatus();
279
- }, 1_000);
280
- resources.add(asDisposable(() => {
281
- if (tickTimer) {
282
- clearInterval(tickTimer);
283
- tickTimer = null;
284
- }
285
- }));
333
+ renderer.dispose();
286
334
  }
287
- line.print(dim(`watching ${dir} (. to sync, q to quit)`));
288
- startSync();
289
- await done;
290
335
  }
291
336
  //# sourceMappingURL=watch.js.map
package/dist/watch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}