@tinyrack/dotweave 0.42.13 → 0.42.19

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 (216) hide show
  1. package/README.md +6 -2
  2. package/dist/application.d.ts +0 -3
  3. package/dist/application.d.ts.map +1 -1
  4. package/dist/application.js +23 -22
  5. package/dist/application.js.map +1 -1
  6. package/dist/cli/autocomplete.d.ts +5 -4
  7. package/dist/cli/autocomplete.d.ts.map +1 -1
  8. package/dist/cli/autocomplete.js +33 -28
  9. package/dist/cli/autocomplete.js.map +1 -1
  10. package/dist/cli/cd.d.ts +2 -2
  11. package/dist/cli/cd.d.ts.map +1 -1
  12. package/dist/cli/cd.js +1 -4
  13. package/dist/cli/cd.js.map +1 -1
  14. package/dist/cli/doctor.d.ts +2 -2
  15. package/dist/cli/doctor.d.ts.map +1 -1
  16. package/dist/cli/doctor.js +19 -28
  17. package/dist/cli/doctor.js.map +1 -1
  18. package/dist/cli/index.d.ts +1 -3
  19. package/dist/cli/index.d.ts.map +1 -1
  20. package/dist/cli/index.js +5 -5
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/init.d.ts +2 -2
  23. package/dist/cli/init.d.ts.map +1 -1
  24. package/dist/cli/init.js +9 -15
  25. package/dist/cli/init.js.map +1 -1
  26. package/dist/cli/profile/index.d.ts +1 -1
  27. package/dist/cli/profile/index.d.ts.map +1 -1
  28. package/dist/cli/profile/list.d.ts +2 -2
  29. package/dist/cli/profile/list.d.ts.map +1 -1
  30. package/dist/cli/profile/list.js +13 -23
  31. package/dist/cli/profile/list.js.map +1 -1
  32. package/dist/cli/profile/use.d.ts +2 -2
  33. package/dist/cli/profile/use.d.ts.map +1 -1
  34. package/dist/cli/profile/use.js +4 -13
  35. package/dist/cli/profile/use.js.map +1 -1
  36. package/dist/cli/pull.d.ts +2 -2
  37. package/dist/cli/pull.d.ts.map +1 -1
  38. package/dist/cli/pull.js +22 -41
  39. package/dist/cli/pull.js.map +1 -1
  40. package/dist/cli/push.d.ts +2 -2
  41. package/dist/cli/push.d.ts.map +1 -1
  42. package/dist/cli/push.js +17 -23
  43. package/dist/cli/push.js.map +1 -1
  44. package/dist/cli/root-commands.d.ts +9 -10
  45. package/dist/cli/root-commands.d.ts.map +1 -1
  46. package/dist/cli/root-commands.js +0 -4
  47. package/dist/cli/root-commands.js.map +1 -1
  48. package/dist/cli/shared-flags.d.ts +9 -0
  49. package/dist/cli/shared-flags.d.ts.map +1 -0
  50. package/dist/cli/shared-flags.js +8 -0
  51. package/dist/cli/shared-flags.js.map +1 -0
  52. package/dist/cli/status.d.ts +2 -2
  53. package/dist/cli/status.d.ts.map +1 -1
  54. package/dist/cli/status.js +26 -55
  55. package/dist/cli/status.js.map +1 -1
  56. package/dist/cli/track.d.ts +2 -2
  57. package/dist/cli/track.d.ts.map +1 -1
  58. package/dist/cli/track.js +14 -33
  59. package/dist/cli/track.js.map +1 -1
  60. package/dist/cli/untrack.d.ts +2 -2
  61. package/dist/cli/untrack.d.ts.map +1 -1
  62. package/dist/cli/untrack.js +5 -14
  63. package/dist/cli/untrack.js.map +1 -1
  64. package/dist/config/constants.d.ts +1 -1
  65. package/dist/config/constants.d.ts.map +1 -1
  66. package/dist/config/constants.js +1 -1
  67. package/dist/config/constants.js.map +1 -1
  68. package/dist/config/global-config.d.ts +3 -3
  69. package/dist/config/global-config.d.ts.map +1 -1
  70. package/dist/config/global-config.js +7 -8
  71. package/dist/config/global-config.js.map +1 -1
  72. package/dist/config/identity-file.d.ts +0 -7
  73. package/dist/config/identity-file.d.ts.map +1 -1
  74. package/dist/config/identity-file.js +2 -44
  75. package/dist/config/identity-file.js.map +1 -1
  76. package/dist/config/runtime-env.d.ts.map +1 -1
  77. package/dist/config/runtime-env.js +2 -7
  78. package/dist/config/runtime-env.js.map +1 -1
  79. package/dist/config/{sync-entry.d.ts → sync-queries.d.ts} +5 -3
  80. package/dist/config/sync-queries.d.ts.map +1 -0
  81. package/dist/config/{sync-entry.js → sync-queries.js} +15 -6
  82. package/dist/config/sync-queries.js.map +1 -0
  83. package/dist/config/sync-schema.d.ts +9 -7
  84. package/dist/config/sync-schema.d.ts.map +1 -1
  85. package/dist/config/sync-schema.js +53 -18
  86. package/dist/config/sync-schema.js.map +1 -1
  87. package/dist/config/xdg.d.ts.map +1 -1
  88. package/dist/config/xdg.js +15 -34
  89. package/dist/config/xdg.js.map +1 -1
  90. package/dist/lib/error.js +1 -1
  91. package/dist/lib/error.js.map +1 -1
  92. package/dist/lib/git.d.ts +3 -4
  93. package/dist/lib/git.d.ts.map +1 -1
  94. package/dist/lib/git.js +7 -48
  95. package/dist/lib/git.js.map +1 -1
  96. package/dist/lib/jsonc.d.ts +1 -1
  97. package/dist/lib/jsonc.d.ts.map +1 -1
  98. package/dist/lib/jsonc.js +1 -1
  99. package/dist/lib/jsonc.js.map +1 -1
  100. package/dist/lib/path.d.ts +3 -16
  101. package/dist/lib/path.d.ts.map +1 -1
  102. package/dist/lib/path.js +30 -19
  103. package/dist/lib/path.js.map +1 -1
  104. package/dist/lib/string.d.ts +1 -4
  105. package/dist/lib/string.d.ts.map +1 -1
  106. package/dist/lib/string.js +6 -4
  107. package/dist/lib/string.js.map +1 -1
  108. package/dist/lib/version.d.ts.map +1 -1
  109. package/dist/lib/version.js +2 -2
  110. package/dist/lib/version.js.map +1 -1
  111. package/dist/services/autocomplete.js +13 -13
  112. package/dist/services/autocomplete.js.map +1 -1
  113. package/dist/services/config-file.d.ts +4 -4
  114. package/dist/services/config-file.d.ts.map +1 -1
  115. package/dist/services/config-file.js +7 -8
  116. package/dist/services/config-file.js.map +1 -1
  117. package/dist/services/doctor.d.ts +1 -4
  118. package/dist/services/doctor.d.ts.map +1 -1
  119. package/dist/services/doctor.js +10 -37
  120. package/dist/services/doctor.js.map +1 -1
  121. package/dist/services/init.d.ts +1 -5
  122. package/dist/services/init.d.ts.map +1 -1
  123. package/dist/services/init.js +25 -59
  124. package/dist/services/init.js.map +1 -1
  125. package/dist/services/local-snapshot.d.ts +2 -7
  126. package/dist/services/local-snapshot.d.ts.map +1 -1
  127. package/dist/services/local-snapshot.js +12 -35
  128. package/dist/services/local-snapshot.js.map +1 -1
  129. package/dist/services/profile.d.ts +0 -4
  130. package/dist/services/profile.d.ts.map +1 -1
  131. package/dist/services/profile.js +13 -22
  132. package/dist/services/profile.js.map +1 -1
  133. package/dist/services/pull-apply.d.ts +30 -0
  134. package/dist/services/pull-apply.d.ts.map +1 -0
  135. package/dist/services/{local-materialization.js → pull-apply.js} +150 -210
  136. package/dist/services/pull-apply.js.map +1 -0
  137. package/dist/services/pull.d.ts +7 -10
  138. package/dist/services/pull.d.ts.map +1 -1
  139. package/dist/services/pull.js +19 -30
  140. package/dist/services/pull.js.map +1 -1
  141. package/dist/services/push.d.ts +4 -7
  142. package/dist/services/push.d.ts.map +1 -1
  143. package/dist/services/push.js +15 -38
  144. package/dist/services/push.js.map +1 -1
  145. package/dist/services/repo-artifacts.d.ts +5 -6
  146. package/dist/services/repo-artifacts.d.ts.map +1 -1
  147. package/dist/services/repo-artifacts.js +21 -60
  148. package/dist/services/repo-artifacts.js.map +1 -1
  149. package/dist/services/repo-snapshot.d.ts +2 -3
  150. package/dist/services/repo-snapshot.d.ts.map +1 -1
  151. package/dist/services/repo-snapshot.js +14 -26
  152. package/dist/services/repo-snapshot.js.map +1 -1
  153. package/dist/services/status.d.ts +1 -5
  154. package/dist/services/status.d.ts.map +1 -1
  155. package/dist/services/status.js +7 -17
  156. package/dist/services/status.js.map +1 -1
  157. package/dist/services/{runtime.d.ts → sync-context.d.ts} +9 -3
  158. package/dist/services/sync-context.d.ts.map +1 -0
  159. package/dist/services/{runtime.js → sync-context.js} +14 -7
  160. package/dist/services/sync-context.js.map +1 -0
  161. package/dist/services/{set.d.ts → sync-mode.d.ts} +7 -9
  162. package/dist/services/sync-mode.d.ts.map +1 -0
  163. package/dist/services/{set.js → sync-mode.js} +9 -23
  164. package/dist/services/sync-mode.js.map +1 -0
  165. package/dist/services/{paths.d.ts → sync-paths.d.ts} +2 -2
  166. package/dist/services/sync-paths.d.ts.map +1 -0
  167. package/dist/services/{paths.js → sync-paths.js} +4 -6
  168. package/dist/services/sync-paths.js.map +1 -0
  169. package/dist/services/terminal/logger.d.ts +30 -5
  170. package/dist/services/terminal/logger.d.ts.map +1 -1
  171. package/dist/services/terminal/logger.js +61 -14
  172. package/dist/services/terminal/logger.js.map +1 -1
  173. package/dist/services/terminal/path-completion.d.ts +2 -2
  174. package/dist/services/terminal/path-completion.d.ts.map +1 -1
  175. package/dist/services/terminal/path-completion.js +16 -13
  176. package/dist/services/terminal/path-completion.js.map +1 -1
  177. package/dist/services/terminal/shell.d.ts +1 -12
  178. package/dist/services/terminal/shell.d.ts.map +1 -1
  179. package/dist/services/terminal/shell.js +7 -160
  180. package/dist/services/terminal/shell.js.map +1 -1
  181. package/dist/services/terminal/spinner.d.ts +10 -0
  182. package/dist/services/terminal/spinner.d.ts.map +1 -0
  183. package/dist/services/terminal/spinner.js +61 -0
  184. package/dist/services/terminal/spinner.js.map +1 -0
  185. package/dist/services/terminal/theme.d.ts +31 -0
  186. package/dist/services/terminal/theme.d.ts.map +1 -0
  187. package/dist/services/terminal/theme.js +32 -0
  188. package/dist/services/terminal/theme.js.map +1 -0
  189. package/dist/services/track.d.ts +1 -3
  190. package/dist/services/track.d.ts.map +1 -1
  191. package/dist/services/track.js +7 -23
  192. package/dist/services/track.js.map +1 -1
  193. package/dist/services/untrack.d.ts +0 -2
  194. package/dist/services/untrack.d.ts.map +1 -1
  195. package/dist/services/untrack.js +4 -11
  196. package/dist/services/untrack.js.map +1 -1
  197. package/package.json +1 -2
  198. package/dist/config/sync-entry.d.ts.map +0 -1
  199. package/dist/config/sync-entry.js.map +0 -1
  200. package/dist/config/sync.d.ts +0 -8
  201. package/dist/config/sync.d.ts.map +0 -1
  202. package/dist/config/sync.js +0 -53
  203. package/dist/config/sync.js.map +0 -1
  204. package/dist/services/local-materialization.d.ts +0 -30
  205. package/dist/services/local-materialization.d.ts.map +0 -1
  206. package/dist/services/local-materialization.js.map +0 -1
  207. package/dist/services/paths.d.ts.map +0 -1
  208. package/dist/services/paths.js.map +0 -1
  209. package/dist/services/runtime.d.ts.map +0 -1
  210. package/dist/services/runtime.js.map +0 -1
  211. package/dist/services/set.d.ts.map +0 -1
  212. package/dist/services/set.js.map +0 -1
  213. package/dist/services/terminal/cli-runtime.d.ts +0 -18
  214. package/dist/services/terminal/cli-runtime.d.ts.map +0 -1
  215. package/dist/services/terminal/cli-runtime.js +0 -19
  216. package/dist/services/terminal/cli-runtime.js.map +0 -1
@@ -1,74 +1,104 @@
1
1
  import { realpathSync } from "node:fs";
2
2
  import { chmod, mkdir, mkdtemp, readFile, readlink, rm, } from "node:fs/promises";
3
- import { basename, dirname, isAbsolute, join, posix, resolve } from "node:path";
4
- import { CONSTANTS } from "#app/config/constants.ts";
5
- import { collectChildEntryPaths, findOwningSyncEntry, resolveSyncRule, } from "#app/config/sync.ts";
3
+ import { basename, dirname, join, posix } from "node:path";
4
+ import { AppConstants } from "#app/config/constants.ts";
5
+ import { collectChildEntryPaths, findOwningSyncEntry, resolveSyncRule, } from "#app/config/sync-queries.ts";
6
6
  import { fileContentsEqual, shouldNormalizeTextLineEndings, } from "#app/lib/content.ts";
7
7
  import { DotweaveError } from "#app/lib/error.ts";
8
- import { buildExecutableMode, buildSearchableDirectoryMode, supportsPosixFileModes, } from "#app/lib/file-mode.ts";
8
+ import { buildSearchableDirectoryMode, isExecutableMode, supportsPosixFileModes, } from "#app/lib/file-mode.ts";
9
9
  import { createSymlink, getFollowedPathStats, getPathStats, listDirectoryEntries, removePathAtomically, replacePathAtomically, writeFileNode, } from "#app/lib/filesystem.ts";
10
- import { buildDirectoryKey } from "#app/lib/path.ts";
10
+ import { buildDirectoryKey, normalizeLinkTarget } from "#app/lib/path.ts";
11
11
  import { limitConcurrency } from "#app/lib/promise.ts";
12
- const reportPullPlanningProgress = (reporter, state, repoPath) => {
13
- state.scannedLocalNodeCount += 1;
14
- if ((reporter?.level ?? 0) >= 4) {
15
- reporter?.verbose(`scanned local path ${repoPath} while planning pull`);
16
- return;
12
+ export const buildDesiredDirectoryKeys = (entry, desiredNodes) => {
13
+ const desiredDirectoryKeys = new Set([
14
+ buildDirectoryKey(entry.repoPath),
15
+ ]);
16
+ for (const relativePath of desiredNodes.keys()) {
17
+ const segments = relativePath.split("/");
18
+ for (let index = 1; index < segments.length; index += 1) {
19
+ desiredDirectoryKeys.add(buildDirectoryKey(posix.join(entry.repoPath, ...segments.slice(0, index))));
20
+ }
17
21
  }
18
- if (state.scannedLocalNodeCount % 100 === 0) {
19
- reporter?.start(`Scanned ${state.scannedLocalNodeCount} local paths while planning pull...`);
22
+ return desiredDirectoryKeys;
23
+ };
24
+ export const buildEntryMaterialization = (entry, snapshot, config) => {
25
+ if (entry.kind === "file") {
26
+ const node = snapshot.get(entry.repoPath);
27
+ if (node === undefined) {
28
+ return {
29
+ desiredKeys: new Set(),
30
+ type: "absent",
31
+ };
32
+ }
33
+ if (node.type === "directory") {
34
+ throw new DotweaveError("File sync entry resolves to a directory in the repository.", {
35
+ code: "FILE_ENTRY_RESOLVES_DIRECTORY",
36
+ details: [`Repository path: ${entry.repoPath}`],
37
+ hint: "Run 'dotweave push' or fix the repository so this path is stored as a file.",
38
+ });
39
+ }
40
+ return {
41
+ desiredKeys: new Set([entry.repoPath]),
42
+ node,
43
+ type: "file",
44
+ };
20
45
  }
46
+ const rootNode = snapshot.get(entry.repoPath);
47
+ if (rootNode !== undefined && rootNode.type !== "directory") {
48
+ throw new DotweaveError("Directory sync entry resolves to a file in the repository.", {
49
+ code: "DIRECTORY_ENTRY_RESOLVES_FILE",
50
+ details: [`Repository path: ${entry.repoPath}`],
51
+ hint: "Run 'dotweave push' or fix the repository so this path is stored as a directory.",
52
+ });
53
+ }
54
+ const nodes = new Map();
55
+ const desiredKeys = new Set();
56
+ for (const [repoPath, node] of snapshot.entries()) {
57
+ if (!repoPath.startsWith(`${entry.repoPath}/`)) {
58
+ continue;
59
+ }
60
+ if (node.type === "directory") {
61
+ continue;
62
+ }
63
+ if (findOwningSyncEntry(config, repoPath) !== entry) {
64
+ continue;
65
+ }
66
+ const relativePath = repoPath.slice(entry.repoPath.length + 1);
67
+ nodes.set(relativePath, node);
68
+ desiredKeys.add(repoPath);
69
+ }
70
+ if (rootNode === undefined && nodes.size === 0) {
71
+ return {
72
+ desiredKeys,
73
+ type: "absent",
74
+ };
75
+ }
76
+ desiredKeys.add(buildDirectoryKey(entry.repoPath));
77
+ return {
78
+ desiredKeys,
79
+ nodes,
80
+ type: "directory",
81
+ };
21
82
  };
22
83
  const materializedDirectoryModeMatches = (actualMode, fileMode) => {
23
84
  if (!supportsPosixFileModes()) {
24
85
  return true;
25
86
  }
26
- const maskedActualMode = actualMode & 0o777;
27
87
  if (fileMode === undefined) {
28
- // If no explicit mode, we check if owner has full access and others have at least read/search.
29
- // We allow group-write (0775 vs 0755) common in some umasks.
30
- const ownerAndSearchMask = 0o711;
31
- return (maskedActualMode & ownerAndSearchMask) === ownerAndSearchMask;
88
+ return true;
32
89
  }
90
+ const maskedActualMode = actualMode & 0o777;
33
91
  return maskedActualMode === (buildSearchableDirectoryMode(fileMode) & 0o777);
34
92
  };
35
93
  const materializedFileModeMatches = (actualMode, executable, fileMode) => {
36
94
  if (!supportsPosixFileModes()) {
37
95
  return true;
38
96
  }
39
- const expectedMode = (fileMode ?? buildExecutableMode(executable)) & 0o777;
40
97
  const maskedActualMode = actualMode & 0o777;
41
- if (maskedActualMode === expectedMode) {
42
- return true;
43
- }
44
- // If no explicit fileMode is provided, we allow common umask variations (like 0664 vs 0644)
45
- // as long as the owner permissions and executable bits match.
46
98
  if (fileMode === undefined) {
47
- const ownerAndExecMask = 0o711; // Owner read/write/exec + Group/Other exec
48
- return ((maskedActualMode & ownerAndExecMask) ===
49
- (expectedMode & ownerAndExecMask));
50
- }
51
- return false;
52
- };
53
- const normalizeLinkTargetForComparison = (target, baseDir) => {
54
- const absoluteTarget = isAbsolute(target) ? target : resolve(baseDir, target);
55
- if (process.platform !== "win32") {
56
- return absoluteTarget;
57
- }
58
- const normalizeSlashes = (p) => p.replaceAll("\\", "/").toLowerCase();
59
- try {
60
- return normalizeSlashes(require("node:fs").realpathSync.native(absoluteTarget));
61
- }
62
- catch {
63
- try {
64
- const dir = dirname(absoluteTarget);
65
- const base = basename(absoluteTarget);
66
- return normalizeSlashes(join(require("node:fs").realpathSync.native(dir), base));
67
- }
68
- catch {
69
- return normalizeSlashes(absoluteTarget);
70
- }
99
+ return isExecutableMode(maskedActualMode) === executable;
71
100
  }
101
+ return maskedActualMode === (fileMode & 0o777);
72
102
  };
73
103
  const isMaterializedFileLikeNodeCurrent = async (targetPath, node, fileMode) => {
74
104
  const stats = await getPathStats(targetPath);
@@ -80,8 +110,8 @@ const isMaterializedFileLikeNodeCurrent = async (targetPath, node, fileMode) =>
80
110
  return false;
81
111
  }
82
112
  const currentLinkTarget = await readlink(targetPath);
83
- return (normalizeLinkTargetForComparison(currentLinkTarget, dirname(targetPath)) ===
84
- normalizeLinkTargetForComparison(node.linkTarget, dirname(targetPath)));
113
+ return (normalizeLinkTarget(currentLinkTarget, dirname(targetPath)) ===
114
+ normalizeLinkTarget(node.linkTarget, dirname(targetPath)));
85
115
  }
86
116
  if (!stats.isFile()) {
87
117
  return false;
@@ -103,8 +133,7 @@ const resolveStagingParentDirectory = (targetPath) => {
103
133
  return parentDirectory;
104
134
  }
105
135
  };
106
- const stageAndReplaceFilePath = async (targetPath, node, reporter, fileMode) => {
107
- reporter?.verbose(`staging local file ${targetPath}`);
136
+ const stageAndReplacePath = async (targetPath, node, fileMode) => {
108
137
  await mkdir(dirname(targetPath), { recursive: true });
109
138
  const stagingDirectory = await mkdtemp(join(resolveStagingParentDirectory(targetPath), `.${basename(targetPath)}.dotweave-sync-`));
110
139
  const stagedPath = join(stagingDirectory, basename(targetPath));
@@ -152,90 +181,12 @@ const ensureMaterializedDirectoryPath = async (targetPath, fileMode) => {
152
181
  await chmod(targetPath, buildSearchableDirectoryMode(fileMode));
153
182
  }
154
183
  };
155
- const buildDesiredDirectoryKeys = (entry, desiredNodes) => {
156
- const desiredDirectoryKeys = new Set([
157
- buildDirectoryKey(entry.repoPath),
158
- ]);
159
- for (const relativePath of desiredNodes.keys()) {
160
- const segments = relativePath.split("/");
161
- for (let index = 1; index < segments.length; index += 1) {
162
- desiredDirectoryKeys.add(buildDirectoryKey(posix.join(entry.repoPath, ...segments.slice(0, index))));
163
- }
164
- }
165
- return desiredDirectoryKeys;
166
- };
167
- export const buildEntryMaterialization = (entry, snapshot, config, reporter) => {
168
- if (entry.kind === "file") {
169
- const node = snapshot.get(entry.repoPath);
170
- if (node === undefined) {
171
- reporter?.verbose(`planned an absent local file ${entry.repoPath}`);
172
- return {
173
- desiredKeys: new Set(),
174
- type: "absent",
175
- };
176
- }
177
- if (node.type === "directory") {
178
- throw new DotweaveError("File sync entry resolves to a directory in the repository.", {
179
- code: "FILE_ENTRY_RESOLVES_DIRECTORY",
180
- details: [`Repository path: ${entry.repoPath}`],
181
- hint: "Run 'dotweave push' or fix the repository so this path is stored as a file.",
182
- });
183
- }
184
- reporter?.verbose(`planned a local file ${entry.repoPath}`);
185
- return {
186
- desiredKeys: new Set([entry.repoPath]),
187
- node,
188
- type: "file",
189
- };
190
- }
191
- const rootNode = snapshot.get(entry.repoPath);
192
- if (rootNode !== undefined && rootNode.type !== "directory") {
193
- throw new DotweaveError("Directory sync entry resolves to a file in the repository.", {
194
- code: "DIRECTORY_ENTRY_RESOLVES_FILE",
195
- details: [`Repository path: ${entry.repoPath}`],
196
- hint: "Run 'dotweave push' or fix the repository so this path is stored as a directory.",
197
- });
198
- }
199
- const nodes = new Map();
200
- const desiredKeys = new Set();
201
- for (const [repoPath, node] of snapshot.entries()) {
202
- if (!repoPath.startsWith(`${entry.repoPath}/`)) {
203
- continue;
204
- }
205
- if (node.type === "directory") {
206
- continue;
207
- }
208
- if (findOwningSyncEntry(config, repoPath) !== entry) {
209
- continue;
210
- }
211
- const relativePath = repoPath.slice(entry.repoPath.length + 1);
212
- nodes.set(relativePath, node);
213
- desiredKeys.add(repoPath);
214
- }
215
- if (rootNode === undefined && nodes.size === 0) {
216
- reporter?.verbose(`planned an absent local directory ${entry.repoPath}`);
217
- return {
218
- desiredKeys,
219
- type: "absent",
220
- };
221
- }
222
- desiredKeys.add(buildDirectoryKey(entry.repoPath));
223
- reporter?.verbose(`planned a local directory ${entry.repoPath}`);
224
- return {
225
- desiredKeys,
226
- nodes,
227
- type: "directory",
228
- };
229
- };
230
- const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, prefix, reporter, progressState = {
231
- scannedLocalNodeCount: 0,
232
- }, providedStats) => {
184
+ export const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, prefix, providedStats) => {
233
185
  const stats = providedStats ?? (await getPathStats(targetPath));
234
186
  if (stats === undefined) {
235
187
  return;
236
188
  }
237
189
  if (!stats.isDirectory()) {
238
- reportPullPlanningProgress(reporter, progressState, repoPathPrefix);
239
190
  keys.add(repoPathPrefix);
240
191
  keyToLocalPath?.set(repoPathPrefix, targetPath);
241
192
  return;
@@ -256,9 +207,8 @@ const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocal
256
207
  if (childEntryPaths.has(repoPath)) {
257
208
  continue;
258
209
  }
259
- reportPullPlanningProgress(reporter, progressState, repoPath);
260
210
  if (childStats?.isDirectory()) {
261
- await collectLocalLeafKeys(absolutePath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, relativePath, reporter, progressState);
211
+ await collectLocalLeafKeys(absolutePath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, relativePath);
262
212
  continue;
263
213
  }
264
214
  keys.add(repoPath);
@@ -268,7 +218,7 @@ const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocal
268
218
  const buildLocalPathDepth = (localPath) => {
269
219
  return localPath.split(/[/\\]+/u).length;
270
220
  };
271
- const collectDeletableLocalKeys = async (existingKeys, desiredKeys, keyToLocalPath) => {
221
+ export const collectDeletableLocalKeys = async (existingKeys, desiredKeys, keyToLocalPath) => {
272
222
  const deletableKeys = [];
273
223
  const scheduledLocalPaths = new Set();
274
224
  const isWindows = process.platform === "win32";
@@ -313,71 +263,18 @@ const collectDeletableLocalKeys = async (existingKeys, desiredKeys, keyToLocalPa
313
263
  }
314
264
  return deletableKeys;
315
265
  };
316
- const reconcileMaterializedDirectoryPath = async (entry, desiredKeys, desiredNodes, config, reporter, fileMode) => {
317
- const desiredRootKey = buildDirectoryKey(entry.repoPath);
318
- const desiredRootExists = desiredKeys.has(desiredRootKey);
319
- if (desiredRootExists) {
320
- await ensureMaterializedDirectoryPath(entry.localPath, fileMode);
321
- }
322
- const desiredDirectoryKeys = desiredRootExists
323
- ? buildDesiredDirectoryKeys(entry, desiredNodes)
324
- : new Set();
325
- await limitConcurrency(CONSTANTS.SYNC.DEFAULT_CONCURRENCY, [...desiredDirectoryKeys].sort((left, right) => {
326
- return left.localeCompare(right);
327
- }), async (directoryKey) => {
328
- if (directoryKey === desiredRootKey) {
329
- return;
330
- }
331
- const relativePath = directoryKey.slice(entry.repoPath.length + 1, -1);
332
- await ensureMaterializedDirectoryPath(join(entry.localPath, ...relativePath.split("/")), fileMode);
333
- });
334
- let processedNodeCount = 0;
335
- await limitConcurrency(CONSTANTS.SYNC.DEFAULT_CONCURRENCY, [...desiredNodes.keys()].sort((left, right) => {
336
- return left.localeCompare(right);
337
- }), async (relativePath) => {
338
- const node = desiredNodes.get(relativePath);
339
- if (node === undefined) {
340
- return;
341
- }
342
- const targetNodePath = join(entry.localPath, ...relativePath.split("/"));
343
- if (await isMaterializedFileLikeNodeCurrent(targetNodePath, node, fileMode)) {
344
- return;
345
- }
346
- await stageAndReplaceFilePath(targetNodePath, node, reporter, fileMode);
347
- processedNodeCount += 1;
348
- if ((reporter?.level ?? 0) >= 4) {
349
- reporter?.verbose(`updated local node ${posix.join(entry.repoPath, relativePath)}`);
350
- }
351
- else if (processedNodeCount % 100 === 0) {
352
- reporter?.start(`Updated ${processedNodeCount} local nodes for ${entry.repoPath}...`);
353
- }
354
- });
355
- const existingKeys = new Set();
356
- const keyToLocalPath = new Map();
357
- await countDeletedLocalNodes(entry, desiredKeys, config, existingKeys, reporter, keyToLocalPath);
358
- const deletableKeys = await collectDeletableLocalKeys(existingKeys, desiredKeys, keyToLocalPath);
359
- for (const key of deletableKeys) {
360
- const localPath = keyToLocalPath.get(key);
361
- if (localPath === undefined) {
362
- continue;
363
- }
364
- await removePathAtomically(localPath);
365
- reporter?.verbose(`removed stale local path ${key}`);
366
- }
367
- };
368
- export const countDeletedLocalNodes = async (entry, desiredKeys, config, existingKeys = new Set(), reporter, keyToLocalPath, deletedKeys) => {
266
+ export const countDeletedLocalNodes = async (entry, desiredKeys, config, existingKeys = new Set(), keyToLocalPath, deletedKeys) => {
369
267
  const rule = resolveSyncRule(config, entry.repoPath, config.activeProfile);
370
268
  if (rule === undefined || rule.mode === "ignore") {
371
269
  return 0;
372
270
  }
373
- const progressState = { scannedLocalNodeCount: 0 };
374
271
  const childEntryPaths = entry.kind === "directory"
375
272
  ? collectChildEntryPaths(config, entry.repoPath)
376
273
  : new Set();
377
274
  const rootStats = entry.kind === "directory"
378
275
  ? await getFollowedPathStats(entry.localPath)
379
276
  : await getPathStats(entry.localPath);
380
- await collectLocalLeafKeys(entry.localPath, entry.repoPath, existingKeys, keyToLocalPath, childEntryPaths, undefined, reporter, progressState, rootStats);
277
+ await collectLocalLeafKeys(entry.localPath, entry.repoPath, existingKeys, keyToLocalPath, childEntryPaths, undefined, rootStats);
381
278
  const deletableKeys = await collectDeletableLocalKeys(existingKeys, desiredKeys, keyToLocalPath ?? new Map());
382
279
  for (const key of deletableKeys) {
383
280
  deletedKeys?.add(key);
@@ -392,7 +289,7 @@ export const collectChangedLocalPaths = async (entry, materialization, config) =
392
289
  const existingKeys = new Set();
393
290
  const keyToLocalPath = new Map();
394
291
  const deletedKeys = new Set();
395
- await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys, undefined, keyToLocalPath, deletedKeys);
292
+ await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys, keyToLocalPath, deletedKeys);
396
293
  return [...deletedKeys]
397
294
  .map((key) => {
398
295
  return keyToLocalPath.get(key);
@@ -433,7 +330,7 @@ export const collectChangedLocalPaths = async (entry, materialization, config) =
433
330
  const existingKeys = new Set();
434
331
  const keyToLocalPath = new Map();
435
332
  const deletedKeys = new Set();
436
- await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys, undefined, keyToLocalPath, deletedKeys);
333
+ await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys, keyToLocalPath, deletedKeys);
437
334
  for (const key of deletedKeys) {
438
335
  const localPath = keyToLocalPath.get(key);
439
336
  if (localPath !== undefined) {
@@ -445,25 +342,6 @@ export const collectChangedLocalPaths = async (entry, materialization, config) =
445
342
  return left.localeCompare(right);
446
343
  });
447
344
  };
448
- export const applyEntryMaterialization = async (entry, materialization, config, reporter) => {
449
- const rule = resolveSyncRule(config, entry.repoPath, config.activeProfile);
450
- if (rule === undefined || rule.mode === "ignore") {
451
- return;
452
- }
453
- if (materialization.type === "absent") {
454
- if (entry.kind === "directory") {
455
- await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, new Map(), config, reporter, entry.permission);
456
- return;
457
- }
458
- await removePathAtomically(entry.localPath);
459
- return;
460
- }
461
- if (materialization.type === "file") {
462
- await stageAndReplaceFilePath(entry.localPath, materialization.node, reporter, entry.permission);
463
- return;
464
- }
465
- await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, materialization.nodes, config, reporter, entry.permission);
466
- };
467
345
  export const buildPullCounts = (materializations) => {
468
346
  let decryptedFileCount = 0;
469
347
  let directoryCount = 0;
@@ -508,4 +386,66 @@ export const buildPullCounts = (materializations) => {
508
386
  symlinkCount,
509
387
  };
510
388
  };
511
- //# sourceMappingURL=local-materialization.js.map
389
+ const reconcileMaterializedDirectoryPath = async (entry, desiredKeys, desiredNodes, config, fileMode) => {
390
+ const desiredRootKey = buildDirectoryKey(entry.repoPath);
391
+ const desiredRootExists = desiredKeys.has(desiredRootKey);
392
+ if (desiredRootExists) {
393
+ await ensureMaterializedDirectoryPath(entry.localPath, fileMode);
394
+ }
395
+ const desiredDirectoryKeys = desiredRootExists
396
+ ? buildDesiredDirectoryKeys(entry, desiredNodes)
397
+ : new Set();
398
+ await limitConcurrency(AppConstants.SYNC.DEFAULT_CONCURRENCY, [...desiredDirectoryKeys].sort((left, right) => {
399
+ return left.localeCompare(right);
400
+ }), async (directoryKey) => {
401
+ if (directoryKey === desiredRootKey) {
402
+ return;
403
+ }
404
+ const relativePath = directoryKey.slice(entry.repoPath.length + 1, -1);
405
+ await ensureMaterializedDirectoryPath(join(entry.localPath, ...relativePath.split("/")), fileMode);
406
+ });
407
+ await limitConcurrency(AppConstants.SYNC.DEFAULT_CONCURRENCY, [...desiredNodes.keys()].sort((left, right) => {
408
+ return left.localeCompare(right);
409
+ }), async (relativePath) => {
410
+ const node = desiredNodes.get(relativePath);
411
+ if (node === undefined) {
412
+ return;
413
+ }
414
+ const targetNodePath = join(entry.localPath, ...relativePath.split("/"));
415
+ if (await isMaterializedFileLikeNodeCurrent(targetNodePath, node, fileMode)) {
416
+ return;
417
+ }
418
+ await stageAndReplacePath(targetNodePath, node, fileMode);
419
+ });
420
+ const existingKeys = new Set();
421
+ const keyToLocalPath = new Map();
422
+ await countDeletedLocalNodes(entry, desiredKeys, config, existingKeys, keyToLocalPath);
423
+ const deletableKeys = await collectDeletableLocalKeys(existingKeys, desiredKeys, keyToLocalPath);
424
+ for (const key of deletableKeys) {
425
+ const localPath = keyToLocalPath.get(key);
426
+ if (localPath === undefined) {
427
+ continue;
428
+ }
429
+ await removePathAtomically(localPath);
430
+ }
431
+ };
432
+ export const applyEntryMaterialization = async (entry, materialization, config) => {
433
+ const rule = resolveSyncRule(config, entry.repoPath, config.activeProfile);
434
+ if (rule === undefined || rule.mode === "ignore") {
435
+ return;
436
+ }
437
+ if (materialization.type === "absent") {
438
+ if (entry.kind === "directory") {
439
+ await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, new Map(), config, entry.permission);
440
+ return;
441
+ }
442
+ await removePathAtomically(entry.localPath);
443
+ return;
444
+ }
445
+ if (materialization.type === "file") {
446
+ await stageAndReplacePath(entry.localPath, materialization.node, entry.permission);
447
+ return;
448
+ }
449
+ await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, materialization.nodes, config, entry.permission);
450
+ };
451
+ //# sourceMappingURL=pull-apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-apply.js","sourceRoot":"","sources":["../../src/services/pull-apply.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,16 @@
1
- import type { ConsolaInstance } from "consola";
2
- import { buildPullCounts, type EntryMaterialization } from "./local-materialization.ts";
3
- import { type EffectiveSyncConfig } from "./runtime.ts";
1
+ import { buildPullCounts, type EntryMaterialization } from "./pull-apply.ts";
2
+ import { type EffectiveSyncConfig } from "./sync-context.ts";
4
3
  export type PullRequest = Readonly<{
5
4
  dryRun: boolean;
6
5
  profile?: string;
7
6
  }>;
8
7
  export type PullResult = Readonly<{
9
- configPath: string;
10
8
  decryptedFileCount: number;
11
9
  deletedLocalCount: number;
12
10
  directoryCount: number;
13
11
  dryRun: boolean;
14
12
  plainFileCount: number;
15
13
  symlinkCount: number;
16
- syncDirectory: string;
17
14
  }>;
18
15
  export type PullPlan = Readonly<{
19
16
  counts: ReturnType<typeof buildPullCounts>;
@@ -29,10 +26,10 @@ export type PreparedPull = Readonly<{
29
26
  plan: PullPlan;
30
27
  syncDirectory: string;
31
28
  }>;
32
- export declare const buildPullPlan: (config: EffectiveSyncConfig, syncDirectory: string, reporter?: ConsolaInstance) => Promise<PullPlan>;
29
+ export declare const buildPullPlan: (config: EffectiveSyncConfig, syncDirectory: string) => Promise<PullPlan>;
33
30
  export declare const buildPullPlanPreview: (plan: PullPlan) => string[];
34
- export declare const buildPullResultFromPlan: (plan: PullPlan, syncDirectory: string, dryRun: boolean) => PullResult;
35
- export declare const pullChanges: (request: PullRequest, reporter?: ConsolaInstance) => Promise<PullResult>;
36
- export declare const preparePull: (request: PullRequest, reporter?: ConsolaInstance) => Promise<PreparedPull>;
37
- export declare const applyPullPlan: (config: EffectiveSyncConfig, plan: PullPlan, reporter?: ConsolaInstance) => Promise<void>;
31
+ export declare const buildPullResultFromPlan: (plan: PullPlan, dryRun: boolean) => PullResult;
32
+ export declare const pullChanges: (request: PullRequest) => Promise<PullResult>;
33
+ export declare const preparePull: (request: PullRequest) => Promise<PreparedPull>;
34
+ export declare const applyPullPlan: (config: EffectiveSyncConfig, plan: PullPlan) => Promise<void>;
38
35
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/services/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM/C,OAAO,EAGL,eAAe,EAGf,KAAK,oBAAoB,EAC1B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,SAAS,CAAC,oBAAoB,GAAG,SAAS,CAAC,EAAE,CAAC;IAChE,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAoEH,eAAO,MAAM,aAAa,GACxB,QAAQ,mBAAmB,EAC3B,eAAe,MAAM,EACrB,WAAW,eAAe,KACzB,OAAO,CAAC,QAAQ,CA0ElB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,QAAQ,aAKlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,MAAM,QAAQ,EACd,eAAe,MAAM,EACrB,QAAQ,OAAO,KACd,UASF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,EACpB,WAAW,eAAe,KACzB,OAAO,CAAC,UAAU,CAYpB,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,EACpB,WAAW,eAAe,KACzB,OAAO,CAAC,YAAY,CAkBtB,CAAC;AA6CF,eAAO,MAAM,aAAa,GACxB,QAAQ,mBAAmB,EAC3B,MAAM,QAAQ,EACd,WAAW,eAAe,kBAwB3B,CAAC"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/services/pull.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,eAAe,EAGf,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,SAAS,CAAC,oBAAoB,GAAG,SAAS,CAAC,EAAE,CAAC;IAChE,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAoEH,eAAO,MAAM,aAAa,GACxB,QAAQ,mBAAmB,EAC3B,eAAe,MAAM,KACpB,OAAO,CAAC,QAAQ,CAkElB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,QAAQ,aAKlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,MAAM,QAAQ,EACd,QAAQ,OAAO,KACd,UAMF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,KACnB,OAAO,CAAC,UAAU,CAQpB,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,KACnB,OAAO,CAAC,YAAY,CAetB,CAAC;AA6CF,eAAO,MAAM,aAAa,GACxB,QAAQ,mBAAmB,EAC3B,MAAM,QAAQ,kBAkBf,CAAC"}