@tinyrack/devsync 1.1.0 → 1.3.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 (220) hide show
  1. package/README.md +230 -62
  2. package/dist/cli/base-command.d.ts +14 -0
  3. package/dist/cli/base-command.d.ts.map +1 -0
  4. package/dist/cli/base-command.js +22 -0
  5. package/dist/cli/base-command.js.map +1 -0
  6. package/dist/cli/commands/dir.d.ts +8 -0
  7. package/dist/cli/commands/dir.d.ts.map +1 -0
  8. package/dist/cli/commands/dir.js +16 -0
  9. package/dist/cli/commands/dir.js.map +1 -0
  10. package/dist/cli/commands/doctor.d.ts +8 -0
  11. package/dist/cli/commands/doctor.d.ts.map +1 -0
  12. package/dist/cli/commands/doctor.js +18 -0
  13. package/dist/cli/commands/doctor.js.map +1 -0
  14. package/dist/cli/commands/index.d.ts +23 -0
  15. package/dist/cli/commands/index.d.ts.map +1 -0
  16. package/dist/cli/commands/index.js +23 -0
  17. package/dist/cli/commands/index.js.map +1 -0
  18. package/dist/cli/commands/init.d.ts +15 -0
  19. package/dist/cli/commands/init.d.ts.map +1 -0
  20. package/dist/cli/commands/init.js +43 -0
  21. package/dist/cli/commands/init.js.map +1 -0
  22. package/dist/cli/commands/machine/list.d.ts +7 -0
  23. package/dist/cli/commands/machine/list.d.ts.map +1 -0
  24. package/dist/cli/commands/machine/list.js +12 -0
  25. package/dist/cli/commands/machine/list.js.map +1 -0
  26. package/dist/cli/commands/machine/use.d.ts +11 -0
  27. package/dist/cli/commands/machine/use.d.ts.map +1 -0
  28. package/dist/cli/commands/machine/use.js +28 -0
  29. package/dist/cli/commands/machine/use.js.map +1 -0
  30. package/dist/cli/commands/pull.d.ts +12 -0
  31. package/dist/cli/commands/pull.d.ts.map +1 -0
  32. package/dist/cli/commands/pull.js +34 -0
  33. package/dist/cli/commands/pull.js.map +1 -0
  34. package/dist/cli/commands/push.d.ts +12 -0
  35. package/dist/cli/commands/push.d.ts.map +1 -0
  36. package/dist/cli/commands/push.js +34 -0
  37. package/dist/cli/commands/push.js.map +1 -0
  38. package/dist/cli/commands/status.d.ts +11 -0
  39. package/dist/cli/commands/status.d.ts.map +1 -0
  40. package/dist/cli/commands/status.js +27 -0
  41. package/dist/cli/commands/status.js.map +1 -0
  42. package/dist/cli/commands/track.d.ts +16 -0
  43. package/dist/cli/commands/track.d.ts.map +1 -0
  44. package/dist/cli/commands/track.js +82 -0
  45. package/dist/cli/commands/track.js.map +1 -0
  46. package/dist/cli/commands/untrack.d.ts +11 -0
  47. package/dist/cli/commands/untrack.d.ts.map +1 -0
  48. package/dist/cli/commands/untrack.js +28 -0
  49. package/dist/cli/commands/untrack.js.map +1 -0
  50. package/dist/config/global-config.d.ts +21 -0
  51. package/dist/config/global-config.d.ts.map +1 -0
  52. package/dist/config/global-config.js +106 -0
  53. package/dist/config/global-config.js.map +1 -0
  54. package/dist/config/platform.d.ts +11 -0
  55. package/dist/config/platform.d.ts.map +1 -0
  56. package/dist/config/platform.js +19 -0
  57. package/dist/config/platform.js.map +1 -0
  58. package/dist/config/sync.d.ts +107 -0
  59. package/dist/config/sync.d.ts.map +1 -0
  60. package/dist/config/sync.js +424 -0
  61. package/dist/config/sync.js.map +1 -0
  62. package/dist/config/xdg.d.ts +14 -0
  63. package/dist/config/xdg.d.ts.map +1 -0
  64. package/dist/config/xdg.js +102 -0
  65. package/dist/config/xdg.js.map +1 -0
  66. package/dist/index.d.ts +3 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/{src/index.ts → dist/index.js} +1 -1
  69. package/dist/index.js.map +1 -0
  70. package/dist/lib/file-mode.d.ts +3 -0
  71. package/dist/lib/file-mode.d.ts.map +1 -0
  72. package/dist/lib/file-mode.js +7 -0
  73. package/dist/lib/file-mode.js.map +1 -0
  74. package/dist/lib/output.d.ts +31 -0
  75. package/dist/lib/output.d.ts.map +1 -0
  76. package/dist/lib/output.js +198 -0
  77. package/dist/lib/output.js.map +1 -0
  78. package/dist/lib/path.d.ts +5 -0
  79. package/dist/lib/path.d.ts.map +1 -0
  80. package/dist/lib/path.js +25 -0
  81. package/dist/lib/path.js.map +1 -0
  82. package/dist/lib/string.d.ts +2 -0
  83. package/dist/lib/string.d.ts.map +1 -0
  84. package/dist/lib/string.js +4 -0
  85. package/dist/lib/string.js.map +1 -0
  86. package/dist/lib/validation.d.ts +3 -0
  87. package/dist/lib/validation.d.ts.map +1 -0
  88. package/dist/lib/validation.js +9 -0
  89. package/dist/lib/validation.js.map +1 -0
  90. package/dist/services/add.d.ts +20 -0
  91. package/dist/services/add.d.ts.map +1 -0
  92. package/dist/services/add.js +161 -0
  93. package/dist/services/add.js.map +1 -0
  94. package/dist/services/config-file.d.ts +45 -0
  95. package/dist/services/config-file.d.ts.map +1 -0
  96. package/dist/services/config-file.js +35 -0
  97. package/dist/services/config-file.js.map +1 -0
  98. package/dist/services/crypto.d.ts +9 -0
  99. package/dist/services/crypto.d.ts.map +1 -0
  100. package/dist/services/crypto.js +75 -0
  101. package/dist/services/crypto.js.map +1 -0
  102. package/dist/services/doctor.d.ts +16 -0
  103. package/dist/services/doctor.d.ts.map +1 -0
  104. package/dist/services/doctor.js +84 -0
  105. package/dist/services/doctor.js.map +1 -0
  106. package/dist/services/error.d.ts +14 -0
  107. package/dist/services/error.d.ts.map +1 -0
  108. package/dist/services/error.js +38 -0
  109. package/dist/services/error.js.map +1 -0
  110. package/dist/services/filesystem.d.ts +15 -0
  111. package/dist/services/filesystem.d.ts.map +1 -0
  112. package/dist/services/filesystem.js +113 -0
  113. package/dist/services/filesystem.js.map +1 -0
  114. package/dist/services/forget.d.ts +14 -0
  115. package/dist/services/forget.d.ts.map +1 -0
  116. package/dist/services/forget.js +124 -0
  117. package/dist/services/forget.js.map +1 -0
  118. package/dist/services/git.d.ts +10 -0
  119. package/dist/services/git.d.ts.map +1 -0
  120. package/dist/services/git.js +57 -0
  121. package/dist/services/git.js.map +1 -0
  122. package/dist/services/init.d.ts +19 -0
  123. package/dist/services/init.d.ts.map +1 -0
  124. package/dist/services/init.js +203 -0
  125. package/dist/services/init.js.map +1 -0
  126. package/dist/services/local-materialization.d.ts +28 -0
  127. package/dist/services/local-materialization.d.ts.map +1 -0
  128. package/dist/services/local-materialization.js +262 -0
  129. package/dist/services/local-materialization.js.map +1 -0
  130. package/dist/services/local-snapshot.d.ts +25 -0
  131. package/dist/services/local-snapshot.d.ts.map +1 -0
  132. package/dist/services/local-snapshot.js +93 -0
  133. package/dist/services/local-snapshot.js.map +1 -0
  134. package/dist/services/machine.d.ts +40 -0
  135. package/dist/services/machine.d.ts.map +1 -0
  136. package/dist/services/machine.js +113 -0
  137. package/dist/services/machine.js.map +1 -0
  138. package/dist/services/paths.d.ts +13 -0
  139. package/dist/services/paths.d.ts.map +1 -0
  140. package/dist/services/paths.js +71 -0
  141. package/dist/services/paths.js.map +1 -0
  142. package/dist/services/pull.d.ts +28 -0
  143. package/dist/services/pull.d.ts.map +1 -0
  144. package/dist/services/pull.js +67 -0
  145. package/dist/services/pull.js.map +1 -0
  146. package/dist/services/push.d.ts +35 -0
  147. package/dist/services/push.d.ts.map +1 -0
  148. package/dist/services/push.js +96 -0
  149. package/dist/services/push.js.map +1 -0
  150. package/dist/services/repo-artifacts.d.ts +52 -0
  151. package/dist/services/repo-artifacts.d.ts.map +1 -0
  152. package/dist/services/repo-artifacts.js +251 -0
  153. package/dist/services/repo-artifacts.js.map +1 -0
  154. package/dist/services/repo-snapshot.d.ts +6 -0
  155. package/dist/services/repo-snapshot.d.ts.map +1 -0
  156. package/dist/services/repo-snapshot.js +163 -0
  157. package/dist/services/repo-snapshot.js.map +1 -0
  158. package/dist/services/runtime.d.ts +40 -0
  159. package/dist/services/runtime.d.ts.map +1 -0
  160. package/dist/services/runtime.js +71 -0
  161. package/dist/services/runtime.js.map +1 -0
  162. package/dist/services/set.d.ts +38 -0
  163. package/dist/services/set.d.ts.map +1 -0
  164. package/dist/services/set.js +184 -0
  165. package/dist/services/set.js.map +1 -0
  166. package/dist/services/status.d.ts +30 -0
  167. package/dist/services/status.d.ts.map +1 -0
  168. package/dist/services/status.js +35 -0
  169. package/dist/services/status.js.map +1 -0
  170. package/package.json +15 -7
  171. package/src/cli/commands/add.ts +0 -40
  172. package/src/cli/commands/cd.ts +0 -80
  173. package/src/cli/commands/doctor.ts +0 -20
  174. package/src/cli/commands/forget.ts +0 -32
  175. package/src/cli/commands/index.ts +0 -23
  176. package/src/cli/commands/init.ts +0 -43
  177. package/src/cli/commands/list.ts +0 -17
  178. package/src/cli/commands/pull.ts +0 -31
  179. package/src/cli/commands/push.ts +0 -31
  180. package/src/cli/commands/set.ts +0 -47
  181. package/src/cli/commands/status.ts +0 -18
  182. package/src/cli/sync-output.test.ts +0 -173
  183. package/src/cli/sync-output.ts +0 -200
  184. package/src/config/sync.test.ts +0 -609
  185. package/src/config/sync.ts +0 -572
  186. package/src/config/xdg.ts +0 -138
  187. package/src/lib/string.test.ts +0 -13
  188. package/src/lib/string.ts +0 -3
  189. package/src/lib/validation.test.ts +0 -32
  190. package/src/lib/validation.ts +0 -11
  191. package/src/services/add.ts +0 -178
  192. package/src/services/config-file.test.ts +0 -161
  193. package/src/services/config-file.ts +0 -101
  194. package/src/services/crypto.test.ts +0 -132
  195. package/src/services/crypto.ts +0 -83
  196. package/src/services/doctor.ts +0 -142
  197. package/src/services/error.ts +0 -6
  198. package/src/services/filesystem.test.ts +0 -171
  199. package/src/services/filesystem.ts +0 -183
  200. package/src/services/forget.ts +0 -261
  201. package/src/services/git.test.ts +0 -83
  202. package/src/services/git.ts +0 -74
  203. package/src/services/init.test.ts +0 -109
  204. package/src/services/init.ts +0 -244
  205. package/src/services/list.ts +0 -63
  206. package/src/services/local-materialization.ts +0 -421
  207. package/src/services/local-snapshot.ts +0 -173
  208. package/src/services/paths.test.ts +0 -74
  209. package/src/services/paths.ts +0 -98
  210. package/src/services/pull.ts +0 -144
  211. package/src/services/push.ts +0 -168
  212. package/src/services/repo-artifacts.ts +0 -262
  213. package/src/services/repo-snapshot.ts +0 -197
  214. package/src/services/runtime.ts +0 -57
  215. package/src/services/set.ts +0 -383
  216. package/src/services/status.ts +0 -57
  217. package/src/services/sync.dry-run.test.ts +0 -179
  218. package/src/services/sync.runtime.test.ts +0 -756
  219. package/src/services/sync.service.test.ts +0 -1169
  220. package/src/test/helpers/sync-fixture.ts +0 -47
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-artifacts.js","sourceRoot":"","sources":["../../src/services/repo-artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type SnapshotNode } from "./local-snapshot.js";
2
+ import type { EffectiveSyncConfig } from "./runtime.js";
3
+ type RepositorySnapshotConfig = EffectiveSyncConfig;
4
+ export declare const buildRepositorySnapshot: (syncDirectory: string, config: RepositorySnapshotConfig) => Promise<Map<string, SnapshotNode>>;
5
+ export {};
6
+ //# sourceMappingURL=repo-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-snapshot.d.ts","sourceRoot":"","sources":["../../src/services/repo-snapshot.ts"],"names":[],"mappings":"AAYA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,KAAK,wBAAwB,GAAG,mBAAmB,CAAC;AA8LpD,eAAO,MAAM,uBAAuB,GAClC,eAAe,MAAM,EACrB,QAAQ,wBAAwB,uCAyDjC,CAAC"}
@@ -0,0 +1,163 @@
1
+ import { lstat, readFile, readlink } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { resolveManagedSyncMode, resolveSyncArtifactsDirectoryPath, resolveSyncRule, } from "#app/config/sync.js";
4
+ import { isExecutableMode } from "#app/lib/file-mode.js";
5
+ import { decryptSecretFile } from "./crypto.js";
6
+ import { DevsyncError, wrapUnknownError } from "./error.js";
7
+ import { getPathStats, listDirectoryEntries } from "./filesystem.js";
8
+ import { addSnapshotNode } from "./local-snapshot.js";
9
+ import { assertStorageSafeRepoPath, collectArtifactNamespaces, parseArtifactRelativePath, } from "./repo-artifacts.js";
10
+ const isActiveStorageMachine = (storageMachine, config, repoPath) => {
11
+ const rule = resolveSyncRule(config, repoPath, config.activeMachine);
12
+ if (rule === undefined) {
13
+ return false;
14
+ }
15
+ return rule.machine === storageMachine;
16
+ };
17
+ const readArtifactLeaf = async (absolutePath, storagePath, config, snapshot) => {
18
+ const artifact = parseArtifactRelativePath(storagePath);
19
+ if (!isActiveStorageMachine(artifact.machine, config, artifact.repoPath)) {
20
+ return;
21
+ }
22
+ assertStorageSafeRepoPath(artifact.repoPath);
23
+ const rule = resolveSyncRule(config, artifact.repoPath, config.activeMachine);
24
+ if (rule === undefined) {
25
+ throw new DevsyncError("Repository path is not managed by the current sync configuration.", {
26
+ code: "UNMANAGED_SYNC_PATH",
27
+ details: [
28
+ `Repository path: ${artifact.repoPath}`,
29
+ `Context: ${storagePath}`,
30
+ ],
31
+ hint: "Add the parent path to devsync, or remove stray artifacts from the sync repository.",
32
+ });
33
+ }
34
+ if (rule.machine !== artifact.machine) {
35
+ throw new DevsyncError("Repository artifact is stored under the wrong machine namespace.", {
36
+ code: "REPO_PROFILE_MISMATCH",
37
+ details: [
38
+ `Repository path: ${artifact.repoPath}`,
39
+ `Stored machine: ${artifact.machine}`,
40
+ `Expected machine: ${rule.machine}`,
41
+ ],
42
+ });
43
+ }
44
+ if (artifact.secret) {
45
+ if (rule.mode !== "secret") {
46
+ throw new DevsyncError("Plain sync path is stored as a secret artifact in the repository.", {
47
+ code: "PLAIN_STORED_SECRET",
48
+ details: [`Repository path: ${storagePath}`],
49
+ });
50
+ }
51
+ const stats = await lstat(absolutePath);
52
+ if (!stats.isFile()) {
53
+ throw new DevsyncError("Secret repository artifacts must be regular files, not symlinks.", {
54
+ code: "SECRET_ARTIFACT_SYMLINK",
55
+ details: [`Repository path: ${storagePath}`],
56
+ });
57
+ }
58
+ let contents;
59
+ try {
60
+ contents = await decryptSecretFile(await readFile(absolutePath, "utf8"), config.age.identityFile);
61
+ }
62
+ catch (error) {
63
+ throw wrapUnknownError("Failed to decrypt a secret repository artifact.", error, {
64
+ code: "SECRET_ARTIFACT_DECRYPT_FAILED",
65
+ details: [
66
+ `Repository path: ${storagePath}`,
67
+ `Identity file: ${config.age.identityFile}`,
68
+ ],
69
+ });
70
+ }
71
+ addSnapshotNode(snapshot, artifact.repoPath, {
72
+ contents,
73
+ executable: isExecutableMode(stats.mode),
74
+ secret: true,
75
+ type: "file",
76
+ });
77
+ return;
78
+ }
79
+ const mode = resolveManagedSyncMode(config, artifact.repoPath, config.activeMachine, storagePath);
80
+ const stats = await lstat(absolutePath);
81
+ if (stats.isSymbolicLink()) {
82
+ if (mode === "secret") {
83
+ throw new DevsyncError("Secret sync path is stored as a plain artifact in the repository.", {
84
+ code: "SECRET_STORED_PLAIN",
85
+ details: [`Repository path: ${storagePath}`],
86
+ });
87
+ }
88
+ addSnapshotNode(snapshot, artifact.repoPath, {
89
+ linkTarget: await readlink(absolutePath),
90
+ type: "symlink",
91
+ });
92
+ return;
93
+ }
94
+ if (!stats.isFile()) {
95
+ throw new DevsyncError("Repository contains an unsupported plain artifact type.", {
96
+ code: "UNSUPPORTED_REPO_ENTRY",
97
+ details: [`Repository path: ${storagePath}`],
98
+ });
99
+ }
100
+ if (mode === "secret") {
101
+ throw new DevsyncError("Secret sync path is stored as a plain artifact in the repository.", {
102
+ code: "SECRET_STORED_PLAIN",
103
+ details: [`Repository path: ${storagePath}`],
104
+ });
105
+ }
106
+ addSnapshotNode(snapshot, artifact.repoPath, {
107
+ contents: await readFile(absolutePath),
108
+ executable: isExecutableMode(stats.mode),
109
+ secret: false,
110
+ type: "file",
111
+ });
112
+ };
113
+ const walkArtifactTree = async (rootDirectory, config, snapshot, prefix = "") => {
114
+ const entries = await listDirectoryEntries(rootDirectory);
115
+ for (const entry of entries) {
116
+ const absolutePath = join(rootDirectory, entry.name);
117
+ const storagePath = prefix === "" ? entry.name : `${prefix}/${entry.name}`;
118
+ const stats = await lstat(absolutePath);
119
+ if (stats.isDirectory()) {
120
+ await walkArtifactTree(absolutePath, config, snapshot, storagePath);
121
+ continue;
122
+ }
123
+ await readArtifactLeaf(absolutePath, storagePath, config, snapshot);
124
+ }
125
+ };
126
+ export const buildRepositorySnapshot = async (syncDirectory, config) => {
127
+ const snapshot = new Map();
128
+ const artifactsDirectory = resolveSyncArtifactsDirectoryPath(syncDirectory);
129
+ const namespaces = collectArtifactNamespaces(config.entries);
130
+ await Promise.all([...namespaces].map(async (namespace) => {
131
+ const namespaceDirectory = join(artifactsDirectory, namespace);
132
+ const namespaceStats = await getPathStats(namespaceDirectory);
133
+ if (namespaceStats?.isDirectory()) {
134
+ await walkArtifactTree(namespaceDirectory, config, snapshot, namespace);
135
+ }
136
+ }));
137
+ for (const entry of config.entries) {
138
+ if (entry.kind !== "directory") {
139
+ continue;
140
+ }
141
+ const rule = resolveSyncRule(config, entry.repoPath, config.activeMachine);
142
+ if (rule === undefined) {
143
+ continue;
144
+ }
145
+ const hasTrackedChildren = [...snapshot.keys()].some((repoPath) => {
146
+ return repoPath.startsWith(`${entry.repoPath}/`);
147
+ });
148
+ const expectedPath = join(artifactsDirectory, rule.machine, ...entry.repoPath.split("/"));
149
+ const expectedStats = await getPathStats(expectedPath);
150
+ if (expectedStats !== undefined && !expectedStats.isDirectory()) {
151
+ throw new DevsyncError("Directory sync entry is not stored as a directory in the repository.", {
152
+ code: "DIRECTORY_ENTRY_NOT_DIRECTORY",
153
+ details: [`Repository path: ${entry.repoPath}`],
154
+ });
155
+ }
156
+ if ((expectedStats?.isDirectory() ?? false) &&
157
+ (rule.mode !== "ignore" || hasTrackedChildren)) {
158
+ addSnapshotNode(snapshot, entry.repoPath, { type: "directory" });
159
+ }
160
+ }
161
+ return snapshot;
162
+ };
163
+ //# sourceMappingURL=repo-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-snapshot.js","sourceRoot":"","sources":["../../src/services/repo-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type ActiveMachineSelection, type GlobalDevsyncConfig } from "#app/config/global-config.js";
2
+ import { type ResolvedSyncConfig, type ResolvedSyncConfigAge } from "#app/config/sync.js";
3
+ export type ResolvedAgeConfig = Readonly<{
4
+ configuredIdentityFile: string;
5
+ identityFile: string;
6
+ recipients: readonly string[];
7
+ }>;
8
+ export type SyncPaths = Readonly<{
9
+ artifactsDirectory: string;
10
+ configPath: string;
11
+ globalConfigPath: string;
12
+ homeDirectory: string;
13
+ syncDirectory: string;
14
+ }>;
15
+ export type SyncContext = Readonly<{
16
+ cwd: string;
17
+ environment: NodeJS.ProcessEnv;
18
+ paths: SyncPaths;
19
+ }>;
20
+ export type EffectiveSyncConfig = ResolvedSyncConfig & Readonly<{
21
+ activeMachine?: string;
22
+ age: ResolvedAgeConfig;
23
+ }>;
24
+ export type LoadedSyncConfig = Readonly<{
25
+ effectiveConfig: EffectiveSyncConfig;
26
+ fullConfig: ResolvedSyncConfig;
27
+ globalConfig?: GlobalDevsyncConfig;
28
+ }>;
29
+ export declare const createSyncPaths: (environment?: NodeJS.ProcessEnv) => SyncPaths;
30
+ export declare const createSyncContext: (options?: Readonly<{
31
+ cwd?: string;
32
+ environment?: NodeJS.ProcessEnv;
33
+ }>) => SyncContext;
34
+ export declare const ensureSyncRepository: (context: Pick<SyncContext, "paths">) => Promise<void>;
35
+ export declare const resolveAgeFromSyncConfig: (age: ResolvedSyncConfigAge, environment: NodeJS.ProcessEnv) => ResolvedAgeConfig;
36
+ export declare const buildEffectiveSyncConfig: (fullConfig: ResolvedSyncConfig, selection: ActiveMachineSelection, age: ResolvedAgeConfig) => EffectiveSyncConfig;
37
+ export declare const loadSyncConfig: (context: SyncContext, options?: Readonly<{
38
+ machine?: string;
39
+ }>) => Promise<LoadedSyncConfig>;
40
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/services/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EAIzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAK3B,MAAM,qBAAqB,CAAC;AAU7B,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAClD,QAAQ,CAAC;IACP,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,iBAAiB,CAAC;CACxB,CAAC,CAAC;AAEL,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,eAAe,EAAE,mBAAmB,CAAC;IACrC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC,CAAC;AAEH,eAAO,MAAM,eAAe,GAC1B,cAAa,MAAM,CAAC,UAAwB,KAC3C,SAUF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAS,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACjC,CAAM,KACN,WAQF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,kBAGpC,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,KAAK,qBAAqB,EAC1B,aAAa,MAAM,CAAC,UAAU,KAC7B,iBAMF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,YAAY,kBAAkB,EAC9B,WAAW,sBAAsB,EACjC,KAAK,iBAAiB,KACrB,mBAoBF,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,WAAW,EACpB,UAAS,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAM,KACN,OAAO,CAAC,gBAAgB,CA+B1B,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { readGlobalDevsyncConfig, resolveActiveMachineSelection, resolveConfiguredIdentityFile, } from "#app/config/global-config.js";
2
+ import { readSyncConfig, resolveSyncArtifactsDirectoryPath, resolveSyncConfigFilePath, syncDefaultMachine, } from "#app/config/sync.js";
3
+ import { resolveDevsyncGlobalConfigFilePath, resolveDevsyncSyncDirectory, resolveHomeDirectory, } from "#app/config/xdg.js";
4
+ import { DevsyncError } from "./error.js";
5
+ import { ensureGitRepository } from "./git.js";
6
+ export const createSyncPaths = (environment = process.env) => {
7
+ const syncDirectory = resolveDevsyncSyncDirectory(environment);
8
+ return {
9
+ artifactsDirectory: resolveSyncArtifactsDirectoryPath(syncDirectory),
10
+ configPath: resolveSyncConfigFilePath(syncDirectory),
11
+ globalConfigPath: resolveDevsyncGlobalConfigFilePath(environment),
12
+ homeDirectory: resolveHomeDirectory(environment),
13
+ syncDirectory,
14
+ };
15
+ };
16
+ export const createSyncContext = (options = {}) => {
17
+ const environment = options.environment ?? process.env;
18
+ return {
19
+ cwd: options.cwd ?? process.cwd(),
20
+ environment,
21
+ paths: createSyncPaths(environment),
22
+ };
23
+ };
24
+ export const ensureSyncRepository = async (context) => {
25
+ await ensureGitRepository(context.paths.syncDirectory);
26
+ };
27
+ export const resolveAgeFromSyncConfig = (age, environment) => {
28
+ return {
29
+ configuredIdentityFile: age.identityFile,
30
+ identityFile: resolveConfiguredIdentityFile(age.identityFile, environment),
31
+ recipients: age.recipients,
32
+ };
33
+ };
34
+ export const buildEffectiveSyncConfig = (fullConfig, selection, age) => {
35
+ const activeMachine = selection.mode === "single" ? selection.machine : undefined;
36
+ const effectiveMachine = activeMachine !== undefined && activeMachine !== syncDefaultMachine
37
+ ? activeMachine
38
+ : syncDefaultMachine;
39
+ const entries = fullConfig.entries.filter((entry) => entry.machines.length === 0 || entry.machines.includes(effectiveMachine));
40
+ return {
41
+ ...fullConfig,
42
+ entries,
43
+ age,
44
+ ...(activeMachine !== undefined ? { activeMachine } : {}),
45
+ };
46
+ };
47
+ export const loadSyncConfig = async (context, options = {}) => {
48
+ const fullConfig = await readSyncConfig(context.paths.syncDirectory, context.environment);
49
+ const globalConfig = await readGlobalDevsyncConfig(context.environment);
50
+ const selection = options.machine === undefined
51
+ ? resolveActiveMachineSelection(globalConfig)
52
+ : {
53
+ machine: options.machine,
54
+ mode: "single",
55
+ };
56
+ const rawAge = fullConfig.age;
57
+ if (rawAge === undefined) {
58
+ throw new DevsyncError("Age configuration is missing from manifest.json.", {
59
+ code: "AGE_CONFIG_MISSING",
60
+ details: [`Config file: ${context.paths.configPath}`],
61
+ hint: "Run 'devsync init' to set up encryption.",
62
+ });
63
+ }
64
+ const age = resolveAgeFromSyncConfig(rawAge, context.environment);
65
+ return {
66
+ effectiveConfig: buildEffectiveSyncConfig(fullConfig, selection, age),
67
+ fullConfig,
68
+ ...(globalConfig === undefined ? {} : { globalConfig }),
69
+ };
70
+ };
71
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/services/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { readSyncConfig, type SyncMode } from "#app/config/sync.js";
2
+ import { type SyncContext } from "./runtime.js";
3
+ export type SyncSetRequest = Readonly<{
4
+ state: SyncMode;
5
+ target: string;
6
+ }>;
7
+ type SyncSetAction = "added" | "removed" | "unchanged" | "updated";
8
+ type SyncSetReason = "already-set";
9
+ export type SyncSetResult = Readonly<{
10
+ action: SyncSetAction;
11
+ configPath: string;
12
+ entryRepoPath: string;
13
+ localPath: string;
14
+ mode: SyncMode;
15
+ repoPath: string;
16
+ reason?: SyncSetReason;
17
+ syncDirectory: string;
18
+ }>;
19
+ export declare const resolveSetTarget: (target: string, config: Awaited<ReturnType<typeof readSyncConfig>>, context: Pick<SyncContext, "cwd" | "environment" | "paths">) => Promise<{
20
+ entry: Readonly<{
21
+ configuredLocalPath: import("../config/platform.js").ConfiguredLocalPath;
22
+ kind: import("#app/config/sync.js").SyncConfigEntryKind;
23
+ localPath: string;
24
+ machines: readonly string[];
25
+ machinesExplicit: boolean;
26
+ mode: SyncMode;
27
+ modeExplicit: boolean;
28
+ name: string;
29
+ repoPath: string;
30
+ }>;
31
+ localPath: string;
32
+ relativePath: string;
33
+ repoPath: string;
34
+ stats: import("node:fs").Stats | undefined;
35
+ }>;
36
+ export declare const setSyncTargetMode: (request: SyncSetRequest, context: SyncContext) => Promise<SyncSetResult>;
37
+ export {};
38
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/services/set.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,cAAc,EAEd,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAgB7B,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AACnE,KAAK,aAAa,GAAG,aAAa,CAAC;AAEnC,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAUH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,EACd,QAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,EAClD,SAAS,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,aAAa,GAAG,OAAO,CAAC;;;;;;;;;;;;;;;;EAuI5D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,SAAS,cAAc,EACvB,SAAS,WAAW,KACnB,OAAO,CAAC,aAAa,CAgHvB,CAAC"}
@@ -0,0 +1,184 @@
1
+ import { join } from "node:path";
2
+ import { findOwningSyncEntry, readSyncConfig, resolveEntryRelativeRepoPath, } from "#app/config/sync.js";
3
+ import { createSyncConfigDocument, writeValidatedSyncConfig, } from "./config-file.js";
4
+ import { DevsyncError } from "./error.js";
5
+ import { getPathStats } from "./filesystem.js";
6
+ import { buildConfiguredHomeLocalPath, buildRepoPathWithinRoot, isExplicitLocalPath, resolveCommandTargetPath, tryBuildRepoPathWithinRoot, tryNormalizeRepoPathInput, } from "./paths.js";
7
+ import { ensureSyncRepository } from "./runtime.js";
8
+ const computeLocalPath = (entry, repoPath) => {
9
+ const relativePath = resolveEntryRelativeRepoPath(entry, repoPath);
10
+ if (relativePath === undefined || relativePath === "") {
11
+ return entry.localPath;
12
+ }
13
+ return join(entry.localPath, ...relativePath.split("/"));
14
+ };
15
+ export const resolveSetTarget = async (target, config, context) => {
16
+ const trimmedTarget = target.trim();
17
+ if (trimmedTarget.length === 0) {
18
+ throw new DevsyncError("Target path is required.", {
19
+ code: "TARGET_REQUIRED",
20
+ hint: "Pass a tracked path, for example 'devsync mode ~/.ssh/id_ed25519 secret'.",
21
+ });
22
+ }
23
+ const homeDirectory = context.paths.homeDirectory;
24
+ const explicit = isExplicitLocalPath(trimmedTarget);
25
+ const localTargetPath = resolveCommandTargetPath(trimmedTarget, context.environment, context.cwd);
26
+ const localRepoPath = explicit
27
+ ? buildRepoPathWithinRoot(localTargetPath, homeDirectory, "Sync set target")
28
+ : tryBuildRepoPathWithinRoot(localTargetPath, homeDirectory, "Sync set target");
29
+ // Phase 1: Try resolving as a local path
30
+ if (localRepoPath !== undefined) {
31
+ const localStats = await getPathStats(localTargetPath);
32
+ if (explicit && localStats === undefined) {
33
+ throw new DevsyncError("Sync set target does not exist.", {
34
+ code: "TARGET_NOT_FOUND",
35
+ details: [`Target: ${localTargetPath}`],
36
+ hint: "Use an existing local path, or pass a repository path inside a tracked directory.",
37
+ });
38
+ }
39
+ const exactEntry = config.entries.find((e) => e.repoPath === localRepoPath);
40
+ if (exactEntry !== undefined) {
41
+ return {
42
+ entry: exactEntry,
43
+ localPath: localTargetPath,
44
+ relativePath: "",
45
+ repoPath: localRepoPath,
46
+ stats: localStats,
47
+ };
48
+ }
49
+ const parentEntry = findOwningSyncEntry(config, localRepoPath);
50
+ if (parentEntry?.kind === "directory") {
51
+ const relativePath = resolveEntryRelativeRepoPath(parentEntry, localRepoPath);
52
+ if (relativePath !== undefined) {
53
+ return {
54
+ entry: parentEntry,
55
+ localPath: localTargetPath,
56
+ relativePath,
57
+ repoPath: localRepoPath,
58
+ stats: localStats,
59
+ };
60
+ }
61
+ }
62
+ if (explicit) {
63
+ throw new DevsyncError("Local set target is not inside a tracked directory entry.", {
64
+ code: "TARGET_NOT_TRACKED",
65
+ details: [`Target: ${trimmedTarget}`],
66
+ hint: "Track the parent directory first with 'devsync track', then use 'devsync mode' on the child path.",
67
+ });
68
+ }
69
+ }
70
+ // Phase 2: Fallback to repo path resolution
71
+ const repoPath = tryNormalizeRepoPathInput(trimmedTarget);
72
+ if (repoPath === undefined) {
73
+ throw new DevsyncError("Sync set target is not a valid local or repository path.", {
74
+ code: "INVALID_SET_TARGET",
75
+ details: [`Target: ${trimmedTarget}`],
76
+ hint: "Use an absolute path, a cwd-relative path, or a repository path like '.config/tool/file.json'.",
77
+ });
78
+ }
79
+ const exactEntry = config.entries.find((e) => e.repoPath === repoPath);
80
+ if (exactEntry !== undefined) {
81
+ const localPath = computeLocalPath(exactEntry, repoPath);
82
+ return {
83
+ entry: exactEntry,
84
+ localPath,
85
+ relativePath: "",
86
+ repoPath,
87
+ stats: await getPathStats(localPath),
88
+ };
89
+ }
90
+ const entry = findOwningSyncEntry(config, repoPath);
91
+ const relativePath = entry?.kind === "directory"
92
+ ? resolveEntryRelativeRepoPath(entry, repoPath)
93
+ : undefined;
94
+ if (entry === undefined || relativePath === undefined) {
95
+ throw new DevsyncError("Repository set target is not inside a tracked directory entry.", {
96
+ code: "TARGET_NOT_TRACKED",
97
+ details: [`Target: ${trimmedTarget}`],
98
+ hint: "Use a repository path under an existing tracked directory, or track it first with 'devsync track'.",
99
+ });
100
+ }
101
+ const localPath = computeLocalPath(entry, repoPath);
102
+ return {
103
+ entry,
104
+ localPath,
105
+ relativePath,
106
+ repoPath,
107
+ stats: await getPathStats(localPath),
108
+ };
109
+ };
110
+ export const setSyncTargetMode = async (request, context) => {
111
+ await ensureSyncRepository(context);
112
+ const config = await readSyncConfig(context.paths.syncDirectory, context.environment);
113
+ const target = await resolveSetTarget(request.target, config, context);
114
+ const buildResult = (action, extras) => ({
115
+ action,
116
+ configPath: context.paths.configPath,
117
+ entryRepoPath: target.entry.repoPath,
118
+ localPath: target.localPath,
119
+ mode: request.state,
120
+ repoPath: target.repoPath,
121
+ syncDirectory: context.paths.syncDirectory,
122
+ ...extras,
123
+ });
124
+ if (target.relativePath === "") {
125
+ const action = target.entry.mode === request.state ? "unchanged" : "updated";
126
+ const nextConfig = createSyncConfigDocument({
127
+ ...config,
128
+ entries: config.entries.map((entry) => {
129
+ if (entry.repoPath !== target.entry.repoPath) {
130
+ return entry;
131
+ }
132
+ return {
133
+ ...entry,
134
+ mode: request.state,
135
+ };
136
+ }),
137
+ });
138
+ if (action !== "unchanged") {
139
+ await writeValidatedSyncConfig(context.paths.syncDirectory, nextConfig, context.environment);
140
+ }
141
+ return buildResult(action);
142
+ }
143
+ const childKind = target.stats?.isDirectory() ? "directory" : "file";
144
+ const childRepoPath = target.repoPath;
145
+ const childConfiguredLocalPath = buildConfiguredHomeLocalPath(childRepoPath);
146
+ const existingChild = config.entries.find((e) => e.repoPath === childRepoPath);
147
+ if (existingChild !== undefined) {
148
+ if (existingChild.mode === request.state) {
149
+ return buildResult("unchanged", { reason: "already-set" });
150
+ }
151
+ const nextConfig = createSyncConfigDocument({
152
+ ...config,
153
+ entries: config.entries.map((entry) => {
154
+ if (entry.repoPath !== childRepoPath) {
155
+ return entry;
156
+ }
157
+ return { ...entry, mode: request.state };
158
+ }),
159
+ });
160
+ await writeValidatedSyncConfig(context.paths.syncDirectory, nextConfig, context.environment);
161
+ return buildResult("updated");
162
+ }
163
+ if (request.state === target.entry.mode) {
164
+ return buildResult("unchanged");
165
+ }
166
+ const newEntry = {
167
+ configuredLocalPath: childConfiguredLocalPath,
168
+ kind: childKind,
169
+ localPath: target.localPath,
170
+ machines: [],
171
+ machinesExplicit: false,
172
+ mode: request.state,
173
+ modeExplicit: true,
174
+ name: childRepoPath,
175
+ repoPath: childRepoPath,
176
+ };
177
+ const nextConfig = createSyncConfigDocument({
178
+ ...config,
179
+ entries: [...config.entries, newEntry],
180
+ });
181
+ await writeValidatedSyncConfig(context.paths.syncDirectory, nextConfig, context.environment);
182
+ return buildResult("added");
183
+ };
184
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/services/set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { SyncConfigEntryKind, SyncMode } from "#app/config/sync.js";
2
+ import { buildPullResultFromPlan } from "./pull.js";
3
+ import { buildPushResultFromPlan } from "./push.js";
4
+ import { type SyncContext } from "./runtime.js";
5
+ export type SyncStatusEntry = Readonly<{
6
+ kind: SyncConfigEntryKind;
7
+ localPath: string;
8
+ machines: readonly string[];
9
+ mode: SyncMode;
10
+ name: string;
11
+ repoPath: string;
12
+ }>;
13
+ export type SyncStatusResult = Readonly<{
14
+ activeMachine?: string;
15
+ configPath: string;
16
+ entries: readonly SyncStatusEntry[];
17
+ entryCount: number;
18
+ pull: ReturnType<typeof buildPullResultFromPlan> & {
19
+ preview: readonly string[];
20
+ };
21
+ push: ReturnType<typeof buildPushResultFromPlan> & {
22
+ preview: readonly string[];
23
+ };
24
+ recipientCount: number;
25
+ syncDirectory: string;
26
+ }>;
27
+ export declare const getSyncStatus: (context: SyncContext, options?: Readonly<{
28
+ machine?: string;
29
+ }>) => Promise<SyncStatusResult>;
30
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/services/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAGL,uBAAuB,EACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,uBAAuB,EACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,GAAG;QACjD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,IAAI,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,GAAG;QACjD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH,eAAO,MAAM,aAAa,GACxB,SAAS,WAAW,EACpB,UAAS,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAM,KACN,OAAO,CAAC,gBAAgB,CAmC1B,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { buildPullPlan, buildPullPlanPreview, buildPullResultFromPlan, } from "./pull.js";
2
+ import { buildPushPlan, buildPushPlanPreview, buildPushResultFromPlan, } from "./push.js";
3
+ import { ensureSyncRepository, loadSyncConfig, } from "./runtime.js";
4
+ export const getSyncStatus = async (context, options = {}) => {
5
+ await ensureSyncRepository(context);
6
+ const { effectiveConfig, fullConfig } = await loadSyncConfig(context, options);
7
+ const pushPlan = await buildPushPlan(effectiveConfig, context);
8
+ const pullPlan = await buildPullPlan(effectiveConfig, context);
9
+ return {
10
+ ...(effectiveConfig.activeMachine === undefined
11
+ ? {}
12
+ : { activeMachine: effectiveConfig.activeMachine }),
13
+ configPath: context.paths.configPath,
14
+ entries: fullConfig.entries.map((entry) => ({
15
+ kind: entry.kind,
16
+ localPath: entry.localPath,
17
+ machines: entry.machines,
18
+ mode: entry.mode,
19
+ name: entry.name,
20
+ repoPath: entry.repoPath,
21
+ })),
22
+ entryCount: fullConfig.entries.length,
23
+ pull: {
24
+ ...buildPullResultFromPlan(pullPlan, context, true),
25
+ preview: buildPullPlanPreview(pullPlan),
26
+ },
27
+ push: {
28
+ ...buildPushResultFromPlan(pushPlan, context, true),
29
+ preview: buildPushPlanPreview(pushPlan),
30
+ },
31
+ recipientCount: effectiveConfig.age.recipients.length,
32
+ syncDirectory: context.paths.syncDirectory,
33
+ };
34
+ };
35
+ //# sourceMappingURL=status.js.map