docxmlater 10.1.3 → 10.1.5

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 (371) 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 +50 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +483 -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.map +1 -1
  146. package/dist/formatting/NumberingManager.js +9 -9
  147. package/dist/formatting/NumberingManager.js.map +1 -1
  148. package/dist/formatting/Style.d.ts +11 -11
  149. package/dist/formatting/Style.d.ts.map +1 -1
  150. package/dist/formatting/Style.js +219 -247
  151. package/dist/formatting/Style.js.map +1 -1
  152. package/dist/formatting/StylesManager.d.ts +2 -2
  153. package/dist/formatting/StylesManager.d.ts.map +1 -1
  154. package/dist/formatting/StylesManager.js +96 -102
  155. package/dist/formatting/StylesManager.js.map +1 -1
  156. package/dist/helpers/CleanupHelper.d.ts +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  158. package/dist/helpers/CleanupHelper.js +6 -6
  159. package/dist/helpers/CleanupHelper.js.map +1 -1
  160. package/dist/images/ImageOptimizer.js +7 -7
  161. package/dist/images/ImageOptimizer.js.map +1 -1
  162. package/dist/index.d.ts +9 -9
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js.map +1 -1
  165. package/dist/managers/DrawingManager.js.map +1 -1
  166. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.js +23 -7
  168. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  169. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  170. package/dist/tracking/TrackingContext.js.map +1 -1
  171. package/dist/types/compatibility-types.js.map +1 -1
  172. package/dist/types/formatting.js.map +1 -1
  173. package/dist/types/list-types.d.ts +6 -6
  174. package/dist/types/list-types.js.map +1 -1
  175. package/dist/types/settings-types.js.map +1 -1
  176. package/dist/types/styleConfig.d.ts +2 -2
  177. package/dist/types/styleConfig.js.map +1 -1
  178. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  179. package/dist/utils/ChangelogGenerator.js +97 -101
  180. package/dist/utils/ChangelogGenerator.js.map +1 -1
  181. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.js +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  184. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  186. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  187. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  188. package/dist/utils/MoveOperationHelper.js +1 -1
  189. package/dist/utils/MoveOperationHelper.js.map +1 -1
  190. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.js +2 -4
  192. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  193. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  194. package/dist/utils/RevisionWalker.js +4 -12
  195. package/dist/utils/RevisionWalker.js.map +1 -1
  196. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  198. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  199. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  200. package/dist/utils/ShadingResolver.js +1 -1
  201. package/dist/utils/ShadingResolver.js.map +1 -1
  202. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  203. package/dist/utils/acceptRevisions.js +23 -12
  204. package/dist/utils/acceptRevisions.js.map +1 -1
  205. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  207. package/dist/utils/cnfStyleDecoder.js +40 -40
  208. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  209. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  210. package/dist/utils/corruptionDetection.js.map +1 -1
  211. package/dist/utils/dateFormatting.js.map +1 -1
  212. package/dist/utils/deepClone.js +1 -1
  213. package/dist/utils/deepClone.js.map +1 -1
  214. package/dist/utils/diagnostics.d.ts.map +1 -1
  215. package/dist/utils/diagnostics.js +1 -1
  216. package/dist/utils/diagnostics.js.map +1 -1
  217. package/dist/utils/errorHandling.js.map +1 -1
  218. package/dist/utils/formatting.d.ts.map +1 -1
  219. package/dist/utils/formatting.js +10 -2
  220. package/dist/utils/formatting.js.map +1 -1
  221. package/dist/utils/list-detection.d.ts +2 -2
  222. package/dist/utils/list-detection.d.ts.map +1 -1
  223. package/dist/utils/list-detection.js +21 -23
  224. package/dist/utils/list-detection.js.map +1 -1
  225. package/dist/utils/logger.d.ts.map +1 -1
  226. package/dist/utils/logger.js +12 -7
  227. package/dist/utils/logger.js.map +1 -1
  228. package/dist/utils/parsingHelpers.js.map +1 -1
  229. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  230. package/dist/utils/stripTrackedChanges.js +3 -3
  231. package/dist/utils/stripTrackedChanges.js.map +1 -1
  232. package/dist/utils/textDiff.d.ts +1 -1
  233. package/dist/utils/textDiff.js +8 -8
  234. package/dist/utils/textDiff.js.map +1 -1
  235. package/dist/utils/units.js.map +1 -1
  236. package/dist/utils/validation.d.ts.map +1 -1
  237. package/dist/utils/validation.js +24 -7
  238. package/dist/utils/validation.js.map +1 -1
  239. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  240. package/dist/utils/xmlSanitization.js +3 -3
  241. package/dist/utils/xmlSanitization.js.map +1 -1
  242. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.js +5 -5
  244. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  245. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  246. package/dist/validation/RevisionValidator.js +7 -9
  247. package/dist/validation/RevisionValidator.js.map +1 -1
  248. package/dist/validation/ValidationRules.js +3 -3
  249. package/dist/validation/ValidationRules.js.map +1 -1
  250. package/dist/validation/index.js.map +1 -1
  251. package/dist/xml/XMLBuilder.d.ts +1 -1
  252. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  253. package/dist/xml/XMLBuilder.js +98 -100
  254. package/dist/xml/XMLBuilder.js.map +1 -1
  255. package/dist/xml/XMLParser.d.ts.map +1 -1
  256. package/dist/xml/XMLParser.js +61 -66
  257. package/dist/xml/XMLParser.js.map +1 -1
  258. package/dist/zip/ZipHandler.d.ts.map +1 -1
  259. package/dist/zip/ZipHandler.js.map +1 -1
  260. package/dist/zip/ZipReader.d.ts.map +1 -1
  261. package/dist/zip/ZipReader.js +1 -3
  262. package/dist/zip/ZipReader.js.map +1 -1
  263. package/dist/zip/ZipWriter.d.ts +1 -1
  264. package/dist/zip/ZipWriter.d.ts.map +1 -1
  265. package/dist/zip/ZipWriter.js +28 -36
  266. package/dist/zip/ZipWriter.js.map +1 -1
  267. package/dist/zip/types.js +1 -1
  268. package/dist/zip/types.js.map +1 -1
  269. package/package.json +92 -92
  270. package/src/__tests__/helper-methods.test.ts +512 -512
  271. package/src/constants/legacyCompatFlags.ts +138 -138
  272. package/src/constants/limits.ts +50 -50
  273. package/src/core/Document.ts +985 -1145
  274. package/src/core/DocumentContent.ts +461 -467
  275. package/src/core/DocumentGenerator.ts +1133 -1104
  276. package/src/core/DocumentIdManager.ts +158 -158
  277. package/src/core/DocumentParser.ts +2347 -2716
  278. package/src/core/DocumentValidator.ts +363 -372
  279. package/src/core/Relationship.ts +367 -367
  280. package/src/core/RelationshipManager.ts +429 -428
  281. package/src/elements/AlternateContent.ts +42 -42
  282. package/src/elements/Bookmark.ts +212 -210
  283. package/src/elements/BookmarkManager.ts +247 -250
  284. package/src/elements/Comment.ts +356 -359
  285. package/src/elements/CommentManager.ts +499 -502
  286. package/src/elements/CommonTypes.ts +524 -549
  287. package/src/elements/CustomXml.ts +36 -36
  288. package/src/elements/Endnote.ts +221 -217
  289. package/src/elements/EndnoteManager.ts +246 -249
  290. package/src/elements/Field.ts +1292 -1233
  291. package/src/elements/FieldHelpers.ts +329 -333
  292. package/src/elements/FontManager.ts +336 -339
  293. package/src/elements/Footer.ts +269 -269
  294. package/src/elements/Footnote.ts +221 -217
  295. package/src/elements/FootnoteManager.ts +246 -249
  296. package/src/elements/Header.ts +269 -269
  297. package/src/elements/HeaderFooterManager.ts +219 -219
  298. package/src/elements/Hyperlink.ts +1288 -1193
  299. package/src/elements/Image.ts +1982 -1756
  300. package/src/elements/ImageManager.ts +437 -432
  301. package/src/elements/ImageRun.ts +59 -59
  302. package/src/elements/MathElement.ts +65 -65
  303. package/src/elements/Paragraph.ts +4347 -4287
  304. package/src/elements/PreservedElement.ts +53 -53
  305. package/src/elements/PropertyChangeTypes.ts +458 -442
  306. package/src/elements/RangeMarker.ts +382 -400
  307. package/src/elements/Revision.ts +1198 -1217
  308. package/src/elements/RevisionContent.ts +73 -73
  309. package/src/elements/RevisionManager.ts +1070 -1070
  310. package/src/elements/Run.ts +3103 -3073
  311. package/src/elements/Section.ts +1521 -1421
  312. package/src/elements/Shape.ts +884 -873
  313. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  314. package/src/elements/Table.ts +2468 -2524
  315. package/src/elements/TableCell.ts +1617 -1621
  316. package/src/elements/TableGridChange.ts +149 -151
  317. package/src/elements/TableOfContents.ts +701 -691
  318. package/src/elements/TableOfContentsElement.ts +89 -89
  319. package/src/elements/TableRow.ts +960 -929
  320. package/src/elements/TextBox.ts +766 -768
  321. package/src/formatting/AbstractNumbering.ts +580 -579
  322. package/src/formatting/NumberingInstance.ts +295 -299
  323. package/src/formatting/NumberingLevel.ts +981 -1040
  324. package/src/formatting/NumberingManager.ts +833 -827
  325. package/src/formatting/Style.ts +1785 -1879
  326. package/src/formatting/StylesManager.ts +1090 -1130
  327. package/src/helpers/CleanupHelper.ts +524 -524
  328. package/src/images/ImageOptimizer.ts +274 -274
  329. package/src/index.ts +559 -554
  330. package/src/managers/DrawingManager.ts +319 -319
  331. package/src/tracking/DocumentTrackingContext.ts +687 -674
  332. package/src/tracking/TrackingContext.ts +175 -173
  333. package/src/types/compatibility-types.ts +49 -49
  334. package/src/types/formatting.ts +210 -210
  335. package/src/types/list-types.ts +14 -14
  336. package/src/types/settings-types.ts +59 -59
  337. package/src/types/styleConfig.ts +189 -189
  338. package/src/utils/ChangelogGenerator.ts +1583 -1581
  339. package/src/utils/CompatibilityUpgrader.ts +235 -237
  340. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  341. package/src/utils/MoveOperationHelper.ts +233 -238
  342. package/src/utils/RevisionAwareProcessor.ts +518 -526
  343. package/src/utils/RevisionWalker.ts +427 -457
  344. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  345. package/src/utils/ShadingResolver.ts +105 -107
  346. package/src/utils/acceptRevisions.ts +723 -714
  347. package/src/utils/cnfStyleDecoder.ts +212 -217
  348. package/src/utils/corruptionDetection.ts +346 -345
  349. package/src/utils/dateFormatting.ts +20 -20
  350. package/src/utils/deepClone.ts +77 -78
  351. package/src/utils/diagnostics.ts +125 -129
  352. package/src/utils/errorHandling.ts +80 -80
  353. package/src/utils/formatting.ts +220 -213
  354. package/src/utils/list-detection.ts +32 -42
  355. package/src/utils/logger.ts +412 -404
  356. package/src/utils/parsingHelpers.ts +190 -190
  357. package/src/utils/stripTrackedChanges.ts +356 -353
  358. package/src/utils/textDiff.ts +100 -100
  359. package/src/utils/units.ts +421 -421
  360. package/src/utils/validation.ts +553 -542
  361. package/src/utils/xmlSanitization.ts +179 -182
  362. package/src/validation/RevisionAutoFixer.ts +541 -542
  363. package/src/validation/RevisionValidator.ts +470 -460
  364. package/src/validation/ValidationRules.ts +338 -338
  365. package/src/validation/index.ts +30 -30
  366. package/src/xml/XMLBuilder.ts +857 -871
  367. package/src/xml/XMLParser.ts +877 -919
  368. package/src/zip/ZipHandler.ts +629 -637
  369. package/src/zip/ZipReader.ts +295 -299
  370. package/src/zip/ZipWriter.ts +374 -390
  371. 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
  };