@usejunior/docx-core 0.1.2 → 0.3.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.
Files changed (79) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/baselines/atomizer/consumerCompatibility.d.ts +2 -0
  3. package/dist/baselines/atomizer/consumerCompatibility.d.ts.map +1 -0
  4. package/dist/baselines/atomizer/consumerCompatibility.js +188 -0
  5. package/dist/baselines/atomizer/consumerCompatibility.js.map +1 -0
  6. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
  7. package/dist/baselines/atomizer/documentReconstructor.js +82 -42
  8. package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
  9. package/dist/baselines/atomizer/inPlaceModifier.d.ts +15 -1
  10. package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -1
  11. package/dist/baselines/atomizer/inPlaceModifier.js +111 -16
  12. package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -1
  13. package/dist/baselines/atomizer/pipeline.d.ts +4 -0
  14. package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
  15. package/dist/baselines/atomizer/pipeline.js +335 -4
  16. package/dist/baselines/atomizer/pipeline.js.map +1 -1
  17. package/dist/benchmark/gates.d.ts +17 -0
  18. package/dist/benchmark/gates.d.ts.map +1 -0
  19. package/dist/benchmark/gates.js +260 -0
  20. package/dist/benchmark/gates.js.map +1 -0
  21. package/dist/benchmark/metrics.d.ts +5 -62
  22. package/dist/benchmark/metrics.d.ts.map +1 -1
  23. package/dist/benchmark/metrics.js +7 -28
  24. package/dist/benchmark/metrics.js.map +1 -1
  25. package/dist/benchmark/reporter.d.ts +6 -19
  26. package/dist/benchmark/reporter.d.ts.map +1 -1
  27. package/dist/benchmark/reporter.js +63 -116
  28. package/dist/benchmark/reporter.js.map +1 -1
  29. package/dist/benchmark/runner.d.ts +11 -26
  30. package/dist/benchmark/runner.d.ts.map +1 -1
  31. package/dist/benchmark/runner.js +191 -183
  32. package/dist/benchmark/runner.js.map +1 -1
  33. package/dist/benchmark/scores.d.ts +24 -0
  34. package/dist/benchmark/scores.d.ts.map +1 -0
  35. package/dist/benchmark/scores.js +103 -0
  36. package/dist/benchmark/scores.js.map +1 -0
  37. package/dist/benchmark/types.d.ts +81 -0
  38. package/dist/benchmark/types.d.ts.map +1 -0
  39. package/dist/benchmark/types.js +7 -0
  40. package/dist/benchmark/types.js.map +1 -0
  41. package/dist/primitives/document.d.ts +12 -0
  42. package/dist/primitives/document.d.ts.map +1 -1
  43. package/dist/primitives/document.js +17 -2
  44. package/dist/primitives/document.js.map +1 -1
  45. package/dist/primitives/document_view.d.ts +5 -1
  46. package/dist/primitives/document_view.d.ts.map +1 -1
  47. package/dist/primitives/document_view.js +46 -19
  48. package/dist/primitives/document_view.js.map +1 -1
  49. package/dist/primitives/formatting_tags.d.ts +22 -9
  50. package/dist/primitives/formatting_tags.d.ts.map +1 -1
  51. package/dist/primitives/formatting_tags.js +166 -92
  52. package/dist/primitives/formatting_tags.js.map +1 -1
  53. package/dist/primitives/matching.d.ts +16 -2
  54. package/dist/primitives/matching.d.ts.map +1 -1
  55. package/dist/primitives/matching.js +93 -14
  56. package/dist/primitives/matching.js.map +1 -1
  57. package/dist/primitives/merge_runs.d.ts.map +1 -1
  58. package/dist/primitives/merge_runs.js +48 -0
  59. package/dist/primitives/merge_runs.js.map +1 -1
  60. package/dist/primitives/namespaces.d.ts +1 -0
  61. package/dist/primitives/namespaces.d.ts.map +1 -1
  62. package/dist/primitives/namespaces.js +1 -0
  63. package/dist/primitives/namespaces.js.map +1 -1
  64. package/dist/primitives/semantic_tags.d.ts +10 -25
  65. package/dist/primitives/semantic_tags.d.ts.map +1 -1
  66. package/dist/primitives/semantic_tags.js +34 -115
  67. package/dist/primitives/semantic_tags.js.map +1 -1
  68. package/dist/primitives/styles.d.ts.map +1 -1
  69. package/dist/primitives/styles.js +21 -6
  70. package/dist/primitives/styles.js.map +1 -1
  71. package/dist/primitives/text.d.ts +3 -0
  72. package/dist/primitives/text.d.ts.map +1 -1
  73. package/dist/primitives/text.js +65 -20
  74. package/dist/primitives/text.js.map +1 -1
  75. package/dist/shared/validators/structural.d.ts +31 -0
  76. package/dist/shared/validators/structural.d.ts.map +1 -0
  77. package/dist/shared/validators/structural.js +110 -0
  78. package/dist/shared/validators/structural.js.map +1 -0
  79. package/package.json +1 -1
@@ -1,145 +1,92 @@
1
1
  /**
2
- * Benchmark result reporter.
2
+ * Quality benchmark reporter.
3
3
  *
4
- * Formats benchmark results for different output modes.
4
+ * Formats gate-then-score results as Markdown, JSON, or console output.
5
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 |`;
6
+ // ── Helpers ─────────────────────────────────────────────────────────
7
+ function gateIcon(passed) {
8
+ return passed ? 'PASS' : 'FAIL';
17
9
  }
18
- /**
19
- * Generate a markdown report from benchmark results.
20
- */
10
+ // ── Markdown ────────────────────────────────────────────────────────
21
11
  export function generateMarkdownReport(results) {
22
12
  const lines = [];
23
- lines.push('# Document Comparison Benchmark Results');
13
+ lines.push('# Quality Benchmark Results');
24
14
  lines.push('');
25
15
  lines.push(`Generated: ${new Date().toISOString()}`);
26
16
  lines.push('');
17
+ lines.push('| Fixture | Engine | G1a | G1b | G1c | G2* | G3 | Q1 | Q3(ms) | Q4 |');
18
+ lines.push('|---------|--------|-----|-----|-----|-----|----|----|--------|----|');
27
19
  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));
20
+ for (const [engineName, er] of Object.entries(result.engines)) {
21
+ const g1 = er.gates.textRoundTrip;
22
+ const g1a = gateIcon(g1.normalizedTextParity.passed);
23
+ const g1b = gateIcon(g1.paragraphCountParity.passed);
24
+ const g1c = gateIcon(g1.xmlParseValidity.passed);
25
+ const g2 = gateIcon(er.gates.formattingProjection.passed);
26
+ const g3 = gateIcon(er.gates.structuralIntegrity.passed);
27
+ const q1 = er.scores?.diffMinimality
28
+ ? String(er.scores.diffMinimality.engineRuns)
29
+ : '-';
30
+ const q3 = er.scores?.performance
31
+ ? er.scores.performance.wallTimeMs.toFixed(0)
32
+ : '-';
33
+ const q4parts = [];
34
+ if (er.scores?.extras.moveDetection)
35
+ q4parts.push('moves');
36
+ if (er.scores?.extras.tableCellDiff)
37
+ q4parts.push('tables');
38
+ const q4 = q4parts.length > 0 ? q4parts.join('+') : '-';
39
+ lines.push(`| ${result.fixture} | ${engineName} | ${g1a} | ${g1b} | ${g1c} | ${g2} | ${g3} | ${q1} | ${q3} | ${q4} |`);
36
40
  }
37
- lines.push('');
38
41
  }
39
- // Summary statistics
42
+ lines.push('');
43
+ lines.push('*G2 is a soft gate (diagnostic only in v1)*');
44
+ lines.push('');
45
+ // Summary
40
46
  lines.push('## Summary');
41
47
  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('├────────────────────────┼──────────┼─────────────┼─────────────┼──────────┼──────────┤');
48
+ const engineStats = new Map();
63
49
  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 │`);
50
+ for (const [engineName, er] of Object.entries(result.engines)) {
51
+ const stats = engineStats.get(engineName) ?? { total: 0, hardPass: 0, softPass: 0 };
52
+ stats.total++;
53
+ if (er.hardGatesPassed)
54
+ stats.hardPass++;
55
+ if (er.softGatesPassed)
56
+ stats.softPass++;
57
+ engineStats.set(engineName, stats);
80
58
  }
81
- lines.push('├────────────────────────┼──────────┼─────────────┼─────────────┼──────────┼──────────┤');
82
59
  }
83
- // Remove last separator and add bottom border
84
- lines.pop();
85
- lines.push('└────────────────────────┴──────────┴─────────────┴─────────────┴──────────┴──────────┘');
60
+ for (const [engine, stats] of engineStats) {
61
+ lines.push(`- **${engine}**: ${stats.hardPass}/${stats.total} hard gates passed, ${stats.softPass}/${stats.total} soft gates passed`);
62
+ }
86
63
  return lines.join('\n');
87
64
  }
88
- /**
89
- * Generate JSON output from benchmark results.
90
- */
65
+ // ── JSON ────────────────────────────────────────────────────────────
91
66
  export function generateJsonReport(results) {
92
67
  return JSON.stringify({
93
68
  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
- })),
69
+ results,
117
70
  }, null, 2);
118
71
  }
119
- /**
120
- * Print a comparison summary to console.
121
- */
72
+ // ── Console ─────────────────────────────────────────────────────────
122
73
  export function printSummary(results) {
123
- console.log('\n=== Benchmark Summary ===\n');
74
+ console.log('\n=== Quality Benchmark Summary ===\n');
124
75
  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');
76
+ console.log(`Fixture: ${result.fixture} [${result.tags.join(', ')}]`);
77
+ for (const [engineName, er] of Object.entries(result.engines)) {
78
+ const hard = er.hardGatesPassed ? 'PASS' : 'FAIL';
79
+ const soft = er.softGatesPassed ? 'PASS' : 'FAIL';
80
+ const time = er.scores?.performance
81
+ ? `${er.scores.performance.wallTimeMs.toFixed(0)}ms`
82
+ : 'N/A';
83
+ const q1 = er.scores?.diffMinimality
84
+ ? `${er.scores.diffMinimality.engineRuns} runs`
85
+ : 'N/A';
86
+ console.log(` ${engineName}: hard=${hard} soft=${soft} time=${time} q1=${q1}`);
87
+ if (er.error) {
88
+ console.log(` Error: ${er.error}`);
89
+ }
143
90
  }
144
91
  console.log('');
145
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/benchmark/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/benchmark/reporter.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,15 @@
1
1
  /**
2
- * Benchmark runner for A/B baseline comparison.
2
+ * Quality benchmark runner gate-then-score architecture.
3
3
  *
4
- * Runs both baselines against test fixtures and collects metrics.
4
+ * For each fixture × engine: produce redline run gates → if hard gates pass, run scores.
5
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[]>;
6
+ import type { FixtureBenchmarkResult, FixtureManifest, FixtureManifestEntry, QualityBenchmarkConfig } from './types.js';
7
+ export declare function loadManifest(manifestPath: string): Promise<{
8
+ manifest: FixtureManifest;
9
+ resolvedFixtures: Array<FixtureManifestEntry & {
10
+ resolvedOriginal: string;
11
+ resolvedRevised: string;
12
+ }>;
13
+ }>;
14
+ export declare function runQualityBenchmark(config: QualityBenchmarkConfig): Promise<FixtureBenchmarkResult[]>;
30
15
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
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
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAGV,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAMpB,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,QAAQ,EAAE,eAAe,CAAC;IAC1B,gBAAgB,EAAE,KAAK,CAAC,oBAAoB,GAAG;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvG,CAAC,CA+BD;AAwJD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAgCnC"}