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.
- package/.claude/settings.local.json +9 -0
- package/PLAN-tables-and-postprocess.md +850 -0
- package/README.md +33 -0
- package/bin/rev.js +12 -131
- package/bin/rev.ts +145 -0
- package/dist/bin/rev.d.ts +9 -0
- package/dist/bin/rev.d.ts.map +1 -0
- package/dist/bin/rev.js +118 -0
- package/dist/bin/rev.js.map +1 -0
- package/dist/lib/annotations.d.ts +91 -0
- package/dist/lib/annotations.d.ts.map +1 -0
- package/dist/lib/annotations.js +554 -0
- package/dist/lib/annotations.js.map +1 -0
- package/dist/lib/build.d.ts +171 -0
- package/dist/lib/build.d.ts.map +1 -0
- package/dist/lib/build.js +755 -0
- package/dist/lib/build.js.map +1 -0
- package/dist/lib/citations.d.ts +34 -0
- package/dist/lib/citations.d.ts.map +1 -0
- package/dist/lib/citations.js +140 -0
- package/dist/lib/citations.js.map +1 -0
- package/dist/lib/commands/build.d.ts +13 -0
- package/dist/lib/commands/build.d.ts.map +1 -0
- package/dist/lib/commands/build.js +678 -0
- package/dist/lib/commands/build.js.map +1 -0
- package/dist/lib/commands/citations.d.ts +11 -0
- package/dist/lib/commands/citations.d.ts.map +1 -0
- package/dist/lib/commands/citations.js +428 -0
- package/dist/lib/commands/citations.js.map +1 -0
- package/dist/lib/commands/comments.d.ts +11 -0
- package/dist/lib/commands/comments.d.ts.map +1 -0
- package/dist/lib/commands/comments.js +883 -0
- package/dist/lib/commands/comments.js.map +1 -0
- package/dist/lib/commands/context.d.ts +35 -0
- package/dist/lib/commands/context.d.ts.map +1 -0
- package/dist/lib/commands/context.js +59 -0
- package/dist/lib/commands/context.js.map +1 -0
- package/dist/lib/commands/core.d.ts +11 -0
- package/dist/lib/commands/core.d.ts.map +1 -0
- package/dist/lib/commands/core.js +246 -0
- package/dist/lib/commands/core.js.map +1 -0
- package/dist/lib/commands/doi.d.ts +11 -0
- package/dist/lib/commands/doi.d.ts.map +1 -0
- package/dist/lib/commands/doi.js +373 -0
- package/dist/lib/commands/doi.js.map +1 -0
- package/dist/lib/commands/history.d.ts +11 -0
- package/dist/lib/commands/history.d.ts.map +1 -0
- package/dist/lib/commands/history.js +245 -0
- package/dist/lib/commands/history.js.map +1 -0
- package/dist/lib/commands/index.d.ts +28 -0
- package/dist/lib/commands/index.d.ts.map +1 -0
- package/dist/lib/commands/index.js +35 -0
- package/dist/lib/commands/index.js.map +1 -0
- package/dist/lib/commands/init.d.ts +11 -0
- package/dist/lib/commands/init.d.ts.map +1 -0
- package/dist/lib/commands/init.js +209 -0
- package/dist/lib/commands/init.js.map +1 -0
- package/dist/lib/commands/response.d.ts +11 -0
- package/dist/lib/commands/response.d.ts.map +1 -0
- package/dist/lib/commands/response.js +317 -0
- package/dist/lib/commands/response.js.map +1 -0
- package/dist/lib/commands/sections.d.ts +11 -0
- package/dist/lib/commands/sections.d.ts.map +1 -0
- package/dist/lib/commands/sections.js +1071 -0
- package/dist/lib/commands/sections.js.map +1 -0
- package/dist/lib/commands/utilities.d.ts +19 -0
- package/dist/lib/commands/utilities.d.ts.map +1 -0
- package/dist/lib/commands/utilities.js +2009 -0
- package/dist/lib/commands/utilities.js.map +1 -0
- package/dist/lib/comment-realign.d.ts +50 -0
- package/dist/lib/comment-realign.d.ts.map +1 -0
- package/dist/lib/comment-realign.js +372 -0
- package/dist/lib/comment-realign.js.map +1 -0
- package/dist/lib/config.d.ts +41 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +76 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/crossref.d.ts +108 -0
- package/dist/lib/crossref.d.ts.map +1 -0
- package/dist/lib/crossref.js +597 -0
- package/dist/lib/crossref.js.map +1 -0
- package/dist/lib/dependencies.d.ts +30 -0
- package/dist/lib/dependencies.d.ts.map +1 -0
- package/dist/lib/dependencies.js +95 -0
- package/dist/lib/dependencies.js.map +1 -0
- package/dist/lib/doi-cache.d.ts +29 -0
- package/dist/lib/doi-cache.d.ts.map +1 -0
- package/dist/lib/doi-cache.js +104 -0
- package/dist/lib/doi-cache.js.map +1 -0
- package/dist/lib/doi.d.ts +65 -0
- package/dist/lib/doi.d.ts.map +1 -0
- package/dist/lib/doi.js +710 -0
- package/dist/lib/doi.js.map +1 -0
- package/dist/lib/equations.d.ts +61 -0
- package/dist/lib/equations.d.ts.map +1 -0
- package/dist/lib/equations.js +445 -0
- package/dist/lib/equations.js.map +1 -0
- package/dist/lib/errors.d.ts +60 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +303 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/format.d.ts +104 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +416 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/git.d.ts +88 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +304 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/grammar.d.ts +62 -0
- package/dist/lib/grammar.d.ts.map +1 -0
- package/dist/lib/grammar.js +244 -0
- package/dist/lib/grammar.js.map +1 -0
- package/dist/lib/image-registry.d.ts +68 -0
- package/dist/lib/image-registry.d.ts.map +1 -0
- package/dist/lib/image-registry.js +112 -0
- package/dist/lib/image-registry.js.map +1 -0
- package/dist/lib/import.d.ts +184 -0
- package/dist/lib/import.d.ts.map +1 -0
- package/dist/lib/import.js +1581 -0
- package/dist/lib/import.js.map +1 -0
- package/dist/lib/journals.d.ts +55 -0
- package/dist/lib/journals.d.ts.map +1 -0
- package/dist/lib/journals.js +417 -0
- package/dist/lib/journals.js.map +1 -0
- package/dist/lib/merge.d.ts +138 -0
- package/dist/lib/merge.d.ts.map +1 -0
- package/dist/lib/merge.js +603 -0
- package/dist/lib/merge.js.map +1 -0
- package/dist/lib/orcid.d.ts +36 -0
- package/dist/lib/orcid.d.ts.map +1 -0
- package/dist/lib/orcid.js +117 -0
- package/dist/lib/orcid.js.map +1 -0
- package/dist/lib/pdf-comments.d.ts +95 -0
- package/dist/lib/pdf-comments.d.ts.map +1 -0
- package/dist/lib/pdf-comments.js +192 -0
- package/dist/lib/pdf-comments.js.map +1 -0
- package/dist/lib/pdf-import.d.ts +118 -0
- package/dist/lib/pdf-import.d.ts.map +1 -0
- package/dist/lib/pdf-import.js +397 -0
- package/dist/lib/pdf-import.js.map +1 -0
- package/dist/lib/plugins.d.ts +76 -0
- package/dist/lib/plugins.d.ts.map +1 -0
- package/dist/lib/plugins.js +235 -0
- package/dist/lib/plugins.js.map +1 -0
- package/dist/lib/postprocess.d.ts +42 -0
- package/dist/lib/postprocess.d.ts.map +1 -0
- package/dist/lib/postprocess.js +138 -0
- package/dist/lib/postprocess.js.map +1 -0
- package/dist/lib/pptx-template.d.ts +59 -0
- package/dist/lib/pptx-template.d.ts.map +1 -0
- package/dist/lib/pptx-template.js +613 -0
- package/dist/lib/pptx-template.js.map +1 -0
- package/dist/lib/pptx-themes.d.ts +80 -0
- package/dist/lib/pptx-themes.d.ts.map +1 -0
- package/dist/lib/pptx-themes.js +818 -0
- package/dist/lib/pptx-themes.js.map +1 -0
- package/dist/lib/protect-restore.d.ts +137 -0
- package/dist/lib/protect-restore.d.ts.map +1 -0
- package/dist/lib/protect-restore.js +394 -0
- package/dist/lib/protect-restore.js.map +1 -0
- package/dist/lib/rate-limiter.d.ts +27 -0
- package/dist/lib/rate-limiter.d.ts.map +1 -0
- package/dist/lib/rate-limiter.js +79 -0
- package/dist/lib/rate-limiter.js.map +1 -0
- package/dist/lib/response.d.ts +41 -0
- package/dist/lib/response.d.ts.map +1 -0
- package/dist/lib/response.js +150 -0
- package/dist/lib/response.js.map +1 -0
- package/dist/lib/review.d.ts +35 -0
- package/dist/lib/review.d.ts.map +1 -0
- package/dist/lib/review.js +263 -0
- package/dist/lib/review.js.map +1 -0
- package/dist/lib/schema.d.ts +66 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +339 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/scientific-words.d.ts +6 -0
- package/dist/lib/scientific-words.d.ts.map +1 -0
- package/dist/lib/scientific-words.js +66 -0
- package/dist/lib/scientific-words.js.map +1 -0
- package/dist/lib/sections.d.ts +40 -0
- package/dist/lib/sections.d.ts.map +1 -0
- package/dist/lib/sections.js +288 -0
- package/dist/lib/sections.js.map +1 -0
- package/dist/lib/slides.d.ts +86 -0
- package/dist/lib/slides.d.ts.map +1 -0
- package/dist/lib/slides.js +676 -0
- package/dist/lib/slides.js.map +1 -0
- package/dist/lib/spelling.d.ts +76 -0
- package/dist/lib/spelling.d.ts.map +1 -0
- package/dist/lib/spelling.js +272 -0
- package/dist/lib/spelling.js.map +1 -0
- package/dist/lib/templates.d.ts +30 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +504 -0
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/themes.d.ts +85 -0
- package/dist/lib/themes.d.ts.map +1 -0
- package/dist/lib/themes.js +652 -0
- package/dist/lib/themes.js.map +1 -0
- package/dist/lib/trackchanges.d.ts +51 -0
- package/dist/lib/trackchanges.d.ts.map +1 -0
- package/dist/lib/trackchanges.js +202 -0
- package/dist/lib/trackchanges.js.map +1 -0
- package/dist/lib/tui.d.ts +76 -0
- package/dist/lib/tui.d.ts.map +1 -0
- package/dist/lib/tui.js +377 -0
- package/dist/lib/tui.js.map +1 -0
- package/dist/lib/types.d.ts +447 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +6 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/undo.d.ts +57 -0
- package/dist/lib/undo.d.ts.map +1 -0
- package/dist/lib/undo.js +185 -0
- package/dist/lib/undo.js.map +1 -0
- package/dist/lib/utils.d.ts +16 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +40 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/variables.d.ts +42 -0
- package/dist/lib/variables.d.ts.map +1 -0
- package/dist/lib/variables.js +141 -0
- package/dist/lib/variables.js.map +1 -0
- package/dist/lib/word.d.ts +80 -0
- package/dist/lib/word.d.ts.map +1 -0
- package/dist/lib/word.js +360 -0
- package/dist/lib/word.js.map +1 -0
- package/dist/lib/wordcomments.d.ts +51 -0
- package/dist/lib/wordcomments.d.ts.map +1 -0
- package/dist/lib/wordcomments.js +587 -0
- package/dist/lib/wordcomments.js.map +1 -0
- package/eslint.config.js +27 -0
- package/lib/annotations.ts +622 -0
- package/lib/apply-buildup-colors.py +88 -0
- package/lib/build.ts +1013 -0
- package/lib/{citations.js → citations.ts} +38 -27
- package/lib/commands/{build.js → build.ts} +80 -27
- package/lib/commands/{citations.js → citations.ts} +36 -18
- package/lib/commands/{comments.js → comments.ts} +187 -54
- package/lib/commands/{context.js → context.ts} +18 -8
- package/lib/commands/{core.js → core.ts} +34 -20
- package/lib/commands/{doi.js → doi.ts} +32 -16
- package/lib/commands/{history.js → history.ts} +25 -12
- package/lib/commands/{index.js → index.ts} +9 -5
- package/lib/commands/{init.js → init.ts} +20 -8
- package/lib/commands/{response.js → response.ts} +47 -20
- package/lib/commands/{sections.js → sections.ts} +273 -68
- package/lib/commands/{utilities.js → utilities.ts} +338 -158
- package/lib/{comment-realign.js → comment-realign.ts} +117 -45
- package/lib/config.ts +84 -0
- package/lib/{crossref.js → crossref.ts} +213 -138
- package/lib/dependencies.ts +106 -0
- package/lib/doi-cache.ts +115 -0
- package/lib/{doi.js → doi.ts} +115 -281
- package/lib/{equations.js → equations.ts} +60 -64
- package/lib/{errors.js → errors.ts} +56 -48
- package/lib/{format.js → format.ts} +137 -63
- package/lib/{git.js → git.ts} +66 -63
- package/lib/{grammar.js → grammar.ts} +45 -32
- package/lib/image-registry.ts +180 -0
- package/lib/import.ts +2060 -0
- package/lib/journals.ts +505 -0
- package/lib/{merge.js → merge.ts} +185 -135
- package/lib/{orcid.js → orcid.ts} +17 -22
- package/lib/{pdf-comments.js → pdf-comments.ts} +76 -18
- package/lib/{pdf-import.js → pdf-import.ts} +148 -70
- package/lib/{plugins.js → plugins.ts} +82 -39
- package/lib/postprocess.ts +188 -0
- package/lib/pptx-color-filter.lua +37 -0
- package/lib/pptx-template.ts +625 -0
- package/lib/pptx-themes/academic.pptx +0 -0
- package/lib/pptx-themes/corporate.pptx +0 -0
- package/lib/pptx-themes/dark.pptx +0 -0
- package/lib/pptx-themes/default.pptx +0 -0
- package/lib/pptx-themes/minimal.pptx +0 -0
- package/lib/pptx-themes/plant.pptx +0 -0
- package/lib/pptx-themes.ts +896 -0
- package/lib/protect-restore.ts +516 -0
- package/lib/rate-limiter.ts +94 -0
- package/lib/{response.js → response.ts} +36 -21
- package/lib/{review.js → review.ts} +53 -43
- package/lib/{schema.js → schema.ts} +70 -25
- package/lib/{sections.js → sections.ts} +71 -76
- package/lib/slides.ts +793 -0
- package/lib/{spelling.js → spelling.ts} +43 -59
- package/lib/{templates.js → templates.ts} +20 -17
- package/lib/themes.ts +742 -0
- package/lib/{trackchanges.js → trackchanges.ts} +52 -23
- package/lib/types.ts +509 -0
- package/lib/{undo.js → undo.ts} +75 -52
- package/lib/utils.ts +41 -0
- package/lib/{variables.js → variables.ts} +60 -54
- package/lib/word.ts +428 -0
- package/lib/{wordcomments.js → wordcomments.ts} +94 -40
- package/package.json +15 -5
- package/skill/REFERENCE.md +67 -0
- package/tsconfig.json +26 -0
- package/lib/annotations.js +0 -414
- package/lib/build.js +0 -639
- package/lib/config.js +0 -79
- package/lib/import.js +0 -1145
- package/lib/journals.js +0 -629
- package/lib/word.js +0 -225
- /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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"}
|