@telepath-computer/stash 0.1.4 → 0.2.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.
Files changed (48) hide show
  1. package/README.md +102 -0
  2. package/dist/cli-main.d.ts +20 -0
  3. package/dist/cli-main.d.ts.map +1 -0
  4. package/dist/cli-main.js +445 -0
  5. package/dist/cli-main.js.map +1 -0
  6. package/dist/cli.js +1 -158
  7. package/dist/cli.js.map +1 -1
  8. package/dist/daemon.d.ts +42 -0
  9. package/dist/daemon.d.ts.map +1 -0
  10. package/dist/daemon.js +210 -0
  11. package/dist/daemon.js.map +1 -0
  12. package/dist/global-config.d.ts +7 -0
  13. package/dist/global-config.d.ts.map +1 -1
  14. package/dist/global-config.js +62 -2
  15. package/dist/global-config.js.map +1 -1
  16. package/dist/index.d.ts +4 -2
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/providers/github-provider.d.ts.map +1 -1
  21. package/dist/providers/github-provider.js +16 -17
  22. package/dist/providers/github-provider.js.map +1 -1
  23. package/dist/service/controller.d.ts +32 -0
  24. package/dist/service/controller.d.ts.map +1 -0
  25. package/dist/service/controller.js +162 -0
  26. package/dist/service/controller.js.map +1 -0
  27. package/dist/service/index.d.ts +16 -0
  28. package/dist/service/index.d.ts.map +1 -0
  29. package/dist/service/index.js +6 -0
  30. package/dist/service/index.js.map +1 -0
  31. package/dist/stash.d.ts +1 -1
  32. package/dist/stash.d.ts.map +1 -1
  33. package/dist/stash.js +10 -8
  34. package/dist/stash.js.map +1 -1
  35. package/dist/types.d.ts +8 -1
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/ui/format.d.ts.map +1 -1
  38. package/dist/ui/format.js +2 -4
  39. package/dist/ui/format.js.map +1 -1
  40. package/dist/ui/watch-renderer.d.ts +16 -0
  41. package/dist/ui/watch-renderer.d.ts.map +1 -0
  42. package/dist/ui/watch-renderer.js +59 -0
  43. package/dist/ui/watch-renderer.js.map +1 -0
  44. package/dist/watch.d.ts +64 -4
  45. package/dist/watch.d.ts.map +1 -1
  46. package/dist/watch.js +253 -214
  47. package/dist/watch.js.map +1 -1
  48. package/package.json +15 -7
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,295 @@ 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
+ this.subscription = await this.subscribeFn(this.dir, (error, events) => {
80
+ if (error) {
81
+ this.schedulePoll();
82
+ this.onStatus?.({
83
+ kind: "error",
84
+ error: error instanceof Error ? error.message : String(error),
85
+ lastSync: this.lastSuccessfulSync,
86
+ nextCheck: this.nextCheckAt,
87
+ });
88
+ return;
89
+ }
90
+ for (const event of events) {
91
+ const relPath = eventPath(this.dir, event.path);
92
+ if (!relPath) {
93
+ continue;
94
+ }
95
+ if (event.type !== "delete" && isSymlink(event.path)) {
96
+ continue;
97
+ }
98
+ this.queueFilesystemEvent();
99
+ break;
100
+ }
101
+ });
102
+ this.startSync();
103
+ }
104
+ wait() {
105
+ return this.donePromise;
106
+ }
107
+ triggerSync() {
108
+ if (this.stopping) {
61
109
  return;
62
110
  }
63
- const countdown = dim(`checking in ${formatCountdown(status.nextCheck)}`);
64
- if (status.kind === "synced") {
65
- line.update(`${green("●")} ${status.summary} ${dim("·")} ${countdown}`);
111
+ if (this.stateValue === "debouncing") {
112
+ this.clearDebounceTimer();
113
+ }
114
+ if (this.stateValue === "syncing") {
115
+ this.pendingEvents = true;
66
116
  return;
67
117
  }
68
- if (status.kind === "error") {
69
- line.update(`${red("✗")} sync failed: ${status.message} ${dim("·")} ${dim(`retrying in ${formatCountdown(status.nextCheck)}`)}`);
118
+ this.startSync();
119
+ }
120
+ async stop() {
121
+ if (!this.started) {
70
122
  return;
71
123
  }
72
- line.update(`${green("●")} ${dim("up to date")} ${dim("·")} ${countdown}`);
73
- };
74
- const clearDebounceTimer = () => {
75
- if (!debounceTimer) {
124
+ if (this.stopPromise) {
125
+ return this.stopPromise;
126
+ }
127
+ this.stopping = true;
128
+ this.clearDebounceTimer();
129
+ this.clearPollTimer();
130
+ this.stopPromise = (async () => {
131
+ if (this.subscription) {
132
+ await this.subscription.unsubscribe();
133
+ this.subscription = null;
134
+ }
135
+ if (this.syncPromise) {
136
+ await this.syncPromise;
137
+ }
138
+ if (this.doneResolve) {
139
+ this.doneResolve();
140
+ this.doneResolve = null;
141
+ }
142
+ })();
143
+ return this.stopPromise;
144
+ }
145
+ clearDebounceTimer() {
146
+ if (!this.debounceTimer) {
76
147
  return;
77
148
  }
78
- clearTimeout(debounceTimer);
79
- debounceTimer = null;
80
- };
81
- const clearPollTimer = () => {
82
- if (!pollTimer) {
149
+ clearTimeout(this.debounceTimer);
150
+ this.debounceTimer = null;
151
+ }
152
+ clearPollTimer() {
153
+ if (!this.pollTimer) {
83
154
  return;
84
155
  }
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) {
156
+ clearTimeout(this.pollTimer);
157
+ this.pollTimer = null;
158
+ }
159
+ schedulePoll() {
160
+ this.clearPollTimer();
161
+ this.nextCheckAt = new Date(Date.now() + this.pollMs);
162
+ this.pollTimer = setTimeout(() => {
163
+ if (this.stopping) {
94
164
  return;
95
165
  }
96
- if (state === "idle") {
97
- startSync();
166
+ if (this.stateValue === "idle") {
167
+ this.startSync();
98
168
  }
99
- }, pollMs);
100
- };
101
- const startDebounce = () => {
102
- clearDebounceTimer();
103
- debounceTimer = setTimeout(() => {
104
- debounceTimer = null;
105
- if (shuttingDown || state !== "debouncing") {
169
+ }, this.pollMs);
170
+ }
171
+ startDebounce() {
172
+ this.clearDebounceTimer();
173
+ this.debounceTimer = setTimeout(() => {
174
+ this.debounceTimer = null;
175
+ if (this.stopping || this.stateValue !== "debouncing") {
106
176
  return;
107
177
  }
108
- startSync();
109
- }, debounceMs);
110
- };
111
- const startSync = () => {
112
- if (shuttingDown || state === "syncing") {
178
+ this.startSync();
179
+ }, this.debounceMs);
180
+ }
181
+ startSync() {
182
+ if (this.stopping || this.stateValue === "syncing") {
113
183
  return;
114
184
  }
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...");
185
+ this.clearDebounceTimer();
186
+ this.stateValue = "syncing";
187
+ this.pendingEvents = false;
188
+ const mutations = [];
189
+ const mutationSubscription = this.stash.on("mutation", (mutation) => {
190
+ mutations.push(mutation);
191
+ });
192
+ const cleanup = this.onSyncStart?.(this.stash);
193
+ this.syncPromise = (async () => {
124
194
  try {
125
- await stash.sync();
126
- const summary = renderer.done();
127
- schedulePoll();
195
+ await this.stash.sync();
196
+ const completedAt = new Date();
197
+ this.lastSuccessfulSync = completedAt;
198
+ this.schedulePoll();
199
+ const summary = formatSummary(mutations);
128
200
  if (summary) {
129
- status = { kind: "synced", summary, nextCheck: nextCheckAt };
130
- if (!stdout.isTTY) {
131
- line.print(`✓ synced (${summary})`);
132
- }
201
+ this.onStatus?.({
202
+ kind: "synced",
203
+ summary,
204
+ nextCheck: this.nextCheckAt,
205
+ lastSync: completedAt,
206
+ error: null,
207
+ });
133
208
  }
134
209
  else {
135
- status = { kind: "checked", nextCheck: nextCheckAt };
136
- if (!stdout.isTTY) {
137
- line.print("✓ up to date");
138
- }
210
+ this.onStatus?.({
211
+ kind: "checked",
212
+ nextCheck: this.nextCheckAt,
213
+ lastSync: completedAt,
214
+ error: null,
215
+ });
139
216
  }
140
- if (pendingEvents) {
141
- state = "debouncing";
142
- startDebounce();
217
+ if (this.pendingEvents) {
218
+ this.stateValue = "debouncing";
219
+ this.startDebounce();
143
220
  }
144
221
  else {
145
- state = "idle";
222
+ this.stateValue = "idle";
146
223
  }
147
- renderStatus();
148
224
  }
149
225
  catch (error) {
150
- renderer.error(error);
151
- state = "idle";
152
- schedulePoll();
226
+ this.stateValue = "idle";
227
+ this.schedulePoll();
153
228
  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
- }
229
+ this.onStatus?.({
230
+ kind: "error",
231
+ error: message,
232
+ nextCheck: this.nextCheckAt,
233
+ lastSync: this.lastSuccessfulSync,
234
+ });
161
235
  }
162
236
  finally {
163
- sub.dispose();
164
- renderer.dispose();
237
+ mutationSubscription.dispose();
238
+ disposeCleanup(cleanup);
165
239
  }
166
240
  })();
167
- syncPromise.finally(() => {
168
- syncPromise = null;
241
+ this.syncPromise.finally(() => {
242
+ this.syncPromise = null;
169
243
  });
170
- };
171
- const queueFilesystemEvent = () => {
172
- if (shuttingDown) {
244
+ }
245
+ queueFilesystemEvent() {
246
+ if (this.stopping) {
173
247
  return;
174
248
  }
175
- if (state === "syncing") {
176
- pendingEvents = true;
249
+ if (this.stateValue === "syncing") {
250
+ this.pendingEvents = true;
177
251
  return;
178
252
  }
179
- state = "debouncing";
180
- startDebounce();
181
- };
182
- const requestStop = (force) => {
183
- if (shuttingDown) {
184
- if (force && syncPromise) {
185
- process.exit(130);
186
- }
187
- return;
253
+ this.stateValue = "debouncing";
254
+ this.startDebounce();
255
+ }
256
+ }
257
+ export async function watch(stash, options = {}) {
258
+ if (Object.keys(stash.connections).length === 0) {
259
+ throw new Error("no connection configured — run `stash connect <provider>` first");
260
+ }
261
+ const dir = options.dir ?? process.cwd();
262
+ const stdin = options.stdin ?? process.stdin;
263
+ const stdout = options.stdout ?? process.stdout;
264
+ const interactive = stdin.isTTY && stdout.isTTY;
265
+ const line = new LiveLine(stdout);
266
+ const renderer = new WatchRenderer(line, dir, stdout.isTTY);
267
+ let lastStatus = null;
268
+ const watchInstance = new Watch(stash, {
269
+ ...options,
270
+ dir,
271
+ onSyncStart: (currentStash) => renderer.startSync(currentStash),
272
+ onStatus: (status) => {
273
+ lastStatus = status;
274
+ renderer.onStatus(status);
275
+ },
276
+ });
277
+ let stopPromise = null;
278
+ const requestStop = () => {
279
+ if (!stopPromise) {
280
+ stopPromise = watchInstance.stop();
188
281
  }
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
282
  };
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) {
283
+ const onData = (chunk) => {
284
+ for (const key of chunk.toString("utf8")) {
285
+ if (key === ".") {
286
+ watchInstance.triggerSync();
225
287
  continue;
226
288
  }
227
- if (event.type !== "delete" && isSymlink(event.path)) {
228
- continue;
289
+ if (key === "q" || key === CTRL_C) {
290
+ requestStop();
291
+ return;
229
292
  }
230
- queueFilesystemEvent();
231
- break;
232
293
  }
233
- });
234
- resources.add(asDisposable(() => {
235
- if (subscription) {
236
- void subscription.unsubscribe();
294
+ };
295
+ const onSigInt = () => {
296
+ requestStop();
297
+ };
298
+ let tickTimer = null;
299
+ try {
300
+ if (interactive) {
301
+ stdin.setRawMode?.(true);
302
+ stdin.resume();
303
+ stdin.on("data", onData);
237
304
  }
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;
305
+ process.on("SIGINT", onSigInt);
306
+ if (stdout.isTTY) {
307
+ tickTimer = setInterval(() => {
308
+ if (lastStatus && watchInstance.state !== "syncing") {
309
+ renderer.onStatus(lastStatus);
254
310
  }
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
- }));
311
+ }, 1_000);
312
+ }
313
+ renderer.printWatching();
314
+ await watchInstance.start();
315
+ await watchInstance.wait();
316
+ renderer.printStopped();
268
317
  }
269
- const onSigInt = () => {
270
- requestStop(true);
271
- };
272
- process.on("SIGINT", onSigInt);
273
- resources.add(asDisposable(() => {
318
+ finally {
319
+ if (tickTimer) {
320
+ clearInterval(tickTimer);
321
+ }
322
+ if (interactive) {
323
+ stdin.off("data", onData);
324
+ stdin.setRawMode?.(false);
325
+ }
274
326
  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
- }));
327
+ renderer.dispose();
286
328
  }
287
- line.print(dim(`watching ${dir} (. to sync, q to quit)`));
288
- startSync();
289
- await done;
290
329
  }
291
330
  //# 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telepath-computer/stash",
3
- "version": "0.1.4",
3
+ "version": "0.2.0",
4
4
  "description": "Conflict-free synced folders",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,8 +16,11 @@
16
16
  "prepublishOnly": "npm run build",
17
17
  "stash": "node ./src/cli.ts",
18
18
  "test": "node --test tests/unit/*.test.ts tests/integration/*.test.ts",
19
- "test:e2e": "node --test tests/e2e/*.test.ts",
20
- "test:all": "npm test && npm run test:e2e"
19
+ "test:e2e": "node --env-file-if-exists=.env --test tests/e2e/*.test.ts",
20
+ "test:all": "npm test && npm run test:e2e",
21
+ "lint": "eslint src/ tests/",
22
+ "format": "prettier --write src/ tests/ docs/",
23
+ "format:check": "prettier --check src/ tests/ docs/"
21
24
  },
22
25
  "keywords": [
23
26
  "sync",
@@ -27,8 +30,7 @@
27
30
  ],
28
31
  "repository": {
29
32
  "type": "git",
30
- "url": "git+https://github.com/telepath-computer/stash.git",
31
- "directory": "code"
33
+ "url": "git+https://github.com/telepath-computer/stash.git"
32
34
  },
33
35
  "license": "ISC",
34
36
  "dependencies": {
@@ -37,10 +39,16 @@
37
39
  "@rupertsworld/disposable": "^0.1.0",
38
40
  "@rupertsworld/emitter": "^0.1.0",
39
41
  "commander": "^14.0.3",
40
- "diff-match-patch": "^1.0.5"
42
+ "diff-match-patch": "^1.0.5",
43
+ "ora": "^9.3.0"
41
44
  },
42
45
  "devDependencies": {
46
+ "@eslint/js": "^10.0.1",
43
47
  "@types/node": "^25.3.3",
44
- "typescript": "^5.9.3"
48
+ "eslint": "^10.0.3",
49
+ "eslint-config-prettier": "^10.1.8",
50
+ "prettier": "^3.8.1",
51
+ "typescript": "^5.9.3",
52
+ "typescript-eslint": "^8.57.0"
45
53
  }
46
54
  }