docrev 0.8.1 → 0.8.5

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 (306) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/PLAN-tables-and-postprocess.md +850 -0
  3. package/README.md +33 -0
  4. package/bin/rev.js +12 -131
  5. package/bin/rev.ts +145 -0
  6. package/dist/bin/rev.d.ts +9 -0
  7. package/dist/bin/rev.d.ts.map +1 -0
  8. package/dist/bin/rev.js +118 -0
  9. package/dist/bin/rev.js.map +1 -0
  10. package/dist/lib/annotations.d.ts +91 -0
  11. package/dist/lib/annotations.d.ts.map +1 -0
  12. package/dist/lib/annotations.js +554 -0
  13. package/dist/lib/annotations.js.map +1 -0
  14. package/dist/lib/build.d.ts +171 -0
  15. package/dist/lib/build.d.ts.map +1 -0
  16. package/dist/lib/build.js +755 -0
  17. package/dist/lib/build.js.map +1 -0
  18. package/dist/lib/citations.d.ts +34 -0
  19. package/dist/lib/citations.d.ts.map +1 -0
  20. package/dist/lib/citations.js +140 -0
  21. package/dist/lib/citations.js.map +1 -0
  22. package/dist/lib/commands/build.d.ts +13 -0
  23. package/dist/lib/commands/build.d.ts.map +1 -0
  24. package/dist/lib/commands/build.js +678 -0
  25. package/dist/lib/commands/build.js.map +1 -0
  26. package/dist/lib/commands/citations.d.ts +11 -0
  27. package/dist/lib/commands/citations.d.ts.map +1 -0
  28. package/dist/lib/commands/citations.js +428 -0
  29. package/dist/lib/commands/citations.js.map +1 -0
  30. package/dist/lib/commands/comments.d.ts +11 -0
  31. package/dist/lib/commands/comments.d.ts.map +1 -0
  32. package/dist/lib/commands/comments.js +883 -0
  33. package/dist/lib/commands/comments.js.map +1 -0
  34. package/dist/lib/commands/context.d.ts +35 -0
  35. package/dist/lib/commands/context.d.ts.map +1 -0
  36. package/dist/lib/commands/context.js +59 -0
  37. package/dist/lib/commands/context.js.map +1 -0
  38. package/dist/lib/commands/core.d.ts +11 -0
  39. package/dist/lib/commands/core.d.ts.map +1 -0
  40. package/dist/lib/commands/core.js +246 -0
  41. package/dist/lib/commands/core.js.map +1 -0
  42. package/dist/lib/commands/doi.d.ts +11 -0
  43. package/dist/lib/commands/doi.d.ts.map +1 -0
  44. package/dist/lib/commands/doi.js +373 -0
  45. package/dist/lib/commands/doi.js.map +1 -0
  46. package/dist/lib/commands/history.d.ts +11 -0
  47. package/dist/lib/commands/history.d.ts.map +1 -0
  48. package/dist/lib/commands/history.js +245 -0
  49. package/dist/lib/commands/history.js.map +1 -0
  50. package/dist/lib/commands/index.d.ts +28 -0
  51. package/dist/lib/commands/index.d.ts.map +1 -0
  52. package/dist/lib/commands/index.js +35 -0
  53. package/dist/lib/commands/index.js.map +1 -0
  54. package/dist/lib/commands/init.d.ts +11 -0
  55. package/dist/lib/commands/init.d.ts.map +1 -0
  56. package/dist/lib/commands/init.js +209 -0
  57. package/dist/lib/commands/init.js.map +1 -0
  58. package/dist/lib/commands/response.d.ts +11 -0
  59. package/dist/lib/commands/response.d.ts.map +1 -0
  60. package/dist/lib/commands/response.js +317 -0
  61. package/dist/lib/commands/response.js.map +1 -0
  62. package/dist/lib/commands/sections.d.ts +11 -0
  63. package/dist/lib/commands/sections.d.ts.map +1 -0
  64. package/dist/lib/commands/sections.js +1071 -0
  65. package/dist/lib/commands/sections.js.map +1 -0
  66. package/dist/lib/commands/utilities.d.ts +19 -0
  67. package/dist/lib/commands/utilities.d.ts.map +1 -0
  68. package/dist/lib/commands/utilities.js +2009 -0
  69. package/dist/lib/commands/utilities.js.map +1 -0
  70. package/dist/lib/comment-realign.d.ts +50 -0
  71. package/dist/lib/comment-realign.d.ts.map +1 -0
  72. package/dist/lib/comment-realign.js +372 -0
  73. package/dist/lib/comment-realign.js.map +1 -0
  74. package/dist/lib/config.d.ts +41 -0
  75. package/dist/lib/config.d.ts.map +1 -0
  76. package/dist/lib/config.js +76 -0
  77. package/dist/lib/config.js.map +1 -0
  78. package/dist/lib/crossref.d.ts +108 -0
  79. package/dist/lib/crossref.d.ts.map +1 -0
  80. package/dist/lib/crossref.js +597 -0
  81. package/dist/lib/crossref.js.map +1 -0
  82. package/dist/lib/dependencies.d.ts +30 -0
  83. package/dist/lib/dependencies.d.ts.map +1 -0
  84. package/dist/lib/dependencies.js +95 -0
  85. package/dist/lib/dependencies.js.map +1 -0
  86. package/dist/lib/doi-cache.d.ts +29 -0
  87. package/dist/lib/doi-cache.d.ts.map +1 -0
  88. package/dist/lib/doi-cache.js +104 -0
  89. package/dist/lib/doi-cache.js.map +1 -0
  90. package/dist/lib/doi.d.ts +65 -0
  91. package/dist/lib/doi.d.ts.map +1 -0
  92. package/dist/lib/doi.js +710 -0
  93. package/dist/lib/doi.js.map +1 -0
  94. package/dist/lib/equations.d.ts +61 -0
  95. package/dist/lib/equations.d.ts.map +1 -0
  96. package/dist/lib/equations.js +445 -0
  97. package/dist/lib/equations.js.map +1 -0
  98. package/dist/lib/errors.d.ts +60 -0
  99. package/dist/lib/errors.d.ts.map +1 -0
  100. package/dist/lib/errors.js +303 -0
  101. package/dist/lib/errors.js.map +1 -0
  102. package/dist/lib/format.d.ts +104 -0
  103. package/dist/lib/format.d.ts.map +1 -0
  104. package/dist/lib/format.js +416 -0
  105. package/dist/lib/format.js.map +1 -0
  106. package/dist/lib/git.d.ts +88 -0
  107. package/dist/lib/git.d.ts.map +1 -0
  108. package/dist/lib/git.js +304 -0
  109. package/dist/lib/git.js.map +1 -0
  110. package/dist/lib/grammar.d.ts +62 -0
  111. package/dist/lib/grammar.d.ts.map +1 -0
  112. package/dist/lib/grammar.js +244 -0
  113. package/dist/lib/grammar.js.map +1 -0
  114. package/dist/lib/image-registry.d.ts +68 -0
  115. package/dist/lib/image-registry.d.ts.map +1 -0
  116. package/dist/lib/image-registry.js +112 -0
  117. package/dist/lib/image-registry.js.map +1 -0
  118. package/dist/lib/import.d.ts +184 -0
  119. package/dist/lib/import.d.ts.map +1 -0
  120. package/dist/lib/import.js +1581 -0
  121. package/dist/lib/import.js.map +1 -0
  122. package/dist/lib/journals.d.ts +55 -0
  123. package/dist/lib/journals.d.ts.map +1 -0
  124. package/dist/lib/journals.js +417 -0
  125. package/dist/lib/journals.js.map +1 -0
  126. package/dist/lib/merge.d.ts +138 -0
  127. package/dist/lib/merge.d.ts.map +1 -0
  128. package/dist/lib/merge.js +603 -0
  129. package/dist/lib/merge.js.map +1 -0
  130. package/dist/lib/orcid.d.ts +36 -0
  131. package/dist/lib/orcid.d.ts.map +1 -0
  132. package/dist/lib/orcid.js +117 -0
  133. package/dist/lib/orcid.js.map +1 -0
  134. package/dist/lib/pdf-comments.d.ts +95 -0
  135. package/dist/lib/pdf-comments.d.ts.map +1 -0
  136. package/dist/lib/pdf-comments.js +192 -0
  137. package/dist/lib/pdf-comments.js.map +1 -0
  138. package/dist/lib/pdf-import.d.ts +118 -0
  139. package/dist/lib/pdf-import.d.ts.map +1 -0
  140. package/dist/lib/pdf-import.js +397 -0
  141. package/dist/lib/pdf-import.js.map +1 -0
  142. package/dist/lib/plugins.d.ts +76 -0
  143. package/dist/lib/plugins.d.ts.map +1 -0
  144. package/dist/lib/plugins.js +235 -0
  145. package/dist/lib/plugins.js.map +1 -0
  146. package/dist/lib/postprocess.d.ts +42 -0
  147. package/dist/lib/postprocess.d.ts.map +1 -0
  148. package/dist/lib/postprocess.js +138 -0
  149. package/dist/lib/postprocess.js.map +1 -0
  150. package/dist/lib/pptx-template.d.ts +59 -0
  151. package/dist/lib/pptx-template.d.ts.map +1 -0
  152. package/dist/lib/pptx-template.js +613 -0
  153. package/dist/lib/pptx-template.js.map +1 -0
  154. package/dist/lib/pptx-themes.d.ts +80 -0
  155. package/dist/lib/pptx-themes.d.ts.map +1 -0
  156. package/dist/lib/pptx-themes.js +818 -0
  157. package/dist/lib/pptx-themes.js.map +1 -0
  158. package/dist/lib/protect-restore.d.ts +137 -0
  159. package/dist/lib/protect-restore.d.ts.map +1 -0
  160. package/dist/lib/protect-restore.js +394 -0
  161. package/dist/lib/protect-restore.js.map +1 -0
  162. package/dist/lib/rate-limiter.d.ts +27 -0
  163. package/dist/lib/rate-limiter.d.ts.map +1 -0
  164. package/dist/lib/rate-limiter.js +79 -0
  165. package/dist/lib/rate-limiter.js.map +1 -0
  166. package/dist/lib/response.d.ts +41 -0
  167. package/dist/lib/response.d.ts.map +1 -0
  168. package/dist/lib/response.js +150 -0
  169. package/dist/lib/response.js.map +1 -0
  170. package/dist/lib/review.d.ts +35 -0
  171. package/dist/lib/review.d.ts.map +1 -0
  172. package/dist/lib/review.js +263 -0
  173. package/dist/lib/review.js.map +1 -0
  174. package/dist/lib/schema.d.ts +66 -0
  175. package/dist/lib/schema.d.ts.map +1 -0
  176. package/dist/lib/schema.js +339 -0
  177. package/dist/lib/schema.js.map +1 -0
  178. package/dist/lib/scientific-words.d.ts +6 -0
  179. package/dist/lib/scientific-words.d.ts.map +1 -0
  180. package/dist/lib/scientific-words.js +66 -0
  181. package/dist/lib/scientific-words.js.map +1 -0
  182. package/dist/lib/sections.d.ts +40 -0
  183. package/dist/lib/sections.d.ts.map +1 -0
  184. package/dist/lib/sections.js +288 -0
  185. package/dist/lib/sections.js.map +1 -0
  186. package/dist/lib/slides.d.ts +86 -0
  187. package/dist/lib/slides.d.ts.map +1 -0
  188. package/dist/lib/slides.js +676 -0
  189. package/dist/lib/slides.js.map +1 -0
  190. package/dist/lib/spelling.d.ts +76 -0
  191. package/dist/lib/spelling.d.ts.map +1 -0
  192. package/dist/lib/spelling.js +272 -0
  193. package/dist/lib/spelling.js.map +1 -0
  194. package/dist/lib/templates.d.ts +30 -0
  195. package/dist/lib/templates.d.ts.map +1 -0
  196. package/dist/lib/templates.js +504 -0
  197. package/dist/lib/templates.js.map +1 -0
  198. package/dist/lib/themes.d.ts +85 -0
  199. package/dist/lib/themes.d.ts.map +1 -0
  200. package/dist/lib/themes.js +652 -0
  201. package/dist/lib/themes.js.map +1 -0
  202. package/dist/lib/trackchanges.d.ts +51 -0
  203. package/dist/lib/trackchanges.d.ts.map +1 -0
  204. package/dist/lib/trackchanges.js +202 -0
  205. package/dist/lib/trackchanges.js.map +1 -0
  206. package/dist/lib/tui.d.ts +76 -0
  207. package/dist/lib/tui.d.ts.map +1 -0
  208. package/dist/lib/tui.js +377 -0
  209. package/dist/lib/tui.js.map +1 -0
  210. package/dist/lib/types.d.ts +447 -0
  211. package/dist/lib/types.d.ts.map +1 -0
  212. package/dist/lib/types.js +6 -0
  213. package/dist/lib/types.js.map +1 -0
  214. package/dist/lib/undo.d.ts +57 -0
  215. package/dist/lib/undo.d.ts.map +1 -0
  216. package/dist/lib/undo.js +185 -0
  217. package/dist/lib/undo.js.map +1 -0
  218. package/dist/lib/utils.d.ts +16 -0
  219. package/dist/lib/utils.d.ts.map +1 -0
  220. package/dist/lib/utils.js +40 -0
  221. package/dist/lib/utils.js.map +1 -0
  222. package/dist/lib/variables.d.ts +42 -0
  223. package/dist/lib/variables.d.ts.map +1 -0
  224. package/dist/lib/variables.js +141 -0
  225. package/dist/lib/variables.js.map +1 -0
  226. package/dist/lib/word.d.ts +80 -0
  227. package/dist/lib/word.d.ts.map +1 -0
  228. package/dist/lib/word.js +360 -0
  229. package/dist/lib/word.js.map +1 -0
  230. package/dist/lib/wordcomments.d.ts +51 -0
  231. package/dist/lib/wordcomments.d.ts.map +1 -0
  232. package/dist/lib/wordcomments.js +587 -0
  233. package/dist/lib/wordcomments.js.map +1 -0
  234. package/eslint.config.js +27 -0
  235. package/lib/annotations.ts +622 -0
  236. package/lib/apply-buildup-colors.py +88 -0
  237. package/lib/build.ts +1013 -0
  238. package/lib/{citations.js → citations.ts} +38 -27
  239. package/lib/commands/{build.js → build.ts} +80 -27
  240. package/lib/commands/{citations.js → citations.ts} +36 -18
  241. package/lib/commands/{comments.js → comments.ts} +187 -54
  242. package/lib/commands/{context.js → context.ts} +18 -8
  243. package/lib/commands/{core.js → core.ts} +34 -20
  244. package/lib/commands/{doi.js → doi.ts} +32 -16
  245. package/lib/commands/{history.js → history.ts} +25 -12
  246. package/lib/commands/{index.js → index.ts} +9 -5
  247. package/lib/commands/{init.js → init.ts} +20 -8
  248. package/lib/commands/{response.js → response.ts} +47 -20
  249. package/lib/commands/{sections.js → sections.ts} +273 -68
  250. package/lib/commands/{utilities.js → utilities.ts} +338 -158
  251. package/lib/{comment-realign.js → comment-realign.ts} +117 -45
  252. package/lib/config.ts +84 -0
  253. package/lib/{crossref.js → crossref.ts} +213 -138
  254. package/lib/dependencies.ts +106 -0
  255. package/lib/doi-cache.ts +115 -0
  256. package/lib/{doi.js → doi.ts} +115 -281
  257. package/lib/{equations.js → equations.ts} +60 -64
  258. package/lib/{errors.js → errors.ts} +56 -48
  259. package/lib/{format.js → format.ts} +137 -63
  260. package/lib/{git.js → git.ts} +66 -63
  261. package/lib/{grammar.js → grammar.ts} +45 -32
  262. package/lib/image-registry.ts +180 -0
  263. package/lib/import.ts +2060 -0
  264. package/lib/journals.ts +505 -0
  265. package/lib/{merge.js → merge.ts} +185 -135
  266. package/lib/{orcid.js → orcid.ts} +17 -22
  267. package/lib/{pdf-comments.js → pdf-comments.ts} +76 -18
  268. package/lib/{pdf-import.js → pdf-import.ts} +148 -70
  269. package/lib/{plugins.js → plugins.ts} +82 -39
  270. package/lib/postprocess.ts +188 -0
  271. package/lib/pptx-color-filter.lua +37 -0
  272. package/lib/pptx-template.ts +625 -0
  273. package/lib/pptx-themes/academic.pptx +0 -0
  274. package/lib/pptx-themes/corporate.pptx +0 -0
  275. package/lib/pptx-themes/dark.pptx +0 -0
  276. package/lib/pptx-themes/default.pptx +0 -0
  277. package/lib/pptx-themes/minimal.pptx +0 -0
  278. package/lib/pptx-themes/plant.pptx +0 -0
  279. package/lib/pptx-themes.ts +896 -0
  280. package/lib/protect-restore.ts +516 -0
  281. package/lib/rate-limiter.ts +94 -0
  282. package/lib/{response.js → response.ts} +36 -21
  283. package/lib/{review.js → review.ts} +53 -43
  284. package/lib/{schema.js → schema.ts} +70 -25
  285. package/lib/{sections.js → sections.ts} +71 -76
  286. package/lib/slides.ts +793 -0
  287. package/lib/{spelling.js → spelling.ts} +43 -59
  288. package/lib/{templates.js → templates.ts} +20 -17
  289. package/lib/themes.ts +742 -0
  290. package/lib/{trackchanges.js → trackchanges.ts} +52 -23
  291. package/lib/types.ts +509 -0
  292. package/lib/{undo.js → undo.ts} +75 -52
  293. package/lib/utils.ts +41 -0
  294. package/lib/{variables.js → variables.ts} +60 -54
  295. package/lib/word.ts +428 -0
  296. package/lib/{wordcomments.js → wordcomments.ts} +94 -40
  297. package/package.json +15 -5
  298. package/skill/REFERENCE.md +67 -0
  299. package/tsconfig.json +26 -0
  300. package/lib/annotations.js +0 -414
  301. package/lib/build.js +0 -639
  302. package/lib/config.js +0 -79
  303. package/lib/import.js +0 -1145
  304. package/lib/journals.js +0 -629
  305. package/lib/word.js +0 -225
  306. /package/lib/{scientific-words.js → scientific-words.ts} +0 -0
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Error handling utilities with actionable suggestions
3
+ */
4
+ import chalk from 'chalk';
5
+ import * as path from 'path';
6
+ import * as fs from 'fs';
7
+ /**
8
+ * Format an error message with optional suggestions
9
+ * @param message - Main error message
10
+ * @param suggestions - Actionable suggestions
11
+ * @returns Formatted error string
12
+ */
13
+ export function formatError(message, suggestions = []) {
14
+ const lines = [chalk.red(`Error: ${message}`)];
15
+ if (suggestions.length > 0) {
16
+ lines.push('');
17
+ for (const suggestion of suggestions) {
18
+ lines.push(chalk.dim(` ${suggestion}`));
19
+ }
20
+ }
21
+ return lines.join('\n');
22
+ }
23
+ /**
24
+ * Get actionable suggestions for file not found errors
25
+ * @param filePath - The file path that wasn't found
26
+ * @returns Array of suggestions
27
+ */
28
+ export function getFileNotFoundSuggestions(filePath) {
29
+ const suggestions = [];
30
+ const ext = path.extname(filePath).toLowerCase();
31
+ const dir = path.dirname(filePath);
32
+ const base = path.basename(filePath);
33
+ // Check if directory exists
34
+ if (!fs.existsSync(dir)) {
35
+ suggestions.push(`Directory does not exist: ${dir}`);
36
+ suggestions.push(`Create it with: mkdir -p "${dir}"`);
37
+ return suggestions;
38
+ }
39
+ // Look for similar files
40
+ try {
41
+ const files = fs.readdirSync(dir);
42
+ const similar = findSimilarFiles(base, files, 3);
43
+ if (similar.length > 0) {
44
+ suggestions.push('Did you mean:');
45
+ for (const f of similar) {
46
+ suggestions.push(` ${path.join(dir, f)}`);
47
+ }
48
+ }
49
+ }
50
+ catch {
51
+ // Directory not readable
52
+ }
53
+ // Extension-specific suggestions
54
+ if (ext === '.md' || ext === '') {
55
+ suggestions.push('Run "rev status" to see files in the current project');
56
+ }
57
+ else if (ext === '.docx') {
58
+ suggestions.push('Use "rev import <docx>" to import Word documents');
59
+ }
60
+ else if (ext === '.bib') {
61
+ suggestions.push('Create a bibliography with "rev doi bib <doi>"');
62
+ suggestions.push('Or check references.bib in your project');
63
+ }
64
+ else if (ext === '.pdf') {
65
+ suggestions.push('Build PDFs with "rev build pdf"');
66
+ }
67
+ return suggestions;
68
+ }
69
+ /**
70
+ * Get actionable suggestions for dependency errors
71
+ * @param dependency - The missing dependency
72
+ * @returns Array of suggestions
73
+ */
74
+ export function getDependencySuggestions(dependency) {
75
+ const suggestions = [];
76
+ const platform = process.platform;
77
+ switch (dependency.toLowerCase()) {
78
+ case 'pandoc':
79
+ suggestions.push('Pandoc is required for document conversion');
80
+ if (platform === 'darwin') {
81
+ suggestions.push('Install with: brew install pandoc');
82
+ }
83
+ else if (platform === 'win32') {
84
+ suggestions.push('Install from: https://pandoc.org/installing.html');
85
+ suggestions.push('Or with: winget install --id JohnMacFarlane.Pandoc');
86
+ }
87
+ else {
88
+ suggestions.push('Install with: sudo apt install pandoc');
89
+ suggestions.push('Or from: https://pandoc.org/installing.html');
90
+ }
91
+ suggestions.push('Run "rev install" to check all dependencies');
92
+ break;
93
+ case 'pdflatex':
94
+ case 'xelatex':
95
+ case 'latex':
96
+ suggestions.push('LaTeX is required for PDF generation');
97
+ if (platform === 'darwin') {
98
+ suggestions.push('Install with: brew install --cask mactex');
99
+ suggestions.push('Or minimal: brew install --cask basictex');
100
+ }
101
+ else if (platform === 'win32') {
102
+ suggestions.push('Install MiKTeX from: https://miktex.org/download');
103
+ suggestions.push('Or TeX Live from: https://tug.org/texlive/');
104
+ }
105
+ else {
106
+ suggestions.push('Install with: sudo apt install texlive-full');
107
+ suggestions.push('Or minimal: sudo apt install texlive-latex-base');
108
+ }
109
+ suggestions.push('Alternative: Use "rev build docx" for Word output');
110
+ break;
111
+ case 'pandoc-crossref':
112
+ suggestions.push('pandoc-crossref enables figure/table/equation numbering');
113
+ if (platform === 'darwin') {
114
+ suggestions.push('Install with: brew install pandoc-crossref');
115
+ }
116
+ else if (platform === 'win32') {
117
+ suggestions.push('Download from: https://github.com/lierdakil/pandoc-crossref/releases');
118
+ }
119
+ else {
120
+ suggestions.push('Install with: sudo apt install pandoc-crossref');
121
+ suggestions.push('Or from: https://github.com/lierdakil/pandoc-crossref/releases');
122
+ }
123
+ suggestions.push('Cross-references will work but wonʼt be numbered without it');
124
+ break;
125
+ }
126
+ return suggestions;
127
+ }
128
+ /**
129
+ * Get actionable suggestions for configuration errors
130
+ * @param field - The problematic config field
131
+ * @param issue - What's wrong with it
132
+ * @returns Array of suggestions
133
+ */
134
+ export function getConfigSuggestions(field, issue) {
135
+ const suggestions = [];
136
+ switch (field) {
137
+ case 'bibliography':
138
+ suggestions.push('Create a references.bib file in your project');
139
+ suggestions.push('Or set bibliography in rev.yaml:');
140
+ suggestions.push(' bibliography: path/to/refs.bib');
141
+ break;
142
+ case 'sections':
143
+ suggestions.push('List your sections in rev.yaml:');
144
+ suggestions.push(' sections:');
145
+ suggestions.push(' - introduction.md');
146
+ suggestions.push(' - methods.md');
147
+ suggestions.push('Or run "rev init" to auto-detect');
148
+ break;
149
+ case 'user':
150
+ suggestions.push('Set your name for comment attribution:');
151
+ suggestions.push(' rev config user "Your Name"');
152
+ break;
153
+ case 'csl':
154
+ suggestions.push('CSL styles control citation format');
155
+ suggestions.push('Download styles from: https://www.zotero.org/styles');
156
+ suggestions.push('Or use: citation-style: apa (common styles available)');
157
+ break;
158
+ default:
159
+ suggestions.push(`Check rev.yaml for "${field}" configuration`);
160
+ suggestions.push('Run "rev help config" for configuration options');
161
+ }
162
+ if (issue === 'typo') {
163
+ suggestions.unshift('This looks like a typo in rev.yaml');
164
+ }
165
+ return suggestions;
166
+ }
167
+ /**
168
+ * Get suggestions for comment/annotation errors
169
+ * @param issue - The issue type
170
+ * @returns Array of suggestions
171
+ */
172
+ export function getAnnotationSuggestions(issue) {
173
+ const suggestions = [];
174
+ switch (issue) {
175
+ case 'no_comments':
176
+ suggestions.push('Comments use CriticMarkup syntax:');
177
+ suggestions.push(' {>>Author: Comment text<<}');
178
+ suggestions.push('Import from Word with: rev import <docx>');
179
+ break;
180
+ case 'no_changes':
181
+ suggestions.push('Track changes use CriticMarkup syntax:');
182
+ suggestions.push(' {++inserted text++}');
183
+ suggestions.push(' {--deleted text--}');
184
+ suggestions.push(' {~~old~>new~~}');
185
+ suggestions.push('Import from Word with: rev import <docx>');
186
+ break;
187
+ case 'invalid_number':
188
+ suggestions.push('Use "rev comments <file>" to see comment numbers');
189
+ suggestions.push('Or "rev status <file>" for a summary');
190
+ break;
191
+ case 'no_author':
192
+ suggestions.push('Set your author name:');
193
+ suggestions.push(' rev config user "Your Name"');
194
+ suggestions.push('Or use --author "Name" flag');
195
+ break;
196
+ }
197
+ return suggestions;
198
+ }
199
+ /**
200
+ * Get suggestions for build errors
201
+ * @param issue - The build issue
202
+ * @param context - Additional context
203
+ * @returns Array of suggestions
204
+ */
205
+ export function getBuildSuggestions(issue, context = {}) {
206
+ const suggestions = [];
207
+ switch (issue) {
208
+ case 'no_sections':
209
+ suggestions.push('No section files found to build');
210
+ suggestions.push('Create markdown files or run "rev new" to start a project');
211
+ suggestions.push('Or run "rev init" to auto-detect existing files');
212
+ break;
213
+ case 'missing_bib':
214
+ suggestions.push('Bibliography file not found');
215
+ if (context.bibPath) {
216
+ suggestions.push(`Expected: ${context.bibPath}`);
217
+ }
218
+ suggestions.push('Create references.bib or update rev.yaml');
219
+ suggestions.push('Add citations with: rev doi bib <doi>');
220
+ break;
221
+ case 'pandoc_failed':
222
+ suggestions.push('Pandoc conversion failed');
223
+ suggestions.push('Check for syntax errors in your markdown');
224
+ suggestions.push('Run "rev validate" to check document structure');
225
+ if (context.format === 'pdf') {
226
+ suggestions.push('Try "rev build docx" as an alternative');
227
+ }
228
+ break;
229
+ case 'latex_error':
230
+ suggestions.push('LaTeX compilation failed');
231
+ suggestions.push('Common issues:');
232
+ suggestions.push(' - Missing packages (run tlmgr to install)');
233
+ suggestions.push(' - Invalid characters in text');
234
+ suggestions.push(' - Math mode errors');
235
+ suggestions.push('Try "rev build docx" to bypass LaTeX');
236
+ break;
237
+ }
238
+ return suggestions;
239
+ }
240
+ /**
241
+ * Find similar filenames using Levenshtein distance
242
+ * @param target - Target filename
243
+ * @param candidates - Available filenames
244
+ * @param limit - Max results
245
+ * @returns Array of similar filenames
246
+ */
247
+ function findSimilarFiles(target, candidates, limit = 3) {
248
+ const scored = candidates
249
+ .map(c => ({ name: c, distance: levenshtein(target.toLowerCase(), c.toLowerCase()) }))
250
+ .filter(c => c.distance <= 3) // Only reasonably similar
251
+ .sort((a, b) => a.distance - b.distance);
252
+ return scored.slice(0, limit).map(c => c.name);
253
+ }
254
+ /**
255
+ * Simple Levenshtein distance
256
+ * @param a - First string
257
+ * @param b - Second string
258
+ * @returns Edit distance
259
+ */
260
+ function levenshtein(a, b) {
261
+ if (a.length === 0)
262
+ return b.length;
263
+ if (b.length === 0)
264
+ return a.length;
265
+ const matrix = [];
266
+ for (let i = 0; i <= b.length; i++) {
267
+ matrix[i] = [i];
268
+ }
269
+ for (let j = 0; j <= a.length; j++) {
270
+ matrix[0][j] = j;
271
+ }
272
+ for (let i = 1; i <= b.length; i++) {
273
+ for (let j = 1; j <= a.length; j++) {
274
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
275
+ matrix[i][j] = matrix[i - 1][j - 1];
276
+ }
277
+ else {
278
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
279
+ }
280
+ }
281
+ }
282
+ return matrix[b.length][a.length];
283
+ }
284
+ /**
285
+ * Print error and exit
286
+ * @param message - Error message
287
+ * @param suggestions - Suggestions
288
+ */
289
+ export function exitWithError(message, suggestions = []) {
290
+ console.error(formatError(message, suggestions));
291
+ process.exit(1);
292
+ }
293
+ /**
294
+ * Validate file exists with helpful error
295
+ * @param filePath - File to check
296
+ * @param fileType - Type description for error message
297
+ */
298
+ export function requireFile(filePath, fileType = 'File') {
299
+ if (!fs.existsSync(filePath)) {
300
+ exitWithError(`${fileType} not found: ${filePath}`, getFileNotFoundSuggestions(filePath));
301
+ }
302
+ }
303
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Formatting utilities for CLI output
3
+ * Tables, boxes, spinners, progress bars
4
+ */
5
+ interface TableOptions {
6
+ align?: Array<'left' | 'right' | 'center'>;
7
+ headerStyle?: (text: string) => string;
8
+ borderStyle?: (text: string) => string;
9
+ cellStyle?: ((value: string, colIndex: number, rowIndex: number) => string) | null;
10
+ }
11
+ interface SimpleTableOptions {
12
+ headerStyle?: (text: string) => string;
13
+ indent?: string;
14
+ }
15
+ interface BoxOptions {
16
+ title?: string | null;
17
+ padding?: number;
18
+ borderStyle?: (text: string) => string;
19
+ titleStyle?: (text: string) => string;
20
+ }
21
+ interface StatsOptions {
22
+ title?: string | null;
23
+ }
24
+ interface ProgressOptions {
25
+ width?: number;
26
+ label?: string;
27
+ }
28
+ interface InlineDiffPreviewOptions {
29
+ maxLines?: number;
30
+ contextChars?: number;
31
+ }
32
+ interface HeaderOptions {
33
+ style?: (text: string) => string;
34
+ width?: number;
35
+ }
36
+ interface Spinner {
37
+ text: string;
38
+ start: () => Spinner;
39
+ stop: (finalMessage?: string | null) => Spinner;
40
+ success: (msg?: string) => Spinner;
41
+ error: (msg?: string) => Spinner;
42
+ }
43
+ interface ProgressBar {
44
+ update: (n: number) => ProgressBar;
45
+ increment: () => ProgressBar;
46
+ done: (message?: string) => ProgressBar;
47
+ }
48
+ /**
49
+ * Format a table with borders and alignment
50
+ * @param headers - Column headers
51
+ * @param rows - Row data
52
+ * @param options - Formatting options
53
+ * @returns Formatted table string
54
+ */
55
+ export declare function table(headers: string[], rows: string[][], options?: TableOptions): string;
56
+ /**
57
+ * Simple table without borders (compact)
58
+ */
59
+ export declare function simpleTable(headers: string[], rows: string[][], options?: SimpleTableOptions): string;
60
+ /**
61
+ * Format a box around content
62
+ */
63
+ export declare function box(content: string, options?: BoxOptions): string;
64
+ /**
65
+ * Summary stats in a nice format
66
+ */
67
+ export declare function stats(data: Record<string, string | number>, options?: StatsOptions): string;
68
+ /**
69
+ * Progress indicator
70
+ */
71
+ export declare function progress(current: number, total: number, options?: ProgressOptions): string;
72
+ export declare function setEmoji(enabled: boolean): void;
73
+ /**
74
+ * Status line with icon
75
+ */
76
+ export declare function status(type: string, message: string): string;
77
+ /**
78
+ * Create a pulsing star spinner for async operations
79
+ */
80
+ export declare function spinner(message: string): Spinner;
81
+ /**
82
+ * Create a progress bar for batch operations
83
+ * @param total - Total number of items
84
+ * @param label - Label for the progress bar
85
+ * @returns Progress bar controller with update(), increment(), and done()
86
+ */
87
+ export declare function progressBar(total: number, label?: string): ProgressBar;
88
+ /**
89
+ * Diff display with inline highlighting
90
+ */
91
+ export declare function diff(insertions: number, deletions: number, substitutions: number): string;
92
+ /**
93
+ * Show inline diff preview for CriticMarkup changes
94
+ * @param text - Text with CriticMarkup annotations
95
+ * @param options - Display options
96
+ * @returns Formatted preview string
97
+ */
98
+ export declare function inlineDiffPreview(text: string, options?: InlineDiffPreviewOptions): string;
99
+ /**
100
+ * Section header
101
+ */
102
+ export declare function header(text: string, options?: HeaderOptions): string;
103
+ export {};
104
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../lib/format.ts"],"names":[],"mappings":"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"}