@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/README.md CHANGED
@@ -11,10 +11,10 @@ npm install -g @telepath-computer/stash
11
11
  Set up GitHub access and connect the current directory:
12
12
 
13
13
  ```bash
14
+ stash background install
14
15
  stash init
15
16
  stash setup github
16
- stash connect github --repo user/repo
17
- stash sync
17
+ stash connect github --repo user/repo --background
18
18
  ```
19
19
 
20
20
  You can initialize a directory explicitly with `stash init`, or let `stash connect` create `.stash/` for you automatically.
@@ -31,22 +31,42 @@ You'll need a GitHub [personal access token](https://github.com/settings/tokens)
31
31
  ## Commands
32
32
 
33
33
  ```bash
34
+ stash background install
35
+ stash background add
34
36
  stash init
35
37
  stash setup github
36
- stash connect github --repo user/repo
38
+ stash connect github --repo user/repo --background
37
39
  stash sync
38
40
  stash watch
41
+ stash background status
39
42
  stash status
40
43
  stash disconnect github
44
+ stash background remove
45
+ stash background uninstall
41
46
  ```
42
47
 
43
48
  `stash watch` keeps the directory in sync continuously. Press `.` to trigger an immediate sync and `q` to quit.
44
49
 
50
+ `stash background install` plus `stash connect --background` gives you boot-time background syncing managed by `launchd` on macOS or `systemd` on Linux.
51
+
45
52
  ## Config
46
53
 
47
54
  - Global config lives at `~/.stash/config.json` or `$XDG_CONFIG_HOME/stash/config.json`.
48
55
  - Per-stash connection config lives at `.stash/config.local.json` inside the synced directory.
49
56
 
57
+ Example global config:
58
+
59
+ ```json
60
+ {
61
+ "providers": {
62
+ "github": { "token": "ghp_..." }
63
+ },
64
+ "background": {
65
+ "stashes": ["/Users/me/notes"]
66
+ }
67
+ }
68
+ ```
69
+
50
70
  ## Docs
51
71
 
52
72
  - `docs/api.md` - developer-facing `Stash` and provider contracts
