docrev 0.9.11 → 0.9.14
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 -9
- package/.gitattributes +1 -1
- package/CHANGELOG.md +149 -149
- package/PLAN-tables-and-postprocess.md +850 -850
- package/README.md +391 -391
- package/bin/rev.js +11 -11
- package/bin/rev.ts +145 -145
- package/completions/rev.bash +127 -127
- package/completions/rev.ps1 +210 -210
- package/completions/rev.zsh +207 -207
- package/dev_notes/stress2/build_adversarial.ts +186 -186
- package/dev_notes/stress2/drift_matcher.ts +62 -62
- package/dev_notes/stress2/probe_anchors.ts +35 -35
- package/dev_notes/stress2/project/discussion.before.md +3 -3
- package/dev_notes/stress2/project/discussion.md +3 -3
- package/dev_notes/stress2/project/methods.before.md +20 -20
- package/dev_notes/stress2/project/methods.md +20 -20
- package/dev_notes/stress2/project/rev.yaml +5 -5
- package/dev_notes/stress2/project/sections.yaml +4 -4
- package/dev_notes/stress2/sections.yaml +5 -5
- package/dev_notes/stress2/trace_placement.ts +50 -50
- package/dev_notes/stresstest_boundaries.ts +27 -27
- package/dev_notes/stresstest_drift_apply.ts +43 -43
- package/dev_notes/stresstest_drift_compare.ts +43 -43
- package/dev_notes/stresstest_drift_v2.ts +54 -54
- package/dev_notes/stresstest_inspect.ts +54 -54
- package/dev_notes/stresstest_pstyle.ts +55 -55
- package/dev_notes/stresstest_section_debug.ts +23 -23
- package/dev_notes/stresstest_split.ts +70 -70
- package/dev_notes/stresstest_trace.ts +19 -19
- package/dev_notes/stresstest_verify_no_overwrite.ts +40 -40
- package/dist/lib/build.d.ts +50 -1
- package/dist/lib/build.d.ts.map +1 -1
- package/dist/lib/build.js +80 -30
- package/dist/lib/build.js.map +1 -1
- package/dist/lib/commands/build.d.ts.map +1 -1
- package/dist/lib/commands/build.js +38 -5
- package/dist/lib/commands/build.js.map +1 -1
- package/dist/lib/commands/utilities.js +164 -164
- package/dist/lib/commands/word-tools.js +8 -8
- package/dist/lib/grammar.js +3 -3
- package/dist/lib/import.d.ts.map +1 -1
- package/dist/lib/import.js +146 -24
- package/dist/lib/import.js.map +1 -1
- package/dist/lib/pdf-comments.js +44 -44
- package/dist/lib/plugins.js +57 -57
- package/dist/lib/pptx-themes.js +115 -115
- package/dist/lib/spelling.js +2 -2
- package/dist/lib/templates.js +387 -387
- package/dist/lib/themes.js +51 -51
- package/dist/lib/types.d.ts +20 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/word-extraction.d.ts +6 -0
- package/dist/lib/word-extraction.d.ts.map +1 -1
- package/dist/lib/word-extraction.js +46 -3
- package/dist/lib/word-extraction.js.map +1 -1
- package/dist/lib/wordcomments.d.ts.map +1 -1
- package/dist/lib/wordcomments.js +23 -5
- package/dist/lib/wordcomments.js.map +1 -1
- package/eslint.config.js +27 -27
- package/lib/anchor-match.ts +276 -276
- package/lib/annotations.ts +644 -644
- package/lib/build.ts +1300 -1227
- package/lib/citations.ts +160 -160
- package/lib/commands/build.ts +833 -801
- package/lib/commands/citations.ts +515 -515
- package/lib/commands/comments.ts +1050 -1050
- package/lib/commands/context.ts +174 -174
- package/lib/commands/core.ts +309 -309
- package/lib/commands/doi.ts +435 -435
- package/lib/commands/file-ops.ts +372 -372
- package/lib/commands/history.ts +320 -320
- package/lib/commands/index.ts +87 -87
- package/lib/commands/init.ts +259 -259
- package/lib/commands/merge-resolve.ts +378 -378
- package/lib/commands/preview.ts +178 -178
- package/lib/commands/project-info.ts +244 -244
- package/lib/commands/quality.ts +517 -517
- package/lib/commands/response.ts +454 -454
- package/lib/commands/section-boundaries.ts +82 -82
- package/lib/commands/sections.ts +451 -451
- package/lib/commands/sync.ts +706 -706
- package/lib/commands/text-ops.ts +449 -449
- package/lib/commands/utilities.ts +448 -448
- package/lib/commands/verify-anchors.ts +272 -272
- package/lib/commands/word-tools.ts +340 -340
- package/lib/comment-realign.ts +517 -517
- package/lib/config.ts +84 -84
- package/lib/crossref.ts +781 -781
- package/lib/csl.ts +191 -191
- package/lib/dependencies.ts +98 -98
- package/lib/diff-engine.ts +465 -465
- package/lib/doi-cache.ts +115 -115
- package/lib/doi.ts +897 -897
- package/lib/equations.ts +506 -506
- package/lib/errors.ts +346 -346
- package/lib/format.ts +541 -541
- package/lib/git.ts +326 -326
- package/lib/grammar.ts +303 -303
- package/lib/image-registry.ts +180 -180
- package/lib/import.ts +911 -792
- package/lib/journals.ts +543 -543
- package/lib/merge.ts +633 -633
- package/lib/orcid.ts +144 -144
- package/lib/pdf-comments.ts +263 -263
- package/lib/pdf-import.ts +524 -524
- package/lib/plugins.ts +362 -362
- package/lib/postprocess.ts +188 -188
- package/lib/pptx-color-filter.lua +37 -37
- package/lib/pptx-template.ts +469 -469
- package/lib/pptx-themes.ts +483 -483
- package/lib/protect-restore.ts +520 -520
- package/lib/rate-limiter.ts +94 -94
- package/lib/response.ts +197 -197
- package/lib/restore-references.ts +240 -240
- package/lib/review.ts +327 -327
- package/lib/schema.ts +417 -417
- package/lib/scientific-words.ts +73 -73
- package/lib/sections.ts +335 -335
- package/lib/slides.ts +756 -756
- package/lib/spelling.ts +334 -334
- package/lib/templates.ts +526 -526
- package/lib/themes.ts +742 -742
- package/lib/trackchanges.ts +247 -247
- package/lib/tui.ts +450 -450
- package/lib/types.ts +550 -530
- package/lib/undo.ts +250 -250
- package/lib/utils.ts +69 -69
- package/lib/variables.ts +179 -179
- package/lib/word-extraction.ts +806 -759
- package/lib/word.ts +643 -643
- package/lib/wordcomments.ts +817 -798
- package/package.json +137 -137
- package/scripts/postbuild.js +28 -28
- package/skill/REFERENCE.md +431 -431
- package/skill/SKILL.md +258 -258
- package/tsconfig.json +26 -26
- package/types/index.d.ts +525 -525
package/lib/commands/preview.ts
CHANGED
|
@@ -1,178 +1,178 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Preview commands: preview, watch
|
|
3
|
-
*
|
|
4
|
-
* Commands for building and viewing documents with live reload.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { Command } from 'commander';
|
|
8
|
-
import {
|
|
9
|
-
chalk,
|
|
10
|
-
fs,
|
|
11
|
-
path,
|
|
12
|
-
fmt,
|
|
13
|
-
loadBuildConfig,
|
|
14
|
-
} from './context.js';
|
|
15
|
-
|
|
16
|
-
// Use the actual BuildConfig from build.ts which allows string|Author[]
|
|
17
|
-
type BuildConfig = ReturnType<typeof loadBuildConfig>;
|
|
18
|
-
|
|
19
|
-
// Options interfaces
|
|
20
|
-
interface PreviewOptions {
|
|
21
|
-
// No options currently
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
interface WatchOptions {
|
|
25
|
-
open?: boolean;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Register preview commands with the program
|
|
30
|
-
*/
|
|
31
|
-
export function register(program: Command): void {
|
|
32
|
-
// ==========================================================================
|
|
33
|
-
// PREVIEW command - Build and open document
|
|
34
|
-
// ==========================================================================
|
|
35
|
-
|
|
36
|
-
program
|
|
37
|
-
.command('preview')
|
|
38
|
-
.description('Build and open document in default app')
|
|
39
|
-
.argument('[format]', 'Format to preview: pdf, docx', 'pdf')
|
|
40
|
-
.action(async (format: string, _options: PreviewOptions) => {
|
|
41
|
-
const { exec } = await import('child_process');
|
|
42
|
-
const { build } = await import('../build.js');
|
|
43
|
-
|
|
44
|
-
let config: Partial<BuildConfig> = {};
|
|
45
|
-
try {
|
|
46
|
-
config = loadBuildConfig('.') || {};
|
|
47
|
-
} catch (err) {
|
|
48
|
-
console.error(chalk.red('Not in a rev project directory (no rev.yaml found)'));
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
console.log(chalk.dim(`Building ${format}...`));
|
|
53
|
-
const result = await build('.', [format]);
|
|
54
|
-
|
|
55
|
-
const buildResult = result.results.find(r => r.format === format);
|
|
56
|
-
if (!buildResult?.success) {
|
|
57
|
-
const errorMsg = buildResult?.error || 'Unknown error';
|
|
58
|
-
console.error(chalk.red(`Build failed: ${errorMsg}`));
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const outputFile = buildResult.outputPath;
|
|
63
|
-
if (!outputFile || !fs.existsSync(outputFile)) {
|
|
64
|
-
console.error(chalk.red(`Output file not found: ${outputFile}`));
|
|
65
|
-
process.exit(1);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Open with system default
|
|
69
|
-
const openCmd = process.platform === 'darwin' ? 'open' :
|
|
70
|
-
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
71
|
-
|
|
72
|
-
exec(`${openCmd} "${outputFile}"`, (err) => {
|
|
73
|
-
if (err) {
|
|
74
|
-
console.error(chalk.red(`Could not open file: ${err.message}`));
|
|
75
|
-
} else {
|
|
76
|
-
console.log(fmt.status('success', `Opened ${outputFile}`));
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
// ==========================================================================
|
|
82
|
-
// WATCH command - Auto-rebuild on changes
|
|
83
|
-
// ==========================================================================
|
|
84
|
-
|
|
85
|
-
program
|
|
86
|
-
.command('watch')
|
|
87
|
-
.description('Watch files and auto-rebuild on changes')
|
|
88
|
-
.argument('[format]', 'Format to build: pdf, docx, all', 'pdf')
|
|
89
|
-
.option('--no-open', 'Do not open after first build')
|
|
90
|
-
.action(async (format: string, options: WatchOptions) => {
|
|
91
|
-
const { exec } = await import('child_process');
|
|
92
|
-
const { build } = await import('../build.js');
|
|
93
|
-
|
|
94
|
-
let config: Partial<BuildConfig> = {};
|
|
95
|
-
try {
|
|
96
|
-
config = loadBuildConfig('.') || {};
|
|
97
|
-
} catch (err) {
|
|
98
|
-
console.error(chalk.red('Not in a rev project directory (no rev.yaml found)'));
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
let sections = config.sections || [];
|
|
102
|
-
|
|
103
|
-
if (sections.length === 0) {
|
|
104
|
-
sections = fs.readdirSync('.').filter(f =>
|
|
105
|
-
f.endsWith('.md') && !['README.md', 'CLAUDE.md', 'paper.md'].includes(f)
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const filesToWatch = [
|
|
110
|
-
...sections,
|
|
111
|
-
'rev.yaml',
|
|
112
|
-
config.bibliography || 'references.bib'
|
|
113
|
-
].filter(f => fs.existsSync(f));
|
|
114
|
-
|
|
115
|
-
console.log(fmt.header('Watch Mode'));
|
|
116
|
-
console.log(chalk.dim(`Watching: ${filesToWatch.join(', ')}`));
|
|
117
|
-
console.log(chalk.dim('Press Ctrl+C to stop\n'));
|
|
118
|
-
|
|
119
|
-
let building = false;
|
|
120
|
-
let pendingBuild = false;
|
|
121
|
-
|
|
122
|
-
const doBuild = async (): Promise<void> => {
|
|
123
|
-
if (building) {
|
|
124
|
-
pendingBuild = true;
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
building = true;
|
|
129
|
-
console.log(chalk.dim(`\n[${new Date().toLocaleTimeString()}] Rebuilding...`));
|
|
130
|
-
|
|
131
|
-
try {
|
|
132
|
-
const formats = format === 'all' ? ['pdf', 'docx'] : [format];
|
|
133
|
-
const result = await build('.', formats);
|
|
134
|
-
|
|
135
|
-
for (const r of result.results) {
|
|
136
|
-
if (r.success) {
|
|
137
|
-
console.log(chalk.green(` ✓ ${r.format}: ${r.outputPath}`));
|
|
138
|
-
} else {
|
|
139
|
-
console.log(chalk.red(` ✗ ${r.format}: ${r.error}`));
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
} catch (err) {
|
|
143
|
-
console.error(chalk.red(` Build error: ${(err as Error).message}`));
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
building = false;
|
|
147
|
-
if (pendingBuild) {
|
|
148
|
-
pendingBuild = false;
|
|
149
|
-
doBuild();
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
// Initial build
|
|
154
|
-
await doBuild();
|
|
155
|
-
|
|
156
|
-
// Open after first build
|
|
157
|
-
if (options.open) {
|
|
158
|
-
const outputFile = format === 'docx' ?
|
|
159
|
-
(config.title?.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase() || 'paper') + '.docx' :
|
|
160
|
-
(config.title?.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase() || 'paper') + '.pdf';
|
|
161
|
-
|
|
162
|
-
if (fs.existsSync(outputFile)) {
|
|
163
|
-
const openCmd = process.platform === 'darwin' ? 'open' :
|
|
164
|
-
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
165
|
-
exec(`${openCmd} "${outputFile}"`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// Watch files
|
|
170
|
-
for (const file of filesToWatch) {
|
|
171
|
-
fs.watch(file, { persistent: true }, (eventType) => {
|
|
172
|
-
if (eventType === 'change') {
|
|
173
|
-
doBuild();
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Preview commands: preview, watch
|
|
3
|
+
*
|
|
4
|
+
* Commands for building and viewing documents with live reload.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Command } from 'commander';
|
|
8
|
+
import {
|
|
9
|
+
chalk,
|
|
10
|
+
fs,
|
|
11
|
+
path,
|
|
12
|
+
fmt,
|
|
13
|
+
loadBuildConfig,
|
|
14
|
+
} from './context.js';
|
|
15
|
+
|
|
16
|
+
// Use the actual BuildConfig from build.ts which allows string|Author[]
|
|
17
|
+
type BuildConfig = ReturnType<typeof loadBuildConfig>;
|
|
18
|
+
|
|
19
|
+
// Options interfaces
|
|
20
|
+
interface PreviewOptions {
|
|
21
|
+
// No options currently
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface WatchOptions {
|
|
25
|
+
open?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Register preview commands with the program
|
|
30
|
+
*/
|
|
31
|
+
export function register(program: Command): void {
|
|
32
|
+
// ==========================================================================
|
|
33
|
+
// PREVIEW command - Build and open document
|
|
34
|
+
// ==========================================================================
|
|
35
|
+
|
|
36
|
+
program
|
|
37
|
+
.command('preview')
|
|
38
|
+
.description('Build and open document in default app')
|
|
39
|
+
.argument('[format]', 'Format to preview: pdf, docx', 'pdf')
|
|
40
|
+
.action(async (format: string, _options: PreviewOptions) => {
|
|
41
|
+
const { exec } = await import('child_process');
|
|
42
|
+
const { build } = await import('../build.js');
|
|
43
|
+
|
|
44
|
+
let config: Partial<BuildConfig> = {};
|
|
45
|
+
try {
|
|
46
|
+
config = loadBuildConfig('.') || {};
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.error(chalk.red('Not in a rev project directory (no rev.yaml found)'));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
console.log(chalk.dim(`Building ${format}...`));
|
|
53
|
+
const result = await build('.', [format]);
|
|
54
|
+
|
|
55
|
+
const buildResult = result.results.find(r => r.format === format);
|
|
56
|
+
if (!buildResult?.success) {
|
|
57
|
+
const errorMsg = buildResult?.error || 'Unknown error';
|
|
58
|
+
console.error(chalk.red(`Build failed: ${errorMsg}`));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const outputFile = buildResult.outputPath;
|
|
63
|
+
if (!outputFile || !fs.existsSync(outputFile)) {
|
|
64
|
+
console.error(chalk.red(`Output file not found: ${outputFile}`));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Open with system default
|
|
69
|
+
const openCmd = process.platform === 'darwin' ? 'open' :
|
|
70
|
+
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
71
|
+
|
|
72
|
+
exec(`${openCmd} "${outputFile}"`, (err) => {
|
|
73
|
+
if (err) {
|
|
74
|
+
console.error(chalk.red(`Could not open file: ${err.message}`));
|
|
75
|
+
} else {
|
|
76
|
+
console.log(fmt.status('success', `Opened ${outputFile}`));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// ==========================================================================
|
|
82
|
+
// WATCH command - Auto-rebuild on changes
|
|
83
|
+
// ==========================================================================
|
|
84
|
+
|
|
85
|
+
program
|
|
86
|
+
.command('watch')
|
|
87
|
+
.description('Watch files and auto-rebuild on changes')
|
|
88
|
+
.argument('[format]', 'Format to build: pdf, docx, all', 'pdf')
|
|
89
|
+
.option('--no-open', 'Do not open after first build')
|
|
90
|
+
.action(async (format: string, options: WatchOptions) => {
|
|
91
|
+
const { exec } = await import('child_process');
|
|
92
|
+
const { build } = await import('../build.js');
|
|
93
|
+
|
|
94
|
+
let config: Partial<BuildConfig> = {};
|
|
95
|
+
try {
|
|
96
|
+
config = loadBuildConfig('.') || {};
|
|
97
|
+
} catch (err) {
|
|
98
|
+
console.error(chalk.red('Not in a rev project directory (no rev.yaml found)'));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
let sections = config.sections || [];
|
|
102
|
+
|
|
103
|
+
if (sections.length === 0) {
|
|
104
|
+
sections = fs.readdirSync('.').filter(f =>
|
|
105
|
+
f.endsWith('.md') && !['README.md', 'CLAUDE.md', 'paper.md'].includes(f)
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const filesToWatch = [
|
|
110
|
+
...sections,
|
|
111
|
+
'rev.yaml',
|
|
112
|
+
config.bibliography || 'references.bib'
|
|
113
|
+
].filter(f => fs.existsSync(f));
|
|
114
|
+
|
|
115
|
+
console.log(fmt.header('Watch Mode'));
|
|
116
|
+
console.log(chalk.dim(`Watching: ${filesToWatch.join(', ')}`));
|
|
117
|
+
console.log(chalk.dim('Press Ctrl+C to stop\n'));
|
|
118
|
+
|
|
119
|
+
let building = false;
|
|
120
|
+
let pendingBuild = false;
|
|
121
|
+
|
|
122
|
+
const doBuild = async (): Promise<void> => {
|
|
123
|
+
if (building) {
|
|
124
|
+
pendingBuild = true;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
building = true;
|
|
129
|
+
console.log(chalk.dim(`\n[${new Date().toLocaleTimeString()}] Rebuilding...`));
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
const formats = format === 'all' ? ['pdf', 'docx'] : [format];
|
|
133
|
+
const result = await build('.', formats);
|
|
134
|
+
|
|
135
|
+
for (const r of result.results) {
|
|
136
|
+
if (r.success) {
|
|
137
|
+
console.log(chalk.green(` ✓ ${r.format}: ${r.outputPath}`));
|
|
138
|
+
} else {
|
|
139
|
+
console.log(chalk.red(` ✗ ${r.format}: ${r.error}`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
} catch (err) {
|
|
143
|
+
console.error(chalk.red(` Build error: ${(err as Error).message}`));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
building = false;
|
|
147
|
+
if (pendingBuild) {
|
|
148
|
+
pendingBuild = false;
|
|
149
|
+
doBuild();
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// Initial build
|
|
154
|
+
await doBuild();
|
|
155
|
+
|
|
156
|
+
// Open after first build
|
|
157
|
+
if (options.open) {
|
|
158
|
+
const outputFile = format === 'docx' ?
|
|
159
|
+
(config.title?.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase() || 'paper') + '.docx' :
|
|
160
|
+
(config.title?.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase() || 'paper') + '.pdf';
|
|
161
|
+
|
|
162
|
+
if (fs.existsSync(outputFile)) {
|
|
163
|
+
const openCmd = process.platform === 'darwin' ? 'open' :
|
|
164
|
+
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
165
|
+
exec(`${openCmd} "${outputFile}"`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Watch files
|
|
170
|
+
for (const file of filesToWatch) {
|
|
171
|
+
fs.watch(file, { persistent: true }, (eventType) => {
|
|
172
|
+
if (eventType === 'change') {
|
|
173
|
+
doBuild();
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|