@usejunior/docx-core 0.2.0 → 0.3.1
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/README.md +0 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/atomizer.d.ts.map +1 -1
- package/dist/atomizer.js +16 -3
- package/dist/atomizer.js.map +1 -1
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
- package/dist/baselines/atomizer/documentReconstructor.js +11 -5
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier.d.ts +81 -1
- package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier.js +618 -34
- package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -1
- package/dist/baselines/atomizer/pipeline.d.ts +1 -1
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
- package/dist/baselines/atomizer/pipeline.js +70 -1
- package/dist/baselines/atomizer/pipeline.js.map +1 -1
- package/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -1
- package/dist/baselines/atomizer/premergeRuns.js +3 -0
- package/dist/baselines/atomizer/premergeRuns.js.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +63 -33
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
- package/dist/cli/compare-two.js +4 -4
- package/dist/cli/compare-two.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/primitives/document.d.ts +12 -0
- package/dist/primitives/document.d.ts.map +1 -1
- package/dist/primitives/document.js +17 -2
- package/dist/primitives/document.js.map +1 -1
- package/dist/primitives/document_view.d.ts +2 -0
- package/dist/primitives/document_view.d.ts.map +1 -1
- package/dist/primitives/document_view.js +3 -2
- package/dist/primitives/document_view.js.map +1 -1
- package/dist/primitives/formatting_tags.d.ts +14 -2
- package/dist/primitives/formatting_tags.d.ts.map +1 -1
- package/dist/primitives/formatting_tags.js +13 -11
- package/dist/primitives/formatting_tags.js.map +1 -1
- package/dist/primitives/matching.d.ts +12 -0
- package/dist/primitives/matching.d.ts.map +1 -1
- package/dist/primitives/matching.js +54 -0
- package/dist/primitives/matching.js.map +1 -1
- package/dist/primitives/merge_runs.d.ts.map +1 -1
- package/dist/primitives/merge_runs.js +48 -0
- package/dist/primitives/merge_runs.js.map +1 -1
- package/dist/shared/validators/structural.d.ts +31 -0
- package/dist/shared/validators/structural.d.ts.map +1 -0
- package/dist/shared/validators/structural.js +110 -0
- package/dist/shared/validators/structural.js.map +1 -0
- package/package.json +2 -2
- package/dist/baselines/diffmatch/documentBuilder.d.ts +0 -44
- package/dist/baselines/diffmatch/documentBuilder.d.ts.map +0 -1
- package/dist/baselines/diffmatch/documentBuilder.js +0 -227
- package/dist/baselines/diffmatch/documentBuilder.js.map +0 -1
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts +0 -75
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts.map +0 -1
- package/dist/baselines/diffmatch/paragraphAlignment.js +0 -206
- package/dist/baselines/diffmatch/paragraphAlignment.js.map +0 -1
- package/dist/baselines/diffmatch/pipeline.d.ts +0 -33
- package/dist/baselines/diffmatch/pipeline.d.ts.map +0 -1
- package/dist/baselines/diffmatch/pipeline.js +0 -84
- package/dist/baselines/diffmatch/pipeline.js.map +0 -1
- package/dist/baselines/diffmatch/runDiff.d.ts +0 -53
- package/dist/baselines/diffmatch/runDiff.d.ts.map +0 -1
- package/dist/baselines/diffmatch/runDiff.js +0 -253
- package/dist/baselines/diffmatch/runDiff.js.map +0 -1
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts +0 -64
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts.map +0 -1
- package/dist/baselines/diffmatch/trackChangesRenderer.js +0 -178
- package/dist/baselines/diffmatch/trackChangesRenderer.js.map +0 -1
- package/dist/baselines/diffmatch/xmlParser.d.ts +0 -45
- package/dist/baselines/diffmatch/xmlParser.d.ts.map +0 -1
- package/dist/baselines/diffmatch/xmlParser.js +0 -216
- package/dist/baselines/diffmatch/xmlParser.js.map +0 -1
- package/dist/benchmark/metrics.d.ts +0 -72
- package/dist/benchmark/metrics.d.ts.map +0 -1
- package/dist/benchmark/metrics.js +0 -45
- package/dist/benchmark/metrics.js.map +0 -1
- package/dist/benchmark/reporter.d.ts +0 -23
- package/dist/benchmark/reporter.d.ts.map +0 -1
- package/dist/benchmark/reporter.js +0 -147
- package/dist/benchmark/reporter.js.map +0 -1
- package/dist/benchmark/runner.d.ts +0 -30
- package/dist/benchmark/runner.d.ts.map +0 -1
- package/dist/benchmark/runner.js +0 -233
- package/dist/benchmark/runner.js.map +0 -1
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Benchmark result reporter.
|
|
3
|
-
*
|
|
4
|
-
* Formats benchmark results for different output modes.
|
|
5
|
-
*/
|
|
6
|
-
import { BenchmarkResult } from './metrics.js';
|
|
7
|
-
/**
|
|
8
|
-
* Generate a markdown report from benchmark results.
|
|
9
|
-
*/
|
|
10
|
-
export declare function generateMarkdownReport(results: BenchmarkResult[]): string;
|
|
11
|
-
/**
|
|
12
|
-
* Generate a console table from benchmark results.
|
|
13
|
-
*/
|
|
14
|
-
export declare function generateConsoleTable(results: BenchmarkResult[]): string;
|
|
15
|
-
/**
|
|
16
|
-
* Generate JSON output from benchmark results.
|
|
17
|
-
*/
|
|
18
|
-
export declare function generateJsonReport(results: BenchmarkResult[]): string;
|
|
19
|
-
/**
|
|
20
|
-
* Print a comparison summary to console.
|
|
21
|
-
*/
|
|
22
|
-
export declare function printSummary(results: BenchmarkResult[]): void;
|
|
23
|
-
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/benchmark/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,cAAc,CAAC;AAoBlE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAuCzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAuCvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CA+BrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CA4B7D"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Benchmark result reporter.
|
|
3
|
-
*
|
|
4
|
-
* Formats benchmark results for different output modes.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Format metrics as a markdown table row.
|
|
8
|
-
*/
|
|
9
|
-
function formatMetricsRow(name, metrics, error) {
|
|
10
|
-
if (error) {
|
|
11
|
-
return `| ${name} | Error: ${error.slice(0, 50)}... | - | - | - | - |`;
|
|
12
|
-
}
|
|
13
|
-
if (!metrics) {
|
|
14
|
-
return `| ${name} | Skipped | - | - | - | - |`;
|
|
15
|
-
}
|
|
16
|
-
return `| ${name} | ${metrics.insertions} | ${metrics.deletions} | ${metrics.wallTimeMs.toFixed(1)}ms | ${metrics.peakRssMb.toFixed(1)}MB | ${(metrics.outputSizeBytes / 1024).toFixed(1)}KB |`;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Generate a markdown report from benchmark results.
|
|
20
|
-
*/
|
|
21
|
-
export function generateMarkdownReport(results) {
|
|
22
|
-
const lines = [];
|
|
23
|
-
lines.push('# Document Comparison Benchmark Results');
|
|
24
|
-
lines.push('');
|
|
25
|
-
lines.push(`Generated: ${new Date().toISOString()}`);
|
|
26
|
-
lines.push('');
|
|
27
|
-
for (const result of results) {
|
|
28
|
-
lines.push(`## Fixture: ${result.fixture}`);
|
|
29
|
-
lines.push('');
|
|
30
|
-
lines.push('| Baseline | Insertions | Deletions | Time | Memory | Output Size |');
|
|
31
|
-
lines.push('|----------|------------|-----------|------|--------|-------------|');
|
|
32
|
-
lines.push(formatMetricsRow('A (WmlComparer)', result.baselineA, result.baselineAError));
|
|
33
|
-
lines.push(formatMetricsRow('B (Pure TS)', result.baselineB, result.baselineBError));
|
|
34
|
-
if (result.wordOracle) {
|
|
35
|
-
lines.push(formatMetricsRow('Word Oracle', result.wordOracle));
|
|
36
|
-
}
|
|
37
|
-
lines.push('');
|
|
38
|
-
}
|
|
39
|
-
// Summary statistics
|
|
40
|
-
lines.push('## Summary');
|
|
41
|
-
lines.push('');
|
|
42
|
-
const successfulA = results.filter(r => r.baselineA !== null);
|
|
43
|
-
const successfulB = results.filter(r => r.baselineB !== null);
|
|
44
|
-
if (successfulA.length > 0) {
|
|
45
|
-
const avgTimeA = successfulA.reduce((sum, r) => sum + (r.baselineA?.wallTimeMs ?? 0), 0) / successfulA.length;
|
|
46
|
-
lines.push(`- Baseline A: ${successfulA.length}/${results.length} successful, avg time: ${avgTimeA.toFixed(1)}ms`);
|
|
47
|
-
}
|
|
48
|
-
if (successfulB.length > 0) {
|
|
49
|
-
const avgTimeB = successfulB.reduce((sum, r) => sum + (r.baselineB?.wallTimeMs ?? 0), 0) / successfulB.length;
|
|
50
|
-
lines.push(`- Baseline B: ${successfulB.length}/${results.length} successful, avg time: ${avgTimeB.toFixed(1)}ms`);
|
|
51
|
-
}
|
|
52
|
-
return lines.join('\n');
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Generate a console table from benchmark results.
|
|
56
|
-
*/
|
|
57
|
-
export function generateConsoleTable(results) {
|
|
58
|
-
const lines = [];
|
|
59
|
-
// Header
|
|
60
|
-
lines.push('┌────────────────────────┬──────────┬─────────────┬─────────────┬──────────┬──────────┐');
|
|
61
|
-
lines.push('│ Fixture │ Baseline │ Insertions │ Deletions │ Time │ Memory │');
|
|
62
|
-
lines.push('├────────────────────────┼──────────┼─────────────┼─────────────┼──────────┼──────────┤');
|
|
63
|
-
for (const result of results) {
|
|
64
|
-
const fixtureName = result.fixture.padEnd(22).slice(0, 22);
|
|
65
|
-
// Baseline A row
|
|
66
|
-
if (result.baselineAError) {
|
|
67
|
-
lines.push(`│ ${fixtureName} │ A │ ERROR │ │ │ │`);
|
|
68
|
-
}
|
|
69
|
-
else if (result.baselineA) {
|
|
70
|
-
const m = result.baselineA;
|
|
71
|
-
lines.push(`│ ${fixtureName} │ A │ ${String(m.insertions).padStart(11)} │ ${String(m.deletions).padStart(11)} │ ${m.wallTimeMs.toFixed(0).padStart(6)}ms │ ${m.peakRssMb.toFixed(1).padStart(6)}MB │`);
|
|
72
|
-
}
|
|
73
|
-
// Baseline B row
|
|
74
|
-
if (result.baselineBError) {
|
|
75
|
-
lines.push(`│ │ B │ ERROR │ │ │ │`);
|
|
76
|
-
}
|
|
77
|
-
else if (result.baselineB) {
|
|
78
|
-
const m = result.baselineB;
|
|
79
|
-
lines.push(`│ │ B │ ${String(m.insertions).padStart(11)} │ ${String(m.deletions).padStart(11)} │ ${m.wallTimeMs.toFixed(0).padStart(6)}ms │ ${m.peakRssMb.toFixed(1).padStart(6)}MB │`);
|
|
80
|
-
}
|
|
81
|
-
lines.push('├────────────────────────┼──────────┼─────────────┼─────────────┼──────────┼──────────┤');
|
|
82
|
-
}
|
|
83
|
-
// Remove last separator and add bottom border
|
|
84
|
-
lines.pop();
|
|
85
|
-
lines.push('└────────────────────────┴──────────┴─────────────┴─────────────┴──────────┴──────────┘');
|
|
86
|
-
return lines.join('\n');
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Generate JSON output from benchmark results.
|
|
90
|
-
*/
|
|
91
|
-
export function generateJsonReport(results) {
|
|
92
|
-
return JSON.stringify({
|
|
93
|
-
timestamp: new Date().toISOString(),
|
|
94
|
-
results: results.map(r => ({
|
|
95
|
-
fixture: r.fixture,
|
|
96
|
-
timestamp: r.timestamp.toISOString(),
|
|
97
|
-
baselineA: r.baselineA
|
|
98
|
-
? {
|
|
99
|
-
success: true,
|
|
100
|
-
...r.baselineA,
|
|
101
|
-
}
|
|
102
|
-
: {
|
|
103
|
-
success: false,
|
|
104
|
-
error: r.baselineAError,
|
|
105
|
-
},
|
|
106
|
-
baselineB: r.baselineB
|
|
107
|
-
? {
|
|
108
|
-
success: true,
|
|
109
|
-
...r.baselineB,
|
|
110
|
-
}
|
|
111
|
-
: {
|
|
112
|
-
success: false,
|
|
113
|
-
error: r.baselineBError,
|
|
114
|
-
},
|
|
115
|
-
wordOracle: r.wordOracle ?? null,
|
|
116
|
-
})),
|
|
117
|
-
}, null, 2);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Print a comparison summary to console.
|
|
121
|
-
*/
|
|
122
|
-
export function printSummary(results) {
|
|
123
|
-
console.log('\n=== Benchmark Summary ===\n');
|
|
124
|
-
for (const result of results) {
|
|
125
|
-
console.log(`Fixture: ${result.fixture}`);
|
|
126
|
-
if (result.baselineA) {
|
|
127
|
-
console.log(` Baseline A: ${result.baselineA.insertions} ins, ${result.baselineA.deletions} del, ${result.baselineA.wallTimeMs.toFixed(0)}ms`);
|
|
128
|
-
}
|
|
129
|
-
else if (result.baselineAError) {
|
|
130
|
-
console.log(` Baseline A: Error - ${result.baselineAError}`);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
console.log(' Baseline A: Skipped');
|
|
134
|
-
}
|
|
135
|
-
if (result.baselineB) {
|
|
136
|
-
console.log(` Baseline B: ${result.baselineB.insertions} ins, ${result.baselineB.deletions} del, ${result.baselineB.wallTimeMs.toFixed(0)}ms`);
|
|
137
|
-
}
|
|
138
|
-
else if (result.baselineBError) {
|
|
139
|
-
console.log(` Baseline B: Error - ${result.baselineBError}`);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
console.log(' Baseline B: Skipped');
|
|
143
|
-
}
|
|
144
|
-
console.log('');
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=reporter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/benchmark/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Benchmark runner for A/B baseline comparison.
|
|
3
|
-
*
|
|
4
|
-
* Runs both baselines against test fixtures and collects metrics.
|
|
5
|
-
*/
|
|
6
|
-
import type { BenchmarkResult } from './metrics.js';
|
|
7
|
-
/**
|
|
8
|
-
* Configuration for benchmark runs.
|
|
9
|
-
*/
|
|
10
|
-
export interface BenchmarkConfig {
|
|
11
|
-
/** Path to fixtures directory */
|
|
12
|
-
fixturesPath: string;
|
|
13
|
-
/** Author name for revisions */
|
|
14
|
-
author?: string;
|
|
15
|
-
/** Path to Docxodus repository (for CLI fallback) */
|
|
16
|
-
docxodusPath?: string;
|
|
17
|
-
/** Path to dotnet executable (e.g., /opt/homebrew/opt/dotnet@8/bin/dotnet) */
|
|
18
|
-
dotnetPath?: string;
|
|
19
|
-
/** Run Baseline A (WmlComparer) */
|
|
20
|
-
runBaselineA?: boolean;
|
|
21
|
-
/** Run Baseline B (pure TS) */
|
|
22
|
-
runBaselineB?: boolean;
|
|
23
|
-
/** Timeout for each comparison in ms */
|
|
24
|
-
timeout?: number;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Run benchmark on all fixtures.
|
|
28
|
-
*/
|
|
29
|
-
export declare function runBenchmark(config: BenchmarkConfig): Promise<BenchmarkResult[]>;
|
|
30
|
-
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,cAAc,CAAC;AAUtB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+KD;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAoC5B"}
|
package/dist/benchmark/runner.js
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Benchmark runner for A/B baseline comparison.
|
|
3
|
-
*
|
|
4
|
-
* Runs both baselines against test fixtures and collects metrics.
|
|
5
|
-
*/
|
|
6
|
-
import { readFile, readdir, stat } from 'fs/promises';
|
|
7
|
-
import { join } from 'path';
|
|
8
|
-
import { createEmptyMetrics, createTimer, measureMemory, } from './metrics.js';
|
|
9
|
-
import { compareWithDotnet, isRedlineAvailable } from '../baselines/wmlcomparer/DotnetCli.js';
|
|
10
|
-
import { compareDocumentsBaselineB } from '../baselines/diffmatch/pipeline.js';
|
|
11
|
-
/**
|
|
12
|
-
* Discover fixtures in a directory.
|
|
13
|
-
*
|
|
14
|
-
* Expects structure like:
|
|
15
|
-
* - fixtures/simple-word-change/original.docx
|
|
16
|
-
* - fixtures/simple-word-change/revised.docx
|
|
17
|
-
*
|
|
18
|
-
* Or:
|
|
19
|
-
* - fixtures/simple-word-change.original.docx
|
|
20
|
-
* - fixtures/simple-word-change.revised.docx
|
|
21
|
-
*/
|
|
22
|
-
async function discoverFixtures(fixturesPath) {
|
|
23
|
-
const fixtures = [];
|
|
24
|
-
const entries = await readdir(fixturesPath, { withFileTypes: true });
|
|
25
|
-
for (const entry of entries) {
|
|
26
|
-
if (entry.isDirectory()) {
|
|
27
|
-
// Directory structure: fixture-name/original.docx + revised.docx
|
|
28
|
-
const dirPath = join(fixturesPath, entry.name);
|
|
29
|
-
const originalPath = join(dirPath, 'original.docx');
|
|
30
|
-
const revisedPath = join(dirPath, 'revised.docx');
|
|
31
|
-
try {
|
|
32
|
-
await stat(originalPath);
|
|
33
|
-
await stat(revisedPath);
|
|
34
|
-
fixtures.push({
|
|
35
|
-
name: entry.name,
|
|
36
|
-
originalPath,
|
|
37
|
-
revisedPath,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
// Missing files, skip this fixture
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else if (entry.name.endsWith('.original.docx')) {
|
|
45
|
-
// File structure: fixture-name.original.docx + fixture-name.revised.docx
|
|
46
|
-
const baseName = entry.name.replace('.original.docx', '');
|
|
47
|
-
const originalPath = join(fixturesPath, entry.name);
|
|
48
|
-
const revisedPath = join(fixturesPath, `${baseName}.revised.docx`);
|
|
49
|
-
try {
|
|
50
|
-
await stat(revisedPath);
|
|
51
|
-
fixtures.push({
|
|
52
|
-
name: baseName,
|
|
53
|
-
originalPath,
|
|
54
|
-
revisedPath,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
// Missing revised file, skip
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return fixtures;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Run Baseline A (WmlComparer via CLI) on a fixture.
|
|
66
|
-
*/
|
|
67
|
-
async function runBaselineA(original, revised, options) {
|
|
68
|
-
const metrics = createEmptyMetrics();
|
|
69
|
-
const startMemory = measureMemory();
|
|
70
|
-
const timer = createTimer();
|
|
71
|
-
const result = await compareWithDotnet(original, revised, options);
|
|
72
|
-
metrics.wallTimeMs = timer();
|
|
73
|
-
metrics.peakRssMb = Math.max(measureMemory() - startMemory, 0);
|
|
74
|
-
metrics.outputSizeBytes = result.document.length;
|
|
75
|
-
metrics.insertions = result.stats.insertions;
|
|
76
|
-
metrics.deletions = result.stats.deletions;
|
|
77
|
-
metrics.modifications = result.stats.modifications;
|
|
78
|
-
// TODO: Add structural validation
|
|
79
|
-
// - Parse output DOCX
|
|
80
|
-
// - Check for broken relationships
|
|
81
|
-
// - Count actual track changes elements
|
|
82
|
-
return { metrics, output: result.document };
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Run Baseline B (pure TypeScript) on a fixture.
|
|
86
|
-
*
|
|
87
|
-
* Uses the diffmatch pipeline:
|
|
88
|
-
* 1. Parse DOCX to extract paragraphs/runs
|
|
89
|
-
* 2. Align paragraphs using LCS
|
|
90
|
-
* 3. Diff matched paragraphs at run level
|
|
91
|
-
* 4. Render track changes back to DOCX
|
|
92
|
-
*/
|
|
93
|
-
async function runBaselineB(original, revised, author) {
|
|
94
|
-
const metrics = createEmptyMetrics();
|
|
95
|
-
const startMemory = measureMemory();
|
|
96
|
-
const timer = createTimer();
|
|
97
|
-
const result = await compareDocumentsBaselineB(original, revised, { author });
|
|
98
|
-
metrics.wallTimeMs = timer();
|
|
99
|
-
metrics.peakRssMb = Math.max(measureMemory() - startMemory, 0);
|
|
100
|
-
metrics.outputSizeBytes = result.document.length;
|
|
101
|
-
metrics.insertions = result.stats.insertions;
|
|
102
|
-
metrics.deletions = result.stats.deletions;
|
|
103
|
-
metrics.modifications = result.stats.modifications;
|
|
104
|
-
return { metrics, output: result.document };
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Run benchmark on a single fixture.
|
|
108
|
-
*/
|
|
109
|
-
async function runFixture(fixture, config) {
|
|
110
|
-
const result = {
|
|
111
|
-
fixture: fixture.name,
|
|
112
|
-
baselineA: null,
|
|
113
|
-
baselineB: null,
|
|
114
|
-
timestamp: new Date(),
|
|
115
|
-
};
|
|
116
|
-
// Load fixture files
|
|
117
|
-
const original = await readFile(fixture.originalPath);
|
|
118
|
-
const revised = await readFile(fixture.revisedPath);
|
|
119
|
-
const author = config.author ?? 'Benchmark';
|
|
120
|
-
// Run Baseline A
|
|
121
|
-
if (config.runBaselineA !== false) {
|
|
122
|
-
try {
|
|
123
|
-
const { metrics } = await runBaselineA(original, revised, {
|
|
124
|
-
author,
|
|
125
|
-
docxodusPath: config.docxodusPath,
|
|
126
|
-
dotnetPath: config.dotnetPath,
|
|
127
|
-
timeout: config.timeout,
|
|
128
|
-
});
|
|
129
|
-
result.baselineA = metrics;
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
result.baselineAError =
|
|
133
|
-
error instanceof Error ? error.message : String(error);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
// Run Baseline B
|
|
137
|
-
if (config.runBaselineB !== false) {
|
|
138
|
-
try {
|
|
139
|
-
const { metrics } = await runBaselineB(original, revised, author);
|
|
140
|
-
result.baselineB = metrics;
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
result.baselineBError =
|
|
144
|
-
error instanceof Error ? error.message : String(error);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return result;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Run benchmark on all fixtures.
|
|
151
|
-
*/
|
|
152
|
-
export async function runBenchmark(config) {
|
|
153
|
-
// Check if Baseline A is available
|
|
154
|
-
const canRunA = config.runBaselineA !== false &&
|
|
155
|
-
await isRedlineAvailable(config.docxodusPath, config.dotnetPath);
|
|
156
|
-
if (config.runBaselineA !== false && !canRunA) {
|
|
157
|
-
console.warn('Baseline A (WmlComparer) not available. Install .NET 8+ and Docxodus.');
|
|
158
|
-
}
|
|
159
|
-
// Discover fixtures
|
|
160
|
-
const fixtures = await discoverFixtures(config.fixturesPath);
|
|
161
|
-
if (fixtures.length === 0) {
|
|
162
|
-
console.warn(`No fixtures found in ${config.fixturesPath}`);
|
|
163
|
-
return [];
|
|
164
|
-
}
|
|
165
|
-
console.log(`Found ${fixtures.length} fixture(s)`);
|
|
166
|
-
// Run benchmarks
|
|
167
|
-
const results = [];
|
|
168
|
-
for (const fixture of fixtures) {
|
|
169
|
-
console.log(`Running: ${fixture.name}`);
|
|
170
|
-
const result = await runFixture(fixture, {
|
|
171
|
-
...config,
|
|
172
|
-
runBaselineA: canRunA && config.runBaselineA !== false,
|
|
173
|
-
});
|
|
174
|
-
results.push(result);
|
|
175
|
-
}
|
|
176
|
-
return results;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* CLI entry point.
|
|
180
|
-
*/
|
|
181
|
-
async function main() {
|
|
182
|
-
const args = process.argv.slice(2);
|
|
183
|
-
if (args.length === 0) {
|
|
184
|
-
console.log('Usage: npm run benchmark <fixtures-path> [options]');
|
|
185
|
-
console.log('');
|
|
186
|
-
console.log('Options:');
|
|
187
|
-
console.log(' --docxodus=<path> Path to Docxodus repository');
|
|
188
|
-
console.log(' --dotnet=<path> Path to dotnet executable (e.g., /opt/homebrew/opt/dotnet@8/bin/dotnet)');
|
|
189
|
-
console.log(' --author=<name> Author name for revisions');
|
|
190
|
-
console.log(' --no-baseline-a Skip Baseline A (WmlComparer)');
|
|
191
|
-
console.log(' --no-baseline-b Skip Baseline B (pure TS)');
|
|
192
|
-
process.exit(1);
|
|
193
|
-
}
|
|
194
|
-
const fixturesPath = args[0];
|
|
195
|
-
const options = {};
|
|
196
|
-
for (let i = 1; i < args.length; i++) {
|
|
197
|
-
const arg = args[i];
|
|
198
|
-
if (arg.startsWith('--')) {
|
|
199
|
-
if (arg.includes('=')) {
|
|
200
|
-
const [key, value] = arg.slice(2).split('=', 2);
|
|
201
|
-
options[key] = value;
|
|
202
|
-
}
|
|
203
|
-
else if (arg.startsWith('--no-')) {
|
|
204
|
-
options[arg.slice(5)] = false;
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
options[arg.slice(2)] = true;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
const config = {
|
|
212
|
-
fixturesPath,
|
|
213
|
-
author: options.author,
|
|
214
|
-
docxodusPath: options.docxodus,
|
|
215
|
-
dotnetPath: options.dotnet,
|
|
216
|
-
runBaselineA: options['baseline-a'] !== false,
|
|
217
|
-
runBaselineB: options['baseline-b'] !== false,
|
|
218
|
-
};
|
|
219
|
-
try {
|
|
220
|
-
const results = await runBenchmark(config);
|
|
221
|
-
// Output results as JSON
|
|
222
|
-
console.log(JSON.stringify(results, null, 2));
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
console.error('Benchmark failed:', error);
|
|
226
|
-
process.exit(1);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
// Run if executed directly
|
|
230
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
231
|
-
main().catch(console.error);
|
|
232
|
-
}
|
|
233
|
-
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"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"}
|