@@ -0,0 +1,22 @@
1
+ import type { GlobalConfig } from "./types.ts";
2
+ type ServiceHandle = {
3
+ install(): Promise<void>;
4
+ uninstall(): Promise<void>;
5
+ status(): Promise<{
6
+ installed: boolean;
7
+ running: boolean;
8
+ }>;
9
+ };
10
+ type CliDependencies = {
11
+ cwd?: () => string;
12
+ readGlobalConfig?: () => Promise<GlobalConfig>;
13
+ writeGlobalConfig?: (config: GlobalConfig) => Promise<void>;
14
+ service?: ServiceHandle;
15
+ runDaemon?: () => Promise<void>;
16
+ stdout?: NodeJS.WriteStream;
17
+ stderr?: NodeJS.WriteStream;
18
+ };
19
+ export declare function resolveStashCommand(): Promise<string>;
20
+ export declare function main(argv?: string[], deps?: CliDependencies): Promise<void>;
21
+ export {};
22
+ //# sourceMappingURL=cli-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAS,YAAY,EAAiB,MAAM,YAAY,CAAC;AAKrE,KAAK,aAAa,GAAG;IACnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC7D,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B,CAAC;AAkCF,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAoB3D;AAoXD,wBAAsB,IAAI,CAAC,IAAI,WAAe,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IzF"}
@@ -0,0 +1,443 @@
1
+ import { existsSync } from "node:fs";
2
+ import { access, constants, readFile } from "node:fs/promises";
3
+ import { basename, delimiter, join, resolve } from "node:path";
4
+ import { Daemon, UnsupportedPlatformError } from "@rupertsworld/daemon";
5
+ import { Command, Option } from "commander";
6
+ import { input, password } from "@inquirer/prompts";
7
+ import { addBackgroundStash, getBackgroundStashes, getProviderConfig, readGlobalConfig, removeBackgroundStash, setProviderConfig, writeGlobalConfig, } from "./global-config.js";
8
+ import { runDaemon } from "./daemon.js";
9
+ import { providers } from "./providers/index.js";
10
+ import { Stash } from "./stash.js";
11
+ import { createColors } from "./ui/color.js";
12
+ import { formatTimeAgo } from "./ui/format.js";
13
+ import { LiveLine } from "./ui/live-line.js";
14
+ import { SyncRenderer } from "./ui/sync-renderer.js";
15
+ import { watch as watchStash } from "./watch.js";
16
+ const SERVICE_NAME = "stash-background";
17
+ const SERVICE_DESCRIPTION = "Stash background sync";
18
+ function getProvider(name) {
19
+ const provider = providers[name];
20
+ if (!provider) {
21
+ throw new Error(`Unknown provider: ${name}`);
22
+ }
23
+ return provider;
24
+ }
25
+ async function isExecutable(path) {
26
+ try {
27
+ await access(path, constants.X_OK);
28
+ return true;
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ }
34
+ function writeLine(stream, text) {
35
+ stream.write(`${text}\n`);
36
+ }
37
+ function isUnsupportedPlatformError(error) {
38
+ return error instanceof UnsupportedPlatformError;
39
+ }
40
+ export async function resolveStashCommand() {
41
+ const argvPath = process.argv[1];
42
+ if (argvPath && basename(argvPath) === "stash") {
43
+ const candidate = resolve(argvPath);
44
+ if (await isExecutable(candidate)) {
45
+ return candidate;
46
+ }
47
+ }
48
+ for (const pathEntry of (process.env.PATH ?? "").split(delimiter)) {
49
+ if (!pathEntry) {
50
+ continue;
51
+ }
52
+ const candidate = join(pathEntry, "stash");
53
+ if (await isExecutable(candidate)) {
54
+ return candidate;
55
+ }
56
+ }
57
+ throw new Error("Could not find the `stash` binary on PATH");
58
+ }
59
+ async function promptField(field) {
60
+ if (field.secret) {
61
+ return password({ message: field.label });
62
+ }
63
+ return input({ message: field.label });
64
+ }
65
+ async function collectFields(fields, valuesFromCli, current = {}) {
66
+ const values = { ...current };
67
+ for (const field of fields) {
68
+ if (values[field.name]) {
69
+ continue;
70
+ }
71
+ const cliValue = valuesFromCli[field.name];
72
+ if (typeof cliValue === "string") {
73
+ values[field.name] = cliValue;
74
+ continue;
75
+ }
76
+ values[field.name] = await promptField(field);
77
+ }
78
+ return values;
79
+ }
80
+ async function readBackgroundStatus(dir) {
81
+ const statusPath = join(dir, ".stash", "status.json");
82
+ if (!existsSync(statusPath)) {
83
+ return null;
84
+ }
85
+ return JSON.parse(await readFile(statusPath, "utf8"));
86
+ }
87
+ async function warnIfServiceUnavailable(serviceHandle, stderr) {
88
+ if (!serviceHandle) {
89
+ return;
90
+ }
91
+ try {
92
+ const status = await serviceHandle.status();
93
+ if (!status.installed) {
94
+ writeLine(stderr, "warning: background service is not installed");
95
+ }
96
+ }
97
+ catch (error) {
98
+ if (isUnsupportedPlatformError(error)) {
99
+ writeLine(stderr, "warning: service install is not supported on this platform yet; run `stash background watch` manually");
100
+ return;
101
+ }
102
+ throw error;
103
+ }
104
+ }
105
+ async function runSetup(providerName, valuesFromCli, deps, stdout) {
106
+ const provider = getProvider(providerName);
107
+ let globalConfig = await deps.readGlobalConfig();
108
+ const values = await collectFields(provider.spec.setup, valuesFromCli, getProviderConfig(globalConfig, providerName));
109
+ globalConfig = setProviderConfig(globalConfig, providerName, values);
110
+ await deps.writeGlobalConfig(globalConfig);
111
+ writeLine(stdout, `Configured ${providerName}.`);
112
+ }
113
+ async function runInit(cwd, readConfig, stdout) {
114
+ const dir = cwd();
115
+ const alreadyInitialized = existsSync(join(dir, ".stash"));
116
+ await Stash.init(dir, await readConfig());
117
+ writeLine(stdout, alreadyInitialized ? "Already initialized." : "Initialized stash.");
118
+ }
119
+ async function registerBackgroundStash(dir, readConfig, writeConfig, serviceHandle, stderr) {
120
+ const globalConfig = await readConfig();
121
+ const stash = await Stash.load(dir, globalConfig);
122
+ if (Object.keys(stash.connections).length === 0) {
123
+ writeLine(stderr, "warning: this stash won't sync until a provider is connected");
124
+ }
125
+ await writeConfig(addBackgroundStash(globalConfig, dir));
126
+ await warnIfServiceUnavailable(serviceHandle, stderr);
127
+ }
128
+ async function runConnect(providerName, valuesFromCli, deps, stdout, stderr) {
129
+ const provider = getProvider(providerName);
130
+ let globalConfig = await deps.readGlobalConfig();
131
+ const setupValues = await collectFields(provider.spec.setup, valuesFromCli, getProviderConfig(globalConfig, providerName));
132
+ globalConfig = setProviderConfig(globalConfig, providerName, setupValues);
133
+ await deps.writeGlobalConfig(globalConfig);
134
+ const dir = deps.cwd();
135
+ const stash = await Stash.init(dir, globalConfig);
136
+ const connectValues = await collectFields(provider.spec.connect, valuesFromCli);
137
+ await stash.connect(providerName, connectValues);
138
+ if (valuesFromCli.background === true) {
139
+ await registerBackgroundStash(dir, deps.readGlobalConfig, deps.writeGlobalConfig, deps.service, stderr);
140
+ }
141
+ writeLine(stdout, `Connected ${providerName}.`);
142
+ }
143
+ async function runDisconnect(providerName, cwd, readConfig, stdout) {
144
+ const stash = await Stash.load(cwd(), await readConfig());
145
+ await stash.disconnect(providerName);
146
+ writeLine(stdout, `Disconnected ${providerName}.`);
147
+ }
148
+ async function runSync(cwd, readConfig) {
149
+ const stash = await Stash.load(cwd(), await readConfig());
150
+ const line = new LiveLine(process.stdout);
151
+ const { green, red } = line.colors;
152
+ const renderer = new SyncRenderer(line);
153
+ const subscription = stash.on("mutation", (mutation) => {
154
+ renderer.onMutation(mutation);
155
+ });
156
+ line.startSpinner("checking...");
157
+ try {
158
+ await stash.sync();
159
+ const summary = renderer.done();
160
+ line.print(summary ? `${green("✓")} synced (${summary})` : `${green("✓")} up to date`);
161
+ }
162
+ catch (error) {
163
+ renderer.error(error);
164
+ line.print(`${red("✗")} sync failed: ${error instanceof Error ? error.message : String(error)}`);
165
+ process.exitCode = 1;
166
+ }
167
+ finally {
168
+ subscription.dispose();
169
+ renderer.dispose();
170
+ line.dispose();
171
+ }
172
+ }
173
+ async function runWatch(cwd, readConfig) {
174
+ const dir = cwd();
175
+ const stash = await Stash.load(dir, await readConfig());
176
+ if (Object.keys(stash.connections).length === 0) {
177
+ throw new Error("no connection configured — run `stash connect <provider>` first");
178
+ }
179
+ await watchStash(stash, { dir, stdin: process.stdin, stdout: process.stdout });
180
+ }
181
+ function formatChangeParts(status) {
182
+ const parts = [];
183
+ if (status.added.length > 0)
184
+ parts.push(`${status.added.length} added`);
185
+ if (status.modified.length > 0)
186
+ parts.push(`${status.modified.length} modified`);
187
+ if (status.deleted.length > 0)
188
+ parts.push(`${status.deleted.length} deleted`);
189
+ return parts;
190
+ }
191
+ async function runStatus(cwd, readConfig, stdout) {
192
+ const { dim, green, yellow } = createColors(stdout);
193
+ const stash = await Stash.load(cwd(), await readConfig());
194
+ const connectionNames = Object.keys(stash.connections);
195
+ if (connectionNames.length === 0) {
196
+ writeLine(stdout, dim("no connections — run `stash connect <provider>` to get started"));
197
+ return;
198
+ }
199
+ const status = stash.status();
200
+ const parts = formatChangeParts(status);
201
+ for (const name of connectionNames) {
202
+ const conn = stash.connections[name];
203
+ const label = conn.repo ?? Object.values(conn).join(", ");
204
+ const dot = parts.length > 0 ? yellow("●") : green("●");
205
+ writeLine(stdout, `${dot} ${name} ${dim(label)}`);
206
+ if (status.lastSync) {
207
+ const ago = formatTimeAgo(status.lastSync);
208
+ if (parts.length > 0) {
209
+ writeLine(stdout, ` ${parts.join(", ")} ${dim("·")} ${dim(`synced ${ago}`)}`);
210
+ }
211
+ else {
212
+ writeLine(stdout, dim(` up to date · synced ${ago}`));
213
+ }
214
+ }
215
+ else if (parts.length > 0) {
216
+ writeLine(stdout, ` ${parts.join(", ")} ${dim("·")} ${dim("never synced")}`);
217
+ }
218
+ else {
219
+ writeLine(stdout, dim(" never synced"));
220
+ }
221
+ }
222
+ }
223
+ async function runBackgroundInstall(serviceHandle, stdout) {
224
+ await serviceHandle.install();
225
+ writeLine(stdout, "Installed background service.");
226
+ }
227
+ async function runBackgroundUninstall(serviceHandle, stdout) {
228
+ await serviceHandle.uninstall();
229
+ writeLine(stdout, "Uninstalled background service.");
230
+ }
231
+ async function runBackgroundAdd(dirArg, cwd, readConfig, writeConfig, serviceHandle, stdout, stderr) {
232
+ const dir = resolve(dirArg ?? cwd());
233
+ await registerBackgroundStash(dir, readConfig, writeConfig, serviceHandle, stderr);
234
+ writeLine(stdout, `Registered ${dir} for background sync.`);
235
+ }
236
+ async function runBackgroundRemove(dirArg, cwd, readConfig, writeConfig, stdout) {
237
+ const dir = resolve(dirArg ?? cwd());
238
+ const globalConfig = await readConfig();
239
+ await writeConfig(removeBackgroundStash(globalConfig, dir));
240
+ writeLine(stdout, `Removed ${dir} from background sync.`);
241
+ }
242
+ async function runBackgroundStatus(readConfig, serviceHandle, stdout) {
243
+ const { dim, green, red } = createColors(stdout);
244
+ let serviceRunning = false;
245
+ let serviceMessage = null;
246
+ try {
247
+ const current = await serviceHandle.status();
248
+ if (!current.installed) {
249
+ serviceMessage = dim("service not installed — run `stash background install`");
250
+ }
251
+ else if (current.running) {
252
+ serviceRunning = true;
253
+ }
254
+ else {
255
+ serviceMessage = red("background service is stopped — run `stash background install` to restart");
256
+ }
257
+ }
258
+ catch (error) {
259
+ if (isUnsupportedPlatformError(error)) {
260
+ serviceMessage = dim("service install not supported on this platform — run `stash background watch` manually");
261
+ }
262
+ else {
263
+ throw error;
264
+ }
265
+ }
266
+ const globalConfig = await readConfig();
267
+ const stashes = getBackgroundStashes(globalConfig);
268
+ if (serviceRunning) {
269
+ writeLine(stdout, dim("stash is syncing in the background"));
270
+ }
271
+ else if (serviceMessage) {
272
+ writeLine(stdout, serviceMessage);
273
+ }
274
+ if (stashes.length === 0) {
275
+ writeLine(stdout, dim("\nno stashes registered — run `stash background add` to add one"));
276
+ return;
277
+ }
278
+ writeLine(stdout, "");
279
+ for (const dir of stashes) {
280
+ if (!existsSync(dir)) {
281
+ writeLine(stdout, `${red("✗")} ${dir}`);
282
+ writeLine(stdout, dim(" directory not found"));
283
+ continue;
284
+ }
285
+ const status = await readBackgroundStatus(dir);
286
+ if (!status) {
287
+ writeLine(stdout, `${dim("○")} ${dir}`);
288
+ writeLine(stdout, dim(" waiting for first sync"));
289
+ continue;
290
+ }
291
+ if (status.kind === "error") {
292
+ writeLine(stdout, `${red("✗")} ${dir}`);
293
+ const ago = status.lastSync ? formatTimeAgo(new Date(status.lastSync)) : null;
294
+ const errorMsg = status.error ?? "unknown error";
295
+ writeLine(stdout, ago ? ` ${red(errorMsg)} ${dim("·")} ${dim(`synced ${ago}`)}` : ` ${red(errorMsg)}`);
296
+ continue;
297
+ }
298
+ const ago = status.lastSync ? formatTimeAgo(new Date(status.lastSync)) : null;
299
+ if (status.summary) {
300
+ writeLine(stdout, `${green("●")} ${dir}`);
301
+ writeLine(stdout, ` ${status.summary} ${dim("·")} ${dim(`synced ${ago ?? "unknown"}`)}`);
302
+ }
303
+ else {
304
+ writeLine(stdout, `${green("●")} ${dir}`);
305
+ writeLine(stdout, dim(` up to date · synced ${ago ?? "unknown"}`));
306
+ }
307
+ }
308
+ }
309
+ function addFieldOptions(command, fields) {
310
+ for (const field of fields) {
311
+ command.addOption(new Option(`--${field.name} <value>`, field.label));
312
+ }
313
+ }
314
+ async function createDefaultService() {
315
+ const command = await resolveStashCommand();
316
+ return new Daemon({
317
+ name: SERVICE_NAME,
318
+ description: SERVICE_DESCRIPTION,
319
+ command,
320
+ args: ["background", "watch"],
321
+ env: process.env.PATH ? { PATH: process.env.PATH } : undefined,
322
+ });
323
+ }
324
+ export async function main(argv = process.argv, deps = {}) {
325
+ const cwd = deps.cwd ?? (() => process.cwd());
326
+ const readConfig = deps.readGlobalConfig ?? readGlobalConfig;
327
+ const writeConfig = deps.writeGlobalConfig ?? writeGlobalConfig;
328
+ const serviceHandle = deps.service;
329
+ const getService = async () => serviceHandle ?? (await createDefaultService());
330
+ const runDaemonCommand = deps.runDaemon ?? runDaemon;
331
+ const stdout = deps.stdout ?? process.stdout;
332
+ const stderr = deps.stderr ?? process.stderr;
333
+ const program = new Command()
334
+ .name("stash")
335
+ .description("Conflict-free synced folders")
336
+ .showHelpAfterError()
337
+ .configureOutput({
338
+ writeOut: (text) => {
339
+ stdout.write(text);
340
+ },
341
+ writeErr: (text) => {
342
+ stderr.write(text);
343
+ },
344
+ });
345
+ const setupCommand = program
346
+ .command("setup")
347
+ .description("Configure global provider settings")
348
+ .argument("<provider>", "Provider name")
349
+ .allowUnknownOption(true)
350
+ .action(async (providerName, _opts, command) => {
351
+ await runSetup(providerName, command.opts(), { readGlobalConfig: readConfig, writeGlobalConfig: writeConfig }, stdout);
352
+ });
353
+ const connectCommand = program
354
+ .command("connect")
355
+ .description("Connect this stash to a provider")
356
+ .argument("<provider>", "Provider name")
357
+ .option("--background", "Register this stash for background syncing")
358
+ .allowUnknownOption(true)
359
+ .action(async (providerName, _opts, command) => {
360
+ const opts = command.opts();
361
+ const svc = opts.background === true ? await getService() : undefined;
362
+ await runConnect(providerName, opts, {
363
+ cwd,
364
+ readGlobalConfig: readConfig,
365
+ writeGlobalConfig: writeConfig,
366
+ service: svc,
367
+ }, stdout, stderr);
368
+ });
369
+ program
370
+ .command("disconnect")
371
+ .description("Disconnect provider from this stash")
372
+ .argument("<provider>", "Provider name")
373
+ .action(async (providerName) => {
374
+ await runDisconnect(providerName, cwd, readConfig, stdout);
375
+ });
376
+ program
377
+ .command("init")
378
+ .description("Initialize the current directory as a stash")
379
+ .action(() => {
380
+ return runInit(cwd, readConfig, stdout);
381
+ });
382
+ program
383
+ .command("sync")
384
+ .description("Sync local files with connections")
385
+ .action(() => runSync(cwd, readConfig));
386
+ program
387
+ .command("watch")
388
+ .description("Watch and sync continuously")
389
+ .action(() => runWatch(cwd, readConfig));
390
+ program
391
+ .command("status")
392
+ .description("Show local stash status")
393
+ .action(() => runStatus(cwd, readConfig, stdout));
394
+ const backgroundCommand = program.command("background").description("Manage background syncing");
395
+ backgroundCommand
396
+ .command("install")
397
+ .description("Install the background service")
398
+ .action(async () => runBackgroundInstall(await getService(), stdout));
399
+ backgroundCommand
400
+ .command("uninstall")
401
+ .description("Remove the background service")
402
+ .action(async () => runBackgroundUninstall(await getService(), stdout));
403
+ backgroundCommand
404
+ .command("add")
405
+ .description("Register a stash for background syncing")
406
+ .argument("[dir]", "Stash directory")
407
+ .action(async (dirArg) => {
408
+ const svc = await getService().catch(() => undefined);
409
+ await runBackgroundAdd(dirArg, cwd, readConfig, writeConfig, svc, stdout, stderr);
410
+ });
411
+ backgroundCommand
412
+ .command("remove")
413
+ .description("Unregister a stash from background syncing")
414
+ .argument("[dir]", "Stash directory")
415
+ .action((dirArg) => runBackgroundRemove(dirArg, cwd, readConfig, writeConfig, stdout));
416
+ backgroundCommand
417
+ .command("status")
418
+ .description("Show background service and stash status")
419
+ .action(async () => runBackgroundStatus(readConfig, await getService(), stdout));
420
+ backgroundCommand
421
+ .command("watch", { hidden: true })
422
+ .description("Run the background daemon")
423
+ .action(() => runDaemonCommand());
424
+ const commandName = argv[2];
425
+ const providerName = argv[3];
426
+ if (providerName && (commandName === "setup" || commandName === "connect")) {
427
+ const provider = providers[providerName];
428
+ if (provider) {
429
+ if (commandName === "setup") {
430
+ addFieldOptions(setupCommand, provider.spec.setup);
431
+ }
432
+ else {
433
+ addFieldOptions(connectCommand, [...provider.spec.setup, ...provider.spec.connect]);
434
+ }
435
+ }
436
+ }
437
+ if (argv.length <= 2) {
438
+ program.outputHelp();
439
+ return;
440
+ }
441
+ await program.parseAsync(argv);
442
+ }
443
+ //# sourceMappingURL=cli-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}