docrev 0.11.3 → 0.12.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.
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/dist/bin/rev.js +29 -21
- package/dist/bin/rev.js.map +1 -1
- package/dist/lib/build.d.ts +43 -0
- package/dist/lib/build.d.ts.map +1 -1
- package/dist/lib/build.js +175 -5
- package/dist/lib/build.js.map +1 -1
- package/dist/lib/commands/build.d.ts.map +1 -1
- package/dist/lib/commands/build.js +39 -125
- package/dist/lib/commands/build.js.map +1 -1
- package/dist/lib/commands/comments.js +3 -3
- package/dist/lib/commands/comments.js.map +1 -1
- package/dist/lib/commands/context.d.ts +12 -1
- package/dist/lib/commands/context.d.ts.map +1 -1
- package/dist/lib/commands/context.js +34 -1
- package/dist/lib/commands/context.js.map +1 -1
- package/dist/lib/commands/merge-resolve.js +1 -1
- package/dist/lib/commands/merge-resolve.js.map +1 -1
- package/dist/lib/commands/quality.js +2 -2
- package/dist/lib/commands/quality.js.map +1 -1
- package/dist/lib/commands/sections.js +1 -1
- package/dist/lib/commands/sections.js.map +1 -1
- package/dist/lib/commands/text-ops.js +1 -1
- package/dist/lib/commands/text-ops.js.map +1 -1
- package/dist/lib/commands/utilities.d.ts.map +1 -1
- package/dist/lib/commands/utilities.js +5 -2
- package/dist/lib/commands/utilities.js.map +1 -1
- package/dist/lib/commands/word-tools.js +2 -2
- package/dist/lib/commands/word-tools.js.map +1 -1
- package/dist/lib/crossref.d.ts.map +1 -1
- package/dist/lib/crossref.js +12 -41
- package/dist/lib/crossref.js.map +1 -1
- package/dist/lib/csl.d.ts.map +1 -1
- package/dist/lib/csl.js +14 -22
- package/dist/lib/csl.js.map +1 -1
- package/dist/lib/diff-engine.js +1 -1
- package/dist/lib/diff-engine.js.map +1 -1
- package/dist/lib/equations.d.ts.map +1 -1
- package/dist/lib/equations.js +12 -3
- package/dist/lib/equations.js.map +1 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +1 -30
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/image-registry.d.ts.map +1 -1
- package/dist/lib/image-registry.js +4 -0
- package/dist/lib/image-registry.js.map +1 -1
- package/dist/lib/import.d.ts +1 -1
- package/dist/lib/import.d.ts.map +1 -1
- package/dist/lib/import.js +1 -1
- package/dist/lib/import.js.map +1 -1
- package/dist/lib/input.d.ts +0 -11
- package/dist/lib/input.d.ts.map +1 -1
- package/dist/lib/input.js +0 -35
- package/dist/lib/input.js.map +1 -1
- package/dist/lib/merge.d.ts.map +1 -1
- package/dist/lib/merge.js +9 -1
- package/dist/lib/merge.js.map +1 -1
- package/dist/lib/ooxml.d.ts +22 -0
- package/dist/lib/ooxml.d.ts.map +1 -1
- package/dist/lib/ooxml.js +130 -0
- package/dist/lib/ooxml.js.map +1 -1
- package/dist/lib/orcid.d.ts.map +1 -1
- package/dist/lib/orcid.js +16 -7
- package/dist/lib/orcid.js.map +1 -1
- package/dist/lib/plugins.d.ts.map +1 -1
- package/dist/lib/plugins.js +8 -4
- package/dist/lib/plugins.js.map +1 -1
- package/dist/lib/protect-restore.d.ts.map +1 -1
- package/dist/lib/protect-restore.js +7 -5
- package/dist/lib/protect-restore.js.map +1 -1
- package/dist/lib/restore-references.d.ts.map +1 -1
- package/dist/lib/restore-references.js +25 -3
- package/dist/lib/restore-references.js.map +1 -1
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +1 -19
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/slides.js +1 -1
- package/dist/lib/slides.js.map +1 -1
- package/dist/lib/spelling.js +1 -1
- package/dist/lib/spelling.js.map +1 -1
- package/dist/lib/tui.js +0 -1
- package/dist/lib/tui.js.map +1 -1
- package/dist/lib/utils.d.ts +14 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +41 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/word-extraction.d.ts +5 -5
- package/dist/lib/word-extraction.d.ts.map +1 -1
- package/dist/lib/word-extraction.js +25 -106
- package/dist/lib/word-extraction.js.map +1 -1
- package/dist/lib/word.d.ts +14 -38
- package/dist/lib/word.d.ts.map +1 -1
- package/dist/lib/word.js +24 -179
- package/dist/lib/word.js.map +1 -1
- package/dist/lib/wordcomments.d.ts.map +1 -1
- package/dist/lib/wordcomments.js +9 -7
- package/dist/lib/wordcomments.js.map +1 -1
- package/package.json +17 -6
- package/.gitattributes +0 -1
- package/PLAN-tables-and-postprocess.md +0 -850
- package/bin/rev.ts +0 -145
- package/docs-src/build.py +0 -113
- package/docs-src/extra.css +0 -208
- package/docs-src/md-to-html.lua +0 -6
- package/docs-src/template.html +0 -116
- package/eslint.config.js +0 -27
- package/lib/anchor-match.ts +0 -307
- package/lib/annotations.ts +0 -695
- package/lib/build.ts +0 -2047
- package/lib/citations.ts +0 -160
- package/lib/commands/build.ts +0 -885
- package/lib/commands/citations.ts +0 -515
- package/lib/commands/comments.ts +0 -1077
- package/lib/commands/context.ts +0 -185
- package/lib/commands/core.ts +0 -328
- package/lib/commands/doi.ts +0 -451
- package/lib/commands/file-ops.ts +0 -372
- package/lib/commands/history.ts +0 -320
- package/lib/commands/index.ts +0 -87
- package/lib/commands/init.ts +0 -259
- package/lib/commands/merge-resolve.ts +0 -378
- package/lib/commands/preview.ts +0 -178
- package/lib/commands/project-info.ts +0 -244
- package/lib/commands/quality.ts +0 -517
- package/lib/commands/response.ts +0 -454
- package/lib/commands/section-boundaries.ts +0 -82
- package/lib/commands/sections.ts +0 -451
- package/lib/commands/sync.ts +0 -689
- package/lib/commands/text-ops.ts +0 -449
- package/lib/commands/utilities.ts +0 -448
- package/lib/commands/verify-anchors.ts +0 -272
- package/lib/commands/word-tools.ts +0 -340
- package/lib/comment-realign.ts +0 -99
- package/lib/config.ts +0 -84
- package/lib/crossref.ts +0 -781
- package/lib/csl.ts +0 -191
- package/lib/dependencies.ts +0 -132
- package/lib/diff-engine.ts +0 -465
- package/lib/doi-cache.ts +0 -115
- package/lib/doi.ts +0 -879
- package/lib/equations.ts +0 -506
- package/lib/errors.ts +0 -350
- package/lib/format.ts +0 -541
- package/lib/git.ts +0 -326
- package/lib/grammar.ts +0 -303
- package/lib/image-registry.ts +0 -180
- package/lib/import.ts +0 -932
- package/lib/input.ts +0 -174
- package/lib/journals.ts +0 -543
- package/lib/macro-filter.lua +0 -201
- package/lib/macros.ts +0 -273
- package/lib/merge.ts +0 -633
- package/lib/ooxml.ts +0 -768
- package/lib/orcid.ts +0 -144
- package/lib/pdf-comments.ts +0 -263
- package/lib/pdf-import.ts +0 -524
- package/lib/plugins.ts +0 -362
- package/lib/postprocess.ts +0 -188
- package/lib/pptx-color-filter.lua +0 -37
- package/lib/pptx-template.ts +0 -469
- 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 +0 -483
- package/lib/protect-restore.ts +0 -520
- package/lib/rate-limiter.ts +0 -127
- package/lib/response.ts +0 -200
- package/lib/restore-references.ts +0 -240
- package/lib/review.ts +0 -327
- package/lib/schema.ts +0 -494
- package/lib/scientific-words.ts +0 -73
- package/lib/sections.ts +0 -428
- package/lib/slides.ts +0 -756
- package/lib/spelling.ts +0 -334
- package/lib/templates.ts +0 -526
- package/lib/themes.ts +0 -742
- package/lib/trackchanges.ts +0 -166
- package/lib/tui.ts +0 -450
- package/lib/types.ts +0 -546
- package/lib/undo.ts +0 -250
- package/lib/utils.ts +0 -69
- package/lib/variables.ts +0 -179
- package/lib/word-extraction.ts +0 -525
- package/lib/word.ts +0 -526
- package/lib/wordcomments.ts +0 -789
- package/mkdocs.yml +0 -64
- package/scripts/postbuild.js +0 -47
- package/tsconfig.json +0 -26
- package/types/index.d.ts +0 -531
package/lib/commands/index.ts
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Command module index
|
|
3
|
-
*
|
|
4
|
-
* Exports registration functions for all command modules.
|
|
5
|
-
* Each module's register() function adds commands to the Commander program.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { Command } from 'commander';
|
|
9
|
-
import { register as registerCoreCommands } from './core.js';
|
|
10
|
-
import { register as registerCommentCommands } from './comments.js';
|
|
11
|
-
import { register as registerInitCommands } from './init.js';
|
|
12
|
-
import { register as registerSectionCommands } from './sections.js';
|
|
13
|
-
import { register as registerSyncCommands } from './sync.js';
|
|
14
|
-
import { register as registerVerifyAnchorsCommands } from './verify-anchors.js';
|
|
15
|
-
import { register as registerMergeResolveCommands } from './merge-resolve.js';
|
|
16
|
-
import { register as registerBuildCommands } from './build.js';
|
|
17
|
-
import { register as registerResponseCommands } from './response.js';
|
|
18
|
-
import { register as registerCitationCommands } from './citations.js';
|
|
19
|
-
import { register as registerDoiCommands } from './doi.js';
|
|
20
|
-
import { register as registerHistoryCommands } from './history.js';
|
|
21
|
-
import { register as registerUtilityCommands } from './utilities.js';
|
|
22
|
-
import { register as registerProjectInfoCommands } from './project-info.js';
|
|
23
|
-
import { register as registerFileOpsCommands } from './file-ops.js';
|
|
24
|
-
import { register as registerPreviewCommands } from './preview.js';
|
|
25
|
-
import { register as registerQualityCommands } from './quality.js';
|
|
26
|
-
import { register as registerWordToolsCommands } from './word-tools.js';
|
|
27
|
-
import { register as registerTextOpsCommands } from './text-ops.js';
|
|
28
|
-
|
|
29
|
-
export {
|
|
30
|
-
registerCoreCommands,
|
|
31
|
-
registerCommentCommands,
|
|
32
|
-
registerInitCommands,
|
|
33
|
-
registerSectionCommands,
|
|
34
|
-
registerSyncCommands,
|
|
35
|
-
registerVerifyAnchorsCommands,
|
|
36
|
-
registerMergeResolveCommands,
|
|
37
|
-
registerBuildCommands,
|
|
38
|
-
registerResponseCommands,
|
|
39
|
-
registerCitationCommands,
|
|
40
|
-
registerDoiCommands,
|
|
41
|
-
registerHistoryCommands,
|
|
42
|
-
registerUtilityCommands,
|
|
43
|
-
registerProjectInfoCommands,
|
|
44
|
-
registerFileOpsCommands,
|
|
45
|
-
registerPreviewCommands,
|
|
46
|
-
registerQualityCommands,
|
|
47
|
-
registerWordToolsCommands,
|
|
48
|
-
registerTextOpsCommands,
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// Re-export context utilities for use by the main CLI
|
|
52
|
-
export {
|
|
53
|
-
setQuietMode,
|
|
54
|
-
setJsonMode,
|
|
55
|
-
quietMode,
|
|
56
|
-
jsonMode,
|
|
57
|
-
} from './context.js';
|
|
58
|
-
|
|
59
|
-
interface PackageJson {
|
|
60
|
-
version?: string;
|
|
61
|
-
[key: string]: unknown;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Register all command modules with the program.
|
|
66
|
-
*/
|
|
67
|
-
export function registerAllCommands(program: Command, pkg?: PackageJson): void {
|
|
68
|
-
registerCoreCommands(program);
|
|
69
|
-
registerCommentCommands(program);
|
|
70
|
-
registerInitCommands(program);
|
|
71
|
-
registerSectionCommands(program);
|
|
72
|
-
registerSyncCommands(program);
|
|
73
|
-
registerVerifyAnchorsCommands(program);
|
|
74
|
-
registerMergeResolveCommands(program);
|
|
75
|
-
registerBuildCommands(program, pkg || {});
|
|
76
|
-
registerResponseCommands(program);
|
|
77
|
-
registerCitationCommands(program);
|
|
78
|
-
registerDoiCommands(program);
|
|
79
|
-
registerHistoryCommands(program);
|
|
80
|
-
registerUtilityCommands(program, pkg || {});
|
|
81
|
-
registerProjectInfoCommands(program);
|
|
82
|
-
registerFileOpsCommands(program);
|
|
83
|
-
registerPreviewCommands(program);
|
|
84
|
-
registerQualityCommands(program);
|
|
85
|
-
registerWordToolsCommands(program);
|
|
86
|
-
registerTextOpsCommands(program);
|
|
87
|
-
}
|
package/lib/commands/init.ts
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Init commands: init, new, config
|
|
3
|
-
*
|
|
4
|
-
* Project initialization and configuration commands.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { Command } from 'commander';
|
|
8
|
-
import {
|
|
9
|
-
chalk,
|
|
10
|
-
fs,
|
|
11
|
-
path,
|
|
12
|
-
fmt,
|
|
13
|
-
generateConfig,
|
|
14
|
-
loadConfig,
|
|
15
|
-
saveConfig,
|
|
16
|
-
getTemplate,
|
|
17
|
-
listTemplates,
|
|
18
|
-
generateCustomTemplate,
|
|
19
|
-
getUserName,
|
|
20
|
-
setUserName,
|
|
21
|
-
getConfigPath,
|
|
22
|
-
getDefaultSections,
|
|
23
|
-
setDefaultSections,
|
|
24
|
-
} from './context.js';
|
|
25
|
-
|
|
26
|
-
interface InitOptions {
|
|
27
|
-
dir: string;
|
|
28
|
-
output: string;
|
|
29
|
-
force?: boolean;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
interface NewOptions {
|
|
33
|
-
template: string;
|
|
34
|
-
sections?: string;
|
|
35
|
-
list?: boolean;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Register init commands with the program
|
|
40
|
-
*/
|
|
41
|
-
export function register(program: Command): void {
|
|
42
|
-
// ==========================================================================
|
|
43
|
-
// INIT command - Generate sections.yaml config
|
|
44
|
-
// ==========================================================================
|
|
45
|
-
|
|
46
|
-
program
|
|
47
|
-
.command('init')
|
|
48
|
-
.description('Generate sections.yaml from existing .md files')
|
|
49
|
-
.option('-d, --dir <directory>', 'Directory to scan', '.')
|
|
50
|
-
.option('-o, --output <file>', 'Output config file', 'sections.yaml')
|
|
51
|
-
.option('--force', 'Overwrite existing config')
|
|
52
|
-
.action((options: InitOptions) => {
|
|
53
|
-
const dir = path.resolve(options.dir);
|
|
54
|
-
|
|
55
|
-
if (!fs.existsSync(dir)) {
|
|
56
|
-
console.error(chalk.red(`Directory not found: ${dir}`));
|
|
57
|
-
process.exit(1);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const outputPath = path.resolve(options.dir, options.output);
|
|
61
|
-
|
|
62
|
-
if (fs.existsSync(outputPath) && !options.force) {
|
|
63
|
-
console.error(chalk.yellow(`Config already exists: ${outputPath}`));
|
|
64
|
-
console.error(chalk.dim('Use --force to overwrite'));
|
|
65
|
-
process.exit(1);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
console.log(chalk.cyan(`Scanning ${dir} for .md files...`));
|
|
69
|
-
|
|
70
|
-
const config = generateConfig(dir);
|
|
71
|
-
const sectionCount = Object.keys(config.sections).length;
|
|
72
|
-
|
|
73
|
-
if (sectionCount === 0) {
|
|
74
|
-
console.error(chalk.yellow('No .md files found (excluding paper.md, README.md)'));
|
|
75
|
-
process.exit(1);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
saveConfig(outputPath, config);
|
|
79
|
-
|
|
80
|
-
console.log(chalk.green(`\nCreated ${outputPath} with ${sectionCount} sections:\n`));
|
|
81
|
-
|
|
82
|
-
for (const [file, section] of Object.entries(config.sections)) {
|
|
83
|
-
console.log(` ${chalk.bold(file)}`);
|
|
84
|
-
console.log(chalk.dim(` header: "${section.header}"`));
|
|
85
|
-
if (section.aliases && section.aliases.length > 0) {
|
|
86
|
-
console.log(chalk.dim(` aliases: ${JSON.stringify(section.aliases)}`));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
console.log(chalk.cyan('\nEdit this file to:'));
|
|
91
|
-
console.log(chalk.dim(' • Add aliases for header variations'));
|
|
92
|
-
console.log(chalk.dim(' • Adjust order if needed'));
|
|
93
|
-
console.log(chalk.dim(' • Update headers if they change'));
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// ==========================================================================
|
|
97
|
-
// NEW command - Create new paper project
|
|
98
|
-
// ==========================================================================
|
|
99
|
-
|
|
100
|
-
program
|
|
101
|
-
.command('new')
|
|
102
|
-
.description('Create a new paper project from template')
|
|
103
|
-
.argument('[name]', 'Project directory name')
|
|
104
|
-
.option('-t, --template <name>', 'Template: paper, minimal, thesis, review', 'paper')
|
|
105
|
-
.option('-s, --sections <sections>', 'Comma-separated section names (e.g., intro,methods,results)')
|
|
106
|
-
.option('--list', 'List available templates')
|
|
107
|
-
.action(async (name: string | undefined, options: NewOptions) => {
|
|
108
|
-
if (options.list) {
|
|
109
|
-
console.log(chalk.cyan('Available templates:\n'));
|
|
110
|
-
for (const t of listTemplates()) {
|
|
111
|
-
console.log(` ${chalk.bold(t.id)} - ${t.description}`);
|
|
112
|
-
}
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (!name) {
|
|
117
|
-
console.error(chalk.red('Error: project name is required'));
|
|
118
|
-
console.error(chalk.dim('Usage: rev new <name>'));
|
|
119
|
-
process.exit(1);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const projectDir = path.resolve(name);
|
|
123
|
-
|
|
124
|
-
if (fs.existsSync(projectDir)) {
|
|
125
|
-
console.error(chalk.red(`Directory already exists: ${name}`));
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
let template;
|
|
130
|
-
let sections: string[] | null = null;
|
|
131
|
-
|
|
132
|
-
// Determine sections: CLI option > user config > prompt
|
|
133
|
-
if (options.sections) {
|
|
134
|
-
// Parse CLI sections
|
|
135
|
-
sections = options.sections.split(',').map((s) => s.trim().toLowerCase().replace(/\.md$/, ''));
|
|
136
|
-
} else {
|
|
137
|
-
// Check user config for default sections
|
|
138
|
-
const defaultSections = getDefaultSections();
|
|
139
|
-
if (defaultSections && defaultSections.length > 0) {
|
|
140
|
-
sections = defaultSections;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// If no sections from CLI or config, and not using a named template with --template, prompt
|
|
145
|
-
// Only prompt if stdin is a TTY (interactive terminal)
|
|
146
|
-
if (!sections && options.template === 'paper') {
|
|
147
|
-
if (process.stdin.isTTY) {
|
|
148
|
-
const rl = (await import('readline')).createInterface({
|
|
149
|
-
input: process.stdin,
|
|
150
|
-
output: process.stdout,
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
const ask = (prompt: string): Promise<string> => new Promise((resolve) => rl.question(prompt, resolve));
|
|
154
|
-
|
|
155
|
-
console.log(chalk.cyan('Enter your document sections (comma-separated):'));
|
|
156
|
-
console.log(chalk.dim(' Example: introduction,methods,results,discussion'));
|
|
157
|
-
console.log(chalk.dim(' Press Enter to use default: introduction,methods,results,discussion\n'));
|
|
158
|
-
|
|
159
|
-
const answer = await ask(chalk.cyan('Sections: '));
|
|
160
|
-
rl.close();
|
|
161
|
-
|
|
162
|
-
if (answer.trim()) {
|
|
163
|
-
sections = answer.split(',').map((s) => s.trim().toLowerCase().replace(/\.md$/, ''));
|
|
164
|
-
} else {
|
|
165
|
-
// Use default paper template sections
|
|
166
|
-
sections = ['introduction', 'methods', 'results', 'discussion'];
|
|
167
|
-
}
|
|
168
|
-
} else {
|
|
169
|
-
// Non-interactive: use default sections
|
|
170
|
-
sections = ['introduction', 'methods', 'results', 'discussion'];
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Generate template based on sections
|
|
175
|
-
if (sections) {
|
|
176
|
-
template = generateCustomTemplate(sections);
|
|
177
|
-
console.log(chalk.cyan(`Creating project with sections: ${sections.join(', ')}\n`));
|
|
178
|
-
} else {
|
|
179
|
-
template = getTemplate(options.template);
|
|
180
|
-
if (!template) {
|
|
181
|
-
console.error(chalk.red(`Unknown template: ${options.template}`));
|
|
182
|
-
console.error(chalk.dim('Use --list to see available templates.'));
|
|
183
|
-
process.exit(1);
|
|
184
|
-
}
|
|
185
|
-
console.log(chalk.cyan(`Creating ${template.name} project in ${name}/...\n`));
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// Create directory
|
|
189
|
-
fs.mkdirSync(projectDir, { recursive: true });
|
|
190
|
-
|
|
191
|
-
// Create subdirectories
|
|
192
|
-
for (const subdir of template.directories || []) {
|
|
193
|
-
fs.mkdirSync(path.join(projectDir, subdir), { recursive: true });
|
|
194
|
-
console.log(chalk.dim(` Created ${subdir}/`));
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// Create files
|
|
198
|
-
for (const [filename, content] of Object.entries(template.files)) {
|
|
199
|
-
const filePath = path.join(projectDir, filename);
|
|
200
|
-
fs.writeFileSync(filePath, content, 'utf-8');
|
|
201
|
-
console.log(chalk.dim(` Created ${filename}`));
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
console.log(chalk.green(`\nProject created!`));
|
|
205
|
-
console.log(chalk.cyan('\nNext steps:'));
|
|
206
|
-
console.log(chalk.dim(` cd ${name}`));
|
|
207
|
-
console.log(chalk.dim(' # Edit rev.yaml with your paper details'));
|
|
208
|
-
console.log(chalk.dim(' # Write your sections'));
|
|
209
|
-
console.log(chalk.dim(' rev build # Build PDF and DOCX'));
|
|
210
|
-
console.log(chalk.dim(' rev build pdf # Build PDF only'));
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
// ==========================================================================
|
|
214
|
-
// CONFIG command - Set user preferences
|
|
215
|
-
// ==========================================================================
|
|
216
|
-
|
|
217
|
-
program
|
|
218
|
-
.command('config')
|
|
219
|
-
.description('Set user preferences')
|
|
220
|
-
.argument('<key>', 'Config key: user, sections')
|
|
221
|
-
.argument('[value]', 'Value to set')
|
|
222
|
-
.action((key: string, value?: string) => {
|
|
223
|
-
if (key === 'user') {
|
|
224
|
-
if (value) {
|
|
225
|
-
setUserName(value);
|
|
226
|
-
console.log(chalk.green(`User name set to: ${value}`));
|
|
227
|
-
console.log(chalk.dim(`Saved to ${getConfigPath()}`));
|
|
228
|
-
} else {
|
|
229
|
-
const name = getUserName();
|
|
230
|
-
if (name) {
|
|
231
|
-
console.log(`Current user: ${chalk.bold(name)}`);
|
|
232
|
-
} else {
|
|
233
|
-
console.log(chalk.yellow('No user name set.'));
|
|
234
|
-
console.log(chalk.dim('Set with: rev config user "Your Name"'));
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
} else if (key === 'sections') {
|
|
238
|
-
if (value) {
|
|
239
|
-
const sections = value.split(',').map((s) => s.trim().toLowerCase().replace(/\.md$/, ''));
|
|
240
|
-
setDefaultSections(sections);
|
|
241
|
-
console.log(chalk.green(`Default sections set to: ${sections.join(', ')}`));
|
|
242
|
-
console.log(chalk.dim(`Saved to ${getConfigPath()}`));
|
|
243
|
-
} else {
|
|
244
|
-
const sections = getDefaultSections();
|
|
245
|
-
if (sections && sections.length > 0) {
|
|
246
|
-
console.log(`Default sections: ${chalk.bold(sections.join(', '))}`);
|
|
247
|
-
} else {
|
|
248
|
-
console.log(chalk.yellow('No default sections set.'));
|
|
249
|
-
console.log(chalk.dim('Set with: rev config sections "intro,methods,results,discussion"'));
|
|
250
|
-
console.log(chalk.dim('When not set, rev new will prompt for sections.'));
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
} else {
|
|
254
|
-
console.error(chalk.red(`Unknown config key: ${key}`));
|
|
255
|
-
console.error(chalk.dim('Available keys: user, sections'));
|
|
256
|
-
process.exit(1);
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
}
|