@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.
Files changed (88) hide show
  1. package/README.md +0 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/atomizer.d.ts.map +1 -1
  4. package/dist/atomizer.js +16 -3
  5. package/dist/atomizer.js.map +1 -1
  6. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
  7. package/dist/baselines/atomizer/documentReconstructor.js +11 -5
  8. package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
  9. package/dist/baselines/atomizer/inPlaceModifier.d.ts +81 -1
  10. package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -1
  11. package/dist/baselines/atomizer/inPlaceModifier.js +618 -34
  12. package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -1
  13. package/dist/baselines/atomizer/pipeline.d.ts +1 -1
  14. package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
  15. package/dist/baselines/atomizer/pipeline.js +70 -1
  16. package/dist/baselines/atomizer/pipeline.js.map +1 -1
  17. package/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -1
  18. package/dist/baselines/atomizer/premergeRuns.js +3 -0
  19. package/dist/baselines/atomizer/premergeRuns.js.map +1 -1
  20. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
  21. package/dist/baselines/atomizer/trackChangesAcceptorAst.js +63 -33
  22. package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
  23. package/dist/cli/compare-two.js +4 -4
  24. package/dist/cli/compare-two.js.map +1 -1
  25. package/dist/index.d.ts +6 -6
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +7 -7
  28. package/dist/index.js.map +1 -1
  29. package/dist/primitives/document.d.ts +12 -0
  30. package/dist/primitives/document.d.ts.map +1 -1
  31. package/dist/primitives/document.js +17 -2
  32. package/dist/primitives/document.js.map +1 -1
  33. package/dist/primitives/document_view.d.ts +2 -0
  34. package/dist/primitives/document_view.d.ts.map +1 -1
  35. package/dist/primitives/document_view.js +3 -2
  36. package/dist/primitives/document_view.js.map +1 -1
  37. package/dist/primitives/formatting_tags.d.ts +14 -2
  38. package/dist/primitives/formatting_tags.d.ts.map +1 -1
  39. package/dist/primitives/formatting_tags.js +13 -11
  40. package/dist/primitives/formatting_tags.js.map +1 -1
  41. package/dist/primitives/matching.d.ts +12 -0
  42. package/dist/primitives/matching.d.ts.map +1 -1
  43. package/dist/primitives/matching.js +54 -0
  44. package/dist/primitives/matching.js.map +1 -1
  45. package/dist/primitives/merge_runs.d.ts.map +1 -1
  46. package/dist/primitives/merge_runs.js +48 -0
  47. package/dist/primitives/merge_runs.js.map +1 -1
  48. package/dist/shared/validators/structural.d.ts +31 -0
  49. package/dist/shared/validators/structural.d.ts.map +1 -0
  50. package/dist/shared/validators/structural.js +110 -0
  51. package/dist/shared/validators/structural.js.map +1 -0
  52. package/package.json +2 -2
  53. package/dist/baselines/diffmatch/documentBuilder.d.ts +0 -44
  54. package/dist/baselines/diffmatch/documentBuilder.d.ts.map +0 -1
  55. package/dist/baselines/diffmatch/documentBuilder.js +0 -227
  56. package/dist/baselines/diffmatch/documentBuilder.js.map +0 -1
  57. package/dist/baselines/diffmatch/paragraphAlignment.d.ts +0 -75
  58. package/dist/baselines/diffmatch/paragraphAlignment.d.ts.map +0 -1
  59. package/dist/baselines/diffmatch/paragraphAlignment.js +0 -206
  60. package/dist/baselines/diffmatch/paragraphAlignment.js.map +0 -1
  61. package/dist/baselines/diffmatch/pipeline.d.ts +0 -33
  62. package/dist/baselines/diffmatch/pipeline.d.ts.map +0 -1
  63. package/dist/baselines/diffmatch/pipeline.js +0 -84
  64. package/dist/baselines/diffmatch/pipeline.js.map +0 -1
  65. package/dist/baselines/diffmatch/runDiff.d.ts +0 -53
  66. package/dist/baselines/diffmatch/runDiff.d.ts.map +0 -1
  67. package/dist/baselines/diffmatch/runDiff.js +0 -253
  68. package/dist/baselines/diffmatch/runDiff.js.map +0 -1
  69. package/dist/baselines/diffmatch/trackChangesRenderer.d.ts +0 -64
  70. package/dist/baselines/diffmatch/trackChangesRenderer.d.ts.map +0 -1
  71. package/dist/baselines/diffmatch/trackChangesRenderer.js +0 -178
  72. package/dist/baselines/diffmatch/trackChangesRenderer.js.map +0 -1
  73. package/dist/baselines/diffmatch/xmlParser.d.ts +0 -45
  74. package/dist/baselines/diffmatch/xmlParser.d.ts.map +0 -1
  75. package/dist/baselines/diffmatch/xmlParser.js +0 -216
  76. package/dist/baselines/diffmatch/xmlParser.js.map +0 -1
  77. package/dist/benchmark/metrics.d.ts +0 -72
  78. package/dist/benchmark/metrics.d.ts.map +0 -1
  79. package/dist/benchmark/metrics.js +0 -45
  80. package/dist/benchmark/metrics.js.map +0 -1
  81. package/dist/benchmark/reporter.d.ts +0 -23
  82. package/dist/benchmark/reporter.d.ts.map +0 -1
  83. package/dist/benchmark/reporter.js +0 -147
  84. package/dist/benchmark/reporter.js.map +0 -1
  85. package/dist/benchmark/runner.d.ts +0 -30
  86. package/dist/benchmark/runner.d.ts.map +0 -1
  87. package/dist/benchmark/runner.js +0 -233
  88. 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"}
@@ -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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"}