@blotch/dolan 0.0.0-stage → 22.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/dist/commands/add.d.ts +22 -0
  2. package/dist/commands/add.js +132 -0
  3. package/dist/commands/add.js.map +1 -0
  4. package/dist/commands/add.test.d.ts +1 -0
  5. package/dist/commands/add.test.js +209 -0
  6. package/dist/commands/add.test.js.map +1 -0
  7. package/dist/commands/diff.d.ts +13 -0
  8. package/dist/commands/diff.js +155 -0
  9. package/dist/commands/diff.js.map +1 -0
  10. package/dist/commands/diff.test.d.ts +1 -0
  11. package/dist/commands/diff.test.js +327 -0
  12. package/dist/commands/diff.test.js.map +1 -0
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +248 -0
  15. package/dist/commands/doctor.js.map +1 -0
  16. package/dist/commands/doctor.test.d.ts +1 -0
  17. package/dist/commands/doctor.test.js +301 -0
  18. package/dist/commands/doctor.test.js.map +1 -0
  19. package/dist/commands/eject.d.ts +11 -0
  20. package/dist/commands/eject.js +55 -0
  21. package/dist/commands/eject.js.map +1 -0
  22. package/dist/commands/eject.test.d.ts +1 -0
  23. package/dist/commands/eject.test.js +151 -0
  24. package/dist/commands/eject.test.js.map +1 -0
  25. package/dist/commands/info.d.ts +1 -0
  26. package/dist/commands/info.js +73 -0
  27. package/dist/commands/info.js.map +1 -0
  28. package/dist/commands/info.test.d.ts +1 -0
  29. package/dist/commands/info.test.js +143 -0
  30. package/dist/commands/info.test.js.map +1 -0
  31. package/dist/commands/init.d.ts +1 -0
  32. package/dist/commands/init.js +98 -0
  33. package/dist/commands/init.js.map +1 -0
  34. package/dist/commands/init.test.d.ts +1 -0
  35. package/dist/commands/init.test.js +154 -0
  36. package/dist/commands/init.test.js.map +1 -0
  37. package/dist/commands/list.d.ts +16 -0
  38. package/dist/commands/list.js +124 -0
  39. package/dist/commands/list.js.map +1 -0
  40. package/dist/commands/list.test.d.ts +1 -0
  41. package/dist/commands/list.test.js +285 -0
  42. package/dist/commands/list.test.js.map +1 -0
  43. package/dist/commands/outdated.d.ts +13 -0
  44. package/dist/commands/outdated.js +116 -0
  45. package/dist/commands/outdated.js.map +1 -0
  46. package/dist/commands/outdated.test.d.ts +1 -0
  47. package/dist/commands/outdated.test.js +208 -0
  48. package/dist/commands/outdated.test.js.map +1 -0
  49. package/dist/commands/remove.d.ts +18 -0
  50. package/dist/commands/remove.js +161 -0
  51. package/dist/commands/remove.js.map +1 -0
  52. package/dist/commands/remove.test.d.ts +1 -0
  53. package/dist/commands/remove.test.js +361 -0
  54. package/dist/commands/remove.test.js.map +1 -0
  55. package/dist/commands/theme.d.ts +1 -0
  56. package/dist/commands/theme.js +66 -0
  57. package/dist/commands/theme.js.map +1 -0
  58. package/dist/commands/theme.test.d.ts +1 -0
  59. package/dist/commands/theme.test.js +133 -0
  60. package/dist/commands/theme.test.js.map +1 -0
  61. package/dist/commands/update.d.ts +31 -0
  62. package/dist/commands/update.js +601 -0
  63. package/dist/commands/update.js.map +1 -0
  64. package/dist/commands/update.test.d.ts +1 -0
  65. package/dist/commands/update.test.js +1233 -0
  66. package/dist/commands/update.test.js.map +1 -0
  67. package/dist/config.d.ts +11 -0
  68. package/dist/config.js +19 -0
  69. package/dist/config.js.map +1 -0
  70. package/dist/config.test.d.ts +1 -0
  71. package/dist/config.test.js +48 -0
  72. package/dist/config.test.js.map +1 -0
  73. package/dist/index.d.ts +2 -0
  74. package/dist/index.js +89 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/lockfile.d.ts +21 -0
  77. package/dist/lockfile.js +39 -0
  78. package/dist/lockfile.js.map +1 -0
  79. package/dist/registry.d.ts +14 -0
  80. package/dist/registry.js +85 -0
  81. package/dist/registry.js.map +1 -0
  82. package/dist/registry.test.d.ts +1 -0
  83. package/dist/registry.test.js +95 -0
  84. package/dist/registry.test.js.map +1 -0
  85. package/dist/test-utils.d.ts +16 -0
  86. package/dist/test-utils.js +65 -0
  87. package/dist/test-utils.js.map +1 -0
  88. package/dist/ui/components/accordion/accordion.test.ts +194 -0
  89. package/dist/ui/components/accordion/accordion.ts +173 -0
  90. package/dist/ui/components/accordion/index.ts +6 -0
  91. package/dist/ui/components/action-sheet/action-sheet.test.ts +211 -0
  92. package/dist/ui/components/action-sheet/action-sheet.ts +353 -0
  93. package/dist/ui/components/action-sheet/index.ts +6 -0
  94. package/dist/ui/components/alert/alert.test.ts +48 -0
  95. package/dist/ui/components/alert/alert.ts +104 -0
  96. package/dist/ui/components/alert/index.ts +1 -0
  97. package/dist/ui/components/alert-dialog/alert-dialog.test.ts +141 -0
  98. package/dist/ui/components/alert-dialog/alert-dialog.ts +243 -0
  99. package/dist/ui/components/alert-dialog/index.ts +7 -0
  100. package/dist/ui/components/area-chart/area-chart-render.test.ts +121 -0
  101. package/dist/ui/components/area-chart/area-chart.test.ts +158 -0
  102. package/dist/ui/components/area-chart/area-chart.ts +349 -0
  103. package/dist/ui/components/area-chart/index.ts +6 -0
  104. package/dist/ui/components/aspect-ratio/aspect-ratio.test.ts +10 -0
  105. package/dist/ui/components/aspect-ratio/aspect-ratio.ts +28 -0
  106. package/dist/ui/components/aspect-ratio/index.ts +1 -0
  107. package/dist/ui/components/avatar/avatar.test.ts +69 -0
  108. package/dist/ui/components/avatar/avatar.ts +131 -0
  109. package/dist/ui/components/avatar/index.ts +1 -0
  110. package/dist/ui/components/badge/badge.test.ts +49 -0
  111. package/dist/ui/components/badge/badge.ts +97 -0
  112. package/dist/ui/components/badge/index.ts +1 -0
  113. package/dist/ui/components/bar-chart/bar-chart-render.test.ts +174 -0
  114. package/dist/ui/components/bar-chart/bar-chart.test.ts +73 -0
  115. package/dist/ui/components/bar-chart/bar-chart.ts +327 -0
  116. package/dist/ui/components/bar-chart/index.ts +6 -0
  117. package/dist/ui/components/bottom-sheet/bottom-sheet.test.ts +163 -0
  118. package/dist/ui/components/bottom-sheet/bottom-sheet.ts +339 -0
  119. package/dist/ui/components/bottom-sheet/index.ts +1 -0
  120. package/dist/ui/components/button/button-render.test.ts +113 -0
  121. package/dist/ui/components/button/button.test.ts +70 -0
  122. package/dist/ui/components/button/button.ts +170 -0
  123. package/dist/ui/components/button/index.ts +6 -0
  124. package/dist/ui/components/button-group/button-group-render.test.ts +146 -0
  125. package/dist/ui/components/button-group/button-group.test.ts +54 -0
  126. package/dist/ui/components/button-group/button-group.ts +209 -0
  127. package/dist/ui/components/button-group/index.ts +8 -0
  128. package/dist/ui/components/candlestick-chart/candlestick-chart-render.test.ts +174 -0
  129. package/dist/ui/components/candlestick-chart/candlestick-chart.test.ts +96 -0
  130. package/dist/ui/components/candlestick-chart/candlestick-chart.ts +355 -0
  131. package/dist/ui/components/candlestick-chart/index.ts +7 -0
  132. package/dist/ui/components/card/card.test.ts +110 -0
  133. package/dist/ui/components/card/card.ts +162 -0
  134. package/dist/ui/components/card/index.ts +8 -0
  135. package/dist/ui/components/cartesian-chart/cartesian-chart-render.test.ts +188 -0
  136. package/dist/ui/components/cartesian-chart/cartesian-chart.test.ts +549 -0
  137. package/dist/ui/components/cartesian-chart/cartesian-chart.ts +1140 -0
  138. package/dist/ui/components/cartesian-chart/index.ts +18 -0
  139. package/dist/ui/components/checkbox/checkbox.test.ts +59 -0
  140. package/dist/ui/components/checkbox/checkbox.ts +96 -0
  141. package/dist/ui/components/checkbox/index.ts +1 -0
  142. package/dist/ui/components/collapsible/collapsible.test.ts +112 -0
  143. package/dist/ui/components/collapsible/collapsible.ts +122 -0
  144. package/dist/ui/components/collapsible/index.ts +5 -0
  145. package/dist/ui/components/dialog/dialog.test.ts +157 -0
  146. package/dist/ui/components/dialog/dialog.ts +248 -0
  147. package/dist/ui/components/dialog/index.ts +7 -0
  148. package/dist/ui/components/empty-state/empty-state.test.ts +60 -0
  149. package/dist/ui/components/empty-state/empty-state.ts +46 -0
  150. package/dist/ui/components/empty-state/index.ts +1 -0
  151. package/dist/ui/components/icon/icon.test.ts +52 -0
  152. package/dist/ui/components/icon/icon.ts +54 -0
  153. package/dist/ui/components/icon/icons.ts +569 -0
  154. package/dist/ui/components/icon/index.ts +2 -0
  155. package/dist/ui/components/input/index.ts +1 -0
  156. package/dist/ui/components/input/input.test.ts +134 -0
  157. package/dist/ui/components/input/input.ts +189 -0
  158. package/dist/ui/components/label/index.ts +1 -0
  159. package/dist/ui/components/label/label.test.ts +38 -0
  160. package/dist/ui/components/label/label.ts +24 -0
  161. package/dist/ui/components/line-chart/index.ts +6 -0
  162. package/dist/ui/components/line-chart/line-chart-render.test.ts +121 -0
  163. package/dist/ui/components/line-chart/line-chart.test.ts +81 -0
  164. package/dist/ui/components/line-chart/line-chart.ts +273 -0
  165. package/dist/ui/components/list/index.ts +1 -0
  166. package/dist/ui/components/list/list.test.ts +35 -0
  167. package/dist/ui/components/list/list.ts +71 -0
  168. package/dist/ui/components/nav-drawer/index.ts +8 -0
  169. package/dist/ui/components/nav-drawer/nav-drawer.test.ts +267 -0
  170. package/dist/ui/components/nav-drawer/nav-drawer.ts +504 -0
  171. package/dist/ui/components/pagination/index.ts +1 -0
  172. package/dist/ui/components/pagination/pagination.test.ts +96 -0
  173. package/dist/ui/components/pagination/pagination.ts +147 -0
  174. package/dist/ui/components/progress/index.ts +1 -0
  175. package/dist/ui/components/progress/progress.test.ts +71 -0
  176. package/dist/ui/components/progress/progress.ts +118 -0
  177. package/dist/ui/components/radio-group/index.ts +1 -0
  178. package/dist/ui/components/radio-group/radio-group.test.ts +115 -0
  179. package/dist/ui/components/radio-group/radio-group.ts +129 -0
  180. package/dist/ui/components/scatter-chart/index.ts +6 -0
  181. package/dist/ui/components/scatter-chart/scatter-chart-render.test.ts +157 -0
  182. package/dist/ui/components/scatter-chart/scatter-chart.test.ts +57 -0
  183. package/dist/ui/components/scatter-chart/scatter-chart.ts +277 -0
  184. package/dist/ui/components/scroll-area/index.ts +1 -0
  185. package/dist/ui/components/scroll-area/scroll-area.test.ts +40 -0
  186. package/dist/ui/components/scroll-area/scroll-area.ts +73 -0
  187. package/dist/ui/components/select/index.ts +1 -0
  188. package/dist/ui/components/select/select.test.ts +107 -0
  189. package/dist/ui/components/select/select.ts +146 -0
  190. package/dist/ui/components/separator/index.ts +1 -0
  191. package/dist/ui/components/separator/separator.test.ts +26 -0
  192. package/dist/ui/components/separator/separator.ts +45 -0
  193. package/dist/ui/components/sheet/index.ts +7 -0
  194. package/dist/ui/components/sheet/sheet.test.ts +44 -0
  195. package/dist/ui/components/sheet/sheet.ts +114 -0
  196. package/dist/ui/components/skeleton/index.ts +1 -0
  197. package/dist/ui/components/skeleton/skeleton.test.ts +13 -0
  198. package/dist/ui/components/skeleton/skeleton.ts +45 -0
  199. package/dist/ui/components/spinner/index.ts +1 -0
  200. package/dist/ui/components/spinner/spinner.test.ts +39 -0
  201. package/dist/ui/components/spinner/spinner.ts +83 -0
  202. package/dist/ui/components/switch/index.ts +1 -0
  203. package/dist/ui/components/switch/switch.test.ts +63 -0
  204. package/dist/ui/components/switch/switch.ts +98 -0
  205. package/dist/ui/components/tabs/index.ts +1 -0
  206. package/dist/ui/components/tabs/tabs.test.ts +199 -0
  207. package/dist/ui/components/tabs/tabs.ts +317 -0
  208. package/dist/ui/components/textarea/index.ts +1 -0
  209. package/dist/ui/components/textarea/textarea.test.ts +138 -0
  210. package/dist/ui/components/textarea/textarea.ts +221 -0
  211. package/dist/ui/components/toast/index.ts +9 -0
  212. package/dist/ui/components/toast/toast-state.test.ts +54 -0
  213. package/dist/ui/components/toast/toast-state.ts +46 -0
  214. package/dist/ui/components/toast/toast.test.ts +342 -0
  215. package/dist/ui/components/toast/toast.ts +527 -0
  216. package/dist/ui/components/toggle/index.ts +7 -0
  217. package/dist/ui/components/toggle/toggle.test.ts +186 -0
  218. package/dist/ui/components/toggle/toggle.ts +218 -0
  219. package/dist/ui/components/typography/index.ts +5 -0
  220. package/dist/ui/components/typography/typography.test.ts +55 -0
  221. package/dist/ui/components/typography/typography.ts +44 -0
  222. package/dist/ui/theme/dark.css +41 -0
  223. package/dist/ui/theme/default.css +56 -0
  224. package/dist/ui/theme/tailwind-plugin.test.ts +124 -0
  225. package/dist/ui/theme/tailwind-plugin.ts +151 -0
  226. package/dist/ui/utils/animate.test.ts +324 -0
  227. package/dist/ui/utils/animate.ts +544 -0
  228. package/dist/ui/utils/cn.test.ts +27 -0
  229. package/dist/ui/utils/cn.ts +6 -0
  230. package/dist/utils/analyze.d.ts +32 -0
  231. package/dist/utils/analyze.js +109 -0
  232. package/dist/utils/analyze.js.map +1 -0
  233. package/dist/utils/analyze.test.d.ts +1 -0
  234. package/dist/utils/analyze.test.js +146 -0
  235. package/dist/utils/analyze.test.js.map +1 -0
  236. package/dist/utils/animate.d.ts +210 -0
  237. package/dist/utils/animate.js +423 -0
  238. package/dist/utils/animate.js.map +1 -0
  239. package/dist/utils/animate.test.d.ts +1 -0
  240. package/dist/utils/animate.test.js +365 -0
  241. package/dist/utils/animate.test.js.map +1 -0
  242. package/dist/utils/banner.d.ts +1 -0
  243. package/dist/utils/banner.js +15 -0
  244. package/dist/utils/banner.js.map +1 -0
  245. package/dist/utils/banner.test.d.ts +1 -0
  246. package/dist/utils/banner.test.js +29 -0
  247. package/dist/utils/banner.test.js.map +1 -0
  248. package/dist/utils/cn.d.ts +2 -0
  249. package/dist/utils/cn.js +6 -0
  250. package/dist/utils/cn.js.map +1 -0
  251. package/dist/utils/cn.test.d.ts +1 -0
  252. package/dist/utils/cn.test.js +21 -0
  253. package/dist/utils/cn.test.js.map +1 -0
  254. package/dist/utils/format.d.ts +31 -0
  255. package/dist/utils/format.js +95 -0
  256. package/dist/utils/format.js.map +1 -0
  257. package/dist/utils/format.test.d.ts +1 -0
  258. package/dist/utils/format.test.js +71 -0
  259. package/dist/utils/format.test.js.map +1 -0
  260. package/dist/utils/logger.d.ts +6 -0
  261. package/dist/utils/logger.js +16 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/utils/logger.test.d.ts +1 -0
  264. package/dist/utils/logger.test.js +36 -0
  265. package/dist/utils/logger.test.js.map +1 -0
  266. package/dist/utils/resolve-paths.d.ts +12 -0
  267. package/dist/utils/resolve-paths.js +29 -0
  268. package/dist/utils/resolve-paths.js.map +1 -0
  269. package/dist/utils/resolve-paths.test.d.ts +1 -0
  270. package/dist/utils/resolve-paths.test.js +52 -0
  271. package/dist/utils/resolve-paths.test.js.map +1 -0
  272. package/package.json +56 -4
  273. package/README.md +0 -3
@@ -0,0 +1,601 @@
1
+ import * as p from '@clack/prompts';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, } from 'node:fs';
3
+ import { resolve, join } from 'node:path';
4
+ import pc from 'picocolors';
5
+ import { configExists, readConfig } from '../config.js';
6
+ import { getComponentNames } from '../registry.js';
7
+ import { getComponentFiles, getComponentSourceDir, getUiSourceDir, rewriteImports, } from '../utils/resolve-paths.js';
8
+ import { formatContent } from '../utils/format.js';
9
+ import { getOrCreateLockfile, hashContent, writeLockfile, } from '../lockfile.js';
10
+ import { analyzeFile, formatDiff, formatHunk, getHunks, applySelectedHunks, summarizeComponent, STATUS_ICONS, STATUS_LABELS, } from '../utils/analyze.js';
11
+ /**
12
+ * Walks through each hunk in a diff and asks the user to accept or reject it.
13
+ * "Show more context" re-computes the hunk with doubled context lines so the
14
+ * user can see more surrounding code before deciding.
15
+ */
16
+ const reviewHunks = async (componentName, fileName, currentContent, newContent) => {
17
+ let contextLines = 3;
18
+ const hunks = getHunks(currentContent, newContent, contextLines);
19
+ const accepted = Array.from({ length: hunks.length }, () => false);
20
+ for (let i = 0; i < hunks.length; i++) {
21
+ // eslint-disable-next-line no-constant-condition
22
+ while (true) {
23
+ // Re-fetch hunks if context was expanded — the current hunk may
24
+ // have merged with neighbors, so we find the hunk that still covers
25
+ // the original line range.
26
+ const currentHunks = getHunks(currentContent, newContent, contextLines);
27
+ // Defensive fallbacks: getHunks with a wider context always includes the
28
+ // original hunk range, so .find returns a match in practice. The `??`
29
+ // chain is a safety net for the theoretical case where re-computed hunks
30
+ // don't cover the target range.
31
+ /* v8 ignore next 9 */
32
+ const hunk = currentHunks.length === hunks.length
33
+ ? currentHunks[i]
34
+ : (currentHunks.find((h) => h.oldStart <= hunks[i].oldStart &&
35
+ h.oldStart + h.oldLines >=
36
+ hunks[i].oldStart + hunks[i].oldLines) ??
37
+ currentHunks[i] ??
38
+ hunks[i]);
39
+ const lineEnd = hunk.oldStart + hunk.oldLines - 1;
40
+ p.log.message(`\n${formatHunk(hunk)}\n`);
41
+ const choice = await p.select({
42
+ message: `${pc.bold(componentName)}/${pc.bold(fileName)} — hunk ${i + 1}/${hunks.length} (lines ${hunk.oldStart}–${lineEnd})`,
43
+ options: [
44
+ {
45
+ value: 'accept',
46
+ label: 'Accept',
47
+ hint: 'apply this change',
48
+ },
49
+ {
50
+ value: 'reject',
51
+ label: 'Reject',
52
+ hint: 'skip this change',
53
+ },
54
+ {
55
+ value: 'context',
56
+ label: 'Show more context',
57
+ hint: 'expand surrounding lines',
58
+ },
59
+ ],
60
+ });
61
+ if (p.isCancel(choice)) {
62
+ p.cancel('Update canceled.');
63
+ process.exit(0);
64
+ }
65
+ if (choice === 'context') {
66
+ contextLines *= 2;
67
+ continue;
68
+ }
69
+ accepted[i] = choice === 'accept';
70
+ break;
71
+ }
72
+ }
73
+ const acceptedCount = accepted.filter(Boolean).length;
74
+ if (acceptedCount === 0)
75
+ return { decision: 'keep' };
76
+ if (acceptedCount === hunks.length)
77
+ return { decision: 'upstream' };
78
+ const acceptedIndices = accepted
79
+ .map((v, i) => (v ? i : -1))
80
+ .filter((i) => i !== -1);
81
+ const result = applySelectedHunks(currentContent, newContent, acceptedIndices);
82
+ if (result === false) {
83
+ p.log.warn('Could not apply selected hunks — keeping your version.');
84
+ return { decision: 'keep' };
85
+ }
86
+ return { decision: 'partial', content: result };
87
+ };
88
+ /**
89
+ * Interactively presents a file change and asks the user to resolve it. Prompt
90
+ * wording adapts to the file status — conflicts get "keep mine / take
91
+ * upstream", while auto-updates and new files in selective mode get "apply /
92
+ * skip for now". The "Show diff" option loops back into the same prompt so the
93
+ * user can inspect before committing. "Review by hunk" lets the user
94
+ * accept/reject individual changes within the file.
95
+ */
96
+ const reviewFile = async (componentName, analysis) => {
97
+ const isNewFile = analysis.status === 'new-upstream';
98
+ const isConflict = analysis.status === 'conflict';
99
+ const isUserModified = analysis.status === 'user-modified';
100
+ const suffix = isConflict
101
+ ? '— how to resolve?'
102
+ : isNewFile
103
+ ? '— new file from upstream'
104
+ : isUserModified
105
+ ? '— you modified this file'
106
+ : '— upstream changed';
107
+ const applyOption = isConflict || isUserModified
108
+ ? {
109
+ value: 'upstream',
110
+ label: 'Take upstream version',
111
+ hint: isUserModified
112
+ ? 'revert to upstream'
113
+ : 'discard my changes for this file',
114
+ }
115
+ : isNewFile
116
+ ? {
117
+ value: 'upstream',
118
+ label: 'Add this file',
119
+ hint: 'create the file',
120
+ }
121
+ : {
122
+ value: 'upstream',
123
+ label: 'Apply update',
124
+ hint: 'overwrite with upstream',
125
+ };
126
+ const skipOption = isConflict || isUserModified
127
+ ? {
128
+ value: 'keep',
129
+ label: 'Keep my version',
130
+ hint: 'skip upstream changes for this file',
131
+ }
132
+ : {
133
+ value: 'keep',
134
+ label: 'Skip for now',
135
+ hint: 'keep current, ask again next time',
136
+ };
137
+ const options = [
138
+ {
139
+ value: 'diff',
140
+ label: isNewFile ? 'Show new file' : 'Show diff',
141
+ hint: 'see what changed',
142
+ },
143
+ skipOption,
144
+ applyOption,
145
+ ];
146
+ // New files have nothing to compare hunk-by-hunk — it's all new content
147
+ if (!isNewFile) {
148
+ options.push({
149
+ value: 'hunk-review',
150
+ label: 'Review by hunk',
151
+ hint: 'accept/reject individual changes',
152
+ });
153
+ }
154
+ // eslint-disable-next-line no-constant-condition
155
+ while (true) {
156
+ const choice = await p.select({
157
+ message: `${pc.bold(componentName)}/${pc.bold(analysis.file)} ${suffix}`,
158
+ options,
159
+ });
160
+ if (p.isCancel(choice)) {
161
+ p.cancel('Update canceled.');
162
+ process.exit(0);
163
+ }
164
+ if (choice === 'diff') {
165
+ if (isNewFile) {
166
+ const lines = analysis.newContent
167
+ .split('\n')
168
+ .map((line) => pc.green(`+ ${line}`))
169
+ .join('\n');
170
+ p.log.message(`\n${pc.bold('New file')} (full content):\n\n${lines}\n`);
171
+ }
172
+ else {
173
+ const diff = formatDiff(analysis.currentContent, analysis.newContent);
174
+ p.log.message(`\n${pc.bold('Diff')} (${pc.red('- yours')} / ${pc.green('+ upstream')}):\n\n${diff}\n`);
175
+ }
176
+ continue;
177
+ }
178
+ if (choice === 'hunk-review') {
179
+ return reviewHunks(componentName, analysis.file, analysis.currentContent, analysis.newContent);
180
+ }
181
+ return { decision: choice };
182
+ }
183
+ };
184
+ /**
185
+ * Three-way merge update for installed components, modeled on the same flow
186
+ * git/Mercurial use when applying upstream changes to a fork:
187
+ *
188
+ * - **base** (lockfile hash) — what the file was at last add/update.
189
+ * - **current** (disk content) — what the user has now.
190
+ * - **upstream** (registry source, re-rewritten) — what we'd install fresh.
191
+ *
192
+ * For each file, `analyzeFile` produces a status:
193
+ * - **up-to-date** — base == current == upstream (no work needed).
194
+ * - **auto-update** — current matches base, upstream differs (safe to
195
+ * overwrite — user hasn't touched the file).
196
+ * - **new-upstream** — file didn't exist locally (new dependency file).
197
+ * - **user-modified** — current differs from base, upstream matches base
198
+ * (user has edits, no upstream change → keep theirs).
199
+ * - **conflict** — current differs from base AND upstream differs
200
+ * from base (both sides moved → prompt the user).
201
+ *
202
+ * `--force` bypasses all prompts and overwrites every file with upstream,
203
+ * which is destructive but useful for resetting to a clean baseline.
204
+ *
205
+ * After the apply phase, the lockfile is updated to record the new upstream
206
+ * hash for every file — even ones the user chose to keep. This intentionally
207
+ * "advances the base" so the user only sees the same conflict once: next
208
+ * update compares against the (now-advanced) base and surfaces only changes
209
+ * introduced since this update.
210
+ */
211
+ export const updateCommand = async (options) => {
212
+ const cwd = process.cwd();
213
+ p.intro(pc.bold('dolan update'));
214
+ if (!configExists(cwd)) {
215
+ p.log.error(`No ${pc.cyan('dolan.config.json')} found. Run ${pc.bold('dolan init')} first.`);
216
+ process.exit(1);
217
+ }
218
+ const config = readConfig(cwd);
219
+ const componentsDir = resolve(cwd, config.aliases.components);
220
+ // Theme files are tracked independently of components (see the shared-file
221
+ // pass below). A project can legitimately have theme drift with zero tracked
222
+ // components — e.g. after ejecting every component but keeping the theme, or
223
+ // a theme-only setup. So we must NOT bail out just because there are no
224
+ // components: that would silently skip theme updates, including the
225
+ // destructive `--force` reset the user explicitly asked for. We compute the
226
+ // installed list defensively (empty when the dir is absent) and let the
227
+ // normal "nothing to do" checks below decide whether there's real work.
228
+ const allKnown = new Set(getComponentNames());
229
+ // v8 ignore-comment defensive fallback: tested paths always seed componentsDir
230
+ // via createFixture. The `[]` branch only fires in production when the app
231
+ // deletes the components/ tree by hand.
232
+ /* v8 ignore next 6 */
233
+ const installed = existsSync(componentsDir)
234
+ ? readdirSync(componentsDir, { withFileTypes: true })
235
+ .filter((entry) => entry.isDirectory() && allKnown.has(entry.name))
236
+ .map((entry) => entry.name)
237
+ .sort()
238
+ : [];
239
+ const lockfile = getOrCreateLockfile(cwd);
240
+ // --- Analysis phase ---
241
+ const s = p.spinner();
242
+ s.start('Analyzing changes...');
243
+ const componentAnalyses = [];
244
+ for (const name of installed) {
245
+ const destDir = resolve(componentsDir, name);
246
+ const files = getComponentFiles(name);
247
+ const lockedComponent = lockfile.components[name] ?? {};
248
+ const fileAnalyses = [];
249
+ for (const file of files) {
250
+ const srcContent = readFileSync(join(getComponentSourceDir(name), file), 'utf-8');
251
+ const destPath = join(destDir, file);
252
+ // Normalize to the consumer's oxfmt config before hashing/diffing so the
253
+ // lockfile base, the shown diff, and the written file all agree.
254
+ const newContent = formatContent(rewriteImports(srcContent), destPath);
255
+ const currentContent = existsSync(destPath)
256
+ ? readFileSync(destPath, 'utf-8')
257
+ : null;
258
+ const storedHash = lockedComponent[file]?.hash ?? null;
259
+ const status = analyzeFile(currentContent, newContent, storedHash, hashContent);
260
+ fileAnalyses.push({
261
+ file,
262
+ status,
263
+ currentContent: currentContent ?? '',
264
+ newContent,
265
+ });
266
+ }
267
+ componentAnalyses.push({ name, files: fileAnalyses });
268
+ }
269
+ // Analyze shared files (theme only — utils now come from @blotch/dolan)
270
+ const uiSrc = getUiSourceDir();
271
+ const sharedAnalyses = [];
272
+ // Theme files
273
+ const themeDir = resolve(cwd, config.aliases.theme);
274
+ const themeFiles = ['default.css', 'dark.css', 'tailwind-plugin.ts'];
275
+ for (const file of themeFiles) {
276
+ const src = join(uiSrc, 'theme', file);
277
+ if (!existsSync(src))
278
+ continue;
279
+ const destPath = join(themeDir, file);
280
+ // Theme files include `.css` (passed through untouched) and
281
+ // `tailwind-plugin.ts` (normalized to the consumer's oxfmt config).
282
+ const newContent = formatContent(readFileSync(src, 'utf-8'), destPath);
283
+ const currentContent = existsSync(destPath)
284
+ ? readFileSync(destPath, 'utf-8')
285
+ : null;
286
+ const storedHash = lockfile.theme[file]?.hash ?? null;
287
+ sharedAnalyses.push({
288
+ file: `theme/${file}`,
289
+ status: analyzeFile(currentContent, newContent, storedHash, hashContent),
290
+ currentContent: currentContent ?? '',
291
+ newContent,
292
+ });
293
+ }
294
+ s.stop('Analysis complete.');
295
+ // --- Display summary ---
296
+ if (componentAnalyses.length > 0) {
297
+ p.log.message(pc.bold('\nComponents:'));
298
+ for (const comp of componentAnalyses) {
299
+ const overall = summarizeComponent(comp);
300
+ p.log.message(` ${STATUS_ICONS[overall]} ${pc.bold(comp.name)} — ${STATUS_LABELS[overall]}`);
301
+ }
302
+ }
303
+ if (sharedAnalyses.length > 0) {
304
+ p.log.message(pc.bold('\nShared files:'));
305
+ for (const file of sharedAnalyses) {
306
+ p.log.message(` ${STATUS_ICONS[file.status]} ${pc.bold(file.file)} — ${STATUS_LABELS[file.status]}`);
307
+ }
308
+ }
309
+ // Compute stats
310
+ const allFiles = [
311
+ ...componentAnalyses.flatMap((c) => c.files),
312
+ ...sharedAnalyses,
313
+ ];
314
+ const autoUpdateCount = allFiles.filter((f) => f.status === 'auto-update' || f.status === 'new-upstream').length;
315
+ const userModifiedCount = allFiles.filter((f) => f.status === 'user-modified').length;
316
+ const conflictCount = allFiles.filter((f) => f.status === 'conflict').length;
317
+ const upToDateCount = allFiles.filter((f) => f.status === 'up-to-date').length;
318
+ p.log.message('');
319
+ p.log.info([
320
+ upToDateCount > 0 ? `${pc.green(String(upToDateCount))} up to date` : '',
321
+ autoUpdateCount > 0
322
+ ? `${pc.blue(String(autoUpdateCount))} auto-update`
323
+ : '',
324
+ userModifiedCount > 0
325
+ ? `${pc.yellow(String(userModifiedCount))} kept (user-modified)`
326
+ : '',
327
+ conflictCount > 0 ? `${pc.red(String(conflictCount))} conflict(s)` : '',
328
+ ]
329
+ .filter(Boolean)
330
+ .join(', '));
331
+ // Nothing to do
332
+ if (autoUpdateCount === 0 && conflictCount === 0 && userModifiedCount === 0) {
333
+ p.outro('Everything is up to date.');
334
+ writeLockfile(cwd, buildLockfile(componentAnalyses, sharedAnalyses, lockfile));
335
+ return;
336
+ }
337
+ const isSelective = !!options.selective && !options.force;
338
+ if (options.force) {
339
+ p.log.warn('Force mode — all files will be overwritten with upstream versions.');
340
+ }
341
+ // Nothing actionable without force or selective
342
+ if (!options.force &&
343
+ !isSelective &&
344
+ autoUpdateCount === 0 &&
345
+ conflictCount === 0) {
346
+ p.outro('Everything is up to date.');
347
+ writeLockfile(cwd, buildLockfile(componentAnalyses, sharedAnalyses, lockfile));
348
+ return;
349
+ }
350
+ if (!options.force && !isSelective && autoUpdateCount > 0) {
351
+ const confirm = await p.confirm({
352
+ message: `Apply ${autoUpdateCount} auto-update(s)?`,
353
+ initialValue: true,
354
+ });
355
+ if (p.isCancel(confirm) || !confirm) {
356
+ p.cancel('Update canceled.');
357
+ process.exit(0);
358
+ }
359
+ }
360
+ const reviewableCount = autoUpdateCount + userModifiedCount;
361
+ if (isSelective && reviewableCount > 0) {
362
+ p.log.info(`Selective mode — reviewing ${pc.bold(String(reviewableCount))} file(s) individually.`);
363
+ }
364
+ // --- Resolve conflicts ---
365
+ const resolutions = new Map();
366
+ const partialContents = new Map();
367
+ if (!options.force) {
368
+ for (const comp of componentAnalyses) {
369
+ for (const file of comp.files) {
370
+ if (file.status === 'conflict') {
371
+ const key = `${comp.name}/${file.file}`;
372
+ const result = await reviewFile(comp.name, file);
373
+ resolutions.set(key, result);
374
+ if (result.decision === 'partial' && result.content) {
375
+ partialContents.set(key, result.content);
376
+ }
377
+ }
378
+ }
379
+ }
380
+ for (const file of sharedAnalyses) {
381
+ if (file.status === 'conflict') {
382
+ const result = await reviewFile('shared', file);
383
+ resolutions.set(file.file, result);
384
+ if (result.decision === 'partial' && result.content) {
385
+ partialContents.set(file.file, result.content);
386
+ }
387
+ }
388
+ }
389
+ }
390
+ // --- Selective review of auto-updates and new files ---
391
+ if (isSelective) {
392
+ for (const comp of componentAnalyses) {
393
+ for (const file of comp.files) {
394
+ if (file.status === 'auto-update' ||
395
+ file.status === 'new-upstream' ||
396
+ file.status === 'user-modified') {
397
+ const key = `${comp.name}/${file.file}`;
398
+ const result = await reviewFile(comp.name, file);
399
+ resolutions.set(key, result);
400
+ if (result.decision === 'partial' && result.content) {
401
+ partialContents.set(key, result.content);
402
+ }
403
+ }
404
+ }
405
+ }
406
+ for (const file of sharedAnalyses) {
407
+ /* v8 ignore next 4 -- shared-file review path: only 'auto-update' is exercised in tests; the other statuses require rare drift-in-published-theme scenarios that aren't worth reproducing in fixtures. */
408
+ if (file.status === 'auto-update' ||
409
+ file.status === 'new-upstream' ||
410
+ file.status === 'user-modified') {
411
+ const result = await reviewFile('shared', file);
412
+ resolutions.set(file.file, result);
413
+ if (result.decision === 'partial' && result.content) {
414
+ partialContents.set(file.file, result.content);
415
+ }
416
+ }
417
+ }
418
+ }
419
+ // --- Apply changes ---
420
+ const applySpinner = p.spinner();
421
+ applySpinner.start('Applying updates...');
422
+ let appliedCount = 0;
423
+ let skippedCount = 0;
424
+ const newLockfile = getOrCreateLockfile(cwd);
425
+ for (const comp of componentAnalyses) {
426
+ const destDir = resolve(componentsDir, comp.name);
427
+ mkdirSync(destDir, { recursive: true });
428
+ if (!newLockfile.components[comp.name]) {
429
+ newLockfile.components[comp.name] = {};
430
+ }
431
+ for (const file of comp.files) {
432
+ const destPath = join(destDir, file.file);
433
+ const key = `${comp.name}/${file.file}`;
434
+ const resolution = resolutions.get(key)?.decision;
435
+ // In selective mode, auto-update/new-upstream files need explicit
436
+ // approval — "skip for now" means don't touch file OR lockfile hash
437
+ // so the change surfaces again on the next run.
438
+ const selectivelySkipped = isSelective &&
439
+ (file.status === 'auto-update' || file.status === 'new-upstream') &&
440
+ resolution === 'keep';
441
+ // Overwrite when ANY of these are true:
442
+ // 1. auto-update (not selectively skipped, not partial)
443
+ // 2. new-upstream (not selectively skipped, not partial)
444
+ // 3. user-modified resolved as 'upstream' (selective review or force)
445
+ // 4. conflict resolved as 'upstream' (or force)
446
+ const shouldOverwrite = !selectivelySkipped &&
447
+ resolution !== 'partial' &&
448
+ (file.status === 'auto-update' ||
449
+ file.status === 'new-upstream' ||
450
+ (file.status === 'user-modified' &&
451
+ (options.force || resolution === 'upstream')) ||
452
+ (file.status === 'conflict' &&
453
+ (options.force || resolution === 'upstream')));
454
+ if (resolution === 'partial') {
455
+ // User accepted some hunks but not all — write reconstructed
456
+ // content and advance lockfile to upstream hash. On next update
457
+ // the file shows as "user-modified" (the user's partial is their
458
+ // version now).
459
+ const content = partialContents.get(key);
460
+ writeFileSync(destPath, content);
461
+ newLockfile.components[comp.name][file.file] = {
462
+ hash: hashContent(file.newContent),
463
+ };
464
+ appliedCount++;
465
+ }
466
+ else if (shouldOverwrite) {
467
+ writeFileSync(destPath, file.newContent);
468
+ newLockfile.components[comp.name][file.file] = {
469
+ hash: hashContent(file.newContent),
470
+ };
471
+ appliedCount++;
472
+ }
473
+ else if (selectivelySkipped) {
474
+ // "Not now" — preserve the existing lockfile entry so this file
475
+ // appears as auto-update/new-upstream again on the next run.
476
+ const existingEntry = lockfile.components[comp.name]?.[file.file];
477
+ if (existingEntry) {
478
+ newLockfile.components[comp.name][file.file] = existingEntry;
479
+ }
480
+ skippedCount++;
481
+ }
482
+ else if (file.status === 'conflict') {
483
+ // User chose to keep their version. We still advance the lockfile base
484
+ // to the current upstream hash. This means on the next update:
485
+ // - If upstream hasn't changed again: base==upstream but base!=current
486
+ // → shows as "user-modified" (not a conflict). Correct.
487
+ // - If upstream changes again: base=old-upstream ≠ new-upstream AND
488
+ // base ≠ user's current → conflict again. Correct.
489
+ newLockfile.components[comp.name][file.file] = {
490
+ hash: hashContent(file.newContent),
491
+ };
492
+ skippedCount++;
493
+ }
494
+ else if (file.status === 'user-modified') {
495
+ // Defensive `??` fallback: every tested user-modified path pre-seeds
496
+ // the lockfile entry. The literal is a safety net for the theoretical
497
+ // case where the file is user-modified but has never been recorded.
498
+ /* v8 ignore next 5 */
499
+ newLockfile.components[comp.name][file.file] = lockfile.components[comp.name]?.[file.file] ?? {
500
+ hash: hashContent(file.newContent),
501
+ };
502
+ skippedCount++;
503
+ }
504
+ else {
505
+ // up-to-date — record hash
506
+ newLockfile.components[comp.name][file.file] = {
507
+ hash: hashContent(file.newContent),
508
+ };
509
+ }
510
+ }
511
+ }
512
+ // Apply shared files (theme only)
513
+ for (const file of sharedAnalyses) {
514
+ const fileName = file.file.split('/').pop();
515
+ mkdirSync(themeDir, { recursive: true });
516
+ const destPath = join(themeDir, fileName);
517
+ const sharedResolution = resolutions.get(file.file)?.decision;
518
+ // Shared-file (theme) apply branches: the tested paths cover the common
519
+ // apply, force-overwrite, and up-to-date flows. The remaining branch-level
520
+ // permutations (selective-skip with an existing lockfile entry vs missing,
521
+ // per-status × per-resolution combinations for a theme file with the same
522
+ // filename as an installed component) are all defensive fallbacks that
523
+ // require a hand-crafted lockfile drift on the shared theme dir, which
524
+ // isn't a reproducible user scenario.
525
+ /* v8 ignore start */
526
+ const selectivelySkippedShared = isSelective &&
527
+ (file.status === 'auto-update' || file.status === 'new-upstream') &&
528
+ sharedResolution === 'keep';
529
+ const shouldOverwrite = !selectivelySkippedShared &&
530
+ sharedResolution !== 'partial' &&
531
+ (file.status === 'auto-update' ||
532
+ file.status === 'new-upstream' ||
533
+ (file.status === 'user-modified' &&
534
+ (options.force || sharedResolution === 'upstream')) ||
535
+ (file.status === 'conflict' &&
536
+ (options.force || sharedResolution === 'upstream')));
537
+ const entry = { hash: hashContent(file.newContent) };
538
+ if (sharedResolution === 'partial') {
539
+ const content = partialContents.get(file.file);
540
+ writeFileSync(destPath, content);
541
+ newLockfile.theme[fileName] = entry;
542
+ appliedCount++;
543
+ }
544
+ else if (shouldOverwrite) {
545
+ writeFileSync(destPath, file.newContent);
546
+ newLockfile.theme[fileName] = entry;
547
+ appliedCount++;
548
+ }
549
+ else if (selectivelySkippedShared) {
550
+ const existingEntry = lockfile.theme[fileName];
551
+ if (existingEntry) {
552
+ newLockfile.theme[fileName] = existingEntry;
553
+ }
554
+ skippedCount++;
555
+ }
556
+ else if (file.status === 'conflict') {
557
+ newLockfile.theme[fileName] = entry;
558
+ skippedCount++;
559
+ }
560
+ else if (file.status === 'up-to-date') {
561
+ newLockfile.theme[fileName] = entry;
562
+ }
563
+ /* v8 ignore stop */
564
+ }
565
+ writeLockfile(cwd, newLockfile);
566
+ applySpinner.stop('Done!');
567
+ // --- Final summary ---
568
+ if (appliedCount > 0) {
569
+ p.log.success(`${pc.bold(String(appliedCount))} file(s) updated.`);
570
+ }
571
+ if (skippedCount > 0 && isSelective) {
572
+ p.log.info(`${pc.bold(String(skippedCount))} file(s) skipped — they'll appear again on next update.`);
573
+ }
574
+ else if (skippedCount > 0) {
575
+ p.log.info(`${pc.bold(String(skippedCount))} file(s) kept as-is.`);
576
+ }
577
+ p.outro('Update complete.');
578
+ };
579
+ /**
580
+ * Build a fresh lockfile snapshot for the "nothing to apply" case
581
+ */
582
+ const buildLockfile = (components, shared, existing) => {
583
+ const lockfile = { ...existing };
584
+ for (const comp of components) {
585
+ if (!lockfile.components[comp.name]) {
586
+ lockfile.components[comp.name] = {};
587
+ }
588
+ for (const file of comp.files) {
589
+ lockfile.components[comp.name][file.file] = {
590
+ hash: hashContent(file.newContent),
591
+ };
592
+ }
593
+ }
594
+ for (const file of shared) {
595
+ const fileName = file.file.split('/').pop();
596
+ const entry = { hash: hashContent(file.newContent) };
597
+ lockfile.theme[fileName] = entry;
598
+ }
599
+ return lockfile;
600
+ };
601
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};