docxmlater 10.4.0 → 11.0.4

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 (699) hide show
  1. package/README.md +3 -3
  2. package/dist/constants/legacyCompatFlags.d.ts +1 -1
  3. package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
  4. package/dist/constants/legacyCompatFlags.js.map +1 -1
  5. package/dist/core/Document.d.ts +75 -67
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +618 -414
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +11 -10
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +19 -19
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentEvents.d.ts +39 -0
  14. package/dist/core/DocumentEvents.d.ts.map +1 -0
  15. package/dist/core/DocumentEvents.js +51 -0
  16. package/dist/core/DocumentEvents.js.map +1 -0
  17. package/dist/core/DocumentGenerator.d.ts +11 -11
  18. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  19. package/dist/core/DocumentGenerator.js +72 -52
  20. package/dist/core/DocumentGenerator.js.map +1 -1
  21. package/dist/core/DocumentParser.d.ts +15 -15
  22. package/dist/core/DocumentParser.d.ts.map +1 -1
  23. package/dist/core/DocumentParser.js +2100 -1076
  24. package/dist/core/DocumentParser.js.map +1 -1
  25. package/dist/core/DocumentValidator.d.ts +3 -3
  26. package/dist/core/DocumentValidator.d.ts.map +1 -1
  27. package/dist/core/DocumentValidator.js +31 -31
  28. package/dist/core/DocumentValidator.js.map +1 -1
  29. package/dist/core/ElementRegistry.d.ts +22 -0
  30. package/dist/core/ElementRegistry.d.ts.map +1 -0
  31. package/dist/core/ElementRegistry.js +27 -0
  32. package/dist/core/ElementRegistry.js.map +1 -0
  33. package/dist/core/Relationship.js +4 -4
  34. package/dist/core/Relationship.js.map +1 -1
  35. package/dist/core/RelationshipManager.d.ts +1 -1
  36. package/dist/core/RelationshipManager.d.ts.map +1 -1
  37. package/dist/core/RelationshipManager.js +32 -32
  38. package/dist/core/RelationshipManager.js.map +1 -1
  39. package/dist/elements/AlternateContent.d.ts +1 -1
  40. package/dist/elements/AlternateContent.d.ts.map +1 -1
  41. package/dist/elements/AlternateContent.js.map +1 -1
  42. package/dist/elements/Bookmark.d.ts +6 -1
  43. package/dist/elements/Bookmark.d.ts.map +1 -1
  44. package/dist/elements/Bookmark.js +19 -3
  45. package/dist/elements/Bookmark.js.map +1 -1
  46. package/dist/elements/BookmarkManager.d.ts +1 -1
  47. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  48. package/dist/elements/BookmarkManager.js +7 -7
  49. package/dist/elements/BookmarkManager.js.map +1 -1
  50. package/dist/elements/Comment.d.ts +2 -2
  51. package/dist/elements/Comment.d.ts.map +1 -1
  52. package/dist/elements/Comment.js +4 -4
  53. package/dist/elements/Comment.js.map +1 -1
  54. package/dist/elements/CommentManager.d.ts +2 -2
  55. package/dist/elements/CommentManager.d.ts.map +1 -1
  56. package/dist/elements/CommentManager.js +9 -9
  57. package/dist/elements/CommentManager.js.map +1 -1
  58. package/dist/elements/CommonTypes.d.ts +9 -4
  59. package/dist/elements/CommonTypes.d.ts.map +1 -1
  60. package/dist/elements/CommonTypes.js +1 -0
  61. package/dist/elements/CommonTypes.js.map +1 -1
  62. package/dist/elements/CustomXml.d.ts +1 -1
  63. package/dist/elements/CustomXml.d.ts.map +1 -1
  64. package/dist/elements/CustomXml.js.map +1 -1
  65. package/dist/elements/Endnote.d.ts +2 -2
  66. package/dist/elements/Endnote.d.ts.map +1 -1
  67. package/dist/elements/Endnote.js +9 -9
  68. package/dist/elements/Endnote.js.map +1 -1
  69. package/dist/elements/EndnoteManager.d.ts +1 -1
  70. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  71. package/dist/elements/EndnoteManager.js +11 -11
  72. package/dist/elements/EndnoteManager.js.map +1 -1
  73. package/dist/elements/Field.d.ts +9 -5
  74. package/dist/elements/Field.d.ts.map +1 -1
  75. package/dist/elements/Field.js +21 -9
  76. package/dist/elements/Field.js.map +1 -1
  77. package/dist/elements/FieldHelpers.d.ts +1 -1
  78. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  79. package/dist/elements/FieldHelpers.js +10 -10
  80. package/dist/elements/FieldHelpers.js.map +1 -1
  81. package/dist/elements/Footer.d.ts +3 -3
  82. package/dist/elements/Footer.d.ts.map +1 -1
  83. package/dist/elements/Footer.js +5 -5
  84. package/dist/elements/Footer.js.map +1 -1
  85. package/dist/elements/Footnote.d.ts +2 -2
  86. package/dist/elements/Footnote.d.ts.map +1 -1
  87. package/dist/elements/Footnote.js +9 -9
  88. package/dist/elements/Footnote.js.map +1 -1
  89. package/dist/elements/FootnoteManager.d.ts +1 -1
  90. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  91. package/dist/elements/FootnoteManager.js +11 -11
  92. package/dist/elements/FootnoteManager.js.map +1 -1
  93. package/dist/elements/Header.d.ts +3 -3
  94. package/dist/elements/Header.d.ts.map +1 -1
  95. package/dist/elements/Header.js +5 -5
  96. package/dist/elements/Header.js.map +1 -1
  97. package/dist/elements/HeaderFooterManager.d.ts +2 -2
  98. package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
  99. package/dist/elements/HeaderFooterManager.js.map +1 -1
  100. package/dist/elements/Hyperlink.d.ts +5 -5
  101. package/dist/elements/Hyperlink.d.ts.map +1 -1
  102. package/dist/elements/Hyperlink.js +29 -29
  103. package/dist/elements/Hyperlink.js.map +1 -1
  104. package/dist/elements/Image.d.ts +1 -1
  105. package/dist/elements/Image.d.ts.map +1 -1
  106. package/dist/elements/Image.js +67 -67
  107. package/dist/elements/Image.js.map +1 -1
  108. package/dist/elements/ImageManager.d.ts +1 -1
  109. package/dist/elements/ImageManager.d.ts.map +1 -1
  110. package/dist/elements/ImageManager.js +4 -4
  111. package/dist/elements/ImageManager.js.map +1 -1
  112. package/dist/elements/ImageRun.d.ts +3 -3
  113. package/dist/elements/ImageRun.d.ts.map +1 -1
  114. package/dist/elements/ImageRun.js +2 -2
  115. package/dist/elements/ImageRun.js.map +1 -1
  116. package/dist/elements/MathElement.d.ts +1 -1
  117. package/dist/elements/MathElement.d.ts.map +1 -1
  118. package/dist/elements/MathElement.js.map +1 -1
  119. package/dist/elements/Paragraph.d.ts +34 -19
  120. package/dist/elements/Paragraph.d.ts.map +1 -1
  121. package/dist/elements/Paragraph.js +286 -231
  122. package/dist/elements/Paragraph.js.map +1 -1
  123. package/dist/elements/PreservedElement.d.ts +1 -1
  124. package/dist/elements/PreservedElement.d.ts.map +1 -1
  125. package/dist/elements/PreservedElement.js.map +1 -1
  126. package/dist/elements/PropertyChangeTypes.d.ts +2 -2
  127. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  128. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  129. package/dist/elements/RangeMarker.d.ts +14 -1
  130. package/dist/elements/RangeMarker.d.ts.map +1 -1
  131. package/dist/elements/RangeMarker.js +46 -8
  132. package/dist/elements/RangeMarker.js.map +1 -1
  133. package/dist/elements/RegisteredBodyElement.d.ts +15 -0
  134. package/dist/elements/RegisteredBodyElement.d.ts.map +1 -0
  135. package/dist/elements/RegisteredBodyElement.js +44 -0
  136. package/dist/elements/RegisteredBodyElement.js.map +1 -0
  137. package/dist/elements/Revision.d.ts +8 -8
  138. package/dist/elements/Revision.d.ts.map +1 -1
  139. package/dist/elements/Revision.js +12 -12
  140. package/dist/elements/Revision.js.map +1 -1
  141. package/dist/elements/RevisionContent.d.ts +3 -3
  142. package/dist/elements/RevisionContent.d.ts.map +1 -1
  143. package/dist/elements/RevisionContent.js.map +1 -1
  144. package/dist/elements/RevisionManager.d.ts +2 -2
  145. package/dist/elements/RevisionManager.d.ts.map +1 -1
  146. package/dist/elements/RevisionManager.js +2 -2
  147. package/dist/elements/RevisionManager.js.map +1 -1
  148. package/dist/elements/Run.d.ts +16 -10
  149. package/dist/elements/Run.d.ts.map +1 -1
  150. package/dist/elements/Run.js +199 -173
  151. package/dist/elements/Run.js.map +1 -1
  152. package/dist/elements/Section.d.ts +4 -2
  153. package/dist/elements/Section.d.ts.map +1 -1
  154. package/dist/elements/Section.js +152 -145
  155. package/dist/elements/Section.js.map +1 -1
  156. package/dist/elements/Shape.d.ts +3 -3
  157. package/dist/elements/Shape.d.ts.map +1 -1
  158. package/dist/elements/Shape.js +12 -12
  159. package/dist/elements/Shape.js.map +1 -1
  160. package/dist/elements/StructuredDocumentTag.d.ts +3 -3
  161. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  162. package/dist/elements/StructuredDocumentTag.js +39 -39
  163. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  164. package/dist/elements/Table.d.ts +16 -10
  165. package/dist/elements/Table.d.ts.map +1 -1
  166. package/dist/elements/Table.js +118 -89
  167. package/dist/elements/Table.js.map +1 -1
  168. package/dist/elements/TableCell.d.ts +11 -11
  169. package/dist/elements/TableCell.d.ts.map +1 -1
  170. package/dist/elements/TableCell.js +108 -78
  171. package/dist/elements/TableCell.js.map +1 -1
  172. package/dist/elements/TableGridChange.d.ts +1 -1
  173. package/dist/elements/TableGridChange.d.ts.map +1 -1
  174. package/dist/elements/TableGridChange.js +3 -3
  175. package/dist/elements/TableGridChange.js.map +1 -1
  176. package/dist/elements/TableOfContents.d.ts +1 -1
  177. package/dist/elements/TableOfContents.d.ts.map +1 -1
  178. package/dist/elements/TableOfContents.js +2 -2
  179. package/dist/elements/TableOfContents.js.map +1 -1
  180. package/dist/elements/TableOfContentsElement.d.ts +2 -2
  181. package/dist/elements/TableOfContentsElement.d.ts.map +1 -1
  182. package/dist/elements/TableOfContentsElement.js +5 -5
  183. package/dist/elements/TableOfContentsElement.js.map +1 -1
  184. package/dist/elements/TableRow.d.ts +18 -7
  185. package/dist/elements/TableRow.d.ts.map +1 -1
  186. package/dist/elements/TableRow.js +127 -74
  187. package/dist/elements/TableRow.js.map +1 -1
  188. package/dist/elements/TextBox.d.ts +4 -4
  189. package/dist/elements/TextBox.d.ts.map +1 -1
  190. package/dist/elements/TextBox.js +6 -6
  191. package/dist/elements/TextBox.js.map +1 -1
  192. package/dist/esm/constants/legacyCompatFlags.js +97 -0
  193. package/dist/esm/constants/legacyCompatFlags.js.map +1 -0
  194. package/dist/esm/constants/limits.js +36 -0
  195. package/dist/esm/constants/limits.js.map +1 -0
  196. package/dist/esm/core/Document.js +8498 -0
  197. package/dist/esm/core/Document.js.map +1 -0
  198. package/dist/esm/core/DocumentContent.js +190 -0
  199. package/dist/esm/core/DocumentContent.js.map +1 -0
  200. package/dist/esm/core/DocumentEvents.js +47 -0
  201. package/dist/esm/core/DocumentEvents.js.map +1 -0
  202. package/dist/esm/core/DocumentGenerator.js +764 -0
  203. package/dist/esm/core/DocumentGenerator.js.map +1 -0
  204. package/dist/esm/core/DocumentIdManager.js +67 -0
  205. package/dist/esm/core/DocumentIdManager.js.map +1 -0
  206. package/dist/esm/core/DocumentParser.js +8760 -0
  207. package/dist/esm/core/DocumentParser.js.map +1 -0
  208. package/dist/esm/core/DocumentValidator.js +222 -0
  209. package/dist/esm/core/DocumentValidator.js.map +1 -0
  210. package/dist/esm/core/ElementRegistry.js +24 -0
  211. package/dist/esm/core/ElementRegistry.js.map +1 -0
  212. package/dist/esm/core/Relationship.js +177 -0
  213. package/dist/esm/core/Relationship.js.map +1 -0
  214. package/dist/esm/core/RelationshipManager.js +202 -0
  215. package/dist/esm/core/RelationshipManager.js.map +1 -0
  216. package/dist/esm/elements/AlternateContent.js +19 -0
  217. package/dist/esm/elements/AlternateContent.js.map +1 -0
  218. package/dist/esm/elements/Bookmark.js +115 -0
  219. package/dist/esm/elements/Bookmark.js.map +1 -0
  220. package/dist/esm/elements/BookmarkManager.js +99 -0
  221. package/dist/esm/elements/BookmarkManager.js.map +1 -0
  222. package/dist/esm/elements/Comment.js +181 -0
  223. package/dist/esm/elements/Comment.js.map +1 -0
  224. package/dist/esm/elements/CommentManager.js +233 -0
  225. package/dist/esm/elements/CommentManager.js.map +1 -0
  226. package/dist/esm/elements/CommonTypes.js +106 -0
  227. package/dist/esm/elements/CommonTypes.js.map +1 -0
  228. package/dist/esm/elements/CustomXml.js +19 -0
  229. package/dist/esm/elements/CustomXml.js.map +1 -0
  230. package/dist/esm/elements/Endnote.js +107 -0
  231. package/dist/esm/elements/Endnote.js.map +1 -0
  232. package/dist/esm/elements/EndnoteManager.js +119 -0
  233. package/dist/esm/elements/EndnoteManager.js.map +1 -0
  234. package/dist/esm/elements/Field.js +856 -0
  235. package/dist/esm/elements/Field.js.map +1 -0
  236. package/dist/esm/elements/FieldHelpers.js +134 -0
  237. package/dist/esm/elements/FieldHelpers.js.map +1 -0
  238. package/dist/esm/elements/FontManager.js +158 -0
  239. package/dist/esm/elements/FontManager.js.map +1 -0
  240. package/dist/esm/elements/Footer.js +141 -0
  241. package/dist/esm/elements/Footer.js.map +1 -0
  242. package/dist/esm/elements/Footnote.js +107 -0
  243. package/dist/esm/elements/Footnote.js.map +1 -0
  244. package/dist/esm/elements/FootnoteManager.js +119 -0
  245. package/dist/esm/elements/FootnoteManager.js.map +1 -0
  246. package/dist/esm/elements/Header.js +141 -0
  247. package/dist/esm/elements/Header.js.map +1 -0
  248. package/dist/esm/elements/HeaderFooterManager.js +87 -0
  249. package/dist/esm/elements/HeaderFooterManager.js.map +1 -0
  250. package/dist/esm/elements/Hyperlink.js +586 -0
  251. package/dist/esm/elements/Hyperlink.js.map +1 -0
  252. package/dist/esm/elements/Image.js +1288 -0
  253. package/dist/esm/elements/Image.js.map +1 -0
  254. package/dist/esm/elements/ImageManager.js +223 -0
  255. package/dist/esm/elements/ImageManager.js.map +1 -0
  256. package/dist/esm/elements/ImageRun.js +29 -0
  257. package/dist/esm/elements/ImageRun.js.map +1 -0
  258. package/dist/esm/elements/MathElement.js +37 -0
  259. package/dist/esm/elements/MathElement.js.map +1 -0
  260. package/dist/esm/elements/Paragraph.js +2308 -0
  261. package/dist/esm/elements/Paragraph.js.map +1 -0
  262. package/dist/esm/elements/PreservedElement.js +29 -0
  263. package/dist/esm/elements/PreservedElement.js.map +1 -0
  264. package/dist/esm/elements/PropertyChangeTypes.js +53 -0
  265. package/dist/esm/elements/PropertyChangeTypes.js.map +1 -0
  266. package/dist/esm/elements/RangeMarker.js +219 -0
  267. package/dist/esm/elements/RangeMarker.js.map +1 -0
  268. package/dist/esm/elements/RegisteredBodyElement.js +40 -0
  269. package/dist/esm/elements/RegisteredBodyElement.js.map +1 -0
  270. package/dist/esm/elements/Revision.js +498 -0
  271. package/dist/esm/elements/Revision.js.map +1 -0
  272. package/dist/esm/elements/RevisionContent.js +18 -0
  273. package/dist/esm/elements/RevisionContent.js.map +1 -0
  274. package/dist/esm/elements/RevisionManager.js +486 -0
  275. package/dist/esm/elements/RevisionManager.js.map +1 -0
  276. package/dist/esm/elements/Run.js +1465 -0
  277. package/dist/esm/elements/Run.js.map +1 -0
  278. package/dist/esm/elements/Section.js +978 -0
  279. package/dist/esm/elements/Section.js.map +1 -0
  280. package/dist/esm/elements/Shape.js +493 -0
  281. package/dist/esm/elements/Shape.js.map +1 -0
  282. package/dist/esm/elements/StructuredDocumentTag.js +471 -0
  283. package/dist/esm/elements/StructuredDocumentTag.js.map +1 -0
  284. package/dist/esm/elements/Table.js +1456 -0
  285. package/dist/esm/elements/Table.js.map +1 -0
  286. package/dist/esm/elements/TableCell.js +835 -0
  287. package/dist/esm/elements/TableCell.js.map +1 -0
  288. package/dist/esm/elements/TableGridChange.js +52 -0
  289. package/dist/esm/elements/TableGridChange.js.map +1 -0
  290. package/dist/esm/elements/TableOfContents.js +389 -0
  291. package/dist/esm/elements/TableOfContents.js.map +1 -0
  292. package/dist/esm/elements/TableOfContentsElement.js +29 -0
  293. package/dist/esm/elements/TableOfContentsElement.js.map +1 -0
  294. package/dist/esm/elements/TableRow.js +555 -0
  295. package/dist/esm/elements/TableRow.js.map +1 -0
  296. package/dist/esm/elements/TextBox.js +459 -0
  297. package/dist/esm/elements/TextBox.js.map +1 -0
  298. package/dist/esm/formatting/AbstractNumbering.js +325 -0
  299. package/dist/esm/formatting/AbstractNumbering.js.map +1 -0
  300. package/dist/esm/formatting/NumberingInstance.js +150 -0
  301. package/dist/esm/formatting/NumberingInstance.js.map +1 -0
  302. package/dist/esm/formatting/NumberingLevel.js +608 -0
  303. package/dist/esm/formatting/NumberingLevel.js.map +1 -0
  304. package/dist/esm/formatting/NumberingManager.js +423 -0
  305. package/dist/esm/formatting/NumberingManager.js.map +1 -0
  306. package/dist/esm/formatting/Style.js +1151 -0
  307. package/dist/esm/formatting/Style.js.map +1 -0
  308. package/dist/esm/formatting/StylesManager.js +557 -0
  309. package/dist/esm/formatting/StylesManager.js.map +1 -0
  310. package/dist/esm/helpers/CleanupHelper.js +350 -0
  311. package/dist/esm/helpers/CleanupHelper.js.map +1 -0
  312. package/dist/esm/images/ImageOptimizer.js +161 -0
  313. package/dist/esm/images/ImageOptimizer.js.map +1 -0
  314. package/dist/esm/index.js +75 -0
  315. package/dist/esm/index.js.map +1 -0
  316. package/dist/esm/internal.js +16 -0
  317. package/dist/esm/internal.js.map +1 -0
  318. package/dist/esm/managers/DrawingManager.js +163 -0
  319. package/dist/esm/managers/DrawingManager.js.map +1 -0
  320. package/dist/esm/package.json +3 -0
  321. package/dist/esm/processors/ChangelogGenerator.js +970 -0
  322. package/dist/esm/processors/ChangelogGenerator.js.map +1 -0
  323. package/dist/esm/processors/CompatibilityUpgrader.js +130 -0
  324. package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -0
  325. package/dist/esm/processors/InMemoryRevisionAcceptor.js +530 -0
  326. package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -0
  327. package/dist/esm/processors/MoveOperationHelper.js +57 -0
  328. package/dist/esm/processors/MoveOperationHelper.js.map +1 -0
  329. package/dist/esm/processors/RevisionAwareProcessor.js +232 -0
  330. package/dist/esm/processors/RevisionAwareProcessor.js.map +1 -0
  331. package/dist/esm/processors/RevisionWalker.js +278 -0
  332. package/dist/esm/processors/RevisionWalker.js.map +1 -0
  333. package/dist/{utils → esm/processors}/SelectiveRevisionAcceptor.js +81 -42
  334. package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -0
  335. package/dist/esm/processors/ShadingResolver.js +66 -0
  336. package/dist/esm/processors/ShadingResolver.js.map +1 -0
  337. package/dist/esm/processors/acceptRevisions.js +416 -0
  338. package/dist/esm/processors/acceptRevisions.js.map +1 -0
  339. package/dist/esm/processors/cnfStyleDecoder.js +89 -0
  340. package/dist/esm/processors/cnfStyleDecoder.js.map +1 -0
  341. package/dist/esm/processors/stripTrackedChanges.js +201 -0
  342. package/dist/esm/processors/stripTrackedChanges.js.map +1 -0
  343. package/dist/esm/tracking/DocumentTrackingContext.js +531 -0
  344. package/dist/esm/tracking/DocumentTrackingContext.js.map +1 -0
  345. package/dist/esm/tracking/TrackingContext.js +2 -0
  346. package/dist/esm/tracking/TrackingContext.js.map +1 -0
  347. package/dist/esm/types/compatibility-types.js +8 -0
  348. package/dist/esm/types/compatibility-types.js.map +1 -0
  349. package/dist/esm/types/document-types.js +2 -0
  350. package/dist/esm/types/document-types.js.map +1 -0
  351. package/dist/esm/types/formatting.js +2 -0
  352. package/dist/esm/types/formatting.js.map +1 -0
  353. package/dist/esm/types/list-types.js +2 -0
  354. package/dist/esm/types/list-types.js.map +1 -0
  355. package/dist/esm/types/settings-types.js +2 -0
  356. package/dist/esm/types/settings-types.js.map +1 -0
  357. package/dist/esm/types/styleConfig.js +2 -0
  358. package/dist/esm/types/styleConfig.js.map +1 -0
  359. package/dist/esm/utils/KeyedRegistry.js +32 -0
  360. package/dist/esm/utils/KeyedRegistry.js.map +1 -0
  361. package/dist/esm/utils/corruptionDetection.js +155 -0
  362. package/dist/esm/utils/corruptionDetection.js.map +1 -0
  363. package/dist/esm/utils/dateFormatting.js +4 -0
  364. package/dist/esm/utils/dateFormatting.js.map +1 -0
  365. package/dist/esm/utils/deepClone.js +40 -0
  366. package/dist/esm/utils/deepClone.js.map +1 -0
  367. package/dist/esm/utils/deepEqual.js +47 -0
  368. package/dist/esm/utils/deepEqual.js.map +1 -0
  369. package/dist/esm/utils/diagnostics.js +69 -0
  370. package/dist/esm/utils/diagnostics.js.map +1 -0
  371. package/dist/esm/utils/errorHandling.js +36 -0
  372. package/dist/esm/utils/errorHandling.js.map +1 -0
  373. package/dist/esm/utils/formatting.js +93 -0
  374. package/dist/esm/utils/formatting.js.map +1 -0
  375. package/dist/esm/utils/list-detection.js +148 -0
  376. package/dist/esm/utils/list-detection.js.map +1 -0
  377. package/dist/esm/utils/logger.js +205 -0
  378. package/dist/esm/utils/logger.js.map +1 -0
  379. package/dist/esm/utils/parsingHelpers.js +56 -0
  380. package/dist/esm/utils/parsingHelpers.js.map +1 -0
  381. package/dist/esm/utils/textDiff.js +42 -0
  382. package/dist/esm/utils/textDiff.js.map +1 -0
  383. package/dist/esm/utils/units.js +152 -0
  384. package/dist/esm/utils/units.js.map +1 -0
  385. package/dist/esm/utils/validation.js +285 -0
  386. package/dist/esm/utils/validation.js.map +1 -0
  387. package/dist/esm/utils/xmlSanitization.js +54 -0
  388. package/dist/esm/utils/xmlSanitization.js.map +1 -0
  389. package/dist/esm/validation/RevisionAutoFixer.js +340 -0
  390. package/dist/esm/validation/RevisionAutoFixer.js.map +1 -0
  391. package/dist/esm/validation/RevisionValidator.js +240 -0
  392. package/dist/esm/validation/RevisionValidator.js.map +1 -0
  393. package/dist/esm/validation/ValidationRuleRegistry.js +40 -0
  394. package/dist/esm/validation/ValidationRuleRegistry.js.map +1 -0
  395. package/dist/esm/validation/ValidationRules.js +92 -0
  396. package/dist/esm/validation/ValidationRules.js.map +1 -0
  397. package/dist/esm/validation/index.js +4 -0
  398. package/dist/esm/validation/index.js.map +1 -0
  399. package/dist/esm/xml/XMLBuilder.js +434 -0
  400. package/dist/esm/xml/XMLBuilder.js.map +1 -0
  401. package/dist/esm/xml/XMLParser.js +486 -0
  402. package/dist/esm/xml/XMLParser.js.map +1 -0
  403. package/dist/esm/zip/ZipHandler.js +298 -0
  404. package/dist/esm/zip/ZipHandler.js.map +1 -0
  405. package/dist/esm/zip/ZipReader.js +147 -0
  406. package/dist/esm/zip/ZipReader.js.map +1 -0
  407. package/dist/esm/zip/ZipWriter.js +199 -0
  408. package/dist/esm/zip/ZipWriter.js.map +1 -0
  409. package/dist/esm/zip/errors.js +43 -0
  410. package/dist/esm/zip/errors.js.map +1 -0
  411. package/dist/esm/zip/types.js +31 -0
  412. package/dist/esm/zip/types.js.map +1 -0
  413. package/dist/formatting/AbstractNumbering.d.ts +2 -2
  414. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  415. package/dist/formatting/AbstractNumbering.js +33 -33
  416. package/dist/formatting/AbstractNumbering.js.map +1 -1
  417. package/dist/formatting/NumberingInstance.d.ts +2 -2
  418. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  419. package/dist/formatting/NumberingInstance.js +7 -7
  420. package/dist/formatting/NumberingInstance.js.map +1 -1
  421. package/dist/formatting/NumberingLevel.d.ts +11 -2
  422. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  423. package/dist/formatting/NumberingLevel.js +111 -25
  424. package/dist/formatting/NumberingLevel.js.map +1 -1
  425. package/dist/formatting/NumberingManager.d.ts +4 -4
  426. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  427. package/dist/formatting/NumberingManager.js +28 -28
  428. package/dist/formatting/NumberingManager.js.map +1 -1
  429. package/dist/formatting/Style.d.ts +14 -7
  430. package/dist/formatting/Style.d.ts.map +1 -1
  431. package/dist/formatting/Style.js +309 -112
  432. package/dist/formatting/Style.js.map +1 -1
  433. package/dist/formatting/StylesManager.d.ts +2 -2
  434. package/dist/formatting/StylesManager.d.ts.map +1 -1
  435. package/dist/formatting/StylesManager.js +52 -52
  436. package/dist/formatting/StylesManager.js.map +1 -1
  437. package/dist/helpers/CleanupHelper.d.ts +1 -1
  438. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  439. package/dist/helpers/CleanupHelper.js +15 -15
  440. package/dist/helpers/CleanupHelper.js.map +1 -1
  441. package/dist/index.d.ts +81 -90
  442. package/dist/index.d.ts.map +1 -1
  443. package/dist/index.js +286 -317
  444. package/dist/index.js.map +1 -1
  445. package/dist/internal.d.ts +16 -0
  446. package/dist/internal.d.ts.map +1 -0
  447. package/dist/internal.js +42 -0
  448. package/dist/internal.js.map +1 -0
  449. package/dist/managers/DrawingManager.d.ts +3 -3
  450. package/dist/managers/DrawingManager.d.ts.map +1 -1
  451. package/dist/managers/DrawingManager.js +12 -12
  452. package/dist/managers/DrawingManager.js.map +1 -1
  453. package/dist/{utils → processors}/ChangelogGenerator.d.ts +2 -2
  454. package/dist/processors/ChangelogGenerator.d.ts.map +1 -0
  455. package/dist/{utils → processors}/ChangelogGenerator.js +2 -2
  456. package/dist/processors/ChangelogGenerator.js.map +1 -0
  457. package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -0
  458. package/dist/{utils → processors}/CompatibilityUpgrader.js +10 -10
  459. package/dist/processors/CompatibilityUpgrader.js.map +1 -0
  460. package/dist/{utils → processors}/InMemoryRevisionAcceptor.d.ts +3 -3
  461. package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -0
  462. package/dist/{utils → processors}/InMemoryRevisionAcceptor.js +84 -27
  463. package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -0
  464. package/dist/{utils → processors}/MoveOperationHelper.d.ts +4 -4
  465. package/dist/processors/MoveOperationHelper.d.ts.map +1 -0
  466. package/dist/{utils → processors}/MoveOperationHelper.js +10 -10
  467. package/dist/processors/MoveOperationHelper.js.map +1 -0
  468. package/dist/{utils → processors}/RevisionAwareProcessor.d.ts +3 -3
  469. package/dist/processors/RevisionAwareProcessor.d.ts.map +1 -0
  470. package/dist/{utils → processors}/RevisionAwareProcessor.js +2 -2
  471. package/dist/processors/RevisionAwareProcessor.js.map +1 -0
  472. package/dist/{utils → processors}/RevisionWalker.d.ts +2 -1
  473. package/dist/processors/RevisionWalker.d.ts.map +1 -0
  474. package/dist/{utils → processors}/RevisionWalker.js +28 -0
  475. package/dist/processors/RevisionWalker.js.map +1 -0
  476. package/dist/{utils → processors}/SelectiveRevisionAcceptor.d.ts +4 -3
  477. package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -0
  478. package/dist/processors/SelectiveRevisionAcceptor.js +402 -0
  479. package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -0
  480. package/dist/processors/ShadingResolver.d.ts +6 -0
  481. package/dist/processors/ShadingResolver.d.ts.map +1 -0
  482. package/dist/{utils → processors}/ShadingResolver.js +2 -2
  483. package/dist/processors/ShadingResolver.js.map +1 -0
  484. package/dist/{utils → processors}/acceptRevisions.d.ts +1 -1
  485. package/dist/processors/acceptRevisions.d.ts.map +1 -0
  486. package/dist/{utils → processors}/acceptRevisions.js +24 -4
  487. package/dist/processors/acceptRevisions.js.map +1 -0
  488. package/dist/{utils → processors}/cnfStyleDecoder.d.ts +1 -1
  489. package/dist/processors/cnfStyleDecoder.d.ts.map +1 -0
  490. package/dist/processors/cnfStyleDecoder.js.map +1 -0
  491. package/dist/processors/stripTrackedChanges.d.ts +3 -0
  492. package/dist/processors/stripTrackedChanges.d.ts.map +1 -0
  493. package/dist/{utils → processors}/stripTrackedChanges.js +16 -6
  494. package/dist/processors/stripTrackedChanges.js.map +1 -0
  495. package/dist/tracking/DocumentTrackingContext.d.ts +4 -4
  496. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  497. package/dist/tracking/DocumentTrackingContext.js +38 -43
  498. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  499. package/dist/tracking/TrackingContext.d.ts +8 -8
  500. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  501. package/dist/tracking/TrackingContext.js.map +1 -1
  502. package/dist/types/document-types.d.ts +28 -0
  503. package/dist/types/document-types.d.ts.map +1 -0
  504. package/dist/types/document-types.js +3 -0
  505. package/dist/types/document-types.js.map +1 -0
  506. package/dist/types/formatting.d.ts +4 -4
  507. package/dist/types/formatting.d.ts.map +1 -1
  508. package/dist/types/formatting.js.map +1 -1
  509. package/dist/types/settings-types.d.ts +6 -0
  510. package/dist/types/settings-types.d.ts.map +1 -1
  511. package/dist/types/settings-types.js.map +1 -1
  512. package/dist/utils/KeyedRegistry.d.ts +13 -0
  513. package/dist/utils/KeyedRegistry.d.ts.map +1 -0
  514. package/dist/utils/KeyedRegistry.js +36 -0
  515. package/dist/utils/KeyedRegistry.js.map +1 -0
  516. package/dist/utils/corruptionDetection.d.ts +1 -1
  517. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  518. package/dist/utils/corruptionDetection.js +4 -4
  519. package/dist/utils/corruptionDetection.js.map +1 -1
  520. package/dist/utils/deepEqual.d.ts +2 -0
  521. package/dist/utils/deepEqual.d.ts.map +1 -0
  522. package/dist/utils/deepEqual.js +50 -0
  523. package/dist/utils/deepEqual.js.map +1 -0
  524. package/dist/utils/list-detection.d.ts +2 -2
  525. package/dist/utils/list-detection.d.ts.map +1 -1
  526. package/dist/utils/list-detection.js.map +1 -1
  527. package/dist/utils/parsingHelpers.d.ts +1 -1
  528. package/dist/utils/parsingHelpers.d.ts.map +1 -1
  529. package/dist/utils/parsingHelpers.js +2 -2
  530. package/dist/utils/parsingHelpers.js.map +1 -1
  531. package/dist/utils/validation.js +7 -7
  532. package/dist/utils/validation.js.map +1 -1
  533. package/dist/utils/xmlSanitization.js +2 -2
  534. package/dist/utils/xmlSanitization.js.map +1 -1
  535. package/dist/validation/RevisionAutoFixer.d.ts +4 -4
  536. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  537. package/dist/validation/RevisionAutoFixer.js +11 -11
  538. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  539. package/dist/validation/RevisionValidator.d.ts +5 -4
  540. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  541. package/dist/validation/RevisionValidator.js +29 -30
  542. package/dist/validation/RevisionValidator.js.map +1 -1
  543. package/dist/validation/ValidationRuleRegistry.d.ts +27 -0
  544. package/dist/validation/ValidationRuleRegistry.d.ts.map +1 -0
  545. package/dist/validation/ValidationRuleRegistry.js +43 -0
  546. package/dist/validation/ValidationRuleRegistry.js.map +1 -0
  547. package/dist/validation/index.d.ts +3 -3
  548. package/dist/validation/index.d.ts.map +1 -1
  549. package/dist/validation/index.js +10 -10
  550. package/dist/validation/index.js.map +1 -1
  551. package/dist/xml/XMLBuilder.d.ts +6 -1
  552. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  553. package/dist/xml/XMLBuilder.js +11 -6
  554. package/dist/xml/XMLBuilder.js.map +1 -1
  555. package/dist/xml/XMLParser.js +6 -6
  556. package/dist/xml/XMLParser.js.map +1 -1
  557. package/dist/zip/ZipHandler.d.ts +1 -1
  558. package/dist/zip/ZipHandler.d.ts.map +1 -1
  559. package/dist/zip/ZipHandler.js +8 -8
  560. package/dist/zip/ZipHandler.js.map +1 -1
  561. package/dist/zip/ZipReader.d.ts +1 -1
  562. package/dist/zip/ZipReader.d.ts.map +1 -1
  563. package/dist/zip/ZipReader.js +14 -14
  564. package/dist/zip/ZipReader.js.map +1 -1
  565. package/dist/zip/ZipWriter.d.ts +1 -1
  566. package/dist/zip/ZipWriter.d.ts.map +1 -1
  567. package/dist/zip/ZipWriter.js +10 -10
  568. package/dist/zip/ZipWriter.js.map +1 -1
  569. package/package.json +20 -4
  570. package/src/constants/legacyCompatFlags.ts +1 -1
  571. package/src/core/Document.ts +478 -167
  572. package/src/core/DocumentContent.ts +14 -11
  573. package/src/core/DocumentEvents.ts +90 -0
  574. package/src/core/DocumentGenerator.ts +49 -22
  575. package/src/core/DocumentParser.ts +2235 -620
  576. package/src/core/DocumentValidator.ts +7 -7
  577. package/src/core/ElementRegistry.ts +69 -0
  578. package/src/core/Relationship.ts +1 -1
  579. package/src/core/RelationshipManager.ts +4 -4
  580. package/src/elements/AlternateContent.ts +1 -1
  581. package/src/elements/Bookmark.ts +52 -4
  582. package/src/elements/BookmarkManager.ts +2 -2
  583. package/src/elements/Comment.ts +3 -3
  584. package/src/elements/CommentManager.ts +4 -4
  585. package/src/elements/CommonTypes.ts +45 -7
  586. package/src/elements/CustomXml.ts +1 -1
  587. package/src/elements/Endnote.ts +2 -2
  588. package/src/elements/EndnoteManager.ts +3 -3
  589. package/src/elements/Field.ts +44 -10
  590. package/src/elements/FieldHelpers.ts +2 -2
  591. package/src/elements/Footer.ts +4 -4
  592. package/src/elements/Footnote.ts +2 -2
  593. package/src/elements/FootnoteManager.ts +3 -3
  594. package/src/elements/Header.ts +4 -4
  595. package/src/elements/HeaderFooterManager.ts +2 -2
  596. package/src/elements/Hyperlink.ts +16 -12
  597. package/src/elements/Image.ts +3 -3
  598. package/src/elements/ImageManager.ts +2 -2
  599. package/src/elements/ImageRun.ts +3 -3
  600. package/src/elements/MathElement.ts +1 -1
  601. package/src/elements/Paragraph.ts +221 -88
  602. package/src/elements/PreservedElement.ts +1 -1
  603. package/src/elements/PropertyChangeTypes.ts +2 -2
  604. package/src/elements/RangeMarker.ts +153 -12
  605. package/src/elements/RegisteredBodyElement.ts +52 -0
  606. package/src/elements/Revision.ts +14 -14
  607. package/src/elements/RevisionContent.ts +3 -3
  608. package/src/elements/RevisionManager.ts +3 -3
  609. package/src/elements/Run.ts +221 -94
  610. package/src/elements/Section.ts +136 -69
  611. package/src/elements/Shape.ts +4 -4
  612. package/src/elements/StructuredDocumentTag.ts +3 -3
  613. package/src/elements/Table.ts +91 -27
  614. package/src/elements/TableCell.ts +62 -34
  615. package/src/elements/TableGridChange.ts +1 -1
  616. package/src/elements/TableOfContents.ts +1 -1
  617. package/src/elements/TableOfContentsElement.ts +2 -2
  618. package/src/elements/TableRow.ts +192 -48
  619. package/src/elements/TextBox.ts +5 -5
  620. package/src/formatting/AbstractNumbering.ts +3 -3
  621. package/src/formatting/NumberingInstance.ts +2 -2
  622. package/src/formatting/NumberingLevel.ts +201 -10
  623. package/src/formatting/NumberingManager.ts +5 -5
  624. package/src/formatting/Style.ts +382 -86
  625. package/src/formatting/StylesManager.ts +4 -4
  626. package/src/helpers/CleanupHelper.ts +6 -6
  627. package/src/index.ts +118 -127
  628. package/src/internal.ts +79 -0
  629. package/src/managers/DrawingManager.ts +3 -3
  630. package/src/{utils → processors}/ChangelogGenerator.ts +3 -3
  631. package/src/{utils → processors}/CompatibilityUpgrader.ts +2 -2
  632. package/src/{utils → processors}/InMemoryRevisionAcceptor.ts +100 -12
  633. package/src/{utils → processors}/MoveOperationHelper.ts +5 -5
  634. package/src/{utils → processors}/RevisionAwareProcessor.ts +3 -3
  635. package/src/{utils → processors}/RevisionWalker.ts +42 -1
  636. package/src/{utils → processors}/SelectiveRevisionAcceptor.ts +98 -39
  637. package/src/{utils → processors}/ShadingResolver.ts +5 -5
  638. package/src/{utils → processors}/acceptRevisions.ts +77 -9
  639. package/src/{utils → processors}/cnfStyleDecoder.ts +1 -1
  640. package/src/{utils → processors}/stripTrackedChanges.ts +35 -10
  641. package/src/tracking/DocumentTrackingContext.ts +12 -14
  642. package/src/tracking/TrackingContext.ts +8 -8
  643. package/src/types/document-types.ts +53 -0
  644. package/src/types/formatting.ts +4 -4
  645. package/src/types/settings-types.ts +32 -0
  646. package/src/utils/KeyedRegistry.ts +41 -0
  647. package/src/utils/corruptionDetection.ts +2 -2
  648. package/src/utils/deepEqual.ts +58 -0
  649. package/src/utils/list-detection.ts +2 -2
  650. package/src/utils/parsingHelpers.ts +11 -3
  651. package/src/utils/validation.ts +3 -3
  652. package/src/utils/xmlSanitization.ts +1 -1
  653. package/src/validation/RevisionAutoFixer.ts +5 -5
  654. package/src/validation/RevisionValidator.ts +39 -28
  655. package/src/validation/ValidationRuleRegistry.ts +86 -0
  656. package/src/validation/index.ts +3 -3
  657. package/src/xml/XMLBuilder.ts +13 -3
  658. package/src/xml/XMLParser.ts +2 -2
  659. package/src/zip/ZipHandler.ts +4 -4
  660. package/src/zip/ZipReader.ts +3 -3
  661. package/src/zip/ZipWriter.ts +3 -3
  662. package/dist/utils/ChangelogGenerator.d.ts.map +0 -1
  663. package/dist/utils/ChangelogGenerator.js.map +0 -1
  664. package/dist/utils/CompatibilityUpgrader.d.ts.map +0 -1
  665. package/dist/utils/CompatibilityUpgrader.js.map +0 -1
  666. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +0 -1
  667. package/dist/utils/InMemoryRevisionAcceptor.js.map +0 -1
  668. package/dist/utils/MoveOperationHelper.d.ts.map +0 -1
  669. package/dist/utils/MoveOperationHelper.js.map +0 -1
  670. package/dist/utils/RevisionAwareProcessor.d.ts.map +0 -1
  671. package/dist/utils/RevisionAwareProcessor.js.map +0 -1
  672. package/dist/utils/RevisionWalker.d.ts.map +0 -1
  673. package/dist/utils/RevisionWalker.js.map +0 -1
  674. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +0 -1
  675. package/dist/utils/SelectiveRevisionAcceptor.js.map +0 -1
  676. package/dist/utils/ShadingResolver.d.ts +0 -6
  677. package/dist/utils/ShadingResolver.d.ts.map +0 -1
  678. package/dist/utils/ShadingResolver.js.map +0 -1
  679. package/dist/utils/acceptRevisions.d.ts.map +0 -1
  680. package/dist/utils/acceptRevisions.js.map +0 -1
  681. package/dist/utils/cnfStyleDecoder.d.ts.map +0 -1
  682. package/dist/utils/cnfStyleDecoder.js.map +0 -1
  683. package/dist/utils/stripTrackedChanges.d.ts +0 -3
  684. package/dist/utils/stripTrackedChanges.d.ts.map +0 -1
  685. package/dist/utils/stripTrackedChanges.js.map +0 -1
  686. package/src/__tests__/helper-methods.test.ts +0 -512
  687. package/src/constants/CLAUDE.md +0 -28
  688. package/src/core/CLAUDE.md +0 -113
  689. package/src/elements/CLAUDE.md +0 -142
  690. package/src/formatting/CLAUDE.md +0 -78
  691. package/src/managers/CLAUDE.md +0 -47
  692. package/src/tracking/CLAUDE.md +0 -30
  693. package/src/types/CLAUDE.md +0 -39
  694. package/src/utils/CLAUDE.md +0 -168
  695. package/src/validation/CLAUDE.md +0 -40
  696. package/src/xml/CLAUDE.md +0 -65
  697. package/src/zip/CLAUDE.md +0 -55
  698. /package/dist/{utils → processors}/CompatibilityUpgrader.d.ts +0 -0
  699. /package/dist/{utils → processors}/cnfStyleDecoder.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompatibilityUpgrader.d.ts","sourceRoot":"","sources":["../../src/processors/CompatibilityUpgrader.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,aAAa;IAE5B,YAAY,EAAE,MAAM,CAAC;IAGrB,OAAO,EAAE,MAAM,CAAC;IAGhB,YAAY,EAAE,MAAM,EAAE,CAAC;IAGvB,aAAa,EAAE,MAAM,EAAE,CAAC;IAGxB,kBAAkB,EAAE,OAAO,CAAC;IAG5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD,qBAAa,qBAAqB;IAchC,MAAM,CAAC,kBAAkB,CACvB,WAAW,EAAE,MAAM,EACnB,YAAY,SAAK,GAChB;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE;IA4IzC,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;QACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,QAAQ,EAAE,OAAO,CAAC;KACnB;IAyBD,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAMtC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CompatibilityUpgrader = void 0;
4
- const legacyCompatFlags_1 = require("../constants/legacyCompatFlags");
4
+ const legacyCompatFlags_js_1 = require("../constants/legacyCompatFlags.js");
5
5
  class CompatibilityUpgrader {
6
6
  static upgradeCompatBlock(settingsXml, previousMode = 12) {
7
7
  const removedFlags = [];
@@ -9,9 +9,9 @@ class CompatibilityUpgrader {
9
9
  const compatBlockMatch = /<w:compat>([\s\S]*?)<\/w:compat>/.exec(settingsXml);
10
10
  const selfClosingCompat = /<w:compat\s*\/>/.exec(settingsXml);
11
11
  if (!compatBlockMatch && !selfClosingCompat) {
12
- const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(legacyCompatFlags_1.MODERN_COMPAT_SETTINGS);
12
+ const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS);
13
13
  const xml = settingsXml.replace(/<\/w:settings>/, modernBlock + '\n</w:settings>');
14
- for (const s of legacyCompatFlags_1.MODERN_COMPAT_SETTINGS) {
14
+ for (const s of legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS) {
15
15
  addedSettings.push(s.name);
16
16
  }
17
17
  return {
@@ -27,9 +27,9 @@ class CompatibilityUpgrader {
27
27
  };
28
28
  }
29
29
  if (selfClosingCompat) {
30
- const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(legacyCompatFlags_1.MODERN_COMPAT_SETTINGS);
30
+ const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS);
31
31
  const xml = settingsXml.replace(/<w:compat\s*\/>/, modernBlock);
32
- for (const s of legacyCompatFlags_1.MODERN_COMPAT_SETTINGS) {
32
+ for (const s of legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS) {
33
33
  addedSettings.push(s.name);
34
34
  }
35
35
  return {
@@ -49,7 +49,7 @@ class CompatibilityUpgrader {
49
49
  let flagMatch;
50
50
  while ((flagMatch = legacyFlagRegex.exec(compatBlock)) !== null) {
51
51
  const tagName = flagMatch[1];
52
- if (tagName && tagName !== 'compatSetting' && legacyCompatFlags_1.LEGACY_COMPAT_ELEMENT_NAMES.has(tagName)) {
52
+ if (tagName && tagName !== 'compatSetting' && legacyCompatFlags_js_1.LEGACY_COMPAT_ELEMENT_NAMES.has(tagName)) {
53
53
  removedFlags.push(tagName);
54
54
  }
55
55
  }
@@ -62,7 +62,7 @@ class CompatibilityUpgrader {
62
62
  const uriMatch = /w:uri\s*=\s*"([^"]*)"/.exec(attrs);
63
63
  const valMatch = /w:val\s*=\s*"([^"]*)"/.exec(attrs);
64
64
  if (nameMatch?.[1] && uriMatch?.[1] && valMatch?.[1]) {
65
- if (uriMatch[1] !== legacyCompatFlags_1.MS_WORD_COMPAT_URI) {
65
+ if (uriMatch[1] !== legacyCompatFlags_js_1.MS_WORD_COMPAT_URI) {
66
66
  preservedSettings.push({
67
67
  name: nameMatch[1],
68
68
  uri: uriMatch[1],
@@ -78,11 +78,11 @@ class CompatibilityUpgrader {
78
78
  const attrs = existingMatch[1] ?? '';
79
79
  const nameMatch = /w:name\s*=\s*"([^"]*)"/.exec(attrs);
80
80
  const uriMatch = /w:uri\s*=\s*"([^"]*)"/.exec(attrs);
81
- if (nameMatch?.[1] && uriMatch?.[1] && uriMatch[1] === legacyCompatFlags_1.MS_WORD_COMPAT_URI) {
81
+ if (nameMatch?.[1] && uriMatch?.[1] && uriMatch[1] === legacyCompatFlags_js_1.MS_WORD_COMPAT_URI) {
82
82
  existingMsSettings.add(nameMatch[1]);
83
83
  }
84
84
  }
85
- for (const s of legacyCompatFlags_1.MODERN_COMPAT_SETTINGS) {
85
+ for (const s of legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS) {
86
86
  if (!existingMsSettings.has(s.name)) {
87
87
  addedSettings.push(s.name);
88
88
  }
@@ -92,7 +92,7 @@ class CompatibilityUpgrader {
92
92
  addedSettings.push('compatibilityMode');
93
93
  }
94
94
  }
95
- const allSettings = [...legacyCompatFlags_1.MODERN_COMPAT_SETTINGS, ...preservedSettings];
95
+ const allSettings = [...legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS, ...preservedSettings];
96
96
  const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(allSettings);
97
97
  const changed = removedFlags.length > 0 || addedSettings.length > 0 || previousMode !== 15;
98
98
  const xml = settingsXml.replace(/<w:compat>[\s\S]*?<\/w:compat>/, modernBlock);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompatibilityUpgrader.js","sourceRoot":"","sources":["../../src/processors/CompatibilityUpgrader.ts"],"names":[],"mappings":";;;AAUA,4EAI2C;AA6B3C,MAAa,qBAAqB;IAchC,MAAM,CAAC,kBAAkB,CACvB,WAAmB,EACnB,YAAY,GAAG,EAAE;QAEjB,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,aAAa,GAAa,EAAE,CAAC;QAGnC,MAAM,gBAAgB,GAAG,kCAAkC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9D,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE5C,MAAM,WAAW,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,6CAAsB,CAAC,CAAC;YACzF,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,GAAG,iBAAiB,CAAC,CAAC;YAEnF,KAAK,MAAM,CAAC,IAAI,6CAAsB,EAAE,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO;gBACL,GAAG;gBACH,MAAM,EAAE;oBACN,YAAY;oBACZ,OAAO,EAAE,EAAE;oBACX,YAAY;oBACZ,aAAa;oBACb,kBAAkB,EAAE,KAAK;oBACzB,OAAO,EAAE,IAAI;iBACd;aACF,CAAC;QACJ,CAAC;QAGD,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,6CAAsB,CAAC,CAAC;YACzF,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;YAEhE,KAAK,MAAM,CAAC,IAAI,6CAAsB,EAAE,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO;gBACL,GAAG;gBACH,MAAM,EAAE;oBACN,YAAY;oBACZ,OAAO,EAAE,EAAE;oBACX,YAAY;oBACZ,aAAa;oBACb,kBAAkB,EAAE,KAAK;oBACzB,OAAO,EAAE,IAAI;iBACd;aACF,CAAC;QACJ,CAAC;QAGD,MAAM,WAAW,GAAG,gBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAG/C,MAAM,eAAe,GAAG,2BAA2B,CAAC;QACpD,IAAI,SAAS,CAAC;QACd,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,OAAO,IAAI,OAAO,KAAK,eAAe,IAAI,kDAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvF,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAGD,MAAM,iBAAiB,GAAoB,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,oCAAoC,CAAC;QAC1D,IAAI,YAAY,CAAC;QACjB,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAErD,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAErD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,yCAAkB,EAAE,CAAC;oBACvC,iBAAiB,CAAC,IAAI,CAAC;wBACrB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;wBAClB,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;wBAChB,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;qBACjB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAGD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7C,MAAM,oBAAoB,GAAG,oCAAoC,CAAC;QAClE,IAAI,aAAa,CAAC;QAClB,OAAO,CAAC,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,yCAAkB,EAAE,CAAC;gBAC1E,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,6CAAsB,EAAE,CAAC;YACvC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;YACvE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACjD,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAGD,MAAM,WAAW,GAAG,CAAC,GAAG,6CAAsB,EAAE,GAAG,iBAAiB,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAG9E,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,EAAE,CAAC;QAC3F,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,gCAAgC,EAAE,WAAW,CAAC,CAAC;QAE/E,OAAO;YACL,GAAG;YACH,MAAM,EAAE;gBACN,YAAY;gBACZ,OAAO,EAAE,EAAE;gBACX,YAAY;gBACZ,aAAa;gBACb,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR;SACF,CAAC;IACJ,CAAC;IASD,MAAM,CAAC,sBAAsB,CAAC,UAAkC;QAI9D,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,gBAAgB,GAA2B;YAC/C,WAAW,EAAE,sDAAsD;YACnE,WAAW,EAAE,sDAAsD;YACnE,aAAa,EAAE,4DAA4D;YAC3E,cAAc,EAAE,0DAA0D;SAC3E,CAAC;QAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACpB,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAMO,MAAM,CAAC,sBAAsB,CAAC,QAAyB;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAgC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,KAAK,CACrF,CAAC;QACF,OAAO,eAAe,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC5D,CAAC;CACF;AA/LD,sDA+LC","sourcesContent":["/**\n * CompatibilityUpgrader — Upgrades w:compat block in settings.xml to modern format.\n *\n * Equivalent to Word's File > Info > Convert operation for the compatibility\n * settings portion. Removes legacy boolean compat flags, updates compatSetting\n * entries, and manages modern namespaces.\n *\n * @module\n */\n\nimport {\n LEGACY_COMPAT_ELEMENT_NAMES,\n MODERN_COMPAT_SETTINGS,\n MS_WORD_COMPAT_URI,\n} from '../constants/legacyCompatFlags.js';\nimport type { CompatSetting } from '../types/compatibility-types.js';\n\n/**\n * Report of what changed during an upgrade operation.\n */\nexport interface UpgradeReport {\n /** Previous compatibility mode value (11, 12, 14, or 15) */\n previousMode: number;\n\n /** New compatibility mode (always 15 after upgrade) */\n newMode: number;\n\n /** Legacy compat flags that were removed (without w: prefix) */\n removedFlags: string[];\n\n /** Modern settings that were added (setting names) */\n addedSettings: string[];\n\n /** Whether namespaces were expanded */\n namespacesExpanded: boolean;\n\n /** Whether any changes were actually made (false if already mode 15 with no legacy flags) */\n changed: boolean;\n}\n\n/**\n * Upgrades w:compat blocks in settings.xml to modern Word 2013+ format.\n */\nexport class CompatibilityUpgrader {\n /**\n * Upgrades the w:compat block in settings.xml to mode 15.\n *\n * Operations performed:\n * 1. Remove all legacy boolean compat elements\n * 2. Remove existing Microsoft-URI w:compatSetting entries\n * 3. Insert modern w:compatSetting entries\n * 4. Preserve non-Microsoft w:compatSetting entries (custom URIs)\n *\n * @param settingsXml - The raw settings.xml content\n * @param previousMode - The current compatibility mode value (for the report)\n * @returns Object with upgraded XML and an UpgradeReport\n */\n static upgradeCompatBlock(\n settingsXml: string,\n previousMode = 12\n ): { xml: string; report: UpgradeReport } {\n const removedFlags: string[] = [];\n const addedSettings: string[] = [];\n\n // Check if already mode 15 with no legacy flags\n const compatBlockMatch = /<w:compat>([\\s\\S]*?)<\\/w:compat>/.exec(settingsXml);\n const selfClosingCompat = /<w:compat\\s*\\/>/.exec(settingsXml);\n\n if (!compatBlockMatch && !selfClosingCompat) {\n // No w:compat block — insert a full modern block before </w:settings>\n const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(MODERN_COMPAT_SETTINGS);\n const xml = settingsXml.replace(/<\\/w:settings>/, modernBlock + '\\n</w:settings>');\n\n for (const s of MODERN_COMPAT_SETTINGS) {\n addedSettings.push(s.name);\n }\n\n return {\n xml,\n report: {\n previousMode,\n newMode: 15,\n removedFlags,\n addedSettings,\n namespacesExpanded: false,\n changed: true,\n },\n };\n }\n\n // Handle self-closing <w:compat/>\n if (selfClosingCompat) {\n const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(MODERN_COMPAT_SETTINGS);\n const xml = settingsXml.replace(/<w:compat\\s*\\/>/, modernBlock);\n\n for (const s of MODERN_COMPAT_SETTINGS) {\n addedSettings.push(s.name);\n }\n\n return {\n xml,\n report: {\n previousMode,\n newMode: 15,\n removedFlags,\n addedSettings,\n namespacesExpanded: false,\n changed: true,\n },\n };\n }\n\n // Process existing w:compat block\n const compatBlock = compatBlockMatch![1] ?? '';\n\n // 1. Find and record legacy flags that will be removed\n const legacyFlagRegex = /<w:(\\w+)(?:\\s[^>]*)?\\/?>/g;\n let flagMatch;\n while ((flagMatch = legacyFlagRegex.exec(compatBlock)) !== null) {\n const tagName = flagMatch[1];\n if (tagName && tagName !== 'compatSetting' && LEGACY_COMPAT_ELEMENT_NAMES.has(tagName)) {\n removedFlags.push(tagName);\n }\n }\n\n // 2. Collect non-Microsoft compatSetting entries to preserve\n const preservedSettings: CompatSetting[] = [];\n const settingRegex = /<w:compatSetting\\s+([^>]*)\\/?\\s*>/g;\n let settingMatch;\n while ((settingMatch = settingRegex.exec(compatBlock)) !== null) {\n const attrs = settingMatch[1] ?? '';\n const nameMatch = /w:name\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n const uriMatch = /w:uri\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n const valMatch = /w:val\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n\n if (nameMatch?.[1] && uriMatch?.[1] && valMatch?.[1]) {\n // Preserve settings with non-Microsoft URIs\n if (uriMatch[1] !== MS_WORD_COMPAT_URI) {\n preservedSettings.push({\n name: nameMatch[1],\n uri: uriMatch[1],\n val: valMatch[1],\n });\n }\n }\n }\n\n // 3. Determine which modern settings are actually new\n const existingMsSettings = new Set<string>();\n const existingSettingRegex = /<w:compatSetting\\s+([^>]*)\\/?\\s*>/g;\n let existingMatch;\n while ((existingMatch = existingSettingRegex.exec(compatBlock)) !== null) {\n const attrs = existingMatch[1] ?? '';\n const nameMatch = /w:name\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n const uriMatch = /w:uri\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (nameMatch?.[1] && uriMatch?.[1] && uriMatch[1] === MS_WORD_COMPAT_URI) {\n existingMsSettings.add(nameMatch[1]);\n }\n }\n\n for (const s of MODERN_COMPAT_SETTINGS) {\n if (!existingMsSettings.has(s.name)) {\n addedSettings.push(s.name);\n }\n }\n // compatibilityMode value change counts as \"added\" if it existed but with different val\n if (existingMsSettings.has('compatibilityMode') && previousMode !== 15) {\n if (!addedSettings.includes('compatibilityMode')) {\n addedSettings.push('compatibilityMode');\n }\n }\n\n // 4. Build the new compat block\n const allSettings = [...MODERN_COMPAT_SETTINGS, ...preservedSettings];\n const modernBlock = CompatibilityUpgrader.buildModernCompatBlock(allSettings);\n\n // 5. Replace the old block\n const changed = removedFlags.length > 0 || addedSettings.length > 0 || previousMode !== 15;\n const xml = settingsXml.replace(/<w:compat>[\\s\\S]*?<\\/w:compat>/, modernBlock);\n\n return {\n xml,\n report: {\n previousMode,\n newMode: 15,\n removedFlags,\n addedSettings,\n namespacesExpanded: false,\n changed,\n },\n };\n }\n\n /**\n * Ensures namespace declarations include all modern extended namespaces\n * (w14, w15, w16se, w16cid, etc.) and returns the expanded set.\n *\n * @param namespaces - Current namespace record from document\n * @returns Updated namespace record with modern namespaces added\n */\n static ensureModernNamespaces(namespaces: Record<string, string>): {\n namespaces: Record<string, string>;\n expanded: boolean;\n } {\n const result = { ...namespaces };\n let expanded = false;\n\n const modernNamespaces: Record<string, string> = {\n 'xmlns:w14': 'http://schemas.microsoft.com/office/word/2010/wordml',\n 'xmlns:w15': 'http://schemas.microsoft.com/office/word/2012/wordml',\n 'xmlns:w16se': 'http://schemas.microsoft.com/office/word/2015/wordml/symex',\n 'xmlns:w16cid': 'http://schemas.microsoft.com/office/word/2016/wordml/cid',\n };\n\n for (const [key, value] of Object.entries(modernNamespaces)) {\n if (!result[key]) {\n result[key] = value;\n expanded = true;\n }\n }\n\n return { namespaces: result, expanded };\n }\n\n /**\n * Builds a <w:compat> block XML string from an array of compat settings.\n * Does not include legacy boolean flags (they are stripped during upgrade).\n */\n private static buildModernCompatBlock(settings: CompatSetting[]): string {\n const entries = settings.map(\n (s) => ` <w:compatSetting w:name=\"${s.name}\" w:uri=\"${s.uri}\" w:val=\"${s.val}\"/>`\n );\n return `<w:compat>\\n${entries.join('\\n')}\\n </w:compat>`;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { Document } from '../core/Document';
2
- import { Paragraph } from '../elements/Paragraph';
3
- import { Revision, RevisionType } from '../elements/Revision';
1
+ import type { Document } from '../core/Document.js';
2
+ import { Paragraph } from '../elements/Paragraph.js';
3
+ import { Revision, RevisionType } from '../elements/Revision.js';
4
4
  export interface AcceptRevisionsOptions {
5
5
  acceptInsertions?: boolean;
6
6
  acceptDeletions?: boolean;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryRevisionAcceptor.d.ts","sourceRoot":"","sources":["../../src/processors/InMemoryRevisionAcceptor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAoBjE,MAAM,WAAW,sBAAsB;IAErC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD,MAAM,WAAW,qBAAqB;IAEpC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,aAAa,EAAE,MAAM,CAAC;IAEtB,uBAAuB,EAAE,MAAM,CAAC;IAEhC,aAAa,EAAE,MAAM,CAAC;IAEtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AA+BD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkEzD;AAaD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAwUvB;AA8LD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAWnE;AAKD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,EAAE,CAG1E;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAa7E"}
@@ -5,14 +5,14 @@ exports.acceptRevisionsInMemory = acceptRevisionsInMemory;
5
5
  exports.paragraphHasRevisions = paragraphHasRevisions;
6
6
  exports.getRevisionsFromParagraph = getRevisionsFromParagraph;
7
7
  exports.countRevisionsByType = countRevisionsByType;
8
- const Paragraph_1 = require("../elements/Paragraph");
9
- const Revision_1 = require("../elements/Revision");
10
- const RevisionContent_1 = require("../elements/RevisionContent");
11
- const Field_1 = require("../elements/Field");
12
- const Table_1 = require("../elements/Table");
13
- const logger_1 = require("./logger");
8
+ const Paragraph_js_1 = require("../elements/Paragraph.js");
9
+ const Revision_js_1 = require("../elements/Revision.js");
10
+ const RevisionContent_js_1 = require("../elements/RevisionContent.js");
11
+ const Field_js_1 = require("../elements/Field.js");
12
+ const Table_js_1 = require("../elements/Table.js");
13
+ const logger_js_1 = require("../utils/logger.js");
14
14
  function getLogger() {
15
- return (0, logger_1.createScopedLogger)((0, logger_1.getGlobalLogger)(), 'InMemoryRevisionAcceptor');
15
+ return (0, logger_js_1.createScopedLogger)((0, logger_js_1.getGlobalLogger)(), 'InMemoryRevisionAcceptor');
16
16
  }
17
17
  const PROPERTY_REVISION_TYPES = [
18
18
  'runPropertiesChange',
@@ -123,6 +123,23 @@ function acceptRevisionsInMemory(doc, options = {}) {
123
123
  table.clearTblPrChange();
124
124
  result.propertyChangesAccepted++;
125
125
  }
126
+ const rowsToRemove = [];
127
+ const allRows = table.getRows();
128
+ for (let rowIdx = 0; rowIdx < allRows.length; rowIdx++) {
129
+ const row = allRows[rowIdx];
130
+ const fmt = row.getFormatting();
131
+ if (fmt.rowInsertion && opts.acceptInsertions) {
132
+ row.setRowInsertion(undefined);
133
+ result.insertionsAccepted++;
134
+ }
135
+ if (fmt.rowDeletion && opts.acceptDeletions) {
136
+ rowsToRemove.push(rowIdx);
137
+ result.deletionsAccepted++;
138
+ }
139
+ }
140
+ for (let i = rowsToRemove.length - 1; i >= 0; i--) {
141
+ table._removeRowAtIndex(rowsToRemove[i]);
142
+ }
126
143
  for (const row of table.getRows()) {
127
144
  if (opts.acceptPropertyChanges && row.getTrPrChange()) {
128
145
  row.clearTrPrChange();
@@ -133,9 +150,21 @@ function acceptRevisionsInMemory(doc, options = {}) {
133
150
  cell.clearTcPrChange();
134
151
  result.propertyChangesAccepted++;
135
152
  }
136
- if (opts.acceptPropertyChanges && cell.getCellRevision()) {
137
- cell.clearCellRevision();
138
- result.propertyChangesAccepted++;
153
+ const cellRev = cell.getCellRevision();
154
+ if (cellRev) {
155
+ const revType = cellRev.getType();
156
+ if (revType === 'tableCellInsert' && opts.acceptInsertions) {
157
+ cell.clearCellRevision();
158
+ result.insertionsAccepted++;
159
+ }
160
+ else if (revType === 'tableCellDelete' && opts.acceptDeletions) {
161
+ cell.clearCellRevision();
162
+ result.deletionsAccepted++;
163
+ }
164
+ else if (revType === 'tableCellMerge' && opts.acceptPropertyChanges) {
165
+ cell.clearCellRevision();
166
+ result.propertyChangesAccepted++;
167
+ }
139
168
  }
140
169
  for (const paragraph of cell.getParagraphs()) {
141
170
  const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);
@@ -172,14 +201,14 @@ function acceptRevisionsInMemory(doc, options = {}) {
172
201
  for (const headerEntry of headers) {
173
202
  const elements = headerEntry.header.getElements();
174
203
  for (const element of elements) {
175
- if (element instanceof Paragraph_1.Paragraph) {
204
+ if (element instanceof Paragraph_js_1.Paragraph) {
176
205
  const paragraphResult = acceptRevisionsInParagraph(element, opts);
177
206
  result.insertionsAccepted += paragraphResult.insertionsAccepted;
178
207
  result.deletionsAccepted += paragraphResult.deletionsAccepted;
179
208
  result.movesAccepted += paragraphResult.movesAccepted;
180
209
  result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;
181
210
  }
182
- else if (element instanceof Table_1.Table) {
211
+ else if (element instanceof Table_js_1.Table) {
183
212
  for (const row of element.getRows()) {
184
213
  for (const cell of row.getCells()) {
185
214
  for (const paragraph of cell.getParagraphs()) {
@@ -211,14 +240,14 @@ function acceptRevisionsInMemory(doc, options = {}) {
211
240
  for (const footerEntry of footers) {
212
241
  const elements = footerEntry.footer.getElements();
213
242
  for (const element of elements) {
214
- if (element instanceof Paragraph_1.Paragraph) {
243
+ if (element instanceof Paragraph_js_1.Paragraph) {
215
244
  const paragraphResult = acceptRevisionsInParagraph(element, opts);
216
245
  result.insertionsAccepted += paragraphResult.insertionsAccepted;
217
246
  result.deletionsAccepted += paragraphResult.deletionsAccepted;
218
247
  result.movesAccepted += paragraphResult.movesAccepted;
219
248
  result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;
220
249
  }
221
- else if (element instanceof Table_1.Table) {
250
+ else if (element instanceof Table_js_1.Table) {
222
251
  for (const row of element.getRows()) {
223
252
  for (const cell of row.getCells()) {
224
253
  for (const paragraph of cell.getParagraphs()) {
@@ -247,6 +276,30 @@ function acceptRevisionsInMemory(doc, options = {}) {
247
276
  }
248
277
  }
249
278
  }
279
+ const footnoteManager = doc.getFootnoteManager?.();
280
+ if (footnoteManager) {
281
+ for (const fn of footnoteManager.getAllFootnotes()) {
282
+ for (const paragraph of fn.getParagraphs()) {
283
+ const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);
284
+ result.insertionsAccepted += paragraphResult.insertionsAccepted;
285
+ result.deletionsAccepted += paragraphResult.deletionsAccepted;
286
+ result.movesAccepted += paragraphResult.movesAccepted;
287
+ result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;
288
+ }
289
+ }
290
+ }
291
+ const endnoteManager = doc.getEndnoteManager?.();
292
+ if (endnoteManager) {
293
+ for (const en of endnoteManager.getAllEndnotes()) {
294
+ for (const paragraph of en.getParagraphs()) {
295
+ const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);
296
+ result.insertionsAccepted += paragraphResult.insertionsAccepted;
297
+ result.deletionsAccepted += paragraphResult.deletionsAccepted;
298
+ result.movesAccepted += paragraphResult.movesAccepted;
299
+ result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;
300
+ }
301
+ }
302
+ }
250
303
  if (opts.acceptPropertyChanges) {
251
304
  const section = doc.getSection();
252
305
  if (section?.getSectPrChange()) {
@@ -289,18 +342,18 @@ function acceptRevisionsInParagraph(paragraph, options) {
289
342
  const content = paragraph.getContent();
290
343
  const newContent = [];
291
344
  for (const item of content) {
292
- if (item instanceof Revision_1.Revision) {
345
+ if (item instanceof Revision_js_1.Revision) {
293
346
  const revisionType = item.getType();
294
347
  if (revisionType === 'insert' && options.acceptInsertions) {
295
348
  const childContent = item.getContent();
296
349
  for (const child of childContent) {
297
- if ((0, RevisionContent_1.isImageRunContent)(child)) {
350
+ if ((0, RevisionContent_js_1.isImageRunContent)(child)) {
298
351
  newContent.push(child);
299
352
  }
300
- else if ((0, RevisionContent_1.isRunContent)(child)) {
353
+ else if ((0, RevisionContent_js_1.isRunContent)(child)) {
301
354
  newContent.push(child);
302
355
  }
303
- else if ((0, RevisionContent_1.isHyperlinkContent)(child)) {
356
+ else if ((0, RevisionContent_js_1.isHyperlinkContent)(child)) {
304
357
  newContent.push(child);
305
358
  }
306
359
  }
@@ -318,13 +371,13 @@ function acceptRevisionsInParagraph(paragraph, options) {
318
371
  if (revisionType === 'moveTo' && options.acceptMoves) {
319
372
  const childContent = item.getContent();
320
373
  for (const child of childContent) {
321
- if ((0, RevisionContent_1.isImageRunContent)(child)) {
374
+ if ((0, RevisionContent_js_1.isImageRunContent)(child)) {
322
375
  newContent.push(child);
323
376
  }
324
- else if ((0, RevisionContent_1.isRunContent)(child)) {
377
+ else if ((0, RevisionContent_js_1.isRunContent)(child)) {
325
378
  newContent.push(child);
326
379
  }
327
- else if ((0, RevisionContent_1.isHyperlinkContent)(child)) {
380
+ else if ((0, RevisionContent_js_1.isHyperlinkContent)(child)) {
328
381
  newContent.push(child);
329
382
  }
330
383
  }
@@ -334,13 +387,13 @@ function acceptRevisionsInParagraph(paragraph, options) {
334
387
  if (PROPERTY_REVISION_TYPES.includes(revisionType) && options.acceptPropertyChanges) {
335
388
  const childContent = item.getContent();
336
389
  for (const child of childContent) {
337
- if ((0, RevisionContent_1.isImageRunContent)(child)) {
390
+ if ((0, RevisionContent_js_1.isImageRunContent)(child)) {
338
391
  newContent.push(child);
339
392
  }
340
- else if ((0, RevisionContent_1.isRunContent)(child)) {
393
+ else if ((0, RevisionContent_js_1.isRunContent)(child)) {
341
394
  newContent.push(child);
342
395
  }
343
- else if ((0, RevisionContent_1.isHyperlinkContent)(child)) {
396
+ else if ((0, RevisionContent_js_1.isHyperlinkContent)(child)) {
344
397
  newContent.push(child);
345
398
  }
346
399
  }
@@ -349,7 +402,7 @@ function acceptRevisionsInParagraph(paragraph, options) {
349
402
  }
350
403
  newContent.push(item);
351
404
  }
352
- else if (item instanceof Field_1.ComplexField && item.hasResultRevisions()) {
405
+ else if (item instanceof Field_js_1.ComplexField && item.hasResultRevisions()) {
353
406
  const fieldRevisions = item.getResultRevisions();
354
407
  const revisionsToKeep = [];
355
408
  for (const rev of fieldRevisions) {
@@ -389,6 +442,10 @@ function acceptRevisionsInParagraph(paragraph, options) {
389
442
  paragraph.clearParagraphPropertiesChange();
390
443
  result.propertyChangesAccepted++;
391
444
  }
445
+ if (formatting.paragraphMarkRunPropertiesChange) {
446
+ paragraph.formatting.paragraphMarkRunPropertiesChange = undefined;
447
+ result.propertyChangesAccepted++;
448
+ }
392
449
  }
393
450
  if (options.acceptDeletions) {
394
451
  const formatting = paragraph.getFormatting();
@@ -408,7 +465,7 @@ function acceptRevisionsInParagraph(paragraph, options) {
408
465
  }
409
466
  function paragraphHasRevisions(paragraph) {
410
467
  const content = paragraph.getContent();
411
- if (content.some((item) => item instanceof Revision_1.Revision)) {
468
+ if (content.some((item) => item instanceof Revision_js_1.Revision)) {
412
469
  return true;
413
470
  }
414
471
  const formatting = paragraph.getFormatting();
@@ -419,7 +476,7 @@ function paragraphHasRevisions(paragraph) {
419
476
  }
420
477
  function getRevisionsFromParagraph(paragraph) {
421
478
  const content = paragraph.getContent();
422
- return content.filter((item) => item instanceof Revision_1.Revision);
479
+ return content.filter((item) => item instanceof Revision_js_1.Revision);
423
480
  }
424
481
  function countRevisionsByType(doc) {
425
482
  const counts = new Map();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryRevisionAcceptor.js","sourceRoot":"","sources":["../../src/processors/InMemoryRevisionAcceptor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * InMemoryRevisionAcceptor - Accept revisions by transforming the in-memory object model\n *\n * This approach follows the industry standard (OpenXML PowerTools, Aspose.Words):\n * - Transforms Revision objects in paragraph.content[] to their \"accepted\" state\n * - For insertions: Unwrap - extract child Runs/Hyperlinks into parent paragraph\n * - For deletions: Remove - delete the revision and its content from the model\n * - For property changes: Remove the change metadata, keep the current formatting\n *\n * Unlike the raw XML approach (acceptRevisions.ts), this allows subsequent modifications\n * to the in-memory model to be correctly serialized on save().\n *\n * @see https://github.com/OfficeDev/Open-Xml-PowerTools - RevisionAccepter.cs\n * @see https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2007/ee836138(v=office.12)\n */\n\nimport type { Document } from '../core/Document.js';\nimport { Paragraph } from '../elements/Paragraph.js';\nimport type { ParagraphContent } from '../elements/Paragraph.js';\nimport { Revision, RevisionType } from '../elements/Revision.js';\nimport {\n isRunContent,\n isHyperlinkContent,\n isImageRunContent,\n} from '../elements/RevisionContent.js';\nimport { ComplexField } from '../elements/Field.js';\nimport { Table } from '../elements/Table.js';\nimport { getGlobalLogger, createScopedLogger, ILogger } from '../utils/logger.js';\n\n/**\n * Get scoped logger for this module\n */\nfunction getLogger(): ILogger {\n return createScopedLogger(getGlobalLogger(), 'InMemoryRevisionAcceptor');\n}\n\n/**\n * Options for accepting revisions\n */\nexport interface AcceptRevisionsOptions {\n /** Accept insertion revisions (w:ins) - default: true */\n acceptInsertions?: boolean;\n /** Accept deletion revisions (w:del) - default: true */\n acceptDeletions?: boolean;\n /** Accept move operations (w:moveFrom, w:moveTo) - default: true */\n acceptMoves?: boolean;\n /** Accept property change revisions (rPrChange, pPrChange, etc.) - default: true */\n acceptPropertyChanges?: boolean;\n /** Remove empty tables after revision acceptance - default: true */\n cleanupEmptyTables?: boolean;\n}\n\n/**\n * Result of accepting revisions\n */\nexport interface AcceptRevisionsResult {\n /** Number of insertions accepted */\n insertionsAccepted: number;\n /** Number of deletions accepted */\n deletionsAccepted: number;\n /** Number of move operations accepted */\n movesAccepted: number;\n /** Number of property changes accepted */\n propertyChangesAccepted: number;\n /** Total revisions processed */\n totalAccepted: number;\n /** Number of empty tables removed during cleanup */\n emptyTablesRemoved: number;\n}\n\n/**\n * Revision types that represent property/formatting changes\n */\nconst PROPERTY_REVISION_TYPES: RevisionType[] = [\n 'runPropertiesChange',\n 'paragraphPropertiesChange',\n 'tablePropertiesChange',\n 'tableExceptionPropertiesChange',\n 'tableRowPropertiesChange',\n 'tableCellPropertiesChange',\n 'sectionPropertiesChange',\n 'numberingChange',\n];\n\n/**\n * Strip revision markup from raw XML string.\n * Used for nested tables stored as raw XML that cannot be processed via the in-memory model.\n *\n * Follows the same rules as the main revision acceptor:\n * - Insertions: Keep content, remove wrapper tags\n * - Deletions: Remove entirely (content and tags)\n * - MoveFrom: Remove entirely (source of move)\n * - MoveTo: Keep content, remove wrapper\n * - Property changes: Remove change tracking elements\n * - Range markers: Remove boundary markers\n *\n * @param xml - Raw XML string containing revision markup\n * @returns Cleaned XML with revisions accepted\n */\nexport function stripRevisionsFromXml(xml: string): string {\n let result = xml;\n\n // Step 1: Remove range markers (must be done first)\n const rangePatterns = [\n /<w:moveFromRangeStart[^>]*(?:\\/>|>.*?<\\/w:moveFromRangeStart>)/gs,\n /<w:moveFromRangeEnd[^>]*(?:\\/>|>.*?<\\/w:moveFromRangeEnd>)/gs,\n /<w:moveToRangeStart[^>]*(?:\\/>|>.*?<\\/w:moveToRangeStart>)/gs,\n /<w:moveToRangeEnd[^>]*(?:\\/>|>.*?<\\/w:moveToRangeEnd>)/gs,\n /<w:customXmlInsRangeStart[^>]*(?:\\/>|>.*?<\\/w:customXmlInsRangeStart>)/gs,\n /<w:customXmlInsRangeEnd[^>]*(?:\\/>|>.*?<\\/w:customXmlInsRangeEnd>)/gs,\n /<w:customXmlDelRangeStart[^>]*(?:\\/>|>.*?<\\/w:customXmlDelRangeStart>)/gs,\n /<w:customXmlDelRangeEnd[^>]*(?:\\/>|>.*?<\\/w:customXmlDelRangeEnd>)/gs,\n ];\n for (const pattern of rangePatterns) {\n result = result.replace(pattern, '');\n }\n\n // Step 2: Remove property change elements\n const propChangePatterns = [\n /<w:rPrChange[^>]*>[\\s\\S]*?<\\/w:rPrChange>/g,\n /<w:pPrChange[^>]*>[\\s\\S]*?<\\/w:pPrChange>/g,\n /<w:tblPrChange[^>]*>[\\s\\S]*?<\\/w:tblPrChange>/g,\n /<w:tblPrExChange[^>]*>[\\s\\S]*?<\\/w:tblPrExChange>/g,\n /<w:tcPrChange[^>]*>[\\s\\S]*?<\\/w:tcPrChange>/g,\n /<w:trPrChange[^>]*>[\\s\\S]*?<\\/w:trPrChange>/g,\n /<w:sectPrChange[^>]*>[\\s\\S]*?<\\/w:sectPrChange>/g,\n /<w:tblGridChange[^>]*>[\\s\\S]*?<\\/w:tblGridChange>/g,\n /<w:numberingChange[^>]*>[\\s\\S]*?<\\/w:numberingChange>/g,\n ];\n for (const pattern of propChangePatterns) {\n result = result.replace(pattern, '');\n }\n\n // Step 3: Remove deletions entirely (including content)\n // Iterate until no more deletions (handles nested cases)\n let prevLen = 0;\n while (result.length !== prevLen) {\n prevLen = result.length;\n result = result.replace(/<w:del\\b[^>]*>[\\s\\S]*?<\\/w:del>/g, '');\n }\n result = result.replace(/<w:del\\b[^>]*\\/>/g, '');\n\n // Step 4: Remove moveFrom entirely (source of moved content)\n prevLen = 0;\n while (result.length !== prevLen) {\n prevLen = result.length;\n result = result.replace(/<w:moveFrom\\b[^>]*>[\\s\\S]*?<\\/w:moveFrom>/g, '');\n }\n result = result.replace(/<w:moveFrom\\b[^>]*\\/>/g, '');\n\n // Step 5: Unwrap moveTo (keep content, remove wrapper)\n result = result.replace(/<\\/w:moveTo>/g, '');\n result = result.replace(/<w:moveTo\\b[^>]*>/g, '');\n\n // Step 6: Unwrap insertions (keep content, remove wrapper)\n result = result.replace(/<\\/w:ins>/g, '');\n result = result.replace(/<w:ins\\b[^>]*>/g, '');\n\n // Step 7: Clean up orphaned tags\n result = result.replace(/<w:ins\\b[^>]*\\/>/g, '');\n result = result.replace(/<w:del\\b[^>]*\\/>/g, '');\n result = result.replace(/<w:moveFrom\\b[^>]*\\/>/g, '');\n result = result.replace(/<w:moveTo\\b[^>]*\\/>/g, '');\n\n return result;\n}\n\n/**\n * Accept all revisions in the document by transforming the in-memory model.\n *\n * This is the industry-standard approach used by OpenXML PowerTools, Aspose.Words,\n * and other production DOCX libraries. It allows subsequent modifications to the\n * document to work correctly.\n *\n * @param doc - Document to process\n * @param options - Options for which revision types to accept\n * @returns Result with counts of accepted revisions\n */\nexport function acceptRevisionsInMemory(\n doc: Document,\n options: AcceptRevisionsOptions = {}\n): AcceptRevisionsResult {\n const logger = getLogger();\n const opts: Required<AcceptRevisionsOptions> = {\n acceptInsertions: options.acceptInsertions ?? true,\n acceptDeletions: options.acceptDeletions ?? true,\n acceptMoves: options.acceptMoves ?? true,\n acceptPropertyChanges: options.acceptPropertyChanges ?? true,\n cleanupEmptyTables: options.cleanupEmptyTables ?? true,\n };\n\n const result: AcceptRevisionsResult = {\n insertionsAccepted: 0,\n deletionsAccepted: 0,\n movesAccepted: 0,\n propertyChangesAccepted: 0,\n totalAccepted: 0,\n emptyTablesRemoved: 0,\n };\n\n logger.info('Accepting revisions in-memory', { options: opts });\n\n // Validate move pairs before accepting if moves are being accepted\n // Orphaned moves could result in content loss (moveFrom without moveTo = content deleted)\n if (opts.acceptMoves) {\n const revisionManager = doc.getRevisionManager();\n if (revisionManager) {\n const movePairValidation = revisionManager.validateMovePairs();\n if (!movePairValidation.valid) {\n if (movePairValidation.orphanedMoveFrom.length > 0) {\n logger.warn(\n 'Orphaned moveFrom revisions detected - accepting these will DELETE content permanently ' +\n '(content was moved from here but no moveTo destination exists)',\n { orphanedMoveIds: movePairValidation.orphanedMoveFrom }\n );\n }\n if (movePairValidation.orphanedMoveTo.length > 0) {\n logger.warn(\n 'Orphaned moveTo revisions detected - content may be duplicated ' +\n '(content moved to here but no moveFrom source exists)',\n { orphanedMoveIds: movePairValidation.orphanedMoveTo }\n );\n }\n }\n }\n }\n\n // Process all paragraphs in the document body\n const paragraphs = doc.getAllParagraphs();\n for (const paragraph of paragraphs) {\n const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n }\n\n // Process paragraphs in tables and clear table/row/cell property changes\n const tables = doc.getTables();\n for (const table of tables) {\n // Clear tblPrChange on table\n if (opts.acceptPropertyChanges && table.getTblPrChange()) {\n table.clearTblPrChange();\n result.propertyChangesAccepted++;\n }\n\n // Row-level tracked ins / del (CT_TrPr: w:ins / w:del per ECMA-376\n // §17.13.5.19 / §17.13.5.14) — these mark the ENTIRE row as a tracked\n // insertion or deletion. Previously the acceptor only cleared the\n // tcPrChange / trPrChange / cellRevision metadata and silently ignored\n // row-level markers, so deleted rows persisted and inserted rows kept\n // their pending state. Collect deletion indices up front so we can\n // splice them out after iteration (reverse order to keep indices stable).\n const rowsToRemove: number[] = [];\n const allRows = table.getRows();\n for (let rowIdx = 0; rowIdx < allRows.length; rowIdx++) {\n const row = allRows[rowIdx]!;\n const fmt = row.getFormatting();\n if (fmt.rowInsertion && opts.acceptInsertions) {\n row.setRowInsertion(undefined);\n result.insertionsAccepted++;\n }\n if (fmt.rowDeletion && opts.acceptDeletions) {\n rowsToRemove.push(rowIdx);\n result.deletionsAccepted++;\n }\n }\n for (let i = rowsToRemove.length - 1; i >= 0; i--) {\n table._removeRowAtIndex(rowsToRemove[i]!);\n }\n\n for (const row of table.getRows()) {\n // Clear trPrChange on row\n if (opts.acceptPropertyChanges && row.getTrPrChange()) {\n row.clearTrPrChange();\n result.propertyChangesAccepted++;\n }\n\n for (const cell of row.getCells()) {\n // Clear tcPrChange on cell\n if (opts.acceptPropertyChanges && cell.getTcPrChange()) {\n cell.clearTcPrChange();\n result.propertyChangesAccepted++;\n }\n\n // Route cellIns / cellDel / cellMerge by their semantic revision type\n // (per ECMA-376 §17.13.5.4-6). Previously all three were lumped under\n // `acceptPropertyChanges`, which meant `{ acceptInsertions: true }`\n // alone never cleared a cellIns marker, and `{ acceptPropertyChanges:\n // true }` alone cleared everything including insertions. Correct\n // mapping:\n // - tableCellInsert (w:cellIns) → acceptInsertions\n // - tableCellDelete (w:cellDel) → acceptDeletions\n // - tableCellMerge (w:cellMerge) → acceptPropertyChanges\n const cellRev = cell.getCellRevision();\n if (cellRev) {\n const revType = cellRev.getType();\n if (revType === 'tableCellInsert' && opts.acceptInsertions) {\n cell.clearCellRevision();\n result.insertionsAccepted++;\n } else if (revType === 'tableCellDelete' && opts.acceptDeletions) {\n cell.clearCellRevision();\n result.deletionsAccepted++;\n } else if (revType === 'tableCellMerge' && opts.acceptPropertyChanges) {\n cell.clearCellRevision();\n result.propertyChangesAccepted++;\n }\n }\n\n // Process paragraphs in the cell\n for (const paragraph of cell.getParagraphs()) {\n const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n }\n\n // Process raw nested content (nested tables stored as XML)\n // These cannot be processed via the in-memory model, so we use XML-based stripping\n if (cell.hasRawNestedContent()) {\n const rawContent = cell.getRawNestedContent();\n for (let i = 0; i < rawContent.length; i++) {\n const item = rawContent[i];\n if (item) {\n const cleanedXml = stripRevisionsFromXml(item.xml);\n if (cleanedXml !== item.xml) {\n cell.updateRawNestedContent(i, cleanedXml);\n // Count revisions stripped from nested content\n // We can't distinguish types in raw XML, so count as property changes\n result.propertyChangesAccepted++;\n logger.debug('Stripped revisions from nested content', {\n type: item.type,\n position: item.position,\n originalLength: item.xml.length,\n cleanedLength: cleanedXml.length,\n });\n }\n }\n }\n }\n }\n }\n }\n\n // Process paragraphs in headers\n const headerFooterManager = doc.getHeaderFooterManager();\n if (headerFooterManager) {\n const headers = headerFooterManager.getAllHeaders();\n for (const headerEntry of headers) {\n const elements = headerEntry.header.getElements();\n for (const element of elements) {\n // Element can be Paragraph or Table - use instanceof for type safety\n if (element instanceof Paragraph) {\n const paragraphResult = acceptRevisionsInParagraph(element, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n } else if (element instanceof Table) {\n // It's a Table - process its cells\n for (const row of element.getRows()) {\n for (const cell of row.getCells()) {\n for (const paragraph of cell.getParagraphs()) {\n const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n }\n // Process raw nested content in header tables\n if (cell.hasRawNestedContent()) {\n const rawContent = cell.getRawNestedContent();\n for (let i = 0; i < rawContent.length; i++) {\n const item = rawContent[i];\n if (item) {\n const cleanedXml = stripRevisionsFromXml(item.xml);\n if (cleanedXml !== item.xml) {\n cell.updateRawNestedContent(i, cleanedXml);\n result.propertyChangesAccepted++;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Process paragraphs in footers\n const footers = headerFooterManager.getAllFooters();\n for (const footerEntry of footers) {\n const elements = footerEntry.footer.getElements();\n for (const element of elements) {\n // Element can be Paragraph or Table - use instanceof for type safety\n if (element instanceof Paragraph) {\n const paragraphResult = acceptRevisionsInParagraph(element, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n } else if (element instanceof Table) {\n // It's a Table - process its cells\n for (const row of element.getRows()) {\n for (const cell of row.getCells()) {\n for (const paragraph of cell.getParagraphs()) {\n const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n }\n // Process raw nested content in footer tables\n if (cell.hasRawNestedContent()) {\n const rawContent = cell.getRawNestedContent();\n for (let i = 0; i < rawContent.length; i++) {\n const item = rawContent[i];\n if (item) {\n const cleanedXml = stripRevisionsFromXml(item.xml);\n if (cleanedXml !== item.xml) {\n cell.updateRawNestedContent(i, cleanedXml);\n result.propertyChangesAccepted++;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Walk footnote and endnote paragraphs. Per ECMA-376 §17.11.4 /\n // §17.11.15, notes can hold any block-level content including\n // tracked changes; programmatically-added Revision objects on note\n // paragraphs (e.g.\n // `footnote.getParagraphs()[0].addContent(new Revision(...))`)\n // were never visited by the in-memory acceptor and stayed in the\n // model after `acceptAllRevisions()`. The raw-XML acceptor\n // (iter 135) already handles existing-document note revisions on\n // load, so this loop's job is the programmatic-API path.\n const footnoteManager = doc.getFootnoteManager?.();\n if (footnoteManager) {\n for (const fn of footnoteManager.getAllFootnotes()) {\n for (const paragraph of fn.getParagraphs()) {\n const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n }\n }\n }\n const endnoteManager = doc.getEndnoteManager?.();\n if (endnoteManager) {\n for (const en of endnoteManager.getAllEndnotes()) {\n for (const paragraph of en.getParagraphs()) {\n const paragraphResult = acceptRevisionsInParagraph(paragraph, opts);\n result.insertionsAccepted += paragraphResult.insertionsAccepted;\n result.deletionsAccepted += paragraphResult.deletionsAccepted;\n result.movesAccepted += paragraphResult.movesAccepted;\n result.propertyChangesAccepted += paragraphResult.propertyChangesAccepted;\n }\n }\n }\n\n // Clear sectPrChange on document section\n if (opts.acceptPropertyChanges) {\n const section = doc.getSection();\n if (section?.getSectPrChange()) {\n section.clearSectPrChange();\n result.propertyChangesAccepted++;\n }\n }\n\n // Clear revision manager\n const revisionManager = doc.getRevisionManager();\n if (revisionManager) {\n revisionManager.clear();\n }\n\n // Disable track changes setting\n doc.disableTrackChanges();\n\n // Cleanup empty tables if enabled\n // This removes tables that have no visible content after revision acceptance\n // (e.g., tables where all content was deleted via tracked changes)\n if (opts.cleanupEmptyTables) {\n result.emptyTablesRemoved = cleanupEmptyTables(doc, logger);\n }\n\n result.totalAccepted =\n result.insertionsAccepted +\n result.deletionsAccepted +\n result.movesAccepted +\n result.propertyChangesAccepted;\n\n logger.info('Revisions accepted in-memory', {\n insertions: result.insertionsAccepted,\n deletions: result.deletionsAccepted,\n moves: result.movesAccepted,\n propertyChanges: result.propertyChangesAccepted,\n total: result.totalAccepted,\n emptyTablesRemoved: result.emptyTablesRemoved,\n });\n\n return result;\n}\n\n/**\n * Accept revisions in a single paragraph by transforming its content array.\n *\n * The transformation follows these rules:\n * - Insertions (w:ins): Unwrap - extract child content into parent position\n * - Deletions (w:del): Remove - delete revision and its content\n * - MoveFrom (w:moveFrom): Remove - content exists at moveTo destination\n * - MoveTo (w:moveTo): Unwrap - keep content, remove wrapper\n * - Property changes: Remove from model (current formatting is kept)\n *\n * @param paragraph - Paragraph to process\n * @param options - Options for which revision types to accept\n * @returns Result with counts of accepted revisions\n */\nfunction acceptRevisionsInParagraph(\n paragraph: Paragraph,\n options: Required<AcceptRevisionsOptions>\n): AcceptRevisionsResult {\n const result: AcceptRevisionsResult = {\n insertionsAccepted: 0,\n deletionsAccepted: 0,\n movesAccepted: 0,\n propertyChangesAccepted: 0,\n totalAccepted: 0,\n emptyTablesRemoved: 0,\n };\n\n const content = paragraph.getContent();\n const newContent: ParagraphContent[] = [];\n\n for (const item of content) {\n if (item instanceof Revision) {\n const revisionType = item.getType();\n\n // Handle insertion revisions (w:ins)\n if (revisionType === 'insert' && options.acceptInsertions) {\n // Unwrap: Extract child content into parent position\n const childContent = item.getContent();\n for (const child of childContent) {\n // Check ImageRun FIRST since ImageRun extends Run\n if (isImageRunContent(child)) {\n newContent.push(child);\n } else if (isRunContent(child)) {\n newContent.push(child);\n } else if (isHyperlinkContent(child)) {\n newContent.push(child);\n }\n }\n result.insertionsAccepted++;\n continue;\n }\n\n // Handle deletion revisions (w:del)\n if (revisionType === 'delete' && options.acceptDeletions) {\n // Remove: Don't add to newContent - content is deleted\n result.deletionsAccepted++;\n continue;\n }\n\n // Handle moveFrom revisions (source of moved content)\n if (revisionType === 'moveFrom' && options.acceptMoves) {\n // Remove: Content exists at moveTo destination\n result.movesAccepted++;\n continue;\n }\n\n // Handle moveTo revisions (destination of moved content)\n if (revisionType === 'moveTo' && options.acceptMoves) {\n // Unwrap: Keep content, remove wrapper\n const childContent = item.getContent();\n for (const child of childContent) {\n // Check ImageRun FIRST since ImageRun extends Run\n if (isImageRunContent(child)) {\n newContent.push(child);\n } else if (isRunContent(child)) {\n newContent.push(child);\n } else if (isHyperlinkContent(child)) {\n newContent.push(child);\n }\n }\n result.movesAccepted++;\n continue;\n }\n\n // Handle property change revisions\n if (PROPERTY_REVISION_TYPES.includes(revisionType) && options.acceptPropertyChanges) {\n // For property changes, the revision is metadata attached to runs\n // The current formatting (newProperties) is already applied to the run\n // We just need to remove the change tracking metadata\n // The content inside should be preserved\n const childContent = item.getContent();\n for (const child of childContent) {\n // Check ImageRun FIRST since ImageRun extends Run\n if (isImageRunContent(child)) {\n newContent.push(child);\n } else if (isRunContent(child)) {\n newContent.push(child);\n } else if (isHyperlinkContent(child)) {\n newContent.push(child);\n }\n }\n result.propertyChangesAccepted++;\n continue;\n }\n\n // If we reach here, this revision type is not being accepted\n // Keep it in the content\n newContent.push(item);\n } else if (item instanceof ComplexField && item.hasResultRevisions()) {\n // Accept revisions nested inside ComplexField result sections\n const fieldRevisions = item.getResultRevisions();\n const revisionsToKeep: Revision[] = [];\n\n for (const rev of fieldRevisions) {\n const revType = rev.getType();\n if (revType === 'insert' && options.acceptInsertions) {\n result.insertionsAccepted++;\n } else if (revType === 'delete' && options.acceptDeletions) {\n result.deletionsAccepted++;\n } else if (revType === 'moveTo' && options.acceptMoves) {\n result.movesAccepted++;\n } else if (revType === 'moveFrom' && options.acceptMoves) {\n result.movesAccepted++;\n } else {\n revisionsToKeep.push(rev);\n }\n }\n\n if (revisionsToKeep.length < fieldRevisions.length) {\n // Some revisions were accepted — use getAcceptedResultText() for correct interleaved ordering\n item.setResult(item.getAcceptedResultText());\n if (revisionsToKeep.length > 0) {\n item.setResultRevisions(revisionsToKeep);\n }\n }\n newContent.push(item);\n } else {\n // Non-revision content - keep as-is\n newContent.push(item);\n }\n }\n\n // Replace paragraph content with the transformed content\n paragraph.setContent(newContent);\n\n // Clear paragraph property change tracking (pPrChange) if accepting property changes\n // This removes the w:pPrChange element from the paragraph's formatting\n if (options.acceptPropertyChanges) {\n const formatting = paragraph.getFormatting();\n if (formatting.pPrChange) {\n paragraph.clearParagraphPropertiesChange();\n result.propertyChangesAccepted++;\n }\n // Paragraph-mark rPrChange (CT_ParaRPrChange, §17.3.1.30) — same\n // rationale as pPrChange: acceptance clears the \"previous\" snapshot,\n // current formatting (paragraphMarkRunProperties) stays intact.\n if (formatting.paragraphMarkRunPropertiesChange) {\n paragraph.formatting.paragraphMarkRunPropertiesChange = undefined;\n result.propertyChangesAccepted++;\n }\n }\n\n // Clear paragraph mark deletion tracking if accepting deletions\n // This removes the w:del element from w:pPr/w:rPr\n if (options.acceptDeletions) {\n const formatting = paragraph.getFormatting();\n if (formatting.paragraphMarkDeletion) {\n paragraph.clearParagraphMarkDeletion();\n result.deletionsAccepted++;\n }\n }\n\n // Clear paragraph mark insertion tracking if accepting insertions\n // This removes the w:ins element from w:pPr/w:rPr\n if (options.acceptInsertions) {\n const formatting = paragraph.getFormatting();\n if (formatting.paragraphMarkInsertion) {\n paragraph.clearParagraphMarkInsertion();\n result.insertionsAccepted++;\n }\n }\n\n return result;\n}\n\n/**\n * Check if a paragraph has any revisions\n */\nexport function paragraphHasRevisions(paragraph: Paragraph): boolean {\n const content = paragraph.getContent();\n if (content.some((item) => item instanceof Revision)) {\n return true;\n }\n // Also check paragraph mark revision markers in w:pPr/w:rPr\n const formatting = paragraph.getFormatting();\n if (formatting.paragraphMarkDeletion || formatting.paragraphMarkInsertion) {\n return true;\n }\n return false;\n}\n\n/**\n * Get all revisions from a paragraph\n */\nexport function getRevisionsFromParagraph(paragraph: Paragraph): Revision[] {\n const content = paragraph.getContent();\n return content.filter((item): item is Revision => item instanceof Revision);\n}\n\n/**\n * Count revisions by type in a document\n */\nexport function countRevisionsByType(doc: Document): Map<RevisionType, number> {\n const counts = new Map<RevisionType, number>();\n\n const paragraphs = doc.getAllParagraphs();\n for (const paragraph of paragraphs) {\n const revisions = getRevisionsFromParagraph(paragraph);\n for (const revision of revisions) {\n const type = revision.getType();\n counts.set(type, (counts.get(type) || 0) + 1);\n }\n }\n\n return counts;\n}\n\n/**\n * Remove tables that have no visible content after revision acceptance.\n *\n * A table is considered empty if ALL cells in ALL rows have no text content.\n * This handles cases where all table content was deleted via tracked changes -\n * the deletion markers are stripped but the empty table structure remains.\n *\n * @param doc - Document to clean up\n * @param logger - Logger instance for debug output\n * @returns Number of empty tables removed\n */\nfunction cleanupEmptyTables(doc: Document, logger: ILogger): number {\n const tables = doc.getTables();\n let removedCount = 0;\n const tablesToRemove: number[] = [];\n\n for (let tableIndex = 0; tableIndex < tables.length; tableIndex++) {\n const table = tables[tableIndex];\n if (!table) continue;\n\n let hasContent = false;\n const rows = table.getRows();\n\n for (const row of rows) {\n const cells = row.getCells();\n for (const cell of cells) {\n const paragraphs = cell.getParagraphs();\n for (const para of paragraphs) {\n const text = para.getText().trim();\n if (text.length > 0) {\n hasContent = true;\n break;\n }\n }\n if (hasContent) break;\n }\n if (hasContent) break;\n }\n\n if (!hasContent) {\n // Mark this table for removal (store index)\n tablesToRemove.push(tableIndex);\n logger.debug('Found empty table for removal', { tableIndex });\n }\n }\n\n // Remove tables in reverse order to preserve indices\n for (let i = tablesToRemove.length - 1; i >= 0; i--) {\n const tableIndex = tablesToRemove[i];\n if (tableIndex !== undefined && doc.removeTable(tableIndex)) {\n removedCount++;\n logger.debug('Removed empty table', { tableIndex });\n }\n }\n\n if (removedCount > 0) {\n logger.info('Empty table cleanup complete', { tablesRemoved: removedCount });\n }\n\n return removedCount;\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { Revision } from '../elements/Revision';
2
- import { RangeMarker } from '../elements/RangeMarker';
3
- import { Run } from '../elements/Run';
1
+ import { Revision } from '../elements/Revision.js';
2
+ import { RangeMarker } from '../elements/RangeMarker.js';
3
+ import { Run } from '../elements/Run.js';
4
4
  export interface MoveOperationOptions {
5
5
  author: string;
6
6
  content: Run | Run[];
@@ -23,7 +23,7 @@ export interface MoveOperationResult {
23
23
  }
24
24
  export declare class MoveOperationHelper {
25
25
  static createMoveOperation(options: MoveOperationOptions): MoveOperationResult;
26
- static addMoveOperation(sourceParagraph: import('../elements/Paragraph').Paragraph, destParagraph: import('../elements/Paragraph').Paragraph, options: MoveOperationOptions): MoveOperationResult;
26
+ static addMoveOperation(sourceParagraph: import('../elements/Paragraph.js').Paragraph, destParagraph: import('../elements/Paragraph.js').Paragraph, options: MoveOperationOptions): MoveOperationResult;
27
27
  static resetIdCounters(): void;
28
28
  }
29
29
  //# sourceMappingURL=MoveOperationHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MoveOperationHelper.d.ts","sourceRoot":"","sources":["../../src/processors/MoveOperationHelper.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAKzC,MAAM,WAAW,oBAAoB;IAEnC,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAE1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,MAAM,WAAW,mBAAmB;IAElC,MAAM,EAAE;QAEN,UAAU,EAAE,WAAW,CAAC;QAExB,QAAQ,EAAE,QAAQ,CAAC;QAEnB,QAAQ,EAAE,WAAW,CAAC;KACvB,CAAC;IAEF,WAAW,EAAE;QAEX,UAAU,EAAE,WAAW,CAAC;QAExB,MAAM,EAAE,QAAQ,CAAC;QAEjB,QAAQ,EAAE,WAAW,CAAC;KACvB,CAAC;IAEF,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,qBAAa,mBAAmB;IA+B9B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB;IAmF9E,MAAM,CAAC,gBAAgB,CACrB,eAAe,EAAE,OAAO,0BAA0B,EAAE,SAAS,EAC7D,aAAa,EAAE,OAAO,0BAA0B,EAAE,SAAS,EAC3D,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB;IAoBtB,MAAM,CAAC,eAAe,IAAI,IAAI;CAI/B"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MoveOperationHelper = void 0;
4
- const Revision_1 = require("../elements/Revision");
5
- const RangeMarker_1 = require("../elements/RangeMarker");
6
- const Run_1 = require("../elements/Run");
4
+ const Revision_js_1 = require("../elements/Revision.js");
5
+ const RangeMarker_js_1 = require("../elements/RangeMarker.js");
6
+ const Run_js_1 = require("../elements/Run.js");
7
7
  let globalMoveIdCounter = 0;
8
8
  let globalAnnotationIdCounter = 1000;
9
9
  class MoveOperationHelper {
@@ -15,19 +15,19 @@ class MoveOperationHelper {
15
15
  const moveFromId = getNextId();
16
16
  const moveToRangeId = getNextId();
17
17
  const moveToId = getNextId();
18
- const moveFromRangeStart = RangeMarker_1.RangeMarker.createMoveFromStart(moveFromRangeId, moveId, author, date);
19
- const moveFrom = Revision_1.Revision.createMoveFrom(author, content, moveId, date);
18
+ const moveFromRangeStart = RangeMarker_js_1.RangeMarker.createMoveFromStart(moveFromRangeId, moveId, author, date);
19
+ const moveFrom = Revision_js_1.Revision.createMoveFrom(author, content, moveId, date);
20
20
  moveFrom.setId(moveFromId);
21
- const moveFromRangeEnd = RangeMarker_1.RangeMarker.createMoveFromEnd(moveFromRangeId);
21
+ const moveFromRangeEnd = RangeMarker_js_1.RangeMarker.createMoveFromEnd(moveFromRangeId);
22
22
  const contentArray = Array.isArray(content) ? content : [content];
23
23
  const clonedContent = contentArray.map((run) => {
24
- const cloned = new Run_1.Run(run.getText(), { ...run.getFormatting() });
24
+ const cloned = new Run_js_1.Run(run.getText(), { ...run.getFormatting() });
25
25
  return cloned;
26
26
  });
27
- const moveToRangeStart = RangeMarker_1.RangeMarker.createMoveToStart(moveToRangeId, moveId, author, date);
28
- const moveTo = Revision_1.Revision.createMoveTo(author, clonedContent, moveId, date);
27
+ const moveToRangeStart = RangeMarker_js_1.RangeMarker.createMoveToStart(moveToRangeId, moveId, author, date);
28
+ const moveTo = Revision_js_1.Revision.createMoveTo(author, clonedContent, moveId, date);
29
29
  moveTo.setId(moveToId);
30
- const moveToRangeEnd = RangeMarker_1.RangeMarker.createMoveToEnd(moveToRangeId);
30
+ const moveToRangeEnd = RangeMarker_js_1.RangeMarker.createMoveToEnd(moveToRangeId);
31
31
  return {
32
32
  source: {
33
33
  rangeStart: moveFromRangeStart,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MoveOperationHelper.js","sourceRoot":"","sources":["../../src/processors/MoveOperationHelper.ts"],"names":[],"mappings":";;;AAmCA,yDAAmD;AACnD,+DAAyD;AACzD,+CAAyC;AA+CzC,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,IAAI,yBAAyB,GAAG,IAAI,CAAC;AAKrC,MAAa,mBAAmB;IA+B9B,MAAM,CAAC,mBAAmB,CAAC,OAA6B;QACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC;QAGvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAGjE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAI5E,MAAM,eAAe,GAAG,SAAS,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;QAG7B,MAAM,kBAAkB,GAAG,4BAAW,CAAC,mBAAmB,CACxD,eAAe,EACf,MAAM,EACN,MAAM,EACN,IAAI,CACL,CAAC;QAEF,MAAM,QAAQ,GAAG,sBAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACxE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE3B,MAAM,gBAAgB,GAAG,4BAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAGxE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAE7C,MAAM,MAAM,GAAG,IAAI,YAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,4BAAW,CAAC,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE5F,MAAM,MAAM,GAAG,sBAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEvB,MAAM,cAAc,GAAG,4BAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAElE,OAAO;YACL,MAAM,EAAE;gBACN,UAAU,EAAE,kBAAkB;gBAC9B,QAAQ;gBACR,QAAQ,EAAE,gBAAgB;aAC3B;YACD,WAAW,EAAE;gBACX,UAAU,EAAE,gBAAgB;gBAC5B,MAAM;gBACN,QAAQ,EAAE,cAAc;aACzB;YACD,MAAM;SACP,CAAC;IACJ,CAAC;IA0BD,MAAM,CAAC,gBAAgB,CACrB,eAA6D,EAC7D,aAA2D,EAC3D,OAA6B;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAGjD,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzD,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAGvD,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC5D,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrD,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAMD,MAAM,CAAC,eAAe;QACpB,mBAAmB,GAAG,CAAC,CAAC;QACxB,yBAAyB,GAAG,IAAI,CAAC;IACnC,CAAC;CACF;AA9ID,kDA8IC","sourcesContent":["/**\n * MoveOperationHelper - Creates complete move operations with range markers\n *\n * Per ECMA-376, move operations in tracked changes require:\n * 1. w:moveFromRangeStart (marks start of source region)\n * 2. w:moveFrom (contains the moved content)\n * 3. w:moveFromRangeEnd (marks end of source region)\n * 4. w:moveToRangeStart (marks start of destination region)\n * 5. w:moveTo (contains the moved content copy)\n * 6. w:moveToRangeEnd (marks end of destination region)\n *\n * The range markers and move elements share a common 'name' (for range markers)\n * and 'moveId' (for move elements) that links them together.\n *\n * @example\n * ```typescript\n * // Create a complete move operation\n * const moveOp = MoveOperationHelper.createMoveOperation({\n * author: 'John Doe',\n * content: [new Run('moved text')],\n * idProvider: () => document.getIdManager().getNextId(),\n * });\n *\n * // Add to source paragraph\n * sourceParagraph.addRangeMarker(moveOp.source.rangeStart);\n * sourceParagraph.addRevision(moveOp.source.moveFrom);\n * sourceParagraph.addRangeMarker(moveOp.source.rangeEnd);\n *\n * // Add to destination paragraph\n * destParagraph.addRangeMarker(moveOp.destination.rangeStart);\n * destParagraph.addRevision(moveOp.destination.moveTo);\n * destParagraph.addRangeMarker(moveOp.destination.rangeEnd);\n * ```\n */\n\nimport { Revision } from '../elements/Revision.js';\nimport { RangeMarker } from '../elements/RangeMarker.js';\nimport { Run } from '../elements/Run.js';\n\n/**\n * Options for creating a move operation\n */\nexport interface MoveOperationOptions {\n /** Author who made the move */\n author: string;\n /** Content being moved (Run or array of Runs) */\n content: Run | Run[];\n /** Date of the move (defaults to now) */\n date?: Date;\n /** ID provider function - returns the next available annotation ID */\n idProvider?: () => number;\n /** Optional move ID (auto-generated if not provided) */\n moveId?: string;\n}\n\n/**\n * Result of creating a move operation\n */\nexport interface MoveOperationResult {\n /** Elements to add to the source paragraph (where content was moved FROM) */\n source: {\n /** Range start marker (w:moveFromRangeStart) */\n rangeStart: RangeMarker;\n /** Move revision (w:moveFrom) */\n moveFrom: Revision;\n /** Range end marker (w:moveFromRangeEnd) */\n rangeEnd: RangeMarker;\n };\n /** Elements to add to the destination paragraph (where content was moved TO) */\n destination: {\n /** Range start marker (w:moveToRangeStart) */\n rangeStart: RangeMarker;\n /** Move revision (w:moveTo) */\n moveTo: Revision;\n /** Range end marker (w:moveToRangeEnd) */\n rangeEnd: RangeMarker;\n };\n /** The move ID linking all elements together */\n moveId: string;\n}\n\n/**\n * Simple ID counter for when no provider is specified\n */\nlet globalMoveIdCounter = 0;\nlet globalAnnotationIdCounter = 1000; // Start high to avoid conflicts\n\n/**\n * Helper class for creating complete move operations\n */\nexport class MoveOperationHelper {\n /**\n * Creates a complete move operation with all required elements.\n *\n * This generates:\n * - Source: w:moveFromRangeStart, w:moveFrom, w:moveFromRangeEnd\n * - Destination: w:moveToRangeStart, w:moveTo, w:moveToRangeEnd\n *\n * All elements are linked by the moveId (for revisions) and name (for range markers).\n *\n * @param options - Move operation options\n * @returns Complete move operation with all elements\n *\n * @example\n * ```typescript\n * const moveOp = MoveOperationHelper.createMoveOperation({\n * author: 'John Doe',\n * content: new Run('text to move'),\n * });\n *\n * // Add to source paragraph (where text was)\n * sourcePara.addRangeMarker(moveOp.source.rangeStart);\n * sourcePara.addRevision(moveOp.source.moveFrom);\n * sourcePara.addRangeMarker(moveOp.source.rangeEnd);\n *\n * // Add to destination paragraph (where text moved to)\n * destPara.addRangeMarker(moveOp.destination.rangeStart);\n * destPara.addRevision(moveOp.destination.moveTo);\n * destPara.addRangeMarker(moveOp.destination.rangeEnd);\n * ```\n */\n static createMoveOperation(options: MoveOperationOptions): MoveOperationResult {\n const { author, content, date = new Date() } = options;\n\n // Generate move ID if not provided\n const moveId = options.moveId || `move-${++globalMoveIdCounter}`;\n\n // Get IDs from provider or use simple counter\n const getNextId = options.idProvider || (() => ++globalAnnotationIdCounter);\n\n // Allocate IDs for all elements\n // Range markers use same ID for start/end pairs\n const moveFromRangeId = getNextId();\n const moveFromId = getNextId();\n const moveToRangeId = getNextId();\n const moveToId = getNextId();\n\n // Create source elements\n const moveFromRangeStart = RangeMarker.createMoveFromStart(\n moveFromRangeId,\n moveId,\n author,\n date\n );\n\n const moveFrom = Revision.createMoveFrom(author, content, moveId, date);\n moveFrom.setId(moveFromId);\n\n const moveFromRangeEnd = RangeMarker.createMoveFromEnd(moveFromRangeId);\n\n // Create destination elements (clone content for moveTo)\n const contentArray = Array.isArray(content) ? content : [content];\n const clonedContent = contentArray.map((run) => {\n // Clone the run to have independent content at destination\n const cloned = new Run(run.getText(), { ...run.getFormatting() });\n return cloned;\n });\n\n const moveToRangeStart = RangeMarker.createMoveToStart(moveToRangeId, moveId, author, date);\n\n const moveTo = Revision.createMoveTo(author, clonedContent, moveId, date);\n moveTo.setId(moveToId);\n\n const moveToRangeEnd = RangeMarker.createMoveToEnd(moveToRangeId);\n\n return {\n source: {\n rangeStart: moveFromRangeStart,\n moveFrom,\n rangeEnd: moveFromRangeEnd,\n },\n destination: {\n rangeStart: moveToRangeStart,\n moveTo,\n rangeEnd: moveToRangeEnd,\n },\n moveId,\n };\n }\n\n /**\n * Adds a complete move operation to source and destination paragraphs.\n *\n * This is a convenience method that creates the move operation and adds\n * all elements to the appropriate paragraphs in the correct order.\n *\n * @param sourceParagraph - Paragraph where content was moved FROM\n * @param destParagraph - Paragraph where content was moved TO\n * @param options - Move operation options\n * @returns The move operation result for reference\n *\n * @example\n * ```typescript\n * import { Paragraph } from 'docxmlater';\n *\n * const sourcePara = document.getParagraphs()[0];\n * const destPara = document.getParagraphs()[5];\n *\n * MoveOperationHelper.addMoveOperation(sourcePara, destPara, {\n * author: 'John Doe',\n * content: new Run('moved text'),\n * });\n * ```\n */\n static addMoveOperation(\n sourceParagraph: import('../elements/Paragraph.js').Paragraph,\n destParagraph: import('../elements/Paragraph.js').Paragraph,\n options: MoveOperationOptions\n ): MoveOperationResult {\n const moveOp = this.createMoveOperation(options);\n\n // Add to source paragraph in order\n sourceParagraph.addRangeMarker(moveOp.source.rangeStart);\n sourceParagraph.addRevision(moveOp.source.moveFrom);\n sourceParagraph.addRangeMarker(moveOp.source.rangeEnd);\n\n // Add to destination paragraph in order\n destParagraph.addRangeMarker(moveOp.destination.rangeStart);\n destParagraph.addRevision(moveOp.destination.moveTo);\n destParagraph.addRangeMarker(moveOp.destination.rangeEnd);\n\n return moveOp;\n }\n\n /**\n * Resets the global ID counters (for testing purposes).\n * @internal\n */\n static resetIdCounters(): void {\n globalMoveIdCounter = 0;\n globalAnnotationIdCounter = 1000;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { Document } from '../core/Document';
2
- import { Revision, RevisionType } from '../elements/Revision';
3
- import { ChangeCategory, ChangeLocation } from './ChangelogGenerator';
1
+ import type { Document } from '../core/Document.js';
2
+ import { Revision, RevisionType } from '../elements/Revision.js';
3
+ import { ChangeCategory, ChangeLocation } from './ChangelogGenerator.js';
4
4
  export type RevisionHandlingMode = 'accept_all' | 'preserve' | 'preserve_and_wrap';
5
5
  export interface RevisionProcessingOptions {
6
6
  mode: RevisionHandlingMode;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevisionAwareProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/RevisionAwareProcessor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RevisionAwareProcessor = void 0;
4
- const Revision_1 = require("../elements/Revision");
4
+ const Revision_js_1 = require("../elements/Revision.js");
5
5
  class RevisionAwareProcessor {
6
6
  static async prepare(doc, options) {
7
7
  const log = [];
@@ -203,7 +203,7 @@ class RevisionAwareProcessor {
203
203
  if (!run) {
204
204
  throw new Error(`Run at index ${runIndex} not found`);
205
205
  }
206
- const revision = new Revision_1.Revision({
206
+ const revision = new Revision_js_1.Revision({
207
207
  author,
208
208
  type,
209
209
  content: run,