@tinyrack/dotweave 0.39.4

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 (246) hide show
  1. package/bin/index.js +5 -0
  2. package/dist/application.d.ts +5 -0
  3. package/dist/application.d.ts.map +1 -0
  4. package/dist/application.js +86 -0
  5. package/dist/application.js.map +1 -0
  6. package/dist/cli/autocomplete.d.ts +7 -0
  7. package/dist/cli/autocomplete.d.ts.map +1 -0
  8. package/dist/cli/autocomplete.js +62 -0
  9. package/dist/cli/autocomplete.js.map +1 -0
  10. package/dist/cli/cd.d.ts +4 -0
  11. package/dist/cli/cd.d.ts.map +1 -0
  12. package/dist/cli/cd.js +23 -0
  13. package/dist/cli/cd.js.map +1 -0
  14. package/dist/cli/doctor.d.ts +4 -0
  15. package/dist/cli/doctor.d.ts.map +1 -0
  16. package/dist/cli/doctor.js +92 -0
  17. package/dist/cli/doctor.js.map +1 -0
  18. package/dist/cli/index.d.ts +4 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +22 -0
  21. package/dist/cli/index.js.map +1 -0
  22. package/dist/cli/init.d.ts +4 -0
  23. package/dist/cli/init.d.ts.map +1 -0
  24. package/dist/cli/init.js +110 -0
  25. package/dist/cli/init.js.map +1 -0
  26. package/dist/cli/profile/index.d.ts +3 -0
  27. package/dist/cli/profile/index.d.ts.map +1 -0
  28. package/dist/cli/profile/index.js +15 -0
  29. package/dist/cli/profile/index.js.map +1 -0
  30. package/dist/cli/profile/list.d.ts +4 -0
  31. package/dist/cli/profile/list.d.ts.map +1 -0
  32. package/dist/cli/profile/list.js +42 -0
  33. package/dist/cli/profile/list.js.map +1 -0
  34. package/dist/cli/profile/use.d.ts +4 -0
  35. package/dist/cli/profile/use.d.ts.map +1 -0
  36. package/dist/cli/profile/use.js +49 -0
  37. package/dist/cli/profile/use.js.map +1 -0
  38. package/dist/cli/pull.d.ts +4 -0
  39. package/dist/cli/pull.d.ts.map +1 -0
  40. package/dist/cli/pull.js +107 -0
  41. package/dist/cli/pull.js.map +1 -0
  42. package/dist/cli/push.d.ts +4 -0
  43. package/dist/cli/push.d.ts.map +1 -0
  44. package/dist/cli/push.js +49 -0
  45. package/dist/cli/push.js.map +1 -0
  46. package/dist/cli/root-commands.d.ts +13 -0
  47. package/dist/cli/root-commands.d.ts.map +1 -0
  48. package/dist/cli/root-commands.js +25 -0
  49. package/dist/cli/root-commands.js.map +1 -0
  50. package/dist/cli/status.d.ts +4 -0
  51. package/dist/cli/status.d.ts.map +1 -0
  52. package/dist/cli/status.js +132 -0
  53. package/dist/cli/status.js.map +1 -0
  54. package/dist/cli/track.d.ts +4 -0
  55. package/dist/cli/track.d.ts.map +1 -0
  56. package/dist/cli/track.js +133 -0
  57. package/dist/cli/track.js.map +1 -0
  58. package/dist/cli/untrack.d.ts +4 -0
  59. package/dist/cli/untrack.d.ts.map +1 -0
  60. package/dist/cli/untrack.js +40 -0
  61. package/dist/cli/untrack.js.map +1 -0
  62. package/dist/config/constants.d.ts +31 -0
  63. package/dist/config/constants.d.ts.map +1 -0
  64. package/dist/config/constants.js +33 -0
  65. package/dist/config/constants.js.map +1 -0
  66. package/dist/config/global-config.d.ts +21 -0
  67. package/dist/config/global-config.d.ts.map +1 -0
  68. package/dist/config/global-config.js +89 -0
  69. package/dist/config/global-config.js.map +1 -0
  70. package/dist/config/identity-file.d.ts +9 -0
  71. package/dist/config/identity-file.d.ts.map +1 -0
  72. package/dist/config/identity-file.js +48 -0
  73. package/dist/config/identity-file.js.map +1 -0
  74. package/dist/config/migration.d.ts +9 -0
  75. package/dist/config/migration.d.ts.map +1 -0
  76. package/dist/config/migration.js +61 -0
  77. package/dist/config/migration.js.map +1 -0
  78. package/dist/config/platform.d.ts +12 -0
  79. package/dist/config/platform.d.ts.map +1 -0
  80. package/dist/config/platform.js +25 -0
  81. package/dist/config/platform.js.map +1 -0
  82. package/dist/config/runtime-env.d.ts +7 -0
  83. package/dist/config/runtime-env.d.ts.map +1 -0
  84. package/dist/config/runtime-env.js +31 -0
  85. package/dist/config/runtime-env.js.map +1 -0
  86. package/dist/config/sync-entry.d.ts +14 -0
  87. package/dist/config/sync-entry.d.ts.map +1 -0
  88. package/dist/config/sync-entry.js +99 -0
  89. package/dist/config/sync-entry.js.map +1 -0
  90. package/dist/config/sync-schema.d.ts +146 -0
  91. package/dist/config/sync-schema.d.ts.map +1 -0
  92. package/dist/config/sync-schema.js +392 -0
  93. package/dist/config/sync-schema.js.map +1 -0
  94. package/dist/config/sync.d.ts +8 -0
  95. package/dist/config/sync.d.ts.map +1 -0
  96. package/dist/config/sync.js +53 -0
  97. package/dist/config/sync.js.map +1 -0
  98. package/dist/config/xdg.d.ts +10 -0
  99. package/dist/config/xdg.d.ts.map +1 -0
  100. package/dist/config/xdg.js +90 -0
  101. package/dist/config/xdg.js.map +1 -0
  102. package/dist/index.d.ts +3 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +4 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/lib/content.d.ts +5 -0
  107. package/dist/lib/content.d.ts.map +1 -0
  108. package/dist/lib/content.js +29 -0
  109. package/dist/lib/content.js.map +1 -0
  110. package/dist/lib/crypto.d.ts +45 -0
  111. package/dist/lib/crypto.d.ts.map +1 -0
  112. package/dist/lib/crypto.js +130 -0
  113. package/dist/lib/crypto.js.map +1 -0
  114. package/dist/lib/env.d.ts +13 -0
  115. package/dist/lib/env.d.ts.map +1 -0
  116. package/dist/lib/env.js +50 -0
  117. package/dist/lib/env.js.map +1 -0
  118. package/dist/lib/error.d.ts +22 -0
  119. package/dist/lib/error.d.ts.map +1 -0
  120. package/dist/lib/error.js +50 -0
  121. package/dist/lib/error.js.map +1 -0
  122. package/dist/lib/file-mode.d.ts +36 -0
  123. package/dist/lib/file-mode.d.ts.map +1 -0
  124. package/dist/lib/file-mode.js +55 -0
  125. package/dist/lib/file-mode.js.map +1 -0
  126. package/dist/lib/filesystem.d.ts +60 -0
  127. package/dist/lib/filesystem.d.ts.map +1 -0
  128. package/dist/lib/filesystem.js +190 -0
  129. package/dist/lib/filesystem.js.map +1 -0
  130. package/dist/lib/git.d.ts +23 -0
  131. package/dist/lib/git.d.ts.map +1 -0
  132. package/dist/lib/git.js +162 -0
  133. package/dist/lib/git.js.map +1 -0
  134. package/dist/lib/jsonc.d.ts +8 -0
  135. package/dist/lib/jsonc.d.ts.map +1 -0
  136. package/dist/lib/jsonc.js +78 -0
  137. package/dist/lib/jsonc.js.map +1 -0
  138. package/dist/lib/path.d.ts +21 -0
  139. package/dist/lib/path.d.ts.map +1 -0
  140. package/dist/lib/path.js +44 -0
  141. package/dist/lib/path.js.map +1 -0
  142. package/dist/lib/promise.d.ts +10 -0
  143. package/dist/lib/promise.d.ts.map +1 -0
  144. package/dist/lib/promise.js +25 -0
  145. package/dist/lib/promise.js.map +1 -0
  146. package/dist/lib/string.d.ts +6 -0
  147. package/dist/lib/string.d.ts.map +1 -0
  148. package/dist/lib/string.js +8 -0
  149. package/dist/lib/string.js.map +1 -0
  150. package/dist/lib/validation.d.ts +7 -0
  151. package/dist/lib/validation.d.ts.map +1 -0
  152. package/dist/lib/validation.js +13 -0
  153. package/dist/lib/validation.js.map +1 -0
  154. package/dist/lib/version.d.ts +2 -0
  155. package/dist/lib/version.d.ts.map +1 -0
  156. package/dist/lib/version.js +4 -0
  157. package/dist/lib/version.js.map +1 -0
  158. package/dist/migrations/global-v3.d.ts +3 -0
  159. package/dist/migrations/global-v3.d.ts.map +1 -0
  160. package/dist/migrations/global-v3.js +5 -0
  161. package/dist/migrations/global-v3.js.map +1 -0
  162. package/dist/services/autocomplete.d.ts +5 -0
  163. package/dist/services/autocomplete.d.ts.map +1 -0
  164. package/dist/services/autocomplete.js +185 -0
  165. package/dist/services/autocomplete.js.map +1 -0
  166. package/dist/services/config-file.d.ts +73 -0
  167. package/dist/services/config-file.d.ts.map +1 -0
  168. package/dist/services/config-file.js +40 -0
  169. package/dist/services/config-file.js.map +1 -0
  170. package/dist/services/doctor.d.ts +16 -0
  171. package/dist/services/doctor.d.ts.map +1 -0
  172. package/dist/services/doctor.js +126 -0
  173. package/dist/services/doctor.js.map +1 -0
  174. package/dist/services/init.d.ts +24 -0
  175. package/dist/services/init.d.ts.map +1 -0
  176. package/dist/services/init.js +265 -0
  177. package/dist/services/init.js.map +1 -0
  178. package/dist/services/local-materialization.d.ts +30 -0
  179. package/dist/services/local-materialization.d.ts.map +1 -0
  180. package/dist/services/local-materialization.js +451 -0
  181. package/dist/services/local-materialization.js.map +1 -0
  182. package/dist/services/local-snapshot.d.ts +26 -0
  183. package/dist/services/local-snapshot.d.ts.map +1 -0
  184. package/dist/services/local-snapshot.js +119 -0
  185. package/dist/services/local-snapshot.js.map +1 -0
  186. package/dist/services/paths.d.ts +8 -0
  187. package/dist/services/paths.d.ts.map +1 -0
  188. package/dist/services/paths.js +71 -0
  189. package/dist/services/paths.js.map +1 -0
  190. package/dist/services/profile.d.ts +39 -0
  191. package/dist/services/profile.d.ts.map +1 -0
  192. package/dist/services/profile.js +124 -0
  193. package/dist/services/profile.js.map +1 -0
  194. package/dist/services/pull.d.ts +38 -0
  195. package/dist/services/pull.d.ts.map +1 -0
  196. package/dist/services/pull.js +148 -0
  197. package/dist/services/pull.js.map +1 -0
  198. package/dist/services/push.d.ts +38 -0
  199. package/dist/services/push.d.ts.map +1 -0
  200. package/dist/services/push.js +120 -0
  201. package/dist/services/push.js.map +1 -0
  202. package/dist/services/repo-artifacts.d.ts +52 -0
  203. package/dist/services/repo-artifacts.d.ts.map +1 -0
  204. package/dist/services/repo-artifacts.js +325 -0
  205. package/dist/services/repo-artifacts.js.map +1 -0
  206. package/dist/services/repo-snapshot.d.ts +7 -0
  207. package/dist/services/repo-snapshot.d.ts.map +1 -0
  208. package/dist/services/repo-snapshot.js +181 -0
  209. package/dist/services/repo-snapshot.js.map +1 -0
  210. package/dist/services/runtime.d.ts +30 -0
  211. package/dist/services/runtime.d.ts.map +1 -0
  212. package/dist/services/runtime.js +71 -0
  213. package/dist/services/runtime.js.map +1 -0
  214. package/dist/services/set.d.ts +41 -0
  215. package/dist/services/set.d.ts.map +1 -0
  216. package/dist/services/set.js +288 -0
  217. package/dist/services/set.js.map +1 -0
  218. package/dist/services/status.d.ts +41 -0
  219. package/dist/services/status.d.ts.map +1 -0
  220. package/dist/services/status.js +87 -0
  221. package/dist/services/status.js.map +1 -0
  222. package/dist/services/terminal/cli-runtime.d.ts +18 -0
  223. package/dist/services/terminal/cli-runtime.d.ts.map +1 -0
  224. package/dist/services/terminal/cli-runtime.js +19 -0
  225. package/dist/services/terminal/cli-runtime.js.map +1 -0
  226. package/dist/services/terminal/logger.d.ts +9 -0
  227. package/dist/services/terminal/logger.d.ts.map +1 -0
  228. package/dist/services/terminal/logger.js +15 -0
  229. package/dist/services/terminal/logger.js.map +1 -0
  230. package/dist/services/terminal/path-completion.d.ts +3 -0
  231. package/dist/services/terminal/path-completion.d.ts.map +1 -0
  232. package/dist/services/terminal/path-completion.js +108 -0
  233. package/dist/services/terminal/path-completion.js.map +1 -0
  234. package/dist/services/terminal/shell.d.ts +24 -0
  235. package/dist/services/terminal/shell.d.ts.map +1 -0
  236. package/dist/services/terminal/shell.js +227 -0
  237. package/dist/services/terminal/shell.js.map +1 -0
  238. package/dist/services/track.d.ts +20 -0
  239. package/dist/services/track.d.ts.map +1 -0
  240. package/dist/services/track.js +224 -0
  241. package/dist/services/track.js.map +1 -0
  242. package/dist/services/untrack.d.ts +13 -0
  243. package/dist/services/untrack.d.ts.map +1 -0
  244. package/dist/services/untrack.js +133 -0
  245. package/dist/services/untrack.js.map +1 -0
  246. package/package.json +84 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Limits the number of concurrent asynchronous operations.
3
+ *
4
+ * @param concurrency - The maximum number of concurrent operations.
5
+ * @param items - The items to process.
6
+ * @param mapper - The mapping function that returns a promise.
7
+ * @returns A promise that resolves to an array of the results.
8
+ */
9
+ export const limitConcurrency = async (concurrency, items, mapper) => {
10
+ const results = new Array(items.length);
11
+ let currentIndex = 0;
12
+ const worker = async () => {
13
+ while (currentIndex < items.length) {
14
+ const index = currentIndex;
15
+ currentIndex += 1;
16
+ results[index] = await mapper(items[index], index);
17
+ }
18
+ };
19
+ const workers = Array.from({ length: Math.min(concurrency, items.length) }, () => {
20
+ return worker();
21
+ });
22
+ await Promise.all(workers);
23
+ return results;
24
+ };
25
+ //# sourceMappingURL=promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/lib/promise.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,WAAmB,EACnB,KAAmB,EACnB,MAA8C,EAChC,EAAE;IAChB,MAAM,OAAO,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,OAAO,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,YAAY,CAAC;YAC3B,YAAY,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAM,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAC/C,GAAG,EAAE;QACH,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC,CACF,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE3B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @description
3
+ * Ensures string output can be emitted as a complete newline-terminated line.
4
+ */
5
+ export declare const ensureTrailingNewline: (value: string) => string;
6
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/lib/string.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,WAElD,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @description
3
+ * Ensures string output can be emitted as a complete newline-terminated line.
4
+ */
5
+ export const ensureTrailingNewline = (value) => {
6
+ return value.endsWith("\n") ? value : `${value}\n`;
7
+ };
8
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/lib/string.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;AACrD,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { z } from "zod";
2
+ /**
3
+ * @description
4
+ * Formats validation issues into CLI-friendly input error messages.
5
+ */
6
+ export declare const formatInputIssues: (issues: z.ZodIssue[]) => string;
7
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,CAAC,CAAC,QAAQ,EAAE,KAAG,MAQxD,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @description
3
+ * Formats validation issues into CLI-friendly input error messages.
4
+ */
5
+ export const formatInputIssues = (issues) => {
6
+ return issues
7
+ .map((issue) => {
8
+ const path = issue.path.length === 0 ? "input" : issue.path.join(".");
9
+ return `- ${path}: ${issue.message}`;
10
+ })
11
+ .join("\n");
12
+ };
13
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAoB,EAAU,EAAE;IAChE,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtE,OAAO,KAAK,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const currentVersion: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,QAAiD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { CONSTANTS } from "#app/config/constants.ts";
2
+ import packageJson from "../../package.json" with { type: "json" };
3
+ export const currentVersion = `${CONSTANTS.APP.NAME}/${packageJson.version}`;
4
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ConfigMigrationFn } from "#app/config/migration.ts";
2
+ export declare const migrateGlobalConfigV2ToV3: ConfigMigrationFn;
3
+ //# sourceMappingURL=global-v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-v3.d.ts","sourceRoot":"","sources":["../../src/migrations/global-v3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,yBAAyB,EAAE,iBAGvC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const migrateGlobalConfigV2ToV3 = (config) => {
2
+ const { age: _age, ...rest } = config;
3
+ return { ...rest, version: 3 };
4
+ };
5
+ //# sourceMappingURL=global-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-v3.js","sourceRoot":"","sources":["../../src/migrations/global-v3.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAsB,CAAC,MAAM,EAAE,EAAE;IACrE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACtC,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACjC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const BASH_AUTOCOMPLETE_SCRIPT: string;
2
+ export declare const POWERSHELL_AUTOCOMPLETE_SCRIPT: string;
3
+ export declare const ZSH_AUTOCOMPLETE_SCRIPT: string;
4
+ export declare const resolveCompletionInputs: (inputs: readonly string[]) => string[];
5
+ //# sourceMappingURL=autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/services/autocomplete.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,wBAAwB,QA8DpC,CAAC;AAEF,eAAO,MAAM,8BAA8B,QAqB1C,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAsEnC,CAAC;AAqBF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,SAAS,MAAM,EAAE,aAiBhE,CAAC"}
@@ -0,0 +1,185 @@
1
+ import { CONSTANTS } from "#app/config/constants.ts";
2
+ const COMPLETION_FUNCTION_NAME = "__dotweave_complete";
3
+ const ENSURE_FUNCTION_NAME = "__dotweave_ensure_completion";
4
+ export const BASH_AUTOCOMPLETE_SCRIPT = `\
5
+ ${COMPLETION_FUNCTION_NAME}() {
6
+ local -a inputs
7
+ local rawCompletions completion
8
+ inputs=("\${COMP_WORDS[@]}")
9
+ if [[ \${#inputs[@]} -eq 1 && \${COMP_CWORD:-0} -eq 0 && "\${inputs[0]}" == "${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME}" ]]; then
10
+ inputs+=("")
11
+ elif [[ \${COMP_CWORD:-0} -ge \${#inputs[@]} ]]; then
12
+ inputs+=("")
13
+ fi
14
+ if ! rawCompletions="$(env -u COMP_LINE ${CONSTANTS.AUTOCOMPLETE.COMMAND} "\${inputs[@]}")"; then
15
+ return 1
16
+ fi
17
+
18
+ COMPREPLY=()
19
+ if [[ -z "$rawCompletions" ]]; then
20
+ return 0
21
+ fi
22
+
23
+ local IFS_TAB word desc
24
+ IFS_TAB=$'\\t'
25
+ local maxLen=0
26
+ local -a words descs
27
+ while IFS= read -r completion; do
28
+ word="\${completion%%"$IFS_TAB"*}"
29
+ if [[ "$completion" == *"$IFS_TAB"* ]]; then
30
+ desc="\${completion#*"$IFS_TAB"}"
31
+ else
32
+ desc=""
33
+ fi
34
+ words+=("$word")
35
+ descs+=("$desc")
36
+ if (( \${#word} > maxLen )); then
37
+ maxLen=\${#word}
38
+ fi
39
+ done <<< "$rawCompletions"
40
+
41
+ if (( \${#words[@]} > 1 )); then
42
+ local -a display
43
+ local i
44
+ for (( i=0; i<\${#words[@]}; i++ )); do
45
+ if [[ -n "\${descs[i]}" ]]; then
46
+ printf -v pad "%-\${maxLen}s" "\${words[i]}"
47
+ display+=("$pad -- \${descs[i]}")
48
+ else
49
+ display+=("\${words[i]}")
50
+ fi
51
+ done
52
+ printf '%s\\n' "\${display[@]}" >&2
53
+ fi
54
+
55
+ for word in "\${words[@]}"; do
56
+ if [[ "$word" == */ ]]; then
57
+ COMPREPLY+=("$word")
58
+ else
59
+ COMPREPLY+=("\${word} ")
60
+ fi
61
+ done
62
+
63
+ return 0
64
+ }
65
+ complete -o default -o nospace -F ${COMPLETION_FUNCTION_NAME} ${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME}
66
+ `;
67
+ export const POWERSHELL_AUTOCOMPLETE_SCRIPT = `\
68
+ Register-ArgumentCompleter -Native -CommandName ${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME} -ScriptBlock {
69
+ param($wordToComplete, $commandAst, $cursorPosition)
70
+ $inputs = $commandAst.ToString().Split(' ', [System.StringSplitOptions]::RemoveEmptyEntries)
71
+ if ($cursorPosition -gt $commandAst.ToString().Length) {
72
+ $inputs += ''
73
+ }
74
+ $rawCompletions = & ${CONSTANTS.AUTOCOMPLETE.COMMAND.replace(" ", " ")} $inputs 2>$null
75
+ if (-not $rawCompletions) { return }
76
+ foreach ($line in $rawCompletions) {
77
+ $parts = $line.Split([char]9, 2)
78
+ $word = $parts[0]
79
+ $desc = if ($parts.Length -gt 1) { $parts[1] } else { '' }
80
+ $type = if ($word.EndsWith('/')) {
81
+ [System.Management.Automation.CompletionResultType]::ParameterValue
82
+ } else {
83
+ [System.Management.Automation.CompletionResultType]::ParameterValue
84
+ }
85
+ [System.Management.Automation.CompletionResult]::new($word, $word, $type, $(if ($desc) { $desc } else { $word }))
86
+ }
87
+ }
88
+ `;
89
+ export const ZSH_AUTOCOMPLETE_SCRIPT = `\
90
+ if ! (( $+functions[compdef] )); then
91
+ autoload -Uz compinit
92
+ compinit
93
+ fi
94
+
95
+ ${COMPLETION_FUNCTION_NAME}() {
96
+ emulate -L zsh
97
+ local -a directories inputs plainCompletions
98
+ local rawCompletions
99
+ inputs=("\${words[@]}")
100
+ if (( CURRENT == 1 && \${#inputs[@]} == 1 )) && [[ "\${inputs[1]}" == "${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME}" ]]; then
101
+ inputs+=("")
102
+ elif (( CURRENT > \${#inputs[@]} )); then
103
+ inputs+=("")
104
+ fi
105
+ if ! rawCompletions="$(env -u COMP_LINE ${CONSTANTS.AUTOCOMPLETE.COMMAND} "\${inputs[@]}")"; then
106
+ return 1
107
+ fi
108
+
109
+ if [[ -z "$rawCompletions" ]]; then
110
+ return 0
111
+ fi
112
+
113
+ directories=()
114
+ plainCompletions=()
115
+ local -a plainDisplays dirDisplays
116
+ plainDisplays=()
117
+ dirDisplays=()
118
+ local IFS_TAB completion="" word desc
119
+ IFS_TAB=$'\\t'
120
+ for completion in "\${(@f)rawCompletions}"; do
121
+ word="\${completion%%"$IFS_TAB"*}"
122
+ if [[ "$completion" == *"$IFS_TAB"* ]]; then
123
+ desc="\${completion#*"$IFS_TAB"}"
124
+ else
125
+ desc=""
126
+ fi
127
+ if [[ "$word" == */ ]]; then
128
+ directories+=("$word")
129
+ if [[ -n "$desc" ]]; then
130
+ dirDisplays+=("$word -- $desc")
131
+ else
132
+ dirDisplays+=("$word")
133
+ fi
134
+ else
135
+ plainCompletions+=("$word")
136
+ if [[ -n "$desc" ]]; then
137
+ plainDisplays+=("$word -- $desc")
138
+ else
139
+ plainDisplays+=("$word")
140
+ fi
141
+ fi
142
+ done
143
+ if (( \${#plainCompletions[@]} > 0 )); then
144
+ compadd -Q -l -d plainDisplays -- "\${plainCompletions[@]}"
145
+ fi
146
+ if (( \${#directories[@]} > 0 )); then
147
+ compadd -Q -S "" -l -d dirDisplays -- "\${directories[@]}"
148
+ fi
149
+ }
150
+ compdef ${COMPLETION_FUNCTION_NAME} ${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME}
151
+
152
+ ${ENSURE_FUNCTION_NAME}() {
153
+ if (( $+functions[compdef] )) && [[ "\${_comps[${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME}]}" != ${COMPLETION_FUNCTION_NAME} ]]; then
154
+ compdef ${COMPLETION_FUNCTION_NAME} ${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME}
155
+ fi
156
+ }
157
+ autoload -Uz add-zsh-hook
158
+ add-zsh-hook precmd ${ENSURE_FUNCTION_NAME}
159
+ `;
160
+ const isCliCommandToken = (input) => {
161
+ const normalizedInput = input.replace(/\\/gu, "/").split("/").pop() ?? input;
162
+ return (normalizedInput === CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME ||
163
+ normalizedInput === `${CONSTANTS.AUTOCOMPLETE.CLI_COMMAND_NAME}.exe`);
164
+ };
165
+ const normalizeCompletionInputs = (inputs) => {
166
+ const firstInput = inputs[0];
167
+ if (firstInput === undefined || !isCliCommandToken(firstInput)) {
168
+ return [...inputs];
169
+ }
170
+ return inputs.slice(1);
171
+ };
172
+ export const resolveCompletionInputs = (inputs) => {
173
+ const environment = process.env;
174
+ const completionLine = environment.COMP_LINE;
175
+ if (completionLine === undefined) {
176
+ return normalizeCompletionInputs(inputs);
177
+ }
178
+ const trimmedStart = completionLine.trimStart();
179
+ if (trimmedStart === "") {
180
+ return [];
181
+ }
182
+ const completionInputs = trimmedStart.split(/\s+/u);
183
+ return normalizeCompletionInputs(completionInputs);
184
+ };
185
+ //# sourceMappingURL=autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../src/services/autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AACvD,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D,MAAM,CAAC,MAAM,wBAAwB,GAAG;EACtC,wBAAwB;;;;iFAIuD,SAAS,CAAC,YAAY,CAAC,gBAAgB;;;;;4CAK5E,SAAS,CAAC,YAAY,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAmDtC,wBAAwB,IAAI,SAAS,CAAC,YAAY,CAAC,gBAAgB;CACtG,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;kDACI,SAAS,CAAC,YAAY,CAAC,gBAAgB;;;;;;wBAMjE,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;;;;;;;;;;;;;CAcvE,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;EAMrC,wBAAwB;;;;;2EAKiD,SAAS,CAAC,YAAY,CAAC,gBAAgB;;;;;4CAKtE,SAAS,CAAC,YAAY,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6ChE,wBAAwB,IAAI,SAAS,CAAC,YAAY,CAAC,gBAAgB;;EAE3E,oBAAoB;mDAC6B,SAAS,CAAC,YAAY,CAAC,gBAAgB,UAAU,wBAAwB;cAC9G,wBAAwB,IAAI,SAAS,CAAC,YAAY,CAAC,gBAAgB;;;;sBAI3D,oBAAoB;CACzC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;IAE7E,OAAO,CACL,eAAe,KAAK,SAAS,CAAC,YAAY,CAAC,gBAAgB;QAC3D,eAAe,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,gBAAgB,MAAM,CACrE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,MAAyB,EAAE,EAAE;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAyB,EAAE,EAAE;IACnE,MAAM,WAAW,GAA+C,OAAO,CAAC,GAAG,CAAC;IAC5E,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC;IAE7C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;IAEhD,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;AACrD,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { type ResolvedSyncConfig, type SyncConfig, type SyncConfigResolutionContext } from "#app/config/sync.ts";
2
+ export declare const sortSyncConfigEntries: (entries: readonly SyncConfig["entries"][number][]) => {
3
+ kind: "file" | "directory";
4
+ localPath: {
5
+ default: string;
6
+ win?: string | undefined;
7
+ mac?: string | undefined;
8
+ linux?: string | undefined;
9
+ wsl?: string | undefined;
10
+ };
11
+ repoPath?: {
12
+ default: string;
13
+ win?: string | undefined;
14
+ mac?: string | undefined;
15
+ linux?: string | undefined;
16
+ wsl?: string | undefined;
17
+ } | undefined;
18
+ profiles?: string[] | undefined;
19
+ mode?: {
20
+ default: "normal" | "secret" | "ignore";
21
+ win?: "normal" | "secret" | "ignore" | undefined;
22
+ mac?: "normal" | "secret" | "ignore" | undefined;
23
+ linux?: "normal" | "secret" | "ignore" | undefined;
24
+ wsl?: "normal" | "secret" | "ignore" | undefined;
25
+ } | undefined;
26
+ permission?: {
27
+ default: string;
28
+ win?: string | undefined;
29
+ mac?: string | undefined;
30
+ linux?: string | undefined;
31
+ wsl?: string | undefined;
32
+ } | undefined;
33
+ }[];
34
+ export declare const buildSyncConfigDocument: (config: ResolvedSyncConfig) => SyncConfig;
35
+ export declare const writeValidatedSyncConfig: (syncDirectory: string, config: SyncConfig, context: SyncConfigResolutionContext) => Promise<{
36
+ version: 7;
37
+ entries: {
38
+ kind: "file" | "directory";
39
+ localPath: {
40
+ default: string;
41
+ win?: string | undefined;
42
+ mac?: string | undefined;
43
+ linux?: string | undefined;
44
+ wsl?: string | undefined;
45
+ };
46
+ repoPath?: {
47
+ default: string;
48
+ win?: string | undefined;
49
+ mac?: string | undefined;
50
+ linux?: string | undefined;
51
+ wsl?: string | undefined;
52
+ } | undefined;
53
+ profiles?: string[] | undefined;
54
+ mode?: {
55
+ default: "normal" | "secret" | "ignore";
56
+ win?: "normal" | "secret" | "ignore" | undefined;
57
+ mac?: "normal" | "secret" | "ignore" | undefined;
58
+ linux?: "normal" | "secret" | "ignore" | undefined;
59
+ wsl?: "normal" | "secret" | "ignore" | undefined;
60
+ } | undefined;
61
+ permission?: {
62
+ default: string;
63
+ win?: string | undefined;
64
+ mac?: string | undefined;
65
+ linux?: string | undefined;
66
+ wsl?: string | undefined;
67
+ } | undefined;
68
+ }[];
69
+ age?: {
70
+ recipients: string[];
71
+ } | undefined;
72
+ }>;
73
+ //# sourceMappingURL=config-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../src/services/config-file.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,kBAAkB,EAEvB,KAAK,UAAU,EACf,KAAK,2BAA2B,EACjC,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,qBAAqB,GAChC,SAAS,SAAS,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,kBAAkB,KACzB,UA2BF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,eAAe,MAAM,EACrB,QAAQ,UAAU,EAClB,SAAS,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWrC,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { CONSTANTS } from "#app/config/constants.ts";
2
+ import { formatSyncConfig, parseSyncConfig, resolveSyncConfigFilePath, } from "#app/config/sync.ts";
3
+ import { writeTextFileAtomically } from "#app/lib/filesystem.ts";
4
+ export const sortSyncConfigEntries = (entries) => {
5
+ return [...entries].sort((left, right) => {
6
+ return left.localPath.default.localeCompare(right.localPath.default);
7
+ });
8
+ };
9
+ export const buildSyncConfigDocument = (config) => {
10
+ const entries = sortSyncConfigEntries(config.entries.map((entry) => ({
11
+ kind: entry.kind,
12
+ localPath: entry.configuredLocalPath,
13
+ ...(entry.configuredRepoPath === undefined
14
+ ? {}
15
+ : { repoPath: entry.configuredRepoPath }),
16
+ ...(entry.modeExplicit ? { mode: entry.configuredMode } : {}),
17
+ ...(entry.permissionExplicit
18
+ ? { permission: entry.configuredPermission }
19
+ : {}),
20
+ ...(entry.profilesExplicit ? { profiles: [...entry.profiles] } : {}),
21
+ })));
22
+ return {
23
+ version: CONSTANTS.SYNC.CONFIG_VERSION,
24
+ ...(config.age === undefined
25
+ ? {}
26
+ : {
27
+ age: {
28
+ recipients: [...config.age.recipients],
29
+ },
30
+ }),
31
+ entries,
32
+ };
33
+ };
34
+ export const writeValidatedSyncConfig = async (syncDirectory, config, context) => {
35
+ const resolvedConfig = parseSyncConfig(config, context);
36
+ const nextConfig = buildSyncConfigDocument(resolvedConfig);
37
+ await writeTextFileAtomically(resolveSyncConfigFilePath(syncDirectory), formatSyncConfig(nextConfig));
38
+ return nextConfig;
39
+ };
40
+ //# sourceMappingURL=config-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file.js","sourceRoot":"","sources":["../../src/services/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,eAAe,EAEf,yBAAyB,GAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,OAAiD,EACjD,EAAE;IACF,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,MAA0B,EACd,EAAE;IACd,MAAM,OAAO,GAAG,qBAAqB,CACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAiC,EAAE,CAAC,CAAC;QAC5D,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,mBAAmB;QACpC,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,kBAAkB;YAC1B,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,oBAAoB,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC,CACJ,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,cAAc;QACtC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS;YAC1B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,GAAG,EAAE;oBACH,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;iBACvC;aACF,CAAC;QACN,OAAO;KACM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,aAAqB,EACrB,MAAkB,EAClB,OAAoC,EACpC,EAAE;IACF,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;IAE3D,MAAM,uBAAuB,CAC3B,yBAAyB,CAAC,aAAa,CAAC,EACxC,gBAAgB,CAAC,UAAU,CAAC,CAC7B,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ConsolaInstance } from "consola";
2
+ export type DoctorCheckLevel = "fail" | "ok" | "warn";
3
+ export type DoctorCheck = Readonly<{
4
+ checkId: string;
5
+ detail: string;
6
+ level: DoctorCheckLevel;
7
+ }>;
8
+ export type DoctorResult = Readonly<{
9
+ checks: readonly DoctorCheck[];
10
+ configPath: string;
11
+ hasFailures: boolean;
12
+ hasWarnings: boolean;
13
+ syncDirectory: string;
14
+ }>;
15
+ export declare const runDoctorChecks: (reporter?: ConsolaInstance) => Promise<DoctorResult>;
16
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/services/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAa/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAoBH,eAAO,MAAM,eAAe,GAC1B,WAAW,eAAe,KACzB,OAAO,CAAC,YAAY,CAqKtB,CAAC"}
@@ -0,0 +1,126 @@
1
+ import { resolveSyncConfigFilePath } from "#app/config/sync.ts";
2
+ import { formatDotweaveError } from "#app/lib/error.ts";
3
+ import { pathExists } from "#app/lib/filesystem.ts";
4
+ import { ensureRepository } from "#app/lib/git.ts";
5
+ import { buildEntryMaterialization } from "./local-materialization.js";
6
+ import { buildRepositorySnapshot } from "./repo-snapshot.js";
7
+ import { loadSyncConfig, resolveSyncPaths, } from "./runtime.js";
8
+ const ok = (checkId, detail) => ({
9
+ checkId,
10
+ detail,
11
+ level: "ok",
12
+ });
13
+ const warn = (checkId, detail) => ({
14
+ checkId,
15
+ detail,
16
+ level: "warn",
17
+ });
18
+ const fail = (checkId, detail) => ({
19
+ checkId,
20
+ detail,
21
+ level: "fail",
22
+ });
23
+ export const runDoctorChecks = async (reporter) => {
24
+ reporter?.start("Running doctor checks...");
25
+ const { syncDirectory } = resolveSyncPaths();
26
+ const configPath = resolveSyncConfigFilePath(syncDirectory);
27
+ const checks = [];
28
+ try {
29
+ reporter?.start("Checking sync directory...");
30
+ await ensureRepository(syncDirectory);
31
+ checks.push(ok("git", "Sync directory is a git repository."));
32
+ }
33
+ catch (error) {
34
+ checks.push(fail("git", error instanceof Error ? error.message : "Git repository check failed."));
35
+ return {
36
+ checks,
37
+ configPath,
38
+ hasFailures: true,
39
+ hasWarnings: false,
40
+ syncDirectory,
41
+ };
42
+ }
43
+ let config;
44
+ try {
45
+ reporter?.start("Loading sync configuration...");
46
+ const { effectiveConfig, fullConfig } = await loadSyncConfig(syncDirectory);
47
+ config = effectiveConfig;
48
+ checks.push(ok("config", `Loaded config with ${fullConfig.entries.length} entries and ${effectiveConfig.age.recipients.length} recipients.`));
49
+ checks.push(ok("profiles", effectiveConfig.activeProfile === undefined
50
+ ? "No active profile configured."
51
+ : `Active profile: ${effectiveConfig.activeProfile}.`));
52
+ }
53
+ catch (error) {
54
+ checks.push(fail("config", error instanceof Error
55
+ ? formatDotweaveError(error)
56
+ : "Sync configuration could not be read."));
57
+ return {
58
+ checks,
59
+ configPath,
60
+ hasFailures: true,
61
+ hasWarnings: false,
62
+ syncDirectory,
63
+ };
64
+ }
65
+ reporter?.start("Checking age identity...");
66
+ checks.push((await pathExists(config.age.identityFile))
67
+ ? ok("age", `Age identity file exists at ${config.age.identityFile}.`)
68
+ : fail("age", `Age identity file is missing: ${config.age.identityFile}`));
69
+ checks.push(config.entries.length === 0
70
+ ? warn("entries", "No sync entries are configured yet.")
71
+ : ok("entries", `Tracked ${config.entries.length} sync entries.`));
72
+ const missingEntries = config.entries.filter((entry) => {
73
+ return entry.mode !== "ignore" && entry.localPath.length > 0;
74
+ });
75
+ const missingCount = 0;
76
+ let checkedLocalPathCount = 0;
77
+ const healthyMissingEntries = new Set();
78
+ reporter?.start("Scanning repository artifacts...");
79
+ const repositorySnapshot = await buildRepositorySnapshot(syncDirectory, config, reporter);
80
+ reporter?.start("Checking tracked local paths...");
81
+ try {
82
+ for (const entry of missingEntries) {
83
+ checkedLocalPathCount += 1;
84
+ if ((reporter?.level ?? 0) >= 4) {
85
+ reporter?.verbose(`checked tracked local path ${entry.localPath}`);
86
+ }
87
+ else if (checkedLocalPathCount % 100 === 0) {
88
+ reporter?.start(`Checked ${checkedLocalPathCount} tracked local paths...`);
89
+ }
90
+ if (await pathExists(entry.localPath)) {
91
+ continue;
92
+ }
93
+ buildEntryMaterialization(entry, repositorySnapshot, (reporter?.level ?? 0) >= 4 ? reporter : undefined);
94
+ healthyMissingEntries.add(entry.repoPath);
95
+ }
96
+ }
97
+ catch (error) {
98
+ checks.push(fail("local-paths", error instanceof Error
99
+ ? formatDotweaveError(error)
100
+ : "Tracked local paths could not be checked."));
101
+ const hasFailures = checks.some((check) => check.level === "fail");
102
+ const hasWarnings = checks.some((check) => check.level === "warn");
103
+ return {
104
+ checks,
105
+ configPath,
106
+ hasFailures,
107
+ hasWarnings,
108
+ syncDirectory,
109
+ };
110
+ }
111
+ checks.push(missingCount === 0
112
+ ? ok("local-paths", healthyMissingEntries.size === 0
113
+ ? "All tracked local paths currently exist."
114
+ : `All missing local paths are healthy for the current sync state (${healthyMissingEntries.size} entr${healthyMissingEntries.size === 1 ? "y" : "ies"}).`)
115
+ : warn("local-paths", `${missingCount} tracked local path${missingCount === 1 ? " is" : "s are"} missing.`));
116
+ const hasFailures = checks.some((check) => check.level === "fail");
117
+ const hasWarnings = checks.some((check) => check.level === "warn");
118
+ return {
119
+ checks,
120
+ configPath,
121
+ hasFailures,
122
+ hasWarnings,
123
+ syncDirectory,
124
+ };
125
+ };
126
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/services/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAEL,cAAc,EACd,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAkBtB,MAAM,EAAE,GAAG,CAAC,OAAe,EAAE,MAAc,EAAe,EAAE,CAAC,CAAC;IAC5D,OAAO;IACP,MAAM;IACN,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,MAAc,EAAe,EAAE,CAAC,CAAC;IAC9D,OAAO;IACP,MAAM;IACN,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,MAAc,EAAe,EAAE,CAAC,CAAC;IAC9D,OAAO;IACP,MAAM;IACN,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,QAA0B,EACH,EAAE;IACzB,QAAQ,EAAE,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5C,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,QAAQ,EAAE,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC9C,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CACT,IAAI,CACF,KAAK,EACL,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CACxE,CACF,CAAC;QAEF,OAAO;YACL,MAAM;YACN,UAAU;YACV,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,KAAK;YAClB,aAAa;SACd,CAAC;IACJ,CAAC;IAED,IAAI,MAA2B,CAAC;IAEhC,IAAI,CAAC;QACH,QAAQ,EAAE,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QAE5E,MAAM,GAAG,eAAe,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,EAAE,CACA,QAAQ,EACR,sBAAsB,UAAU,CAAC,OAAO,CAAC,MAAM,gBAAgB,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,cAAc,CACnH,CACF,CAAC;QACF,MAAM,CAAC,IAAI,CACT,EAAE,CACA,UAAU,EACV,eAAe,CAAC,aAAa,KAAK,SAAS;YACzC,CAAC,CAAC,+BAA+B;YACjC,CAAC,CAAC,mBAAmB,eAAe,CAAC,aAAa,GAAG,CACxD,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CACT,IAAI,CACF,QAAQ,EACR,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,uCAAuC,CAC5C,CACF,CAAC;QAEF,OAAO;YACL,MAAM;YACN,UAAU;YACV,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,KAAK;YAClB,aAAa;SACd,CAAC;IACJ,CAAC;IAED,QAAQ,EAAE,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CACT,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,+BAA+B,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC;QACtE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,iCAAiC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAC5E,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,qCAAqC,CAAC;QACxD,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,gBAAgB,CAAC,CACpE,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACrD,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhD,QAAQ,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CACtD,aAAa,EACb,MAAM,EACN,QAAQ,CACT,CAAC;IAEF,QAAQ,EAAE,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,qBAAqB,IAAI,CAAC,CAAC;YAE3B,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,QAAQ,EAAE,OAAO,CAAC,8BAA8B,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,qBAAqB,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;gBAC7C,QAAQ,EAAE,KAAK,CACb,WAAW,qBAAqB,yBAAyB,CAC1D,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,SAAS;YACX,CAAC;YAED,yBAAyB,CACvB,KAAK,EACL,kBAAkB,EAClB,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CACnD,CAAC;YACF,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CACT,IAAI,CACF,aAAa,EACb,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,2CAA2C,CAChD,CACF,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;QAEnE,OAAO;YACL,MAAM;YACN,UAAU;YACV,WAAW;YACX,WAAW;YACX,aAAa;SACd,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CACT,YAAY,KAAK,CAAC;QAChB,CAAC,CAAC,EAAE,CACA,aAAa,EACb,qBAAqB,CAAC,IAAI,KAAK,CAAC;YAC9B,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,mEAAmE,qBAAqB,CAAC,IAAI,QAAQ,qBAAqB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAC5J;QACH,CAAC,CAAC,IAAI,CACF,aAAa,EACb,GAAG,YAAY,sBAAsB,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,WAAW,CACrF,CACN,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IAEnE,OAAO;QACL,MAAM;QACN,UAAU;QACV,WAAW;QACX,WAAW;QACX,aAAa;KACd,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ConsolaInstance } from "consola";
2
+ import { DotweaveError } from "#app/lib/error.ts";
3
+ export type InitRequest = Readonly<{
4
+ ageIdentity?: string;
5
+ generateAgeIdentity?: boolean;
6
+ identityFile?: string;
7
+ recipients: readonly string[];
8
+ repository?: string;
9
+ }>;
10
+ export type InitResult = Readonly<{
11
+ alreadyInitialized: boolean;
12
+ configPath: string;
13
+ entryCount: number;
14
+ gitAction: "cloned" | "existing" | "initialized";
15
+ gitSource?: string;
16
+ identityFile: string;
17
+ generatedIdentity: boolean;
18
+ recipientCount: number;
19
+ syncDirectory: string;
20
+ }>;
21
+ export declare const defaultSyncIdentityFile: "~/.config/dotweave/keys.txt";
22
+ export declare const createMissingRepositoryAgeKeyError: () => DotweaveError;
23
+ export declare const initializeSyncDirectory: (request: InitRequest, reporter?: ConsolaInstance) => Promise<InitResult>;
24
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAsB/C,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAcpE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH,eAAO,MAAM,uBAAuB,+BAAuC,CAAC;AAK5E,eAAO,MAAM,kCAAkC,qBAQ9C,CAAC;AAwKF,eAAO,MAAM,uBAAuB,GAClC,SAAS,WAAW,EACpB,WAAW,eAAe,KACzB,OAAO,CAAC,UAAU,CA2LpB,CAAC"}