@usejunior/docx-core 0.0.1 → 0.1.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/LICENSE +21 -0
- package/README.md +86 -28
- package/dist/.tsbuildinfo +1 -0
- package/dist/atomizer.d.ts +218 -0
- package/dist/atomizer.d.ts.map +1 -0
- package/dist/atomizer.js +856 -0
- package/dist/atomizer.js.map +1 -0
- package/dist/baselines/atomizer/atomLcs.d.ts +96 -0
- package/dist/baselines/atomizer/atomLcs.d.ts.map +1 -0
- package/dist/baselines/atomizer/atomLcs.js +347 -0
- package/dist/baselines/atomizer/atomLcs.js.map +1 -0
- package/dist/baselines/atomizer/debug.d.ts +41 -0
- package/dist/baselines/atomizer/debug.d.ts.map +1 -0
- package/dist/baselines/atomizer/debug.js +85 -0
- package/dist/baselines/atomizer/debug.js.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts +64 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.js +939 -0
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -0
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts +111 -0
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +1 -0
- package/dist/baselines/atomizer/hierarchicalLcs.js +469 -0
- package/dist/baselines/atomizer/hierarchicalLcs.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier.d.ts +183 -0
- package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier.js +1600 -0
- package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -0
- package/dist/baselines/atomizer/numberingIntegration.d.ts +59 -0
- package/dist/baselines/atomizer/numberingIntegration.d.ts.map +1 -0
- package/dist/baselines/atomizer/numberingIntegration.js +209 -0
- package/dist/baselines/atomizer/numberingIntegration.js.map +1 -0
- package/dist/baselines/atomizer/pipeline.d.ts +65 -0
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -0
- package/dist/baselines/atomizer/pipeline.js +510 -0
- package/dist/baselines/atomizer/pipeline.js.map +1 -0
- package/dist/baselines/atomizer/premergeRuns.d.ts +26 -0
- package/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -0
- package/dist/baselines/atomizer/premergeRuns.js +150 -0
- package/dist/baselines/atomizer/premergeRuns.js.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts +63 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.js +254 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.js.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +64 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +586 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -0
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts +65 -0
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +1 -0
- package/dist/baselines/atomizer/xmlToWmlElement.js +95 -0
- package/dist/baselines/atomizer/xmlToWmlElement.js.map +1 -0
- package/dist/baselines/diffmatch/documentBuilder.d.ts +44 -0
- package/dist/baselines/diffmatch/documentBuilder.d.ts.map +1 -0
- package/dist/baselines/diffmatch/documentBuilder.js +227 -0
- package/dist/baselines/diffmatch/documentBuilder.js.map +1 -0
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts +75 -0
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts.map +1 -0
- package/dist/baselines/diffmatch/paragraphAlignment.js +206 -0
- package/dist/baselines/diffmatch/paragraphAlignment.js.map +1 -0
- package/dist/baselines/diffmatch/pipeline.d.ts +33 -0
- package/dist/baselines/diffmatch/pipeline.d.ts.map +1 -0
- package/dist/baselines/diffmatch/pipeline.js +84 -0
- package/dist/baselines/diffmatch/pipeline.js.map +1 -0
- package/dist/baselines/diffmatch/runDiff.d.ts +53 -0
- package/dist/baselines/diffmatch/runDiff.d.ts.map +1 -0
- package/dist/baselines/diffmatch/runDiff.js +253 -0
- package/dist/baselines/diffmatch/runDiff.js.map +1 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts +64 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts.map +1 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.js +178 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.js.map +1 -0
- package/dist/baselines/diffmatch/xmlParser.d.ts +45 -0
- package/dist/baselines/diffmatch/xmlParser.d.ts.map +1 -0
- package/dist/baselines/diffmatch/xmlParser.js +344 -0
- package/dist/baselines/diffmatch/xmlParser.js.map +1 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +51 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +1 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.js +83 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.js.map +1 -0
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts +40 -0
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js +135 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -0
- package/dist/benchmark/metrics.d.ts +72 -0
- package/dist/benchmark/metrics.d.ts.map +1 -0
- package/dist/benchmark/metrics.js +45 -0
- package/dist/benchmark/metrics.js.map +1 -0
- package/dist/benchmark/reporter.d.ts +23 -0
- package/dist/benchmark/reporter.d.ts.map +1 -0
- package/dist/benchmark/reporter.js +147 -0
- package/dist/benchmark/reporter.js.map +1 -0
- package/dist/benchmark/runner.d.ts +30 -0
- package/dist/benchmark/runner.d.ts.map +1 -0
- package/dist/benchmark/runner.js +233 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/cli/compare-two.d.ts +28 -0
- package/dist/cli/compare-two.d.ts.map +1 -0
- package/dist/cli/compare-two.js +110 -0
- package/dist/cli/compare-two.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core-types.d.ts +296 -0
- package/dist/core-types.d.ts.map +1 -0
- package/dist/core-types.js +122 -0
- package/dist/core-types.js.map +1 -0
- package/dist/footnotes.d.ts +144 -0
- package/dist/footnotes.d.ts.map +1 -0
- package/dist/footnotes.js +291 -0
- package/dist/footnotes.js.map +1 -0
- package/dist/format-detection.d.ts +120 -0
- package/dist/format-detection.d.ts.map +1 -0
- package/dist/format-detection.js +338 -0
- package/dist/format-detection.js.map +1 -0
- package/dist/index.d.ts +177 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/output-artifacts.d.ts +6 -0
- package/dist/integration/output-artifacts.d.ts.map +1 -0
- package/dist/integration/output-artifacts.js +30 -0
- package/dist/integration/output-artifacts.js.map +1 -0
- package/dist/move-detection.d.ts +211 -0
- package/dist/move-detection.d.ts.map +1 -0
- package/dist/move-detection.js +391 -0
- package/dist/move-detection.js.map +1 -0
- package/dist/numbering.d.ts +136 -0
- package/dist/numbering.d.ts.map +1 -0
- package/dist/numbering.js +446 -0
- package/dist/numbering.js.map +1 -0
- package/dist/primitives/accept_changes.d.ts +30 -0
- package/dist/primitives/accept_changes.d.ts.map +1 -0
- package/dist/primitives/accept_changes.js +241 -0
- package/dist/primitives/accept_changes.js.map +1 -0
- package/dist/primitives/bookmarks.d.ts +12 -0
- package/dist/primitives/bookmarks.d.ts.map +1 -0
- package/dist/primitives/bookmarks.js +248 -0
- package/dist/primitives/bookmarks.js.map +1 -0
- package/dist/primitives/comments.d.ts +88 -0
- package/dist/primitives/comments.d.ts.map +1 -0
- package/dist/primitives/comments.js +703 -0
- package/dist/primitives/comments.js.map +1 -0
- package/dist/primitives/document.d.ts +168 -0
- package/dist/primitives/document.d.ts.map +1 -0
- package/dist/primitives/document.js +532 -0
- package/dist/primitives/document.js.map +1 -0
- package/dist/primitives/document_view.d.ts +93 -0
- package/dist/primitives/document_view.d.ts.map +1 -0
- package/dist/primitives/document_view.js +722 -0
- package/dist/primitives/document_view.js.map +1 -0
- package/dist/primitives/dom-helpers.d.ts +94 -0
- package/dist/primitives/dom-helpers.d.ts.map +1 -0
- package/dist/primitives/dom-helpers.js +219 -0
- package/dist/primitives/dom-helpers.js.map +1 -0
- package/dist/primitives/errors.d.ts +7 -0
- package/dist/primitives/errors.d.ts.map +1 -0
- package/dist/primitives/errors.js +10 -0
- package/dist/primitives/errors.js.map +1 -0
- package/dist/primitives/extract_revisions.d.ts +50 -0
- package/dist/primitives/extract_revisions.d.ts.map +1 -0
- package/dist/primitives/extract_revisions.js +340 -0
- package/dist/primitives/extract_revisions.js.map +1 -0
- package/dist/primitives/footnotes.d.ts +37 -0
- package/dist/primitives/footnotes.d.ts.map +1 -0
- package/dist/primitives/footnotes.js +552 -0
- package/dist/primitives/footnotes.js.map +1 -0
- package/dist/primitives/formatting_tags.d.ts +30 -0
- package/dist/primitives/formatting_tags.d.ts.map +1 -0
- package/dist/primitives/formatting_tags.js +217 -0
- package/dist/primitives/formatting_tags.js.map +1 -0
- package/dist/primitives/index.d.ts +26 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +26 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/layout.d.ts +53 -0
- package/dist/primitives/layout.d.ts.map +1 -0
- package/dist/primitives/layout.js +178 -0
- package/dist/primitives/layout.js.map +1 -0
- package/dist/primitives/list_labels.d.ts +19 -0
- package/dist/primitives/list_labels.d.ts.map +1 -0
- package/dist/primitives/list_labels.js +57 -0
- package/dist/primitives/list_labels.js.map +1 -0
- package/dist/primitives/matching.d.ts +17 -0
- package/dist/primitives/matching.d.ts.map +1 -0
- package/dist/primitives/matching.js +144 -0
- package/dist/primitives/matching.js.map +1 -0
- package/dist/primitives/merge_runs.d.ts +23 -0
- package/dist/primitives/merge_runs.d.ts.map +1 -0
- package/dist/primitives/merge_runs.js +195 -0
- package/dist/primitives/merge_runs.js.map +1 -0
- package/dist/primitives/namespaces.d.ts +90 -0
- package/dist/primitives/namespaces.d.ts.map +1 -0
- package/dist/primitives/namespaces.js +107 -0
- package/dist/primitives/namespaces.js.map +1 -0
- package/dist/primitives/numbering.d.ts +27 -0
- package/dist/primitives/numbering.d.ts.map +1 -0
- package/dist/primitives/numbering.js +182 -0
- package/dist/primitives/numbering.js.map +1 -0
- package/dist/primitives/prevent_double_elevation.d.ts +18 -0
- package/dist/primitives/prevent_double_elevation.d.ts.map +1 -0
- package/dist/primitives/prevent_double_elevation.js +190 -0
- package/dist/primitives/prevent_double_elevation.js.map +1 -0
- package/dist/primitives/reject_changes.d.ts +27 -0
- package/dist/primitives/reject_changes.d.ts.map +1 -0
- package/dist/primitives/reject_changes.js +371 -0
- package/dist/primitives/reject_changes.js.map +1 -0
- package/dist/primitives/relationships.d.ts +7 -0
- package/dist/primitives/relationships.d.ts.map +1 -0
- package/dist/primitives/relationships.js +24 -0
- package/dist/primitives/relationships.js.map +1 -0
- package/dist/primitives/semantic_tags.d.ts +32 -0
- package/dist/primitives/semantic_tags.d.ts.map +1 -0
- package/dist/primitives/semantic_tags.js +139 -0
- package/dist/primitives/semantic_tags.js.map +1 -0
- package/dist/primitives/simplify_redlines.d.ts +19 -0
- package/dist/primitives/simplify_redlines.d.ts.map +1 -0
- package/dist/primitives/simplify_redlines.js +94 -0
- package/dist/primitives/simplify_redlines.js.map +1 -0
- package/dist/primitives/styles.d.ts +36 -0
- package/dist/primitives/styles.d.ts.map +1 -0
- package/dist/primitives/styles.js +190 -0
- package/dist/primitives/styles.js.map +1 -0
- package/dist/primitives/text.d.ts +27 -0
- package/dist/primitives/text.d.ts.map +1 -0
- package/dist/primitives/text.js +416 -0
- package/dist/primitives/text.js.map +1 -0
- package/dist/primitives/validate_document.d.ts +24 -0
- package/dist/primitives/validate_document.d.ts.map +1 -0
- package/dist/primitives/validate_document.js +147 -0
- package/dist/primitives/validate_document.js.map +1 -0
- package/dist/primitives/xml.d.ts +5 -0
- package/dist/primitives/xml.d.ts.map +1 -0
- package/dist/primitives/xml.js +19 -0
- package/dist/primitives/xml.js.map +1 -0
- package/dist/primitives/zip.d.ts +25 -0
- package/dist/primitives/zip.d.ts.map +1 -0
- package/dist/primitives/zip.js +78 -0
- package/dist/primitives/zip.js.map +1 -0
- package/dist/shared/docx/DocxArchive.d.ts +94 -0
- package/dist/shared/docx/DocxArchive.d.ts.map +1 -0
- package/dist/shared/docx/DocxArchive.js +169 -0
- package/dist/shared/docx/DocxArchive.js.map +1 -0
- package/dist/shared/ooxml/namespaces.d.ts +149 -0
- package/dist/shared/ooxml/namespaces.d.ts.map +1 -0
- package/dist/shared/ooxml/namespaces.js +224 -0
- package/dist/shared/ooxml/namespaces.js.map +1 -0
- package/dist/shared/ooxml/types.d.ts +136 -0
- package/dist/shared/ooxml/types.d.ts.map +1 -0
- package/dist/shared/ooxml/types.js +7 -0
- package/dist/shared/ooxml/types.js.map +1 -0
- package/package.json +63 -6
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline B: Track changes OOXML renderer.
|
|
3
|
+
*
|
|
4
|
+
* Generates OOXML track changes markup (w:ins, w:del) from diff results.
|
|
5
|
+
*/
|
|
6
|
+
/** ID allocator for revision IDs */
|
|
7
|
+
let nextRevisionId = 1;
|
|
8
|
+
/**
|
|
9
|
+
* Reset the revision ID counter.
|
|
10
|
+
*/
|
|
11
|
+
export function resetRevisionIds() {
|
|
12
|
+
nextRevisionId = 1;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Allocate a new revision ID.
|
|
16
|
+
*/
|
|
17
|
+
export function allocateRevisionId() {
|
|
18
|
+
return nextRevisionId++;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format a date for OOXML (ISO 8601 format).
|
|
22
|
+
*/
|
|
23
|
+
export function formatOoxmlDate(date) {
|
|
24
|
+
return date.toISOString().replace('Z', 'Z');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Escape XML special characters.
|
|
28
|
+
*/
|
|
29
|
+
export function escapeXml(text) {
|
|
30
|
+
return text
|
|
31
|
+
.replace(/&/g, '&')
|
|
32
|
+
.replace(/</g, '<')
|
|
33
|
+
.replace(/>/g, '>')
|
|
34
|
+
.replace(/"/g, '"')
|
|
35
|
+
.replace(/'/g, ''');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate run properties XML.
|
|
39
|
+
*/
|
|
40
|
+
function generateRunProperties(run) {
|
|
41
|
+
if (!run.properties) {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
const props = [];
|
|
45
|
+
const p = run.properties;
|
|
46
|
+
if (p.bold) {
|
|
47
|
+
props.push('<w:b/>');
|
|
48
|
+
}
|
|
49
|
+
if (p.italic) {
|
|
50
|
+
props.push('<w:i/>');
|
|
51
|
+
}
|
|
52
|
+
if (p.underline) {
|
|
53
|
+
props.push(`<w:u w:val="${escapeXml(p.underline)}"/>`);
|
|
54
|
+
}
|
|
55
|
+
if (p.strikethrough) {
|
|
56
|
+
props.push('<w:strike/>');
|
|
57
|
+
}
|
|
58
|
+
if (p.highlight) {
|
|
59
|
+
props.push(`<w:highlight w:val="${escapeXml(p.highlight)}"/>`);
|
|
60
|
+
}
|
|
61
|
+
if (p.color) {
|
|
62
|
+
props.push(`<w:color w:val="${escapeXml(p.color)}"/>`);
|
|
63
|
+
}
|
|
64
|
+
if (p.fontSize !== undefined) {
|
|
65
|
+
props.push(`<w:sz w:val="${p.fontSize}"/>`);
|
|
66
|
+
}
|
|
67
|
+
if (p.fontFamily) {
|
|
68
|
+
props.push(`<w:rFonts w:ascii="${escapeXml(p.fontFamily)}" w:hAnsi="${escapeXml(p.fontFamily)}"/>`);
|
|
69
|
+
}
|
|
70
|
+
if (props.length === 0) {
|
|
71
|
+
return '';
|
|
72
|
+
}
|
|
73
|
+
return `<w:rPr>${props.join('')}</w:rPr>`;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Generate a single run's XML.
|
|
77
|
+
*/
|
|
78
|
+
function generateRunXml(text, run, useDelText = false) {
|
|
79
|
+
const rPr = generateRunProperties(run);
|
|
80
|
+
const textElement = useDelText ? 'w:delText' : 'w:t';
|
|
81
|
+
// Handle whitespace preservation
|
|
82
|
+
const needsSpace = text.startsWith(' ') || text.endsWith(' ') || text.includes(' ');
|
|
83
|
+
const spaceAttr = needsSpace ? ' xml:space="preserve"' : '';
|
|
84
|
+
return `<w:r>${rPr}<${textElement}${spaceAttr}>${escapeXml(text)}</${textElement}></w:r>`;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generate insertion markup.
|
|
88
|
+
*/
|
|
89
|
+
export function generateInsertion(runs, author, date) {
|
|
90
|
+
const id = allocateRevisionId();
|
|
91
|
+
const dateStr = formatOoxmlDate(date);
|
|
92
|
+
const runXml = runs.map(run => generateRunXml(run.text, run, false)).join('');
|
|
93
|
+
return `<w:ins w:id="${id}" w:author="${escapeXml(author)}" w:date="${dateStr}">${runXml}</w:ins>`;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Generate deletion markup.
|
|
97
|
+
*/
|
|
98
|
+
export function generateDeletion(runs, author, date) {
|
|
99
|
+
const id = allocateRevisionId();
|
|
100
|
+
const dateStr = formatOoxmlDate(date);
|
|
101
|
+
// Deletions use w:delText instead of w:t
|
|
102
|
+
const runXml = runs.map(run => generateRunXml(run.text, run, true)).join('');
|
|
103
|
+
return `<w:del w:id="${id}" w:author="${escapeXml(author)}" w:date="${dateStr}">${runXml}</w:del>`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate unchanged run markup.
|
|
107
|
+
*/
|
|
108
|
+
export function generateUnchangedRun(run) {
|
|
109
|
+
return generateRunXml(run.text, run, false);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Render merged runs with track changes to OOXML.
|
|
113
|
+
*
|
|
114
|
+
* @param mergedRuns - Runs with revision markers from diffRuns()
|
|
115
|
+
* @param options - Rendering options
|
|
116
|
+
* @returns OOXML paragraph content with track changes
|
|
117
|
+
*/
|
|
118
|
+
export function renderTrackChanges(mergedRuns, options) {
|
|
119
|
+
const { author, date } = options;
|
|
120
|
+
const parts = [];
|
|
121
|
+
// Group consecutive runs by revision type for cleaner output
|
|
122
|
+
let i = 0;
|
|
123
|
+
while (i < mergedRuns.length) {
|
|
124
|
+
const run = mergedRuns[i];
|
|
125
|
+
const revType = run.revision?.type;
|
|
126
|
+
if (!revType) {
|
|
127
|
+
// Unchanged run
|
|
128
|
+
parts.push(generateUnchangedRun(run));
|
|
129
|
+
i++;
|
|
130
|
+
}
|
|
131
|
+
else if (revType === 'insertion') {
|
|
132
|
+
// Collect consecutive insertions
|
|
133
|
+
const insertionRuns = [];
|
|
134
|
+
while (i < mergedRuns.length && mergedRuns[i]?.revision?.type === 'insertion') {
|
|
135
|
+
insertionRuns.push(mergedRuns[i]);
|
|
136
|
+
i++;
|
|
137
|
+
}
|
|
138
|
+
parts.push(generateInsertion(insertionRuns, author, date));
|
|
139
|
+
}
|
|
140
|
+
else if (revType === 'deletion') {
|
|
141
|
+
// Collect consecutive deletions
|
|
142
|
+
const deletionRuns = [];
|
|
143
|
+
while (i < mergedRuns.length && mergedRuns[i]?.revision?.type === 'deletion') {
|
|
144
|
+
deletionRuns.push(mergedRuns[i]);
|
|
145
|
+
i++;
|
|
146
|
+
}
|
|
147
|
+
parts.push(generateDeletion(deletionRuns, author, date));
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Unknown revision type, treat as unchanged
|
|
151
|
+
parts.push(generateUnchangedRun(run));
|
|
152
|
+
i++;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return parts.join('');
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Wrap content in a paragraph element.
|
|
159
|
+
*/
|
|
160
|
+
export function wrapInParagraph(content, pPr) {
|
|
161
|
+
const pPrXml = pPr ? `<w:pPr>${pPr}</w:pPr>` : '';
|
|
162
|
+
return `<w:p>${pPrXml}${content}</w:p>`;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Generate a complete deleted paragraph.
|
|
166
|
+
*/
|
|
167
|
+
export function generateDeletedParagraph(runs, author, date, pPr) {
|
|
168
|
+
const content = generateDeletion(runs, author, date);
|
|
169
|
+
return wrapInParagraph(content, pPr);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Generate a complete inserted paragraph.
|
|
173
|
+
*/
|
|
174
|
+
export function generateInsertedParagraph(runs, author, date, pPr) {
|
|
175
|
+
const content = generateInsertion(runs, author, date);
|
|
176
|
+
return wrapInParagraph(content, pPr);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=trackChangesRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackChangesRenderer.js","sourceRoot":"","sources":["../../../src/baselines/diffmatch/trackChangesRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML Parser for extracting paragraphs and runs from DOCX document.xml.
|
|
3
|
+
*
|
|
4
|
+
* Uses fast-xml-parser to parse OOXML and extract ParagraphInfo objects
|
|
5
|
+
* suitable for comparison.
|
|
6
|
+
*/
|
|
7
|
+
import type { ParagraphInfo, RunProperties } from '../../shared/ooxml/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Extended ParagraphInfo with original XML for reconstruction.
|
|
10
|
+
*/
|
|
11
|
+
export interface ExtendedParagraphInfo extends ParagraphInfo {
|
|
12
|
+
/** Original paragraph properties XML (w:pPr) for preservation */
|
|
13
|
+
pPrXml?: string;
|
|
14
|
+
/** Original paragraph index in document */
|
|
15
|
+
originalIndex: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Extract paragraphs from document.xml content.
|
|
19
|
+
*
|
|
20
|
+
* @param documentXml - The raw document.xml content
|
|
21
|
+
* @returns Array of ParagraphInfo objects with runs and metadata
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractParagraphs(documentXml: string): ExtendedParagraphInfo[];
|
|
24
|
+
/**
|
|
25
|
+
* Extract run properties from a w:rPr element.
|
|
26
|
+
*/
|
|
27
|
+
export declare function extractRunProperties(rPrElement: unknown): RunProperties | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Get the document body content (everything inside w:body).
|
|
30
|
+
* Useful for document reconstruction.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getBodyContent(documentXml: string): {
|
|
33
|
+
beforeBody: string;
|
|
34
|
+
bodyContent: string;
|
|
35
|
+
afterBody: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Extract sectPr (section properties) from body content if present.
|
|
39
|
+
* sectPr must remain at the end of body.
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractSectPr(bodyContent: string): {
|
|
42
|
+
content: string;
|
|
43
|
+
sectPr: string | null;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=xmlParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmlParser.d.ts","sourceRoot":"","sources":["../../../src/baselines/diffmatch/xmlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAW,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAwBzF;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAwB9E;AA4ED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAkDnF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAoBA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAaA"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML Parser for extracting paragraphs and runs from DOCX document.xml.
|
|
3
|
+
*
|
|
4
|
+
* Uses fast-xml-parser to parse OOXML and extract ParagraphInfo objects
|
|
5
|
+
* suitable for comparison.
|
|
6
|
+
*/
|
|
7
|
+
import { XMLParser, XMLBuilder } from 'fast-xml-parser';
|
|
8
|
+
import { hashParagraph } from './paragraphAlignment.js';
|
|
9
|
+
/** Parser options for fast-xml-parser */
|
|
10
|
+
const PARSER_OPTIONS = {
|
|
11
|
+
ignoreAttributes: false,
|
|
12
|
+
attributeNamePrefix: '@_',
|
|
13
|
+
preserveOrder: true,
|
|
14
|
+
textNodeName: '#text',
|
|
15
|
+
trimValues: false,
|
|
16
|
+
parseTagValue: false,
|
|
17
|
+
parseAttributeValue: false,
|
|
18
|
+
};
|
|
19
|
+
/** Builder options for reconstructing XML */
|
|
20
|
+
const BUILDER_OPTIONS = {
|
|
21
|
+
ignoreAttributes: false,
|
|
22
|
+
attributeNamePrefix: '@_',
|
|
23
|
+
preserveOrder: true,
|
|
24
|
+
textNodeName: '#text',
|
|
25
|
+
format: false,
|
|
26
|
+
suppressEmptyNode: false,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Extract paragraphs from document.xml content.
|
|
30
|
+
*
|
|
31
|
+
* @param documentXml - The raw document.xml content
|
|
32
|
+
* @returns Array of ParagraphInfo objects with runs and metadata
|
|
33
|
+
*/
|
|
34
|
+
export function extractParagraphs(documentXml) {
|
|
35
|
+
const parser = new XMLParser(PARSER_OPTIONS);
|
|
36
|
+
const doc = parser.parse(documentXml);
|
|
37
|
+
const paragraphs = [];
|
|
38
|
+
// Navigate to w:body
|
|
39
|
+
const body = findElement(doc, 'w:body');
|
|
40
|
+
if (!body) {
|
|
41
|
+
return paragraphs;
|
|
42
|
+
}
|
|
43
|
+
// Find all w:p elements in body
|
|
44
|
+
let paragraphIndex = 0;
|
|
45
|
+
for (const child of getChildren(body)) {
|
|
46
|
+
if (getTagName(child) === 'w:p') {
|
|
47
|
+
const para = extractParagraph(child, paragraphIndex);
|
|
48
|
+
paragraphs.push(para);
|
|
49
|
+
paragraphIndex++;
|
|
50
|
+
}
|
|
51
|
+
// Note: We skip w:tbl (tables) for v1 - could add support later
|
|
52
|
+
}
|
|
53
|
+
return paragraphs;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extract a single paragraph from a parsed w:p element.
|
|
57
|
+
*/
|
|
58
|
+
function extractParagraph(pElement, index) {
|
|
59
|
+
const runs = [];
|
|
60
|
+
let charOffset = 0;
|
|
61
|
+
let pPrXml;
|
|
62
|
+
const children = getChildren(pElement);
|
|
63
|
+
for (const child of children) {
|
|
64
|
+
const tagName = getTagName(child);
|
|
65
|
+
if (tagName === 'w:pPr') {
|
|
66
|
+
// Extract paragraph properties as XML for preservation
|
|
67
|
+
pPrXml = elementToXml(child);
|
|
68
|
+
}
|
|
69
|
+
else if (tagName === 'w:r') {
|
|
70
|
+
// Extract run
|
|
71
|
+
const runInfo = extractRun(child, charOffset);
|
|
72
|
+
if (runInfo.text.length > 0) {
|
|
73
|
+
runs.push(runInfo);
|
|
74
|
+
charOffset = runInfo.end;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Skip other elements (bookmarkStart, bookmarkEnd, etc.)
|
|
78
|
+
}
|
|
79
|
+
// Combine all run text
|
|
80
|
+
const text = runs.map(r => r.text).join('');
|
|
81
|
+
return {
|
|
82
|
+
text,
|
|
83
|
+
runs,
|
|
84
|
+
hash: hashParagraph(text),
|
|
85
|
+
pPrXml,
|
|
86
|
+
originalIndex: index,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Extract a single run from a parsed w:r element.
|
|
91
|
+
*/
|
|
92
|
+
function extractRun(rElement, startOffset) {
|
|
93
|
+
let text = '';
|
|
94
|
+
let properties;
|
|
95
|
+
const children = getChildren(rElement);
|
|
96
|
+
for (const child of children) {
|
|
97
|
+
const tagName = getTagName(child);
|
|
98
|
+
if (tagName === 'w:rPr') {
|
|
99
|
+
properties = extractRunProperties(child);
|
|
100
|
+
}
|
|
101
|
+
else if (tagName === 'w:t') {
|
|
102
|
+
// Get text content
|
|
103
|
+
text += getTextContent(child);
|
|
104
|
+
}
|
|
105
|
+
else if (tagName === 'w:tab') {
|
|
106
|
+
// Tab character
|
|
107
|
+
text += '\t';
|
|
108
|
+
}
|
|
109
|
+
else if (tagName === 'w:br') {
|
|
110
|
+
// Break (newline)
|
|
111
|
+
text += '\n';
|
|
112
|
+
}
|
|
113
|
+
// Skip other elements (w:sym, w:drawing, etc.)
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
text,
|
|
117
|
+
start: startOffset,
|
|
118
|
+
end: startOffset + text.length,
|
|
119
|
+
properties,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Extract run properties from a w:rPr element.
|
|
124
|
+
*/
|
|
125
|
+
export function extractRunProperties(rPrElement) {
|
|
126
|
+
const props = {};
|
|
127
|
+
let hasProps = false;
|
|
128
|
+
const children = getChildren(rPrElement);
|
|
129
|
+
for (const child of children) {
|
|
130
|
+
const tagName = getTagName(child);
|
|
131
|
+
if (tagName === 'w:b') {
|
|
132
|
+
props.bold = true;
|
|
133
|
+
hasProps = true;
|
|
134
|
+
}
|
|
135
|
+
else if (tagName === 'w:i') {
|
|
136
|
+
props.italic = true;
|
|
137
|
+
hasProps = true;
|
|
138
|
+
}
|
|
139
|
+
else if (tagName === 'w:u') {
|
|
140
|
+
const val = getAttribute(child, 'w:val');
|
|
141
|
+
props.underline = val || 'single';
|
|
142
|
+
hasProps = true;
|
|
143
|
+
}
|
|
144
|
+
else if (tagName === 'w:strike') {
|
|
145
|
+
props.strikethrough = true;
|
|
146
|
+
hasProps = true;
|
|
147
|
+
}
|
|
148
|
+
else if (tagName === 'w:highlight') {
|
|
149
|
+
const val = getAttribute(child, 'w:val');
|
|
150
|
+
if (val) {
|
|
151
|
+
props.highlight = val;
|
|
152
|
+
hasProps = true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (tagName === 'w:color') {
|
|
156
|
+
const val = getAttribute(child, 'w:val');
|
|
157
|
+
if (val) {
|
|
158
|
+
props.color = val;
|
|
159
|
+
hasProps = true;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else if (tagName === 'w:sz') {
|
|
163
|
+
const val = getAttribute(child, 'w:val');
|
|
164
|
+
if (val) {
|
|
165
|
+
props.fontSize = parseInt(val, 10);
|
|
166
|
+
hasProps = true;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (tagName === 'w:rFonts') {
|
|
170
|
+
const ascii = getAttribute(child, 'w:ascii');
|
|
171
|
+
if (ascii) {
|
|
172
|
+
props.fontFamily = ascii;
|
|
173
|
+
hasProps = true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return hasProps ? props : undefined;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the document body content (everything inside w:body).
|
|
181
|
+
* Useful for document reconstruction.
|
|
182
|
+
*/
|
|
183
|
+
export function getBodyContent(documentXml) {
|
|
184
|
+
// Use regex to extract body content while preserving structure
|
|
185
|
+
const bodyMatch = documentXml.match(/(<w:body[^>]*>)([\s\S]*?)(<\/w:body>)/);
|
|
186
|
+
if (!bodyMatch) {
|
|
187
|
+
return {
|
|
188
|
+
beforeBody: documentXml,
|
|
189
|
+
bodyContent: '',
|
|
190
|
+
afterBody: '',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const bodyStart = documentXml.indexOf(bodyMatch[0]);
|
|
194
|
+
const bodyEnd = bodyStart + bodyMatch[0].length;
|
|
195
|
+
return {
|
|
196
|
+
beforeBody: documentXml.slice(0, bodyStart) + bodyMatch[1],
|
|
197
|
+
bodyContent: bodyMatch[2],
|
|
198
|
+
afterBody: bodyMatch[3] + documentXml.slice(bodyEnd),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Extract sectPr (section properties) from body content if present.
|
|
203
|
+
* sectPr must remain at the end of body.
|
|
204
|
+
*/
|
|
205
|
+
export function extractSectPr(bodyContent) {
|
|
206
|
+
// Find the last w:sectPr in the body
|
|
207
|
+
const sectPrMatch = bodyContent.match(/<w:sectPr[^>]*>[\s\S]*?<\/w:sectPr>\s*$/);
|
|
208
|
+
if (!sectPrMatch) {
|
|
209
|
+
return { content: bodyContent, sectPr: null };
|
|
210
|
+
}
|
|
211
|
+
const sectPrStart = bodyContent.lastIndexOf(sectPrMatch[0]);
|
|
212
|
+
return {
|
|
213
|
+
content: bodyContent.slice(0, sectPrStart),
|
|
214
|
+
sectPr: sectPrMatch[0],
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Helper functions for navigating parsed XML
|
|
218
|
+
/**
|
|
219
|
+
* Find an element by tag name in a parsed structure.
|
|
220
|
+
*/
|
|
221
|
+
function findElement(obj, tagName) {
|
|
222
|
+
if (!obj || typeof obj !== 'object')
|
|
223
|
+
return null;
|
|
224
|
+
if (Array.isArray(obj)) {
|
|
225
|
+
for (const item of obj) {
|
|
226
|
+
const found = findElement(item, tagName);
|
|
227
|
+
if (found)
|
|
228
|
+
return found;
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
const objRecord = obj;
|
|
233
|
+
if (tagName in objRecord) {
|
|
234
|
+
return objRecord[tagName];
|
|
235
|
+
}
|
|
236
|
+
// Search in children
|
|
237
|
+
for (const key of Object.keys(objRecord)) {
|
|
238
|
+
if (key.startsWith('@_') || key === '#text')
|
|
239
|
+
continue;
|
|
240
|
+
const found = findElement(objRecord[key], tagName);
|
|
241
|
+
if (found)
|
|
242
|
+
return found;
|
|
243
|
+
}
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get children of a parsed element.
|
|
248
|
+
* With preserveOrder, children are in an array.
|
|
249
|
+
*/
|
|
250
|
+
function getChildren(element) {
|
|
251
|
+
if (!element || typeof element !== 'object')
|
|
252
|
+
return [];
|
|
253
|
+
if (Array.isArray(element)) {
|
|
254
|
+
return element;
|
|
255
|
+
}
|
|
256
|
+
// With preserveOrder: true, the structure is an array of objects
|
|
257
|
+
// where each object has a single key (the tag name)
|
|
258
|
+
const objRecord = element;
|
|
259
|
+
const result = [];
|
|
260
|
+
for (const key of Object.keys(objRecord)) {
|
|
261
|
+
if (key.startsWith('@_') || key === '#text' || key === ':@')
|
|
262
|
+
continue;
|
|
263
|
+
const value = objRecord[key];
|
|
264
|
+
if (Array.isArray(value)) {
|
|
265
|
+
result.push(...value);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
result.push({ [key]: value });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return result;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get the tag name of a parsed element.
|
|
275
|
+
*/
|
|
276
|
+
function getTagName(element) {
|
|
277
|
+
if (!element || typeof element !== 'object')
|
|
278
|
+
return null;
|
|
279
|
+
if (Array.isArray(element))
|
|
280
|
+
return null;
|
|
281
|
+
const objRecord = element;
|
|
282
|
+
for (const key of Object.keys(objRecord)) {
|
|
283
|
+
if (!key.startsWith('@_') && key !== '#text' && key !== ':@') {
|
|
284
|
+
return key;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Get an attribute value from a parsed element.
|
|
291
|
+
*/
|
|
292
|
+
function getAttribute(element, attrName) {
|
|
293
|
+
if (!element || typeof element !== 'object')
|
|
294
|
+
return null;
|
|
295
|
+
const objRecord = element;
|
|
296
|
+
// Check in :@ for attributes (preserveOrder format)
|
|
297
|
+
const attrs = objRecord[':@'];
|
|
298
|
+
if (attrs) {
|
|
299
|
+
const prefixedName = '@_' + attrName;
|
|
300
|
+
if (prefixedName in attrs) {
|
|
301
|
+
return String(attrs[prefixedName]);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Also check directly on object
|
|
305
|
+
const prefixedName = '@_' + attrName;
|
|
306
|
+
if (prefixedName in objRecord) {
|
|
307
|
+
return String(objRecord[prefixedName]);
|
|
308
|
+
}
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Get text content from an element.
|
|
313
|
+
*/
|
|
314
|
+
function getTextContent(element) {
|
|
315
|
+
if (!element || typeof element !== 'object')
|
|
316
|
+
return '';
|
|
317
|
+
const objRecord = element;
|
|
318
|
+
// With preserveOrder, text is in #text
|
|
319
|
+
if ('#text' in objRecord) {
|
|
320
|
+
return String(objRecord['#text']);
|
|
321
|
+
}
|
|
322
|
+
// Check nested children for text
|
|
323
|
+
for (const key of Object.keys(objRecord)) {
|
|
324
|
+
if (key === '#text') {
|
|
325
|
+
return String(objRecord[key]);
|
|
326
|
+
}
|
|
327
|
+
if (Array.isArray(objRecord[key])) {
|
|
328
|
+
for (const item of objRecord[key]) {
|
|
329
|
+
if (item && typeof item === 'object' && '#text' in item) {
|
|
330
|
+
return String(item['#text']);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return '';
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Convert a parsed element back to XML string.
|
|
339
|
+
*/
|
|
340
|
+
function elementToXml(element) {
|
|
341
|
+
const builder = new XMLBuilder(BUILDER_OPTIONS);
|
|
342
|
+
return builder.build([element]);
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=xmlParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmlParser.js","sourceRoot":"","sources":["../../../src/baselines/diffmatch/xmlParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline A: WmlComparer via Docxodus WASM.
|
|
3
|
+
*
|
|
4
|
+
* Uses the Docxodus npm package's WASM-based comparison in Node.js.
|
|
5
|
+
*
|
|
6
|
+
* Note: WASM support in Node.js requires additional setup:
|
|
7
|
+
* 1. WASM files must be served or loaded from the filesystem
|
|
8
|
+
* 2. May need polyfills for browser APIs used by Blazor WASM
|
|
9
|
+
*
|
|
10
|
+
* This implementation is a placeholder - full WASM integration requires
|
|
11
|
+
* building Docxodus and hosting the WASM files.
|
|
12
|
+
*/
|
|
13
|
+
import type { CompareResult } from '../../index.js';
|
|
14
|
+
export interface WasmOptions {
|
|
15
|
+
/** Author name for revisions. Default: "Comparison" */
|
|
16
|
+
author?: string;
|
|
17
|
+
/** Detail threshold (0.0-1.0, lower = more detailed). Default: 0.15 */
|
|
18
|
+
detailThreshold?: number;
|
|
19
|
+
/** Case-insensitive comparison. Default: false */
|
|
20
|
+
caseInsensitive?: boolean;
|
|
21
|
+
/** Path to WASM files directory. */
|
|
22
|
+
wasmPath?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the WASM runtime.
|
|
26
|
+
*
|
|
27
|
+
* Must be called before using compareWithWasm().
|
|
28
|
+
*
|
|
29
|
+
* @param wasmPath - Path to the directory containing WASM files
|
|
30
|
+
*/
|
|
31
|
+
export declare function initializeWasm(wasmPath: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Check if WASM runtime is initialized.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isWasmInitialized(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Compare two DOCX documents using WASM.
|
|
38
|
+
*
|
|
39
|
+
* @param original - Original document as Buffer
|
|
40
|
+
* @param revised - Revised document as Buffer
|
|
41
|
+
* @param options - WASM options
|
|
42
|
+
* @returns Comparison result with track changes
|
|
43
|
+
*/
|
|
44
|
+
export declare function compareWithWasm(original: Buffer, revised: Buffer, options?: WasmOptions): Promise<CompareResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Check if WASM is available and can be used in this environment.
|
|
47
|
+
*
|
|
48
|
+
* Note: WASM in Node.js has limitations compared to browser environments.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isWasmAvailable(): Promise<boolean>;
|
|
51
|
+
//# sourceMappingURL=DocxodusWasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocxodusWasm.d.ts","sourceRoot":"","sources":["../../../src/baselines/wmlcomparer/DocxodusWasm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,aAAa,CAAC,CA8BxB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAYxD"}
|