docxmlater 10.1.4 → 10.1.6

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 (372) hide show
  1. package/README.md +759 -754
  2. package/dist/constants/legacyCompatFlags.js +1 -1
  3. package/dist/constants/legacyCompatFlags.js.map +1 -1
  4. package/dist/constants/limits.js.map +1 -1
  5. package/dist/core/Document.d.ts +51 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +486 -471
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +9 -9
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +1 -1
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentGenerator.d.ts +11 -11
  14. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  15. package/dist/core/DocumentGenerator.js +251 -251
  16. package/dist/core/DocumentGenerator.js.map +1 -1
  17. package/dist/core/DocumentIdManager.js.map +1 -1
  18. package/dist/core/DocumentParser.d.ts +15 -15
  19. package/dist/core/DocumentParser.d.ts.map +1 -1
  20. package/dist/core/DocumentParser.js +2123 -2155
  21. package/dist/core/DocumentParser.js.map +1 -1
  22. package/dist/core/DocumentValidator.d.ts.map +1 -1
  23. package/dist/core/DocumentValidator.js +2 -5
  24. package/dist/core/DocumentValidator.js.map +1 -1
  25. package/dist/core/Relationship.js.map +1 -1
  26. package/dist/core/RelationshipManager.d.ts.map +1 -1
  27. package/dist/core/RelationshipManager.js +3 -3
  28. package/dist/core/RelationshipManager.js.map +1 -1
  29. package/dist/elements/AlternateContent.js.map +1 -1
  30. package/dist/elements/Bookmark.d.ts.map +1 -1
  31. package/dist/elements/Bookmark.js +3 -1
  32. package/dist/elements/Bookmark.js.map +1 -1
  33. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  34. package/dist/elements/BookmarkManager.js.map +1 -1
  35. package/dist/elements/Comment.d.ts.map +1 -1
  36. package/dist/elements/Comment.js +9 -6
  37. package/dist/elements/Comment.js.map +1 -1
  38. package/dist/elements/CommentManager.d.ts.map +1 -1
  39. package/dist/elements/CommentManager.js +18 -17
  40. package/dist/elements/CommentManager.js.map +1 -1
  41. package/dist/elements/CommonTypes.d.ts +21 -21
  42. package/dist/elements/CommonTypes.d.ts.map +1 -1
  43. package/dist/elements/CommonTypes.js +56 -56
  44. package/dist/elements/CommonTypes.js.map +1 -1
  45. package/dist/elements/CustomXml.js.map +1 -1
  46. package/dist/elements/Endnote.d.ts.map +1 -1
  47. package/dist/elements/Endnote.js +6 -6
  48. package/dist/elements/Endnote.js.map +1 -1
  49. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  50. package/dist/elements/EndnoteManager.js +6 -7
  51. package/dist/elements/EndnoteManager.js.map +1 -1
  52. package/dist/elements/Field.d.ts.map +1 -1
  53. package/dist/elements/Field.js +82 -25
  54. package/dist/elements/Field.js.map +1 -1
  55. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  56. package/dist/elements/FieldHelpers.js.map +1 -1
  57. package/dist/elements/FontManager.d.ts.map +1 -1
  58. package/dist/elements/FontManager.js +1 -1
  59. package/dist/elements/FontManager.js.map +1 -1
  60. package/dist/elements/Footer.js +2 -2
  61. package/dist/elements/Footer.js.map +1 -1
  62. package/dist/elements/Footnote.d.ts.map +1 -1
  63. package/dist/elements/Footnote.js +6 -6
  64. package/dist/elements/Footnote.js.map +1 -1
  65. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  66. package/dist/elements/FootnoteManager.js +6 -7
  67. package/dist/elements/FootnoteManager.js.map +1 -1
  68. package/dist/elements/Header.js +2 -2
  69. package/dist/elements/Header.js.map +1 -1
  70. package/dist/elements/HeaderFooterManager.js.map +1 -1
  71. package/dist/elements/Hyperlink.d.ts +5 -3
  72. package/dist/elements/Hyperlink.d.ts.map +1 -1
  73. package/dist/elements/Hyperlink.js +134 -76
  74. package/dist/elements/Hyperlink.js.map +1 -1
  75. package/dist/elements/Image.d.ts.map +1 -1
  76. package/dist/elements/Image.js +238 -106
  77. package/dist/elements/Image.js.map +1 -1
  78. package/dist/elements/ImageManager.d.ts.map +1 -1
  79. package/dist/elements/ImageManager.js +1 -1
  80. package/dist/elements/ImageManager.js.map +1 -1
  81. package/dist/elements/ImageRun.js +1 -1
  82. package/dist/elements/ImageRun.js.map +1 -1
  83. package/dist/elements/MathElement.js.map +1 -1
  84. package/dist/elements/Paragraph.d.ts +24 -24
  85. package/dist/elements/Paragraph.d.ts.map +1 -1
  86. package/dist/elements/Paragraph.js +181 -188
  87. package/dist/elements/Paragraph.js.map +1 -1
  88. package/dist/elements/PreservedElement.js.map +1 -1
  89. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  90. package/dist/elements/PropertyChangeTypes.js +6 -6
  91. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  92. package/dist/elements/RangeMarker.d.ts.map +1 -1
  93. package/dist/elements/RangeMarker.js.map +1 -1
  94. package/dist/elements/Revision.d.ts.map +1 -1
  95. package/dist/elements/Revision.js +4 -5
  96. package/dist/elements/Revision.js.map +1 -1
  97. package/dist/elements/RevisionContent.js.map +1 -1
  98. package/dist/elements/RevisionManager.d.ts.map +1 -1
  99. package/dist/elements/RevisionManager.js +40 -48
  100. package/dist/elements/RevisionManager.js.map +1 -1
  101. package/dist/elements/Run.d.ts +16 -16
  102. package/dist/elements/Run.d.ts.map +1 -1
  103. package/dist/elements/Run.js +256 -238
  104. package/dist/elements/Run.js.map +1 -1
  105. package/dist/elements/Section.d.ts.map +1 -1
  106. package/dist/elements/Section.js +36 -11
  107. package/dist/elements/Section.js.map +1 -1
  108. package/dist/elements/Shape.d.ts.map +1 -1
  109. package/dist/elements/Shape.js.map +1 -1
  110. package/dist/elements/StructuredDocumentTag.d.ts +6 -6
  111. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  112. package/dist/elements/StructuredDocumentTag.js +99 -104
  113. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  114. package/dist/elements/Table.d.ts +11 -11
  115. package/dist/elements/Table.d.ts.map +1 -1
  116. package/dist/elements/Table.js +102 -107
  117. package/dist/elements/Table.js.map +1 -1
  118. package/dist/elements/TableCell.d.ts +10 -10
  119. package/dist/elements/TableCell.d.ts.map +1 -1
  120. package/dist/elements/TableCell.js +105 -106
  121. package/dist/elements/TableCell.js.map +1 -1
  122. package/dist/elements/TableGridChange.d.ts.map +1 -1
  123. package/dist/elements/TableGridChange.js.map +1 -1
  124. package/dist/elements/TableOfContents.d.ts.map +1 -1
  125. package/dist/elements/TableOfContents.js +4 -4
  126. package/dist/elements/TableOfContents.js.map +1 -1
  127. package/dist/elements/TableOfContentsElement.js.map +1 -1
  128. package/dist/elements/TableRow.d.ts.map +1 -1
  129. package/dist/elements/TableRow.js +13 -6
  130. package/dist/elements/TableRow.js.map +1 -1
  131. package/dist/elements/TextBox.d.ts.map +1 -1
  132. package/dist/elements/TextBox.js +3 -5
  133. package/dist/elements/TextBox.js.map +1 -1
  134. package/dist/formatting/AbstractNumbering.d.ts +4 -4
  135. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  136. package/dist/formatting/AbstractNumbering.js +54 -49
  137. package/dist/formatting/AbstractNumbering.js.map +1 -1
  138. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  139. package/dist/formatting/NumberingInstance.js +1 -3
  140. package/dist/formatting/NumberingInstance.js.map +1 -1
  141. package/dist/formatting/NumberingLevel.d.ts +5 -5
  142. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  143. package/dist/formatting/NumberingLevel.js +119 -125
  144. package/dist/formatting/NumberingLevel.js.map +1 -1
  145. package/dist/formatting/NumberingManager.d.ts +1 -0
  146. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  147. package/dist/formatting/NumberingManager.js +27 -9
  148. package/dist/formatting/NumberingManager.js.map +1 -1
  149. package/dist/formatting/Style.d.ts +11 -11
  150. package/dist/formatting/Style.d.ts.map +1 -1
  151. package/dist/formatting/Style.js +219 -247
  152. package/dist/formatting/Style.js.map +1 -1
  153. package/dist/formatting/StylesManager.d.ts +2 -2
  154. package/dist/formatting/StylesManager.d.ts.map +1 -1
  155. package/dist/formatting/StylesManager.js +96 -102
  156. package/dist/formatting/StylesManager.js.map +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts +1 -1
  158. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  159. package/dist/helpers/CleanupHelper.js +6 -6
  160. package/dist/helpers/CleanupHelper.js.map +1 -1
  161. package/dist/images/ImageOptimizer.js +7 -7
  162. package/dist/images/ImageOptimizer.js.map +1 -1
  163. package/dist/index.d.ts +9 -9
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js.map +1 -1
  166. package/dist/managers/DrawingManager.js.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  168. package/dist/tracking/DocumentTrackingContext.js +23 -7
  169. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  170. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  171. package/dist/tracking/TrackingContext.js.map +1 -1
  172. package/dist/types/compatibility-types.js.map +1 -1
  173. package/dist/types/formatting.js.map +1 -1
  174. package/dist/types/list-types.d.ts +6 -6
  175. package/dist/types/list-types.js.map +1 -1
  176. package/dist/types/settings-types.js.map +1 -1
  177. package/dist/types/styleConfig.d.ts +2 -2
  178. package/dist/types/styleConfig.js.map +1 -1
  179. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  180. package/dist/utils/ChangelogGenerator.js +97 -101
  181. package/dist/utils/ChangelogGenerator.js.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js +1 -1
  184. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  186. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  187. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  188. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  189. package/dist/utils/MoveOperationHelper.js +1 -1
  190. package/dist/utils/MoveOperationHelper.js.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  192. package/dist/utils/RevisionAwareProcessor.js +2 -4
  193. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  194. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  195. package/dist/utils/RevisionWalker.js +4 -12
  196. package/dist/utils/RevisionWalker.js.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  198. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  199. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  200. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  201. package/dist/utils/ShadingResolver.js +1 -1
  202. package/dist/utils/ShadingResolver.js.map +1 -1
  203. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  204. package/dist/utils/acceptRevisions.js +23 -12
  205. package/dist/utils/acceptRevisions.js.map +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  207. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  208. package/dist/utils/cnfStyleDecoder.js +40 -40
  209. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  210. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  211. package/dist/utils/corruptionDetection.js.map +1 -1
  212. package/dist/utils/dateFormatting.js.map +1 -1
  213. package/dist/utils/deepClone.js +1 -1
  214. package/dist/utils/deepClone.js.map +1 -1
  215. package/dist/utils/diagnostics.d.ts.map +1 -1
  216. package/dist/utils/diagnostics.js +1 -1
  217. package/dist/utils/diagnostics.js.map +1 -1
  218. package/dist/utils/errorHandling.js.map +1 -1
  219. package/dist/utils/formatting.d.ts.map +1 -1
  220. package/dist/utils/formatting.js +10 -2
  221. package/dist/utils/formatting.js.map +1 -1
  222. package/dist/utils/list-detection.d.ts +2 -2
  223. package/dist/utils/list-detection.d.ts.map +1 -1
  224. package/dist/utils/list-detection.js +21 -23
  225. package/dist/utils/list-detection.js.map +1 -1
  226. package/dist/utils/logger.d.ts.map +1 -1
  227. package/dist/utils/logger.js +12 -7
  228. package/dist/utils/logger.js.map +1 -1
  229. package/dist/utils/parsingHelpers.js.map +1 -1
  230. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  231. package/dist/utils/stripTrackedChanges.js +3 -3
  232. package/dist/utils/stripTrackedChanges.js.map +1 -1
  233. package/dist/utils/textDiff.d.ts +1 -1
  234. package/dist/utils/textDiff.js +8 -8
  235. package/dist/utils/textDiff.js.map +1 -1
  236. package/dist/utils/units.js.map +1 -1
  237. package/dist/utils/validation.d.ts.map +1 -1
  238. package/dist/utils/validation.js +24 -7
  239. package/dist/utils/validation.js.map +1 -1
  240. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  241. package/dist/utils/xmlSanitization.js +3 -3
  242. package/dist/utils/xmlSanitization.js.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  244. package/dist/validation/RevisionAutoFixer.js +5 -5
  245. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  246. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  247. package/dist/validation/RevisionValidator.js +7 -9
  248. package/dist/validation/RevisionValidator.js.map +1 -1
  249. package/dist/validation/ValidationRules.js +3 -3
  250. package/dist/validation/ValidationRules.js.map +1 -1
  251. package/dist/validation/index.js.map +1 -1
  252. package/dist/xml/XMLBuilder.d.ts +1 -1
  253. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  254. package/dist/xml/XMLBuilder.js +98 -100
  255. package/dist/xml/XMLBuilder.js.map +1 -1
  256. package/dist/xml/XMLParser.d.ts.map +1 -1
  257. package/dist/xml/XMLParser.js +61 -66
  258. package/dist/xml/XMLParser.js.map +1 -1
  259. package/dist/zip/ZipHandler.d.ts.map +1 -1
  260. package/dist/zip/ZipHandler.js.map +1 -1
  261. package/dist/zip/ZipReader.d.ts.map +1 -1
  262. package/dist/zip/ZipReader.js +1 -3
  263. package/dist/zip/ZipReader.js.map +1 -1
  264. package/dist/zip/ZipWriter.d.ts +1 -1
  265. package/dist/zip/ZipWriter.d.ts.map +1 -1
  266. package/dist/zip/ZipWriter.js +28 -36
  267. package/dist/zip/ZipWriter.js.map +1 -1
  268. package/dist/zip/types.js +1 -1
  269. package/dist/zip/types.js.map +1 -1
  270. package/package.json +92 -92
  271. package/src/__tests__/helper-methods.test.ts +512 -512
  272. package/src/constants/legacyCompatFlags.ts +138 -138
  273. package/src/constants/limits.ts +50 -50
  274. package/src/core/Document.ts +1010 -1145
  275. package/src/core/DocumentContent.ts +461 -467
  276. package/src/core/DocumentGenerator.ts +1133 -1104
  277. package/src/core/DocumentIdManager.ts +158 -158
  278. package/src/core/DocumentParser.ts +2347 -2716
  279. package/src/core/DocumentValidator.ts +363 -372
  280. package/src/core/Relationship.ts +367 -367
  281. package/src/core/RelationshipManager.ts +429 -428
  282. package/src/elements/AlternateContent.ts +42 -42
  283. package/src/elements/Bookmark.ts +212 -210
  284. package/src/elements/BookmarkManager.ts +247 -250
  285. package/src/elements/Comment.ts +356 -359
  286. package/src/elements/CommentManager.ts +499 -502
  287. package/src/elements/CommonTypes.ts +524 -549
  288. package/src/elements/CustomXml.ts +36 -36
  289. package/src/elements/Endnote.ts +221 -217
  290. package/src/elements/EndnoteManager.ts +246 -249
  291. package/src/elements/Field.ts +1292 -1233
  292. package/src/elements/FieldHelpers.ts +329 -333
  293. package/src/elements/FontManager.ts +336 -339
  294. package/src/elements/Footer.ts +269 -269
  295. package/src/elements/Footnote.ts +221 -217
  296. package/src/elements/FootnoteManager.ts +246 -249
  297. package/src/elements/Header.ts +269 -269
  298. package/src/elements/HeaderFooterManager.ts +219 -219
  299. package/src/elements/Hyperlink.ts +1288 -1193
  300. package/src/elements/Image.ts +1982 -1756
  301. package/src/elements/ImageManager.ts +437 -432
  302. package/src/elements/ImageRun.ts +59 -59
  303. package/src/elements/MathElement.ts +65 -65
  304. package/src/elements/Paragraph.ts +4347 -4287
  305. package/src/elements/PreservedElement.ts +53 -53
  306. package/src/elements/PropertyChangeTypes.ts +458 -442
  307. package/src/elements/RangeMarker.ts +382 -400
  308. package/src/elements/Revision.ts +1198 -1217
  309. package/src/elements/RevisionContent.ts +73 -73
  310. package/src/elements/RevisionManager.ts +1070 -1070
  311. package/src/elements/Run.ts +3103 -3073
  312. package/src/elements/Section.ts +1521 -1421
  313. package/src/elements/Shape.ts +884 -873
  314. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  315. package/src/elements/Table.ts +2468 -2524
  316. package/src/elements/TableCell.ts +1617 -1621
  317. package/src/elements/TableGridChange.ts +149 -151
  318. package/src/elements/TableOfContents.ts +701 -691
  319. package/src/elements/TableOfContentsElement.ts +89 -89
  320. package/src/elements/TableRow.ts +960 -929
  321. package/src/elements/TextBox.ts +766 -768
  322. package/src/formatting/AbstractNumbering.ts +580 -579
  323. package/src/formatting/NumberingInstance.ts +295 -299
  324. package/src/formatting/NumberingLevel.ts +981 -1040
  325. package/src/formatting/NumberingManager.ts +875 -827
  326. package/src/formatting/Style.ts +1785 -1879
  327. package/src/formatting/StylesManager.ts +1090 -1130
  328. package/src/helpers/CleanupHelper.ts +524 -524
  329. package/src/images/ImageOptimizer.ts +274 -274
  330. package/src/index.ts +559 -554
  331. package/src/managers/DrawingManager.ts +319 -319
  332. package/src/tracking/DocumentTrackingContext.ts +687 -674
  333. package/src/tracking/TrackingContext.ts +175 -173
  334. package/src/types/compatibility-types.ts +49 -49
  335. package/src/types/formatting.ts +210 -210
  336. package/src/types/list-types.ts +14 -14
  337. package/src/types/settings-types.ts +59 -59
  338. package/src/types/styleConfig.ts +189 -189
  339. package/src/utils/ChangelogGenerator.ts +1583 -1581
  340. package/src/utils/CompatibilityUpgrader.ts +235 -237
  341. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  342. package/src/utils/MoveOperationHelper.ts +233 -238
  343. package/src/utils/RevisionAwareProcessor.ts +518 -526
  344. package/src/utils/RevisionWalker.ts +427 -457
  345. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  346. package/src/utils/ShadingResolver.ts +105 -107
  347. package/src/utils/acceptRevisions.ts +723 -714
  348. package/src/utils/cnfStyleDecoder.ts +212 -217
  349. package/src/utils/corruptionDetection.ts +346 -345
  350. package/src/utils/dateFormatting.ts +20 -20
  351. package/src/utils/deepClone.ts +77 -78
  352. package/src/utils/diagnostics.ts +125 -129
  353. package/src/utils/errorHandling.ts +80 -80
  354. package/src/utils/formatting.ts +220 -213
  355. package/src/utils/list-detection.ts +32 -42
  356. package/src/utils/logger.ts +412 -404
  357. package/src/utils/parsingHelpers.ts +190 -190
  358. package/src/utils/stripTrackedChanges.ts +356 -353
  359. package/src/utils/textDiff.ts +100 -100
  360. package/src/utils/units.ts +421 -421
  361. package/src/utils/validation.ts +553 -542
  362. package/src/utils/xmlSanitization.ts +179 -182
  363. package/src/validation/RevisionAutoFixer.ts +541 -542
  364. package/src/validation/RevisionValidator.ts +470 -460
  365. package/src/validation/ValidationRules.ts +338 -338
  366. package/src/validation/index.ts +30 -30
  367. package/src/xml/XMLBuilder.ts +857 -871
  368. package/src/xml/XMLParser.ts +877 -919
  369. package/src/zip/ZipHandler.ts +629 -637
  370. package/src/zip/ZipReader.ts +295 -299
  371. package/src/zip/ZipWriter.ts +374 -390
  372. package/src/zip/types.ts +116 -116
@@ -19,6 +19,7 @@ class Hyperlink {
19
19
  docLocation;
20
20
  trackingContext;
21
21
  _parentParagraph;
22
+ _preTrackingFormatting;
22
23
  constructor(properties) {
23
24
  this.url = properties.url;
24
25
  this.anchor = properties.anchor;
@@ -34,14 +35,14 @@ class Hyperlink {
34
35
  `Use Hyperlink.createExternal() or Hyperlink.createInternal() to avoid ambiguity.`);
35
36
  }
36
37
  if (this._isEmpty) {
37
- this.text = "";
38
+ this.text = '';
38
39
  this.formatting = {};
39
- this.run = new Run_1.Run("", {});
40
+ this.run = new Run_1.Run('', {});
40
41
  return;
41
42
  }
42
- this.text = properties.text || this.url || "Link";
43
+ this.text = properties.text || this.url || 'Link';
43
44
  const validation = (0, validation_1.validateRunText)(this.text, {
44
- context: "Hyperlink text",
45
+ context: 'Hyperlink text',
45
46
  autoClean: properties.formatting?.cleanXmlFromText !== false,
46
47
  warnToConsole: true,
47
48
  });
@@ -49,10 +50,10 @@ class Hyperlink {
49
50
  this.text = validation.cleanedText;
50
51
  }
51
52
  this.formatting = {
52
- font: "Verdana",
53
+ font: 'Verdana',
53
54
  size: 12,
54
- color: "0000FF",
55
- underline: "single",
55
+ color: '0000FF',
56
+ underline: 'single',
56
57
  ...properties.formatting,
57
58
  };
58
59
  this.run = new Run_1.Run(this.text, this.formatting);
@@ -66,6 +67,37 @@ class Hyperlink {
66
67
  _getParentParagraph() {
67
68
  return this._parentParagraph;
68
69
  }
70
+ _applyFormattingRPrChange(previousFormatting) {
71
+ if (!this._preTrackingFormatting) {
72
+ this._preTrackingFormatting = { ...previousFormatting };
73
+ }
74
+ const baseline = this._preTrackingFormatting;
75
+ const current = this.formatting;
76
+ const previousProperties = {};
77
+ let hasChanges = false;
78
+ for (const key of Object.keys(baseline)) {
79
+ if (baseline[key] !== current[key]) {
80
+ previousProperties[key] = baseline[key];
81
+ hasChanges = true;
82
+ }
83
+ }
84
+ for (const key of Object.keys(current)) {
85
+ if (!(key in baseline) && current[key] !== undefined) {
86
+ previousProperties[key] = undefined;
87
+ hasChanges = true;
88
+ }
89
+ }
90
+ if (!hasChanges)
91
+ return;
92
+ const revisionId = this.trackingContext.getRevisionManager().consumeNextId();
93
+ const author = this.trackingContext.getAuthor();
94
+ this.run.setPropertyChangeRevision({
95
+ id: revisionId,
96
+ author,
97
+ date: new Date(),
98
+ previousProperties,
99
+ });
100
+ }
69
101
  getUrl() {
70
102
  return this.url;
71
103
  }
@@ -107,17 +139,29 @@ class Hyperlink {
107
139
  }
108
140
  setText(text) {
109
141
  const validation = (0, validation_1.validateRunText)(text, {
110
- context: "Hyperlink.setText",
142
+ context: 'Hyperlink.setText',
111
143
  autoClean: this.formatting.cleanXmlFromText !== false,
112
144
  warnToConsole: true,
113
145
  });
114
146
  const cleanedText = validation.cleanedText || text;
115
147
  const previousValue = this.text;
148
+ if (previousValue === cleanedText) {
149
+ return this;
150
+ }
151
+ if (this.trackingContext?.isEnabled() && this._parentParagraph) {
152
+ const author = this.trackingContext.getAuthor();
153
+ const oldHyperlink = this.clone();
154
+ this.text = cleanedText;
155
+ this.run.setText(cleanedText);
156
+ const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
157
+ const insertion = Revision_1.Revision.createInsertion(author, [this]);
158
+ this._parentParagraph.replaceContent(this, [deletion, insertion]);
159
+ this._parentParagraph = undefined;
160
+ this._preTrackingFormatting = undefined;
161
+ return this;
162
+ }
116
163
  this.text = cleanedText;
117
164
  this.run.setText(cleanedText);
118
- if (this.trackingContext?.isEnabled() && previousValue !== cleanedText) {
119
- this.trackingContext.trackHyperlinkChange(this, 'text', previousValue, cleanedText);
120
- }
121
165
  return this;
122
166
  }
123
167
  setRun(run) {
@@ -130,10 +174,21 @@ class Hyperlink {
130
174
  }
131
175
  setTooltip(tooltip) {
132
176
  const previousValue = this.tooltip;
133
- this.tooltip = tooltip;
134
- if (this.trackingContext?.isEnabled() && previousValue !== tooltip) {
135
- this.trackingContext.trackHyperlinkChange(this, 'tooltip', previousValue, tooltip);
177
+ if (previousValue === tooltip) {
178
+ return this;
179
+ }
180
+ if (this.trackingContext?.isEnabled() && this._parentParagraph) {
181
+ const author = this.trackingContext.getAuthor();
182
+ const oldHyperlink = this.clone();
183
+ this.tooltip = tooltip;
184
+ const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
185
+ const insertion = Revision_1.Revision.createInsertion(author, [this]);
186
+ this._parentParagraph.replaceContent(this, [deletion, insertion]);
187
+ this._parentParagraph = undefined;
188
+ this._preTrackingFormatting = undefined;
189
+ return this;
136
190
  }
191
+ this.tooltip = tooltip;
137
192
  return this;
138
193
  }
139
194
  getRelationshipId() {
@@ -159,7 +214,7 @@ class Hyperlink {
159
214
  this.url = url;
160
215
  this.relationshipId = undefined;
161
216
  if (this.run.getText() === oldUrl) {
162
- this.text = url || this.anchor || "Link";
217
+ this.text = url || this.anchor || 'Link';
163
218
  this.run.setText(this.text);
164
219
  }
165
220
  const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
@@ -171,7 +226,7 @@ class Hyperlink {
171
226
  this.url = url;
172
227
  this.relationshipId = undefined;
173
228
  if (this.run.getText() === oldUrl) {
174
- this.text = url || this.anchor || "Link";
229
+ this.text = url || this.anchor || 'Link';
175
230
  this.run.setText(this.text);
176
231
  }
177
232
  return this;
@@ -197,7 +252,7 @@ class Hyperlink {
197
252
  this.relationshipId = undefined;
198
253
  }
199
254
  if (this.run.getText() === oldAnchor) {
200
- this.text = anchor || this.url || "Link";
255
+ this.text = anchor || this.url || 'Link';
201
256
  this.run.setText(this.text);
202
257
  }
203
258
  const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
@@ -214,7 +269,7 @@ class Hyperlink {
214
269
  this.relationshipId = undefined;
215
270
  }
216
271
  if (this.run.getText() === oldAnchor) {
217
- this.text = anchor || this.url || "Link";
272
+ this.text = anchor || this.url || 'Link';
218
273
  this.run.setText(this.text);
219
274
  }
220
275
  return this;
@@ -223,7 +278,7 @@ class Hyperlink {
223
278
  return this.run;
224
279
  }
225
280
  setFormatting(formatting, options) {
226
- const previousValue = { ...this.formatting };
281
+ const previousFormatting = { ...this.formatting };
227
282
  if (options?.replace) {
228
283
  this.formatting = { ...formatting };
229
284
  }
@@ -234,7 +289,7 @@ class Hyperlink {
234
289
  this.run = new Run_1.Run(currentText, this.formatting);
235
290
  this.text = currentText;
236
291
  if (this.trackingContext?.isEnabled()) {
237
- this.trackingContext.trackHyperlinkChange(this, 'formatting', previousValue, this.formatting);
292
+ this._applyFormattingRPrChange(previousFormatting);
238
293
  }
239
294
  return this;
240
295
  }
@@ -263,56 +318,56 @@ class Hyperlink {
263
318
  return this.formatting.size;
264
319
  }
265
320
  setColor(color) {
266
- const previousValue = this.formatting.color;
321
+ const previousFormatting = { ...this.formatting };
267
322
  this.formatting.color = color;
268
323
  this.run = new Run_1.Run(this.text, this.formatting);
269
- if (this.trackingContext?.isEnabled() && previousValue !== color) {
270
- this.trackingContext.trackHyperlinkChange(this, 'color', previousValue, color);
324
+ if (this.trackingContext?.isEnabled() && previousFormatting.color !== color) {
325
+ this._applyFormattingRPrChange(previousFormatting);
271
326
  }
272
327
  return this;
273
328
  }
274
329
  setUnderline(underline) {
275
- const previousValue = this.formatting.underline;
330
+ const previousFormatting = { ...this.formatting };
276
331
  this.formatting.underline = underline;
277
332
  this.run = new Run_1.Run(this.text, this.formatting);
278
- if (this.trackingContext?.isEnabled() && previousValue !== underline) {
279
- this.trackingContext.trackHyperlinkChange(this, 'underline', previousValue, underline);
333
+ if (this.trackingContext?.isEnabled() && previousFormatting.underline !== underline) {
334
+ this._applyFormattingRPrChange(previousFormatting);
280
335
  }
281
336
  return this;
282
337
  }
283
338
  setBold(bold = true) {
284
- const previousValue = this.formatting.bold;
339
+ const previousFormatting = { ...this.formatting };
285
340
  this.formatting.bold = bold;
286
341
  this.run = new Run_1.Run(this.text, this.formatting);
287
- if (this.trackingContext?.isEnabled() && previousValue !== bold) {
288
- this.trackingContext.trackHyperlinkChange(this, 'bold', previousValue, bold);
342
+ if (this.trackingContext?.isEnabled() && previousFormatting.bold !== bold) {
343
+ this._applyFormattingRPrChange(previousFormatting);
289
344
  }
290
345
  return this;
291
346
  }
292
347
  setItalic(italic = true) {
293
- const previousValue = this.formatting.italic;
348
+ const previousFormatting = { ...this.formatting };
294
349
  this.formatting.italic = italic;
295
350
  this.run = new Run_1.Run(this.text, this.formatting);
296
- if (this.trackingContext?.isEnabled() && previousValue !== italic) {
297
- this.trackingContext.trackHyperlinkChange(this, 'italic', previousValue, italic);
351
+ if (this.trackingContext?.isEnabled() && previousFormatting.italic !== italic) {
352
+ this._applyFormattingRPrChange(previousFormatting);
298
353
  }
299
354
  return this;
300
355
  }
301
356
  setFont(font) {
302
- const previousValue = this.formatting.font;
357
+ const previousFormatting = { ...this.formatting };
303
358
  this.formatting.font = font;
304
359
  this.run = new Run_1.Run(this.text, this.formatting);
305
- if (this.trackingContext?.isEnabled() && previousValue !== font) {
306
- this.trackingContext.trackHyperlinkChange(this, 'font', previousValue, font);
360
+ if (this.trackingContext?.isEnabled() && previousFormatting.font !== font) {
361
+ this._applyFormattingRPrChange(previousFormatting);
307
362
  }
308
363
  return this;
309
364
  }
310
365
  setSize(size) {
311
- const previousValue = this.formatting.size;
366
+ const previousFormatting = { ...this.formatting };
312
367
  this.formatting.size = size;
313
368
  this.run = new Run_1.Run(this.text, this.formatting);
314
- if (this.trackingContext?.isEnabled() && previousValue !== size) {
315
- this.trackingContext.trackHyperlinkChange(this, 'size', previousValue, size);
369
+ if (this.trackingContext?.isEnabled() && previousFormatting.size !== size) {
370
+ this._applyFormattingRPrChange(previousFormatting);
316
371
  }
317
372
  return this;
318
373
  }
@@ -337,77 +392,76 @@ class Hyperlink {
337
392
  };
338
393
  }
339
394
  if (!this.url) {
340
- issues.push("No URL or anchor specified");
395
+ issues.push('No URL or anchor specified');
341
396
  return { valid: false, issues, fixed, originalUrl };
342
397
  }
343
398
  if (fixCommonIssues && fixedUrl) {
344
- if (!(/^[a-z]+:\/\//i.exec(fixedUrl))) {
345
- fixedUrl = "https://" + fixedUrl;
346
- fixed.push("Added missing protocol (https://)");
399
+ if (!/^[a-z]+:\/\//i.exec(fixedUrl)) {
400
+ fixedUrl = 'https://' + fixedUrl;
401
+ fixed.push('Added missing protocol (https://)');
347
402
  }
348
403
  const protocolMatch = /^([a-z]+:\/\/)/i.exec(fixedUrl);
349
404
  if (protocolMatch?.[1]) {
350
405
  const protocol = protocolMatch[1];
351
406
  const rest = fixedUrl.substring(protocol.length);
352
- const fixedRest = rest.replace(/\/\//g, "/");
407
+ const fixedRest = rest.replace(/\/\//g, '/');
353
408
  if (rest !== fixedRest) {
354
409
  fixedUrl = protocol + fixedRest;
355
- fixed.push("Fixed double slashes");
410
+ fixed.push('Fixed double slashes');
356
411
  }
357
412
  }
358
- if (fixedUrl.includes(" ")) {
359
- fixedUrl = fixedUrl.replace(/ /g, "%20");
360
- fixed.push("Encoded spaces as %20");
413
+ if (fixedUrl.includes(' ')) {
414
+ fixedUrl = fixedUrl.replace(/ /g, '%20');
415
+ fixed.push('Encoded spaces as %20');
361
416
  }
362
417
  if (/^https?:\/\/[^/]+\/.+\/$/.exec(fixedUrl)) {
363
- fixedUrl = fixedUrl.replace(/\/$/, "");
364
- fixed.push("Removed trailing slash");
418
+ fixedUrl = fixedUrl.replace(/\/$/, '');
419
+ fixed.push('Removed trailing slash');
365
420
  }
366
- fixedUrl = fixedUrl.replace(/^http:\/\//i, "https://");
367
- if (fixedUrl !== this.url && fixedUrl.startsWith("https://")) {
368
- fixed.push("Upgraded HTTP to HTTPS");
421
+ fixedUrl = fixedUrl.replace(/^http:\/\//i, 'https://');
422
+ if (fixedUrl !== this.url && fixedUrl.startsWith('https://')) {
423
+ fixed.push('Upgraded HTTP to HTTPS');
369
424
  }
370
425
  if (fixedUrl !== this.url) {
371
426
  this.setUrl(fixedUrl);
372
427
  }
373
428
  }
374
429
  if (checkAccessibility && fixedUrl?.match(/^https?:\/\//i)) {
375
- if (typeof fetch === "undefined") {
376
- issues.push("Network validation unavailable: fetch API not supported in this environment");
430
+ if (typeof fetch === 'undefined') {
431
+ issues.push('Network validation unavailable: fetch API not supported in this environment');
377
432
  }
378
433
  else {
379
434
  try {
380
435
  const controller = new AbortController();
381
436
  const timeoutId = setTimeout(() => controller.abort(), timeout);
382
437
  const response = await fetch(fixedUrl, {
383
- method: "HEAD",
438
+ method: 'HEAD',
384
439
  signal: controller.signal,
385
- redirect: "follow",
440
+ redirect: 'follow',
386
441
  });
387
442
  clearTimeout(timeoutId);
388
443
  if (!response.ok) {
389
- issues.push(`HTTP ${response.status}: ${response.statusText || "Error"}`);
444
+ issues.push(`HTTP ${response.status}: ${response.statusText || 'Error'}`);
390
445
  }
391
446
  }
392
447
  catch (error) {
393
448
  const isErrorWithName = (err) => {
394
- return typeof err === "object" && err !== null && "name" in err;
449
+ return typeof err === 'object' && err !== null && 'name' in err;
395
450
  };
396
451
  const isErrorWithMessage = (err) => {
397
- return typeof err === "object" && err !== null && "message" in err;
452
+ return typeof err === 'object' && err !== null && 'message' in err;
398
453
  };
399
- if (isErrorWithName(error) && error.name === "AbortError") {
454
+ if (isErrorWithName(error) && error.name === 'AbortError') {
400
455
  issues.push(`Timeout after ${timeout}ms`);
401
456
  }
402
- else if (isErrorWithMessage(error) &&
403
- error.message?.includes("fetch")) {
457
+ else if (isErrorWithMessage(error) && error.message?.includes('fetch')) {
404
458
  issues.push(`Unreachable: ${error.message}`);
405
459
  }
406
460
  else if (isErrorWithMessage(error)) {
407
461
  issues.push(`Network error: ${error.message}`);
408
462
  }
409
463
  else {
410
- issues.push("Network error: Unknown error");
464
+ issues.push('Network error: Unknown error');
411
465
  }
412
466
  }
413
467
  }
@@ -422,9 +476,9 @@ class Hyperlink {
422
476
  }
423
477
  resetToStandardFormatting() {
424
478
  const standardFormatting = {
425
- font: "Verdana",
426
- color: "0000FF",
427
- underline: "single",
479
+ font: 'Verdana',
480
+ color: '0000FF',
481
+ underline: 'single',
428
482
  bold: false,
429
483
  italic: false,
430
484
  strike: false,
@@ -452,13 +506,17 @@ class Hyperlink {
452
506
  });
453
507
  if (this.run) {
454
508
  cloned.run = new Run_1.Run(this.run.getText(), { ...this.run.getFormatting() });
509
+ const existingRPrChange = this.run.getPropertyChangeRevision();
510
+ if (existingRPrChange) {
511
+ cloned.run.setPropertyChangeRevision({ ...existingRPrChange });
512
+ }
455
513
  }
456
514
  return cloned;
457
515
  }
458
516
  toXML() {
459
517
  if (!this.url && !this.anchor && !this.relationshipId) {
460
- throw new Error("CRITICAL: Hyperlink must have either a URL (external link), anchor (internal link), or relationshipId. " +
461
- "Cannot generate valid XML for hyperlink without destination.");
518
+ throw new Error('CRITICAL: Hyperlink must have either a URL (external link), anchor (internal link), or relationshipId. ' +
519
+ 'Cannot generate valid XML for hyperlink without destination.');
462
520
  }
463
521
  if (this.url && !this.relationshipId) {
464
522
  throw new Error(`CRITICAL: External hyperlink to "${this.url}" is missing relationship ID. ` +
@@ -468,33 +526,33 @@ class Hyperlink {
468
526
  }
469
527
  const attributes = {};
470
528
  if (this.relationshipId) {
471
- attributes["r:id"] = this.relationshipId;
529
+ attributes['r:id'] = this.relationshipId;
472
530
  }
473
531
  if (this.anchor) {
474
- attributes["w:anchor"] = this.anchor;
532
+ attributes['w:anchor'] = this.anchor;
475
533
  }
476
534
  if (this.tooltip) {
477
- attributes["w:tooltip"] = this.tooltip;
535
+ attributes['w:tooltip'] = this.tooltip;
478
536
  }
479
537
  if (this.tgtFrame) {
480
- attributes["w:tgtFrame"] = this.tgtFrame;
538
+ attributes['w:tgtFrame'] = this.tgtFrame;
481
539
  }
482
540
  if (this.history) {
483
- attributes["w:history"] = this.history;
541
+ attributes['w:history'] = this.history;
484
542
  }
485
543
  if (this.docLocation) {
486
- attributes["w:docLocation"] = this.docLocation;
544
+ attributes['w:docLocation'] = this.docLocation;
487
545
  }
488
546
  if (this._isEmpty) {
489
547
  return {
490
- name: "w:hyperlink",
548
+ name: 'w:hyperlink',
491
549
  attributes,
492
550
  children: [],
493
551
  };
494
552
  }
495
553
  const runXml = this.run.toXML();
496
554
  return {
497
- name: "w:hyperlink",
555
+ name: 'w:hyperlink',
498
556
  attributes,
499
557
  children: [runXml],
500
558
  };