@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.
Files changed (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -28
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/atomizer.d.ts +218 -0
  5. package/dist/atomizer.d.ts.map +1 -0
  6. package/dist/atomizer.js +856 -0
  7. package/dist/atomizer.js.map +1 -0
  8. package/dist/baselines/atomizer/atomLcs.d.ts +96 -0
  9. package/dist/baselines/atomizer/atomLcs.d.ts.map +1 -0
  10. package/dist/baselines/atomizer/atomLcs.js +347 -0
  11. package/dist/baselines/atomizer/atomLcs.js.map +1 -0
  12. package/dist/baselines/atomizer/debug.d.ts +41 -0
  13. package/dist/baselines/atomizer/debug.d.ts.map +1 -0
  14. package/dist/baselines/atomizer/debug.js +85 -0
  15. package/dist/baselines/atomizer/debug.js.map +1 -0
  16. package/dist/baselines/atomizer/documentReconstructor.d.ts +64 -0
  17. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -0
  18. package/dist/baselines/atomizer/documentReconstructor.js +939 -0
  19. package/dist/baselines/atomizer/documentReconstructor.js.map +1 -0
  20. package/dist/baselines/atomizer/hierarchicalLcs.d.ts +111 -0
  21. package/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +1 -0
  22. package/dist/baselines/atomizer/hierarchicalLcs.js +469 -0
  23. package/dist/baselines/atomizer/hierarchicalLcs.js.map +1 -0
  24. package/dist/baselines/atomizer/inPlaceModifier.d.ts +183 -0
  25. package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -0
  26. package/dist/baselines/atomizer/inPlaceModifier.js +1600 -0
  27. package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -0
  28. package/dist/baselines/atomizer/numberingIntegration.d.ts +59 -0
  29. package/dist/baselines/atomizer/numberingIntegration.d.ts.map +1 -0
  30. package/dist/baselines/atomizer/numberingIntegration.js +209 -0
  31. package/dist/baselines/atomizer/numberingIntegration.js.map +1 -0
  32. package/dist/baselines/atomizer/pipeline.d.ts +65 -0
  33. package/dist/baselines/atomizer/pipeline.d.ts.map +1 -0
  34. package/dist/baselines/atomizer/pipeline.js +510 -0
  35. package/dist/baselines/atomizer/pipeline.js.map +1 -0
  36. package/dist/baselines/atomizer/premergeRuns.d.ts +26 -0
  37. package/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -0
  38. package/dist/baselines/atomizer/premergeRuns.js +150 -0
  39. package/dist/baselines/atomizer/premergeRuns.js.map +1 -0
  40. package/dist/baselines/atomizer/trackChangesAcceptor.d.ts +63 -0
  41. package/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +1 -0
  42. package/dist/baselines/atomizer/trackChangesAcceptor.js +254 -0
  43. package/dist/baselines/atomizer/trackChangesAcceptor.js.map +1 -0
  44. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +64 -0
  45. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -0
  46. package/dist/baselines/atomizer/trackChangesAcceptorAst.js +586 -0
  47. package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -0
  48. package/dist/baselines/atomizer/xmlToWmlElement.d.ts +65 -0
  49. package/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +1 -0
  50. package/dist/baselines/atomizer/xmlToWmlElement.js +95 -0
  51. package/dist/baselines/atomizer/xmlToWmlElement.js.map +1 -0
  52. package/dist/baselines/diffmatch/documentBuilder.d.ts +44 -0
  53. package/dist/baselines/diffmatch/documentBuilder.d.ts.map +1 -0
  54. package/dist/baselines/diffmatch/documentBuilder.js +227 -0
  55. package/dist/baselines/diffmatch/documentBuilder.js.map +1 -0
  56. package/dist/baselines/diffmatch/paragraphAlignment.d.ts +75 -0
  57. package/dist/baselines/diffmatch/paragraphAlignment.d.ts.map +1 -0
  58. package/dist/baselines/diffmatch/paragraphAlignment.js +206 -0
  59. package/dist/baselines/diffmatch/paragraphAlignment.js.map +1 -0
  60. package/dist/baselines/diffmatch/pipeline.d.ts +33 -0
  61. package/dist/baselines/diffmatch/pipeline.d.ts.map +1 -0
  62. package/dist/baselines/diffmatch/pipeline.js +84 -0
  63. package/dist/baselines/diffmatch/pipeline.js.map +1 -0
  64. package/dist/baselines/diffmatch/runDiff.d.ts +53 -0
  65. package/dist/baselines/diffmatch/runDiff.d.ts.map +1 -0
  66. package/dist/baselines/diffmatch/runDiff.js +253 -0
  67. package/dist/baselines/diffmatch/runDiff.js.map +1 -0
  68. package/dist/baselines/diffmatch/trackChangesRenderer.d.ts +64 -0
  69. package/dist/baselines/diffmatch/trackChangesRenderer.d.ts.map +1 -0
  70. package/dist/baselines/diffmatch/trackChangesRenderer.js +178 -0
  71. package/dist/baselines/diffmatch/trackChangesRenderer.js.map +1 -0
  72. package/dist/baselines/diffmatch/xmlParser.d.ts +45 -0
  73. package/dist/baselines/diffmatch/xmlParser.d.ts.map +1 -0
  74. package/dist/baselines/diffmatch/xmlParser.js +344 -0
  75. package/dist/baselines/diffmatch/xmlParser.js.map +1 -0
  76. package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +51 -0
  77. package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +1 -0
  78. package/dist/baselines/wmlcomparer/DocxodusWasm.js +83 -0
  79. package/dist/baselines/wmlcomparer/DocxodusWasm.js.map +1 -0
  80. package/dist/baselines/wmlcomparer/DotnetCli.d.ts +40 -0
  81. package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -0
  82. package/dist/baselines/wmlcomparer/DotnetCli.js +135 -0
  83. package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -0
  84. package/dist/benchmark/metrics.d.ts +72 -0
  85. package/dist/benchmark/metrics.d.ts.map +1 -0
  86. package/dist/benchmark/metrics.js +45 -0
  87. package/dist/benchmark/metrics.js.map +1 -0
  88. package/dist/benchmark/reporter.d.ts +23 -0
  89. package/dist/benchmark/reporter.d.ts.map +1 -0
  90. package/dist/benchmark/reporter.js +147 -0
  91. package/dist/benchmark/reporter.js.map +1 -0
  92. package/dist/benchmark/runner.d.ts +30 -0
  93. package/dist/benchmark/runner.d.ts.map +1 -0
  94. package/dist/benchmark/runner.js +233 -0
  95. package/dist/benchmark/runner.js.map +1 -0
  96. package/dist/cli/compare-two.d.ts +28 -0
  97. package/dist/cli/compare-two.d.ts.map +1 -0
  98. package/dist/cli/compare-two.js +110 -0
  99. package/dist/cli/compare-two.js.map +1 -0
  100. package/dist/cli/index.d.ts +3 -0
  101. package/dist/cli/index.d.ts.map +1 -0
  102. package/dist/cli/index.js +21 -0
  103. package/dist/cli/index.js.map +1 -0
  104. package/dist/core-types.d.ts +296 -0
  105. package/dist/core-types.d.ts.map +1 -0
  106. package/dist/core-types.js +122 -0
  107. package/dist/core-types.js.map +1 -0
  108. package/dist/footnotes.d.ts +144 -0
  109. package/dist/footnotes.d.ts.map +1 -0
  110. package/dist/footnotes.js +291 -0
  111. package/dist/footnotes.js.map +1 -0
  112. package/dist/format-detection.d.ts +120 -0
  113. package/dist/format-detection.d.ts.map +1 -0
  114. package/dist/format-detection.js +338 -0
  115. package/dist/format-detection.js.map +1 -0
  116. package/dist/index.d.ts +177 -0
  117. package/dist/index.d.ts.map +1 -0
  118. package/dist/index.js +55 -0
  119. package/dist/index.js.map +1 -0
  120. package/dist/integration/output-artifacts.d.ts +6 -0
  121. package/dist/integration/output-artifacts.d.ts.map +1 -0
  122. package/dist/integration/output-artifacts.js +30 -0
  123. package/dist/integration/output-artifacts.js.map +1 -0
  124. package/dist/move-detection.d.ts +211 -0
  125. package/dist/move-detection.d.ts.map +1 -0
  126. package/dist/move-detection.js +391 -0
  127. package/dist/move-detection.js.map +1 -0
  128. package/dist/numbering.d.ts +136 -0
  129. package/dist/numbering.d.ts.map +1 -0
  130. package/dist/numbering.js +446 -0
  131. package/dist/numbering.js.map +1 -0
  132. package/dist/primitives/accept_changes.d.ts +30 -0
  133. package/dist/primitives/accept_changes.d.ts.map +1 -0
  134. package/dist/primitives/accept_changes.js +241 -0
  135. package/dist/primitives/accept_changes.js.map +1 -0
  136. package/dist/primitives/bookmarks.d.ts +12 -0
  137. package/dist/primitives/bookmarks.d.ts.map +1 -0
  138. package/dist/primitives/bookmarks.js +248 -0
  139. package/dist/primitives/bookmarks.js.map +1 -0
  140. package/dist/primitives/comments.d.ts +88 -0
  141. package/dist/primitives/comments.d.ts.map +1 -0
  142. package/dist/primitives/comments.js +703 -0
  143. package/dist/primitives/comments.js.map +1 -0
  144. package/dist/primitives/document.d.ts +168 -0
  145. package/dist/primitives/document.d.ts.map +1 -0
  146. package/dist/primitives/document.js +532 -0
  147. package/dist/primitives/document.js.map +1 -0
  148. package/dist/primitives/document_view.d.ts +93 -0
  149. package/dist/primitives/document_view.d.ts.map +1 -0
  150. package/dist/primitives/document_view.js +722 -0
  151. package/dist/primitives/document_view.js.map +1 -0
  152. package/dist/primitives/dom-helpers.d.ts +94 -0
  153. package/dist/primitives/dom-helpers.d.ts.map +1 -0
  154. package/dist/primitives/dom-helpers.js +219 -0
  155. package/dist/primitives/dom-helpers.js.map +1 -0
  156. package/dist/primitives/errors.d.ts +7 -0
  157. package/dist/primitives/errors.d.ts.map +1 -0
  158. package/dist/primitives/errors.js +10 -0
  159. package/dist/primitives/errors.js.map +1 -0
  160. package/dist/primitives/extract_revisions.d.ts +50 -0
  161. package/dist/primitives/extract_revisions.d.ts.map +1 -0
  162. package/dist/primitives/extract_revisions.js +340 -0
  163. package/dist/primitives/extract_revisions.js.map +1 -0
  164. package/dist/primitives/footnotes.d.ts +37 -0
  165. package/dist/primitives/footnotes.d.ts.map +1 -0
  166. package/dist/primitives/footnotes.js +552 -0
  167. package/dist/primitives/footnotes.js.map +1 -0
  168. package/dist/primitives/formatting_tags.d.ts +30 -0
  169. package/dist/primitives/formatting_tags.d.ts.map +1 -0
  170. package/dist/primitives/formatting_tags.js +217 -0
  171. package/dist/primitives/formatting_tags.js.map +1 -0
  172. package/dist/primitives/index.d.ts +26 -0
  173. package/dist/primitives/index.d.ts.map +1 -0
  174. package/dist/primitives/index.js +26 -0
  175. package/dist/primitives/index.js.map +1 -0
  176. package/dist/primitives/layout.d.ts +53 -0
  177. package/dist/primitives/layout.d.ts.map +1 -0
  178. package/dist/primitives/layout.js +178 -0
  179. package/dist/primitives/layout.js.map +1 -0
  180. package/dist/primitives/list_labels.d.ts +19 -0
  181. package/dist/primitives/list_labels.d.ts.map +1 -0
  182. package/dist/primitives/list_labels.js +57 -0
  183. package/dist/primitives/list_labels.js.map +1 -0
  184. package/dist/primitives/matching.d.ts +17 -0
  185. package/dist/primitives/matching.d.ts.map +1 -0
  186. package/dist/primitives/matching.js +144 -0
  187. package/dist/primitives/matching.js.map +1 -0
  188. package/dist/primitives/merge_runs.d.ts +23 -0
  189. package/dist/primitives/merge_runs.d.ts.map +1 -0
  190. package/dist/primitives/merge_runs.js +195 -0
  191. package/dist/primitives/merge_runs.js.map +1 -0
  192. package/dist/primitives/namespaces.d.ts +90 -0
  193. package/dist/primitives/namespaces.d.ts.map +1 -0
  194. package/dist/primitives/namespaces.js +107 -0
  195. package/dist/primitives/namespaces.js.map +1 -0
  196. package/dist/primitives/numbering.d.ts +27 -0
  197. package/dist/primitives/numbering.d.ts.map +1 -0
  198. package/dist/primitives/numbering.js +182 -0
  199. package/dist/primitives/numbering.js.map +1 -0
  200. package/dist/primitives/prevent_double_elevation.d.ts +18 -0
  201. package/dist/primitives/prevent_double_elevation.d.ts.map +1 -0
  202. package/dist/primitives/prevent_double_elevation.js +190 -0
  203. package/dist/primitives/prevent_double_elevation.js.map +1 -0
  204. package/dist/primitives/reject_changes.d.ts +27 -0
  205. package/dist/primitives/reject_changes.d.ts.map +1 -0
  206. package/dist/primitives/reject_changes.js +371 -0
  207. package/dist/primitives/reject_changes.js.map +1 -0
  208. package/dist/primitives/relationships.d.ts +7 -0
  209. package/dist/primitives/relationships.d.ts.map +1 -0
  210. package/dist/primitives/relationships.js +24 -0
  211. package/dist/primitives/relationships.js.map +1 -0
  212. package/dist/primitives/semantic_tags.d.ts +32 -0
  213. package/dist/primitives/semantic_tags.d.ts.map +1 -0
  214. package/dist/primitives/semantic_tags.js +139 -0
  215. package/dist/primitives/semantic_tags.js.map +1 -0
  216. package/dist/primitives/simplify_redlines.d.ts +19 -0
  217. package/dist/primitives/simplify_redlines.d.ts.map +1 -0
  218. package/dist/primitives/simplify_redlines.js +94 -0
  219. package/dist/primitives/simplify_redlines.js.map +1 -0
  220. package/dist/primitives/styles.d.ts +36 -0
  221. package/dist/primitives/styles.d.ts.map +1 -0
  222. package/dist/primitives/styles.js +190 -0
  223. package/dist/primitives/styles.js.map +1 -0
  224. package/dist/primitives/text.d.ts +27 -0
  225. package/dist/primitives/text.d.ts.map +1 -0
  226. package/dist/primitives/text.js +416 -0
  227. package/dist/primitives/text.js.map +1 -0
  228. package/dist/primitives/validate_document.d.ts +24 -0
  229. package/dist/primitives/validate_document.d.ts.map +1 -0
  230. package/dist/primitives/validate_document.js +147 -0
  231. package/dist/primitives/validate_document.js.map +1 -0
  232. package/dist/primitives/xml.d.ts +5 -0
  233. package/dist/primitives/xml.d.ts.map +1 -0
  234. package/dist/primitives/xml.js +19 -0
  235. package/dist/primitives/xml.js.map +1 -0
  236. package/dist/primitives/zip.d.ts +25 -0
  237. package/dist/primitives/zip.d.ts.map +1 -0
  238. package/dist/primitives/zip.js +78 -0
  239. package/dist/primitives/zip.js.map +1 -0
  240. package/dist/shared/docx/DocxArchive.d.ts +94 -0
  241. package/dist/shared/docx/DocxArchive.d.ts.map +1 -0
  242. package/dist/shared/docx/DocxArchive.js +169 -0
  243. package/dist/shared/docx/DocxArchive.js.map +1 -0
  244. package/dist/shared/ooxml/namespaces.d.ts +149 -0
  245. package/dist/shared/ooxml/namespaces.d.ts.map +1 -0
  246. package/dist/shared/ooxml/namespaces.js +224 -0
  247. package/dist/shared/ooxml/namespaces.js.map +1 -0
  248. package/dist/shared/ooxml/types.d.ts +136 -0
  249. package/dist/shared/ooxml/types.d.ts.map +1 -0
  250. package/dist/shared/ooxml/types.js +7 -0
  251. package/dist/shared/ooxml/types.js.map +1 -0
  252. package/package.json +63 -6
@@ -0,0 +1,586 @@
1
+ /**
2
+ * Track Changes Acceptor/Rejector (AST-based)
3
+ *
4
+ * AST-based utilities to accept or reject all track changes in a document.
5
+ * Replaces the regex-based implementation for better reliability with nested structures.
6
+ */
7
+ import { parseDocumentXml, serializeToXml } from './xmlToWmlElement.js';
8
+ import { removeAllByTagName, unwrapAllByTagName, findAllByTagName, renameElement, insertChildAt, childElements, getLeafText, NODE_TYPE, } from '../../primitives/index.js';
9
+ /** xmldom does not implement parentElement; use parentNode with an Element guard. */
10
+ function parentElement(node) {
11
+ const p = node.parentNode;
12
+ return p && p.nodeType === NODE_TYPE.ELEMENT ? p : undefined;
13
+ }
14
+ function getParagraphPPr(p) {
15
+ return childElements(p).find((c) => c.tagName === 'w:pPr');
16
+ }
17
+ function paragraphHasParaMarker(p, tagName) {
18
+ const pPr = getParagraphPPr(p);
19
+ if (!pPr)
20
+ return false;
21
+ return findAllByTagName(pPr, tagName).length > 0;
22
+ }
23
+ function removeParaMarkers(root) {
24
+ // Remove paragraph-level revision markers (<w:ins/> / <w:del/>) that live under <w:pPr>.
25
+ for (const p of findAllByTagName(root, 'w:p')) {
26
+ const pPr = getParagraphPPr(p);
27
+ if (!pPr)
28
+ continue;
29
+ const markers = [
30
+ ...findAllByTagName(pPr, 'w:ins'),
31
+ ...findAllByTagName(pPr, 'w:del'),
32
+ ];
33
+ for (const m of markers) {
34
+ if (m.parentNode)
35
+ m.parentNode.removeChild(m);
36
+ }
37
+ }
38
+ }
39
+ function findContainingParagraph(node) {
40
+ let current = node;
41
+ while (current) {
42
+ if (current.tagName === 'w:p') {
43
+ return current;
44
+ }
45
+ current = parentElement(current);
46
+ }
47
+ return undefined;
48
+ }
49
+ function findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, direction) {
50
+ const parent = parentElement(paragraph);
51
+ if (!parent) {
52
+ return undefined;
53
+ }
54
+ const siblings = childElements(parent);
55
+ const paragraphIndex = siblings.indexOf(paragraph);
56
+ if (paragraphIndex < 0) {
57
+ return undefined;
58
+ }
59
+ const step = direction === 'previous' ? -1 : 1;
60
+ for (let i = paragraphIndex + step; i >= 0 && i < siblings.length; i += step) {
61
+ const sibling = siblings[i];
62
+ if (sibling?.tagName !== 'w:p') {
63
+ continue;
64
+ }
65
+ if (paragraphsToRemove.has(sibling)) {
66
+ continue;
67
+ }
68
+ return sibling;
69
+ }
70
+ return undefined;
71
+ }
72
+ function paragraphContentStartIndex(paragraph) {
73
+ const children = childElements(paragraph);
74
+ let idx = 0;
75
+ while (idx < children.length && children[idx]?.tagName === 'w:pPr') {
76
+ idx++;
77
+ }
78
+ return idx;
79
+ }
80
+ function moveBookmarkMarker(marker, targetParagraph, position) {
81
+ if (marker.tagName === 'w:bookmarkStart') {
82
+ const markerId = marker.getAttribute('w:id');
83
+ const markerName = marker.getAttribute('w:name');
84
+ for (const existing of findAllByTagName(targetParagraph, 'w:bookmarkStart')) {
85
+ if (markerId && existing.getAttribute('w:id') === markerId) {
86
+ if (marker.parentNode)
87
+ marker.parentNode.removeChild(marker);
88
+ return;
89
+ }
90
+ if (markerName && existing.getAttribute('w:name') === markerName) {
91
+ if (marker.parentNode)
92
+ marker.parentNode.removeChild(marker);
93
+ return;
94
+ }
95
+ }
96
+ }
97
+ if (marker.tagName === 'w:bookmarkEnd') {
98
+ const markerId = marker.getAttribute('w:id');
99
+ if (markerId) {
100
+ for (const existing of findAllByTagName(targetParagraph, 'w:bookmarkEnd')) {
101
+ if (existing.getAttribute('w:id') === markerId) {
102
+ if (marker.parentNode)
103
+ marker.parentNode.removeChild(marker);
104
+ return;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ if (marker.parentNode) {
110
+ marker.parentNode.removeChild(marker);
111
+ }
112
+ if (position === 'start') {
113
+ insertChildAt(targetParagraph, marker, paragraphContentStartIndex(targetParagraph));
114
+ return;
115
+ }
116
+ targetParagraph.appendChild(marker);
117
+ }
118
+ function collectBookmarksById(nodes) {
119
+ const byId = new Map();
120
+ for (const node of nodes) {
121
+ const id = node.getAttribute('w:id');
122
+ if (!id) {
123
+ continue;
124
+ }
125
+ const existing = byId.get(id);
126
+ if (existing) {
127
+ existing.push(node);
128
+ }
129
+ else {
130
+ byId.set(id, [node]);
131
+ }
132
+ }
133
+ return byId;
134
+ }
135
+ function hasCounterpartOutsideRemovedParagraphs(counterpartNodes, paragraphsToRemove, sourceParagraph) {
136
+ if (!counterpartNodes || counterpartNodes.length === 0) {
137
+ return false;
138
+ }
139
+ for (const node of counterpartNodes) {
140
+ if (!node.parentNode) {
141
+ continue;
142
+ }
143
+ const nodeParagraph = findContainingParagraph(node);
144
+ if (!nodeParagraph || nodeParagraph === sourceParagraph) {
145
+ continue;
146
+ }
147
+ if (!paragraphsToRemove.has(nodeParagraph)) {
148
+ return true;
149
+ }
150
+ }
151
+ return false;
152
+ }
153
+ function collectReferencedBookmarkNamesOutsideRemovedParagraphs(root, paragraphsToRemove) {
154
+ const names = new Set();
155
+ const refRegex = /\b(?:PAGEREF|REF)\s+([^\s\\]+)/g;
156
+ for (const instrText of findAllByTagName(root, 'w:instrText')) {
157
+ const paragraph = findContainingParagraph(instrText);
158
+ if (paragraph && paragraphsToRemove.has(paragraph)) {
159
+ continue;
160
+ }
161
+ const text = getLeafText(instrText) ?? '';
162
+ for (const match of text.matchAll(refRegex)) {
163
+ const name = match[1]?.trim();
164
+ if (name) {
165
+ names.add(name);
166
+ }
167
+ }
168
+ }
169
+ return names;
170
+ }
171
+ function getBookmarkNameForId(startsById, id) {
172
+ const starts = startsById.get(id);
173
+ if (!starts)
174
+ return undefined;
175
+ for (const start of starts) {
176
+ const name = start.getAttribute('w:name');
177
+ if (name)
178
+ return name;
179
+ }
180
+ return undefined;
181
+ }
182
+ /**
183
+ * Preserve bookmark markers that span outside paragraphs being removed during Reject All.
184
+ *
185
+ * Inserted paragraphs are removed wholesale. If they contain a bookmark boundary whose
186
+ * counterpart sits in a kept paragraph, dropping that boundary corrupts bookmark pairing.
187
+ * Move those boundary markers into adjacent kept paragraphs before removal.
188
+ */
189
+ function preserveCrossParagraphBookmarksForReject(root, paragraphsToRemove) {
190
+ if (paragraphsToRemove.size === 0) {
191
+ return;
192
+ }
193
+ const startsById = collectBookmarksById(findAllByTagName(root, 'w:bookmarkStart'));
194
+ const endsById = collectBookmarksById(findAllByTagName(root, 'w:bookmarkEnd'));
195
+ const referencedNamesOutsideRemoved = collectReferencedBookmarkNamesOutsideRemovedParagraphs(root, paragraphsToRemove);
196
+ for (const paragraph of paragraphsToRemove) {
197
+ const startTarget = findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'next') ??
198
+ findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'previous');
199
+ const endTarget = findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'previous') ??
200
+ findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'next');
201
+ if (!startTarget && !endTarget) {
202
+ continue;
203
+ }
204
+ for (const start of findAllByTagName(paragraph, 'w:bookmarkStart')) {
205
+ if (!start.parentNode || !startTarget) {
206
+ continue;
207
+ }
208
+ const id = start.getAttribute('w:id');
209
+ if (!id) {
210
+ continue;
211
+ }
212
+ const startName = start.getAttribute('w:name');
213
+ const hasDuplicateStartOutside = hasCounterpartOutsideRemovedParagraphs(startsById.get(id), paragraphsToRemove, paragraph);
214
+ if (hasDuplicateStartOutside) {
215
+ // A surviving start marker with this ID already exists outside removed
216
+ // paragraphs. Moving this marker would create duplicate starts after
217
+ // Reject All.
218
+ continue;
219
+ }
220
+ const hasCounterpartOutside = hasCounterpartOutsideRemovedParagraphs(endsById.get(id), paragraphsToRemove, paragraph);
221
+ const referencedOutside = startName ? referencedNamesOutsideRemoved.has(startName) : false;
222
+ if (!hasCounterpartOutside && !referencedOutside) {
223
+ continue;
224
+ }
225
+ moveBookmarkMarker(start, startTarget, 'start');
226
+ }
227
+ for (const end of findAllByTagName(paragraph, 'w:bookmarkEnd')) {
228
+ if (!end.parentNode || !endTarget) {
229
+ continue;
230
+ }
231
+ const id = end.getAttribute('w:id');
232
+ if (!id) {
233
+ continue;
234
+ }
235
+ const hasDuplicateEndOutside = hasCounterpartOutsideRemovedParagraphs(endsById.get(id), paragraphsToRemove, paragraph);
236
+ if (hasDuplicateEndOutside) {
237
+ // A surviving end marker with this ID already exists outside removed
238
+ // paragraphs. Moving this marker would create duplicate ends after
239
+ // Reject All.
240
+ continue;
241
+ }
242
+ const hasCounterpartOutside = hasCounterpartOutsideRemovedParagraphs(startsById.get(id), paragraphsToRemove, paragraph);
243
+ const pairedName = getBookmarkNameForId(startsById, id);
244
+ const referencedOutside = pairedName ? referencedNamesOutsideRemoved.has(pairedName) : false;
245
+ if (!hasCounterpartOutside && !referencedOutside) {
246
+ continue;
247
+ }
248
+ moveBookmarkMarker(end, endTarget, 'end');
249
+ }
250
+ }
251
+ }
252
+ /**
253
+ * Accept all track changes in document XML (AST-based).
254
+ *
255
+ * - Removes w:del elements entirely (deleted content disappears)
256
+ * - Unwraps w:ins elements (inserted content becomes normal)
257
+ * - Handles w:moveFrom (remove) and w:moveTo (unwrap)
258
+ * - Removes format change tracking elements
259
+ *
260
+ * @param documentXml - The document.xml content with track changes
261
+ * @returns Document XML with all changes accepted
262
+ */
263
+ export function acceptAllChanges(documentXml) {
264
+ const root = parseDocumentXml(documentXml);
265
+ // First, find paragraphs that ONLY contain w:del or w:moveFrom content (no w:ins, no regular w:r)
266
+ // These paragraphs should be removed entirely when accepting
267
+ const paragraphsToRemove = new Set();
268
+ // Paragraph-level deletion markers (Aspose/Word encode deleted paragraphs via <w:pPr><w:rPr><w:del .../></w:rPr>)
269
+ // should remove the paragraph on Accept All.
270
+ for (const p of findAllByTagName(root, 'w:p')) {
271
+ if (paragraphHasParaMarker(p, 'w:del')) {
272
+ paragraphsToRemove.add(p);
273
+ }
274
+ }
275
+ // Check w:del elements
276
+ for (const del of findAllByTagName(root, 'w:del')) {
277
+ // Walk up to find containing w:p
278
+ let p;
279
+ let current = parentElement(del);
280
+ while (current) {
281
+ if (current.tagName === 'w:p') {
282
+ p = current;
283
+ break;
284
+ }
285
+ current = parentElement(current);
286
+ }
287
+ if (p) {
288
+ // Check if this paragraph has any w:ins elements (should keep those)
289
+ const insElements = findAllByTagName(p, 'w:ins');
290
+ if (insElements.length > 0) {
291
+ continue; // Paragraph has inserted content, don't remove it
292
+ }
293
+ // Check if this paragraph has any w:r elements outside of w:del
294
+ // If the only content is inside w:del, we can remove the paragraph
295
+ let hasContentOutsideDel = false;
296
+ for (const child of childElements(p)) {
297
+ if (child.tagName === 'w:r') {
298
+ hasContentOutsideDel = true;
299
+ break;
300
+ }
301
+ if (child.tagName !== 'w:del' && child.tagName !== 'w:pPr' &&
302
+ child.tagName !== 'w:moveFromRangeStart' && child.tagName !== 'w:moveFromRangeEnd') {
303
+ // Check if this non-del child has w:r descendants
304
+ const runsInChild = findAllByTagName(child, 'w:r');
305
+ if (runsInChild.length > 0) {
306
+ hasContentOutsideDel = true;
307
+ break;
308
+ }
309
+ }
310
+ }
311
+ if (!hasContentOutsideDel) {
312
+ paragraphsToRemove.add(p);
313
+ }
314
+ }
315
+ }
316
+ // Also check w:moveFrom elements (moved-away content, also removed when accepting)
317
+ for (const moveFrom of findAllByTagName(root, 'w:moveFrom')) {
318
+ // Walk up to find containing w:p
319
+ let p;
320
+ let current = parentElement(moveFrom);
321
+ while (current) {
322
+ if (current.tagName === 'w:p') {
323
+ p = current;
324
+ break;
325
+ }
326
+ current = parentElement(current);
327
+ }
328
+ if (p && !paragraphsToRemove.has(p)) {
329
+ // Check if this paragraph has any w:ins or w:moveTo elements (should keep those)
330
+ const insElements = findAllByTagName(p, 'w:ins');
331
+ const moveToElements = findAllByTagName(p, 'w:moveTo');
332
+ if (insElements.length > 0 || moveToElements.length > 0) {
333
+ continue;
334
+ }
335
+ // Check if this paragraph has any w:r elements outside of w:del/w:moveFrom
336
+ let hasContentOutsideRemoved = false;
337
+ for (const child of childElements(p)) {
338
+ if (child.tagName === 'w:r') {
339
+ hasContentOutsideRemoved = true;
340
+ break;
341
+ }
342
+ if (child.tagName !== 'w:del' && child.tagName !== 'w:moveFrom' &&
343
+ child.tagName !== 'w:pPr' &&
344
+ child.tagName !== 'w:moveFromRangeStart' && child.tagName !== 'w:moveFromRangeEnd') {
345
+ const runsInChild = findAllByTagName(child, 'w:r');
346
+ if (runsInChild.length > 0) {
347
+ hasContentOutsideRemoved = true;
348
+ break;
349
+ }
350
+ }
351
+ }
352
+ if (!hasContentOutsideRemoved) {
353
+ paragraphsToRemove.add(p);
354
+ }
355
+ }
356
+ }
357
+ // Remove w:del elements entirely (deleted content disappears)
358
+ removeAllByTagName(root, 'w:del');
359
+ // Remove w:moveFrom elements entirely
360
+ removeAllByTagName(root, 'w:moveFrom');
361
+ // Remove move range markers
362
+ removeAllByTagName(root, 'w:moveFromRangeStart');
363
+ removeAllByTagName(root, 'w:moveFromRangeEnd');
364
+ removeAllByTagName(root, 'w:moveToRangeStart');
365
+ removeAllByTagName(root, 'w:moveToRangeEnd');
366
+ // Unwrap w:ins elements (keep content, remove wrapper)
367
+ unwrapAllByTagName(root, 'w:ins');
368
+ // Unwrap w:moveTo elements
369
+ unwrapAllByTagName(root, 'w:moveTo');
370
+ // Remove format change tracking
371
+ removeAllByTagName(root, 'w:rPrChange');
372
+ removeAllByTagName(root, 'w:pPrChange');
373
+ // Strip paragraph-level markers now that changes are accepted.
374
+ removeParaMarkers(root);
375
+ // Remove paragraphs that ONLY had w:del content (now empty after removal)
376
+ for (const p of paragraphsToRemove) {
377
+ if (p.parentNode) {
378
+ p.parentNode.removeChild(p);
379
+ }
380
+ }
381
+ return serializeToXml(root);
382
+ }
383
+ /**
384
+ * Reject all track changes in document XML (AST-based).
385
+ *
386
+ * - Removes w:ins elements entirely (inserted content disappears)
387
+ * - Unwraps w:del elements and converts w:delText to w:t
388
+ * - Handles w:moveFrom (unwrap) and w:moveTo (remove)
389
+ * - Removes format change tracking elements
390
+ *
391
+ * @param documentXml - The document.xml content with track changes
392
+ * @returns Document XML with all changes rejected
393
+ */
394
+ export function rejectAllChanges(documentXml) {
395
+ const root = parseDocumentXml(documentXml);
396
+ // Step 1: Find paragraphs where w:ins is the ONLY substantive content
397
+ // (no w:del, no w:r outside track changes)
398
+ const paragraphsToRemove = new Set();
399
+ // Paragraph-level insertion markers (Aspose/Word encode inserted paragraphs via <w:pPr><w:rPr><w:ins .../></w:rPr>)
400
+ // should remove the paragraph on Reject All.
401
+ for (const p of findAllByTagName(root, 'w:p')) {
402
+ if (paragraphHasParaMarker(p, 'w:ins')) {
403
+ paragraphsToRemove.add(p);
404
+ }
405
+ }
406
+ // Also check w:moveTo elements (moved-to content, also removed when rejecting)
407
+ for (const moveTo of findAllByTagName(root, 'w:moveTo')) {
408
+ // Walk up to find containing w:p
409
+ let p;
410
+ let current = parentElement(moveTo);
411
+ while (current) {
412
+ if (current.tagName === 'w:p') {
413
+ p = current;
414
+ break;
415
+ }
416
+ current = parentElement(current);
417
+ }
418
+ if (p && !paragraphsToRemove.has(p)) {
419
+ // Check if this paragraph has any w:del or w:moveFrom elements (should keep those)
420
+ const dels = findAllByTagName(p, 'w:del');
421
+ const moveFroms = findAllByTagName(p, 'w:moveFrom');
422
+ if (dels.length > 0 || moveFroms.length > 0) {
423
+ continue;
424
+ }
425
+ // Check if this paragraph has any w:r elements outside of w:ins/w:moveTo
426
+ let hasContentOutsideRemoved = false;
427
+ for (const child of childElements(p)) {
428
+ if (child.tagName === 'w:r') {
429
+ hasContentOutsideRemoved = true;
430
+ break;
431
+ }
432
+ if (child.tagName !== 'w:ins' && child.tagName !== 'w:moveTo' &&
433
+ child.tagName !== 'w:pPr' &&
434
+ child.tagName !== 'w:moveToRangeStart' && child.tagName !== 'w:moveToRangeEnd') {
435
+ const runsInChild = findAllByTagName(child, 'w:r');
436
+ if (runsInChild.length > 0) {
437
+ hasContentOutsideRemoved = true;
438
+ break;
439
+ }
440
+ }
441
+ }
442
+ if (!hasContentOutsideRemoved) {
443
+ paragraphsToRemove.add(p);
444
+ }
445
+ }
446
+ }
447
+ preserveCrossParagraphBookmarksForReject(root, paragraphsToRemove);
448
+ // Step 2: Remove w:ins elements entirely (inserted content disappears)
449
+ removeAllByTagName(root, 'w:ins');
450
+ // Step 3: Remove paragraphs that ONLY had w:ins content
451
+ for (const p of paragraphsToRemove) {
452
+ if (p.parentNode) {
453
+ p.parentNode.removeChild(p);
454
+ }
455
+ }
456
+ // Remove w:moveTo elements entirely
457
+ removeAllByTagName(root, 'w:moveTo');
458
+ // Remove move range markers
459
+ removeAllByTagName(root, 'w:moveFromRangeStart');
460
+ removeAllByTagName(root, 'w:moveFromRangeEnd');
461
+ removeAllByTagName(root, 'w:moveToRangeStart');
462
+ removeAllByTagName(root, 'w:moveToRangeEnd');
463
+ // Unwrap w:del elements (keep content, remove wrapper)
464
+ unwrapAllByTagName(root, 'w:del');
465
+ // Unwrap w:moveFrom elements
466
+ unwrapAllByTagName(root, 'w:moveFrom');
467
+ // Convert w:delText to w:t
468
+ for (const delText of findAllByTagName(root, 'w:delText')) {
469
+ renameElement(delText, 'w:t');
470
+ }
471
+ // Remove format change tracking
472
+ removeAllByTagName(root, 'w:rPrChange');
473
+ removeAllByTagName(root, 'w:pPrChange');
474
+ // Strip paragraph-level markers now that changes are rejected.
475
+ removeParaMarkers(root);
476
+ return serializeToXml(root);
477
+ }
478
+ /**
479
+ * Extract plain text content from document XML (AST-based).
480
+ *
481
+ * @param documentXml - The document.xml content
482
+ * @returns Plain text content
483
+ */
484
+ export function extractTextContent(documentXml) {
485
+ const root = parseDocumentXml(documentXml);
486
+ const texts = [];
487
+ // Extract text from w:t elements
488
+ for (const t of findAllByTagName(root, 'w:t')) {
489
+ const text = getLeafText(t) ?? '';
490
+ if (text) {
491
+ texts.push(text);
492
+ }
493
+ }
494
+ // Also extract from w:delText (for rejected changes before conversion)
495
+ for (const delText of findAllByTagName(root, 'w:delText')) {
496
+ const text = getLeafText(delText) ?? '';
497
+ if (text) {
498
+ texts.push(text);
499
+ }
500
+ }
501
+ return texts.join('');
502
+ }
503
+ /**
504
+ * Extract text in document order, respecting paragraph breaks (AST-based).
505
+ */
506
+ export function extractTextWithParagraphs(documentXml) {
507
+ const root = parseDocumentXml(documentXml);
508
+ const paragraphs = [];
509
+ // Find all paragraphs
510
+ for (const p of findAllByTagName(root, 'w:p')) {
511
+ const texts = [];
512
+ // Extract text from w:t elements within this paragraph
513
+ for (const t of findAllByTagName(p, 'w:t')) {
514
+ const text = getLeafText(t) ?? '';
515
+ if (text) {
516
+ texts.push(text);
517
+ }
518
+ }
519
+ // Also check w:delText
520
+ for (const delText of findAllByTagName(p, 'w:delText')) {
521
+ const text = getLeafText(delText) ?? '';
522
+ if (text) {
523
+ texts.push(text);
524
+ }
525
+ }
526
+ paragraphs.push(texts.join(''));
527
+ }
528
+ return paragraphs.join('\n');
529
+ }
530
+ /**
531
+ * Normalize text for comparison (handles whitespace differences).
532
+ *
533
+ * Performs the following normalization:
534
+ * - Convert CRLF and CR to LF
535
+ * - Convert tabs to spaces
536
+ * - Collapse multiple spaces to single space
537
+ * - Strip trailing spaces from each line
538
+ * - Collapse multiple newlines to single newline
539
+ * - Trim leading/trailing whitespace
540
+ */
541
+ export function normalizeText(text) {
542
+ return text
543
+ .replace(/\r\n/g, '\n')
544
+ .replace(/\r/g, '\n')
545
+ .replace(/\t/g, ' ')
546
+ .replace(/ +/g, ' ')
547
+ .replace(/ \n/g, '\n') // Strip trailing spaces from lines
548
+ .replace(/\n /g, '\n') // Strip leading spaces from lines
549
+ .replace(/\n+/g, '\n')
550
+ .trim();
551
+ }
552
+ /**
553
+ * Compare two texts and return detailed differences.
554
+ */
555
+ export function compareTexts(expected, actual) {
556
+ const normalizedExpected = normalizeText(expected);
557
+ const normalizedActual = normalizeText(actual);
558
+ const differences = [];
559
+ if (expected !== actual) {
560
+ // Find first difference
561
+ let firstDiff = 0;
562
+ while (firstDiff < expected.length && firstDiff < actual.length) {
563
+ if (expected[firstDiff] !== actual[firstDiff]) {
564
+ break;
565
+ }
566
+ firstDiff++;
567
+ }
568
+ if (firstDiff < expected.length || firstDiff < actual.length) {
569
+ const context = 50;
570
+ const start = Math.max(0, firstDiff - context);
571
+ const expectedSnippet = expected.slice(start, firstDiff + context);
572
+ const actualSnippet = actual.slice(start, firstDiff + context);
573
+ differences.push(`First difference at position ${firstDiff}:`);
574
+ differences.push(` Expected: "...${expectedSnippet}..."`);
575
+ differences.push(` Actual: "...${actualSnippet}..."`);
576
+ }
577
+ }
578
+ return {
579
+ identical: expected === actual,
580
+ normalizedIdentical: normalizedExpected === normalizedActual,
581
+ expectedLength: expected.length,
582
+ actualLength: actual.length,
583
+ differences,
584
+ };
585
+ }
586
+ //# sourceMappingURL=trackChangesAcceptorAst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackChangesAcceptorAst.js","sourceRoot":"","sources":["../../../src/baselines/atomizer/trackChangesAcceptorAst.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * XML Parsing and Serialization
3
+ *
4
+ * Parses document.xml into a DOM tree using @xmldom/xmldom.
5
+ * Replaces the former fast-xml-parser + WmlElement POJO approach.
6
+ */
7
+ /**
8
+ * Parse document.xml string into a DOM Element tree.
9
+ *
10
+ * @param xml - The raw document.xml content
11
+ * @returns Root element (the Document's documentElement)
12
+ */
13
+ export declare function parseDocumentXml(xml: string): Element;
14
+ /**
15
+ * Find the w:body element in the document tree.
16
+ *
17
+ * @param root - The document root element
18
+ * @returns The w:body element, or undefined if not found
19
+ */
20
+ export declare function findBody(root: Element): Element | undefined;
21
+ /**
22
+ * Find the w:document element in the document tree.
23
+ *
24
+ * @param root - The document root element
25
+ * @returns The w:document element, or undefined if not found
26
+ */
27
+ export declare function findDocument(root: Element): Element | undefined;
28
+ /**
29
+ * Find an element by tag name in the tree.
30
+ *
31
+ * @param node - The node to search from
32
+ * @param tagName - The tag name to find
33
+ * @returns The found element, or undefined
34
+ */
35
+ export declare function findElement(node: Element, tagName: string): Element | undefined;
36
+ /**
37
+ * Find all elements with a specific tag name.
38
+ *
39
+ * @param node - The node to search from
40
+ * @param tagName - The tag name to find
41
+ * @returns Array of matching elements
42
+ */
43
+ export declare function findAllElements(node: Element, tagName: string): Element[];
44
+ /**
45
+ * Serialize a DOM Element back to XML string.
46
+ *
47
+ * @param element - The element to serialize
48
+ * @returns XML string
49
+ */
50
+ export declare function serializeToXml(element: Element | Document): string;
51
+ /**
52
+ * Clone a DOM Element tree (deep copy).
53
+ *
54
+ * @param element - The element to clone
55
+ * @returns A deep copy of the element
56
+ */
57
+ export declare function cloneElement(element: Element): Element;
58
+ /**
59
+ * Backfill parent references — NO-OP for DOM Elements.
60
+ *
61
+ * DOM Elements have native parentNode/parentElement. This function exists
62
+ * only to ease migration; callers should remove it over time.
63
+ */
64
+ export declare function backfillParentReferences(_node: Element, _parent?: Element): void;
65
+ //# sourceMappingURL=xmlToWmlElement.d.ts.map