@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/cli.js CHANGED
@@ -1,162 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { Command, Option } from "commander";
3
- import { input, password } from "@inquirer/prompts";
4
- import { readGlobalConfig, writeGlobalConfig } from "./global-config.js";
5
- import { providers } from "./providers/index.js";
6
- import { Stash } from "./stash.js";
7
- import { LiveLine } from "./ui/live-line.js";
8
- import { SyncRenderer } from "./ui/sync-renderer.js";
9
- import { watch as watchStash } from "./watch.js";
10
- function getProvider(name) {
11
- const provider = providers[name];
12
- if (!provider) {
13
- throw new Error(`Unknown provider: ${name}`);
14
- }
15
- return provider;
16
- }
17
- async function promptField(field) {
18
- if (field.secret) {
19
- return password({ message: field.label });
20
- }
21
- return input({ message: field.label });
22
- }
23
- async function collectFields(fields, valuesFromCli, current = {}) {
24
- const values = { ...current };
25
- for (const field of fields) {
26
- if (values[field.name]) {
27
- continue;
28
- }
29
- if (valuesFromCli[field.name]) {
30
- values[field.name] = valuesFromCli[field.name];
31
- continue;
32
- }
33
- values[field.name] = await promptField(field);
34
- }
35
- return values;
36
- }
37
- async function runSetup(providerName, valuesFromCli) {
38
- const provider = getProvider(providerName);
39
- const globalConfig = await readGlobalConfig();
40
- const values = await collectFields(provider.spec.setup, valuesFromCli, globalConfig[providerName] ?? {});
41
- globalConfig[providerName] = values;
42
- await writeGlobalConfig(globalConfig);
43
- console.log(`Configured ${providerName}.`);
44
- }
45
- async function runConnect(providerName, valuesFromCli) {
46
- const provider = getProvider(providerName);
47
- const globalConfig = await readGlobalConfig();
48
- const setupValues = await collectFields(provider.spec.setup, valuesFromCli, globalConfig[providerName] ?? {});
49
- globalConfig[providerName] = setupValues;
50
- await writeGlobalConfig(globalConfig);
51
- const stash = await Stash.init(process.cwd(), globalConfig);
52
- const connectValues = await collectFields(provider.spec.connect, valuesFromCli);
53
- await stash.connect(providerName, connectValues);
54
- console.log(`Connected ${providerName}.`);
55
- }
56
- async function runDisconnect(providerName) {
57
- const stash = await Stash.load(process.cwd(), await readGlobalConfig());
58
- await stash.disconnect(providerName);
59
- console.log(`Disconnected ${providerName}.`);
60
- }
61
- async function runSync() {
62
- const stash = await Stash.load(process.cwd(), await readGlobalConfig());
63
- const line = new LiveLine(process.stdout);
64
- const { green, red } = line.colors;
65
- const renderer = new SyncRenderer(line);
66
- const subscription = stash.on("mutation", (mutation) => {
67
- renderer.onMutation(mutation);
68
- });
69
- line.startSpinner("checking...");
70
- try {
71
- await stash.sync();
72
- const summary = renderer.done();
73
- line.print(summary ? `${green("✓")} synced (${summary})` : `${green("✓")} up to date`);
74
- }
75
- catch (error) {
76
- renderer.error(error);
77
- line.print(`${red("✗")} sync failed: ${error instanceof Error ? error.message : String(error)}`);
78
- process.exitCode = 1;
79
- }
80
- finally {
81
- subscription.dispose();
82
- renderer.dispose();
83
- line.dispose();
84
- }
85
- }
86
- async function runWatch() {
87
- const dir = process.cwd();
88
- const stash = await Stash.load(dir, await readGlobalConfig());
89
- if (Object.keys(stash.connections).length === 0) {
90
- throw new Error("no connection configured — run `stash connect <provider>` first");
91
- }
92
- await watchStash(stash, { dir, stdin: process.stdin, stdout: process.stdout });
93
- }
94
- async function runStatus() {
95
- const stash = await Stash.load(process.cwd(), await readGlobalConfig());
96
- const status = stash.status();
97
- console.log("Connections:");
98
- console.log(JSON.stringify(stash.connections, null, 2));
99
- console.log("Changes:");
100
- console.log(JSON.stringify(status, null, 2));
101
- }
102
- function addFieldOptions(command, fields) {
103
- for (const field of fields) {
104
- command.addOption(new Option(`--${field.name} <value>`, field.label));
105
- }
106
- }
107
- async function main(argv = process.argv) {
108
- const program = new Command()
109
- .name("stash")
110
- .description("Conflict-free synced folders")
111
- .showHelpAfterError();
112
- const setupCommand = program
113
- .command("setup")
114
- .description("Configure global provider settings")
115
- .argument("<provider>", "Provider name")
116
- .allowUnknownOption(true)
117
- .action(async (providerName, _opts, command) => {
118
- await runSetup(providerName, command.opts());
119
- });
120
- const connectCommand = program
121
- .command("connect")
122
- .description("Connect this stash to a provider")
123
- .argument("<provider>", "Provider name")
124
- .allowUnknownOption(true)
125
- .action(async (providerName, _opts, command) => {
126
- await runConnect(providerName, command.opts());
127
- });
128
- const disconnectCommand = program
129
- .command("disconnect")
130
- .description("Disconnect provider from this stash")
131
- .argument("<provider>", "Provider name")
132
- .action(async (providerName) => {
133
- await runDisconnect(providerName);
134
- });
135
- program.command("sync").description("Sync local files with connections").action(runSync);
136
- program.command("watch").description("Watch and sync continuously").action(runWatch);
137
- program.command("status").description("Show local stash status").action(runStatus);
138
- const commandName = argv[2];
139
- const providerName = argv[3];
140
- if (providerName && (commandName === "setup" || commandName === "connect")) {
141
- const provider = providers[providerName];
142
- if (provider) {
143
- if (commandName === "setup") {
144
- addFieldOptions(setupCommand, provider.spec.setup);
145
- }
146
- else {
147
- addFieldOptions(connectCommand, [
148
- ...provider.spec.setup,
149
- ...provider.spec.connect,
150
- ]);
151
- }
152
- }
153
- }
154
- if (argv.length <= 2) {
155
- program.outputHelp();
156
- return;
157
- }
158
- await program.parseAsync(argv);
159
- }
2
+ import { main } from "./cli-main.js";
160
3
  main().catch((error) => {
161
4
  console.error(error instanceof Error ? error.message : String(error));
162
5
  process.exitCode = 1;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;AAGjD,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAY;IACrC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAAe,EACf,aAAiD,EACjD,UAAkC,EAAE;IAEpC,MAAM,MAAM,GAA2B,EAAE,GAAG,OAAO,EAAE,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;YAChD,SAAS;QACX,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,YAAoB,EACpB,aAAiD;IAEjD,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,EACnB,aAAa,EACb,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CACjC,CAAC;IACF,YAAY,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;IACpC,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,cAAc,YAAY,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,YAAoB,EACpB,aAAiD;IAEjD,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,aAAa,CACrC,QAAQ,CAAC,IAAI,CAAC,KAAK,EACnB,aAAa,EACb,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CACjC,CAAC;IACF,YAAY,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC;IACzC,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAChF,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,aAAa,YAAY,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,YAAoB;IAC/C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACxE,MAAM,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;QACrD,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,gBAAgB,EAAE,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB,EAAE,MAAe;IACxD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IACrC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,8BAA8B,CAAC;SAC3C,kBAAkB,EAAE,CAAC;IAExB,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,kBAAkB,CAAC,IAAI,CAAC;SACxB,MAAM,CAAC,KAAK,EAAE,YAAoB,EAAE,KAAc,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAwC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEL,MAAM,cAAc,GAAG,OAAO;SAC3B,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,kBAAkB,CAAC,IAAI,CAAC;SACxB,MAAM,CAAC,KAAK,EAAE,YAAoB,EAAE,KAAc,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAwC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEL,MAAM,iBAAiB,GAAG,OAAO;SAC9B,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,YAAoB,EAAE,EAAE;QACrC,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzF,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrF,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnF,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,YAAY,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;QAC3E,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,cAAc,EAAE;oBAC9B,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK;oBACtB,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ import watcher from "@parcel/watcher";
2
+ import type { GlobalConfig } from "./types.ts";
3
+ import { type WatchStatus } from "./watch.ts";
4
+ type SubscribeFn = typeof watcher.subscribe;
5
+ type RunningWatch = {
6
+ start(): Promise<void>;
7
+ stop(): Promise<void>;
8
+ };
9
+ type CreateWatchArgs = {
10
+ dir: string;
11
+ globalConfig: GlobalConfig;
12
+ onStatus: (status: WatchStatus) => Promise<void>;
13
+ };
14
+ type CreateWatchFn = (args: CreateWatchArgs) => Promise<RunningWatch>;
15
+ type BackgroundDaemonOptions = {
16
+ configPath?: string;
17
+ readGlobalConfig?: () => Promise<GlobalConfig>;
18
+ subscribe?: SubscribeFn;
19
+ createWatch?: CreateWatchFn;
20
+ log?: (message: string) => void;
21
+ };
22
+ export declare class BackgroundDaemon {
23
+ private readonly configPath;
24
+ private readonly readGlobalConfigFn;
25
+ private readonly subscribeFn;
26
+ private readonly createWatchFn;
27
+ private readonly log;
28
+ private readonly running;
29
+ private configSubscription;
30
+ private started;
31
+ private stopping;
32
+ private reloadPromise;
33
+ constructor(options?: BackgroundDaemonOptions);
34
+ get watchCount(): number;
35
+ start(): Promise<void>;
36
+ stop(): Promise<void>;
37
+ private reload;
38
+ private persistStatus;
39
+ }
40
+ export declare function runDaemon(): Promise<void>;
41
+ export {};
42
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,iBAAiB,CAAC;AAMtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAS,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAIrD,KAAK,WAAW,GAAG,OAAO,OAAO,CAAC,SAAS,CAAC;AAG5C,KAAK,YAAY,GAAG;IAClB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD,CAAC;AAEF,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAEtE,KAAK,uBAAuB,GAAG;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAuFF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAA8B;gBAEvC,OAAO,GAAE,uBAA4B;IAQjD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAmBb,MAAM;YAgDN,aAAa;CAc5B;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB/C"}
package/dist/daemon.js ADDED
@@ -0,0 +1,210 @@
1
+ import watcher from "@parcel/watcher";
2
+ import { existsSync } from "node:fs";
3
+ import { appendFile, mkdir, readFile, stat, writeFile } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
+ import { getGlobalConfigPath, normalizeGlobalConfig, readGlobalConfig } from "./global-config.js";
6
+ import { Stash } from "./stash.js";
7
+ import { Watch } from "./watch.js";
8
+ const MAX_LOG_BYTES = 1_000_000;
9
+ async function defaultCreateWatch(args) {
10
+ const stash = await Stash.load(args.dir, args.globalConfig);
11
+ const watch = new Watch(stash, {
12
+ dir: args.dir,
13
+ onStatus: (status) => {
14
+ void args.onStatus(status);
15
+ },
16
+ });
17
+ return {
18
+ start: async () => {
19
+ await watch.start();
20
+ },
21
+ stop: async () => {
22
+ await watch.stop();
23
+ },
24
+ };
25
+ }
26
+ function serializeStatus(status) {
27
+ if (status.kind === "synced") {
28
+ return {
29
+ kind: status.kind,
30
+ lastSync: status.lastSync.toISOString(),
31
+ summary: status.summary,
32
+ error: null,
33
+ };
34
+ }
35
+ if (status.kind === "checked") {
36
+ return {
37
+ kind: status.kind,
38
+ lastSync: status.lastSync.toISOString(),
39
+ summary: null,
40
+ error: null,
41
+ };
42
+ }
43
+ return {
44
+ kind: status.kind,
45
+ lastSync: status.lastSync ? status.lastSync.toISOString() : null,
46
+ summary: null,
47
+ error: status.error,
48
+ };
49
+ }
50
+ function formatLogLine(status) {
51
+ const timestamp = status.kind === "error" ? new Date().toISOString() : status.lastSync.toISOString();
52
+ if (status.kind === "synced") {
53
+ return `${timestamp} synced ${status.summary}`;
54
+ }
55
+ if (status.kind === "checked") {
56
+ return `${timestamp} checked`;
57
+ }
58
+ return `${timestamp} error ${status.error}`;
59
+ }
60
+ async function appendCappedLog(path, line) {
61
+ const entry = `${line}\n`;
62
+ const entryBytes = Buffer.byteLength(entry, "utf8");
63
+ if (!existsSync(path)) {
64
+ await writeFile(path, entry, "utf8");
65
+ return;
66
+ }
67
+ const fileSize = (await stat(path)).size;
68
+ if (fileSize + entryBytes <= MAX_LOG_BYTES) {
69
+ await appendFile(path, entry, "utf8");
70
+ return;
71
+ }
72
+ const existing = await readFile(path, "utf8");
73
+ const lines = `${existing}${entry}`.split("\n");
74
+ while (lines.length > 0 && Buffer.byteLength(lines.join("\n"), "utf8") > MAX_LOG_BYTES) {
75
+ lines.shift();
76
+ }
77
+ await writeFile(path, lines.join("\n").replace(/^\n+/, ""), "utf8");
78
+ }
79
+ export class BackgroundDaemon {
80
+ configPath;
81
+ readGlobalConfigFn;
82
+ subscribeFn;
83
+ createWatchFn;
84
+ log;
85
+ running = new Map();
86
+ configSubscription = null;
87
+ started = false;
88
+ stopping = false;
89
+ reloadPromise = null;
90
+ constructor(options = {}) {
91
+ this.configPath = options.configPath ?? getGlobalConfigPath();
92
+ this.readGlobalConfigFn = options.readGlobalConfig ?? readGlobalConfig;
93
+ this.subscribeFn = options.subscribe ?? watcher.subscribe;
94
+ this.createWatchFn = options.createWatch ?? defaultCreateWatch;
95
+ this.log = options.log ?? ((message) => console.log(message));
96
+ }
97
+ get watchCount() {
98
+ return this.running.size;
99
+ }
100
+ async start() {
101
+ if (this.started) {
102
+ return;
103
+ }
104
+ this.started = true;
105
+ await mkdir(dirname(this.configPath), { recursive: true });
106
+ this.configSubscription = await this.subscribeFn(dirname(this.configPath), (error, events) => {
107
+ if (error) {
108
+ this.log(`background daemon config watch failed: ${error.message}`);
109
+ return;
110
+ }
111
+ if (!events.some((event) => event.path === this.configPath)) {
112
+ return;
113
+ }
114
+ void this.reload();
115
+ });
116
+ await this.reload();
117
+ }
118
+ async stop() {
119
+ if (this.stopping) {
120
+ return;
121
+ }
122
+ this.stopping = true;
123
+ if (this.configSubscription) {
124
+ await this.configSubscription.unsubscribe();
125
+ this.configSubscription = null;
126
+ }
127
+ if (this.reloadPromise) {
128
+ await this.reloadPromise;
129
+ }
130
+ const entries = [...this.running.entries()];
131
+ this.running.clear();
132
+ await Promise.all(entries.map(async ([, watchHandle]) => watchHandle.stop()));
133
+ }
134
+ async reload() {
135
+ if (this.reloadPromise) {
136
+ return this.reloadPromise;
137
+ }
138
+ this.reloadPromise = (async () => {
139
+ const config = normalizeGlobalConfig(await this.readGlobalConfigFn());
140
+ const desired = new Set(config.background.stashes);
141
+ for (const [dir, watchHandle] of [...this.running.entries()]) {
142
+ if (desired.has(dir)) {
143
+ continue;
144
+ }
145
+ this.running.delete(dir);
146
+ await watchHandle.stop();
147
+ this.log(`stopped watching ${dir}`);
148
+ }
149
+ for (const dir of desired) {
150
+ if (this.running.has(dir)) {
151
+ continue;
152
+ }
153
+ try {
154
+ const watchHandle = await this.createWatchFn({
155
+ dir,
156
+ globalConfig: config,
157
+ onStatus: async (status) => {
158
+ await this.persistStatus(dir, status);
159
+ },
160
+ });
161
+ this.running.set(dir, watchHandle);
162
+ await watchHandle.start();
163
+ this.log(`watching ${dir}`);
164
+ }
165
+ catch (error) {
166
+ this.log(`failed to start ${dir}: ${error instanceof Error ? error.message : String(error)}`);
167
+ }
168
+ }
169
+ })();
170
+ try {
171
+ await this.reloadPromise;
172
+ }
173
+ finally {
174
+ this.reloadPromise = null;
175
+ }
176
+ }
177
+ async persistStatus(dir, status) {
178
+ const stashDir = join(dir, ".stash");
179
+ if (!existsSync(stashDir)) {
180
+ return;
181
+ }
182
+ await mkdir(stashDir, { recursive: true });
183
+ await writeFile(join(stashDir, "status.json"), JSON.stringify(serializeStatus(status), null, 2), "utf8");
184
+ await appendCappedLog(join(stashDir, "sync.log"), formatLogLine(status));
185
+ }
186
+ }
187
+ export async function runDaemon() {
188
+ const daemon = new BackgroundDaemon();
189
+ let resolveDone = null;
190
+ const done = new Promise((resolve) => {
191
+ resolveDone = resolve;
192
+ });
193
+ const stop = () => {
194
+ void daemon.stop().finally(() => {
195
+ resolveDone?.();
196
+ });
197
+ };
198
+ process.on("SIGINT", stop);
199
+ process.on("SIGTERM", stop);
200
+ try {
201
+ await daemon.start();
202
+ console.log(`background daemon started, watching ${daemon.watchCount} stash(es)`);
203
+ await done;
204
+ }
205
+ finally {
206
+ process.off("SIGINT", stop);
207
+ process.off("SIGTERM", stop);
208
+ }
209
+ }
210
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,12 @@
1
1
  import type { GlobalConfig } from "./types.ts";
2
+ export declare function normalizeGlobalConfig(value: unknown): GlobalConfig;
2
3
  export declare function getGlobalConfigPath(): string;
3
4
  export declare function readGlobalConfig(): Promise<GlobalConfig>;
4
5
  export declare function writeGlobalConfig(config: GlobalConfig): Promise<void>;
6
+ export declare function getBackgroundStashes(config: GlobalConfig): string[];
7
+ export declare function setBackgroundStashes(config: GlobalConfig, stashes: string[]): GlobalConfig;
8
+ export declare function addBackgroundStash(config: GlobalConfig, dir: string): GlobalConfig;
9
+ export declare function removeBackgroundStash(config: GlobalConfig, dir: string): GlobalConfig;
10
+ export declare function getProviderConfig(config: GlobalConfig, provider: string): Record<string, string>;
11
+ export declare function setProviderConfig(config: GlobalConfig, provider: string, values: Record<string, string>): GlobalConfig;
5
12
  //# sourceMappingURL=global-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../src/global-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAE9D;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E"}
1
+ {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../src/global-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAuBlE;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAE9D;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAEnE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAO1F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAOlF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAGrF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEhG;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,YAAY,CAQd"}
@@ -1,6 +1,34 @@
1
1
  import { homedir } from "node:os";
2
2
  import { join } from "node:path";
3
3
  import { readJsonFile, writeJsonFile } from "./utils/fs.js";
4
+ function asStringRecord(value) {
5
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
6
+ return {};
7
+ }
8
+ const entries = Object.entries(value).filter(([, fieldValue]) => typeof fieldValue === "string");
9
+ return Object.fromEntries(entries);
10
+ }
11
+ export function normalizeGlobalConfig(value) {
12
+ const raw = value && typeof value === "object" ? value : {};
13
+ const providersValue = raw.providers && typeof raw.providers === "object" && !Array.isArray(raw.providers)
14
+ ? raw.providers
15
+ : {};
16
+ const backgroundValue = raw.background && typeof raw.background === "object" && !Array.isArray(raw.background)
17
+ ? raw.background
18
+ : {};
19
+ const providers = {};
20
+ for (const [name, providerConfig] of Object.entries(providersValue)) {
21
+ providers[name] = asStringRecord(providerConfig);
22
+ }
23
+ return {
24
+ providers,
25
+ background: {
26
+ stashes: Array.isArray(backgroundValue.stashes)
27
+ ? backgroundValue.stashes.filter((stash) => typeof stash === "string")
28
+ : [],
29
+ },
30
+ };
31
+ }
4
32
  export function getGlobalConfigPath() {
5
33
  const xdg = process.env.XDG_CONFIG_HOME;
6
34
  if (xdg) {
@@ -9,9 +37,41 @@ export function getGlobalConfigPath() {
9
37
  return join(homedir(), ".stash", "config.json");
10
38
  }
11
39
  export async function readGlobalConfig() {
12
- return readJsonFile(getGlobalConfigPath(), {});
40
+ return normalizeGlobalConfig(await readJsonFile(getGlobalConfigPath(), {}));
13
41
  }
14
42
  export async function writeGlobalConfig(config) {
15
- await writeJsonFile(getGlobalConfigPath(), config);
43
+ await writeJsonFile(getGlobalConfigPath(), normalizeGlobalConfig(config));
44
+ }
45
+ export function getBackgroundStashes(config) {
46
+ return [...config.background.stashes];
47
+ }
48
+ export function setBackgroundStashes(config, stashes) {
49
+ return normalizeGlobalConfig({
50
+ ...config,
51
+ background: {
52
+ stashes,
53
+ },
54
+ });
55
+ }
56
+ export function addBackgroundStash(config, dir) {
57
+ const stashes = new Set(getBackgroundStashes(config));
58
+ stashes.add(dir);
59
+ return setBackgroundStashes(config, [...stashes].sort((a, b) => a.localeCompare(b)));
60
+ }
61
+ export function removeBackgroundStash(config, dir) {
62
+ const stashes = getBackgroundStashes(config).filter((stash) => stash !== dir);
63
+ return setBackgroundStashes(config, stashes);
64
+ }
65
+ export function getProviderConfig(config, provider) {
66
+ return { ...(config.providers[provider] ?? {}) };
67
+ }
68
+ export function setProviderConfig(config, provider, values) {
69
+ return normalizeGlobalConfig({
70
+ ...config,
71
+ providers: {
72
+ ...config.providers,
73
+ [provider]: values,
74
+ },
75
+ });
16
76
  }
17
77
  //# sourceMappingURL=global-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../src/global-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,YAAY,CAAC,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAoB;IAC1D,MAAM,aAAa,CAAC,mBAAmB,EAAE,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../src/global-config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { Stash } from "./stash.ts";
2
+ export type { StashEvents } from "./stash.ts";
2
3
  export { GitHubProvider } from "./providers/github-provider.ts";
3
4
  export { PushConflictError, SyncLockError } from "./errors.ts";
4
- export { getGlobalConfigPath, readGlobalConfig, writeGlobalConfig, } from "./global-config.ts";
5
- export type { ChangeSet, ConnectionConfig, Field, FileMutation, FileState, GlobalConfig, Provider, ProviderSpec, PushPayload, SnapshotEntry, StatusResult, } from "./types.ts";
5
+ export type { Disposable } from "./emitter.ts";
6
+ export { getGlobalConfigPath, readGlobalConfig, writeGlobalConfig } from "./global-config.ts";
7
+ export type { ChangeSet, ConnectionConfig, Field, FileMutation, FileState, GlobalConfig, Provider, ProviderClass, ProviderSpec, PushPayload, SnapshotEntry, StatusResult, } from "./types.ts";
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { Stash } from "./stash.js";
2
2
  export { GitHubProvider } from "./providers/github-provider.js";
3
3
  export { PushConflictError, SyncLockError } from "./errors.js";
4
- export { getGlobalConfigPath, readGlobalConfig, writeGlobalConfig, } from "./global-config.js";
4
+ export { getGlobalConfigPath, readGlobalConfig, writeGlobalConfig } from "./global-config.js";
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"github-provider.d.ts","sourceRoot":"","sources":["../../src/providers/github-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EACV,SAAS,EAET,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AA6BrB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAID,qBAAa,cAAe,YAAW,QAAQ;IAC7C,MAAM,CAAC,IAAI,EAAE,YAAY,CAGvB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,EAAE,YAAY;IAoB1B,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAqKxE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKpC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAyG/C,OAAO,CAAC,QAAQ;YAIF,kBAAkB;YA8BlB,IAAI;YAkCJ,QAAQ;YAQR,iBAAiB;YAoDjB,aAAa;YAWb,UAAU;CASzB"}
1
+ {"version":3,"file":"github-provider.d.ts","sourceRoot":"","sources":["../../src/providers/github-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EACV,SAAS,EAET,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AA0BrB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAID,qBAAa,cAAe,YAAW,QAAQ;IAC7C,MAAM,CAAC,IAAI,EAAE,YAAY,CAGvB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,EAAE,YAAY;IAoB1B,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IA+JxE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKpC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmG/C,OAAO,CAAC,QAAQ;YAIF,kBAAkB;YA4BlB,IAAI;IAkClB,OAAO,CAAC,QAAQ;YAUF,iBAAiB;YAoDjB,aAAa;YAWb,UAAU;CASzB"}