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
@@ -1,14 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DocumentTrackingContext = void 0;
4
- const Revision_1 = require("../elements/Revision");
5
- const Run_1 = require("../elements/Run");
6
- const Paragraph_1 = require("../elements/Paragraph");
7
- const Table_1 = require("../elements/Table");
8
- const TableRow_1 = require("../elements/TableRow");
9
- const TableCell_1 = require("../elements/TableCell");
10
- const Section_1 = require("../elements/Section");
11
- const dateFormatting_1 = require("../utils/dateFormatting");
4
+ const Revision_js_1 = require("../elements/Revision.js");
5
+ const Run_js_1 = require("../elements/Run.js");
6
+ const Paragraph_js_1 = require("../elements/Paragraph.js");
7
+ const Table_js_1 = require("../elements/Table.js");
8
+ const TableRow_js_1 = require("../elements/TableRow.js");
9
+ const TableCell_js_1 = require("../elements/TableCell.js");
10
+ const Section_js_1 = require("../elements/Section.js");
11
+ const dateFormatting_js_1 = require("../utils/dateFormatting.js");
12
+ const deepEqual_js_1 = require("../utils/deepEqual.js");
12
13
  class DocumentTrackingContext {
13
14
  enabled = false;
14
15
  trackFormatting = true;
@@ -130,11 +131,11 @@ class DocumentTrackingContext {
130
131
  return;
131
132
  let type = 'tablePropertiesChange';
132
133
  let elementType = 'Table';
133
- if (element instanceof TableRow_1.TableRow) {
134
+ if (element instanceof TableRow_js_1.TableRow) {
134
135
  type = 'tableRowPropertiesChange';
135
136
  elementType = 'TableRow';
136
137
  }
137
- else if (element instanceof TableCell_1.TableCell) {
138
+ else if (element instanceof TableCell_js_1.TableCell) {
138
139
  type = 'tableCellPropertiesChange';
139
140
  elementType = 'TableCell';
140
141
  }
@@ -205,34 +206,34 @@ class DocumentTrackingContext {
205
206
  const revision = this.createRevision(pending);
206
207
  this.revisionManager.register(revision);
207
208
  revisions.push(revision);
208
- if (pending.type === 'paragraphPropertiesChange' && pending.element instanceof Paragraph_1.Paragraph) {
209
+ if (pending.type === 'paragraphPropertiesChange' && pending.element instanceof Paragraph_js_1.Paragraph) {
209
210
  const changes = paragraphChanges.get(pending.element) || [];
210
211
  changes.push(pending);
211
212
  paragraphChanges.set(pending.element, changes);
212
213
  }
213
- else if (pending.type === 'tablePropertiesChange' && pending.element instanceof Table_1.Table) {
214
+ else if (pending.type === 'tablePropertiesChange' && pending.element instanceof Table_js_1.Table) {
214
215
  const changes = tableChanges.get(pending.element) || [];
215
216
  changes.push(pending);
216
217
  tableChanges.set(pending.element, changes);
217
218
  }
218
219
  else if (pending.type === 'tableRowPropertiesChange' &&
219
- pending.element instanceof TableRow_1.TableRow) {
220
+ pending.element instanceof TableRow_js_1.TableRow) {
220
221
  const changes = rowChanges.get(pending.element) || [];
221
222
  changes.push(pending);
222
223
  rowChanges.set(pending.element, changes);
223
224
  }
224
225
  else if (pending.type === 'tableCellPropertiesChange' &&
225
- pending.element instanceof TableCell_1.TableCell) {
226
+ pending.element instanceof TableCell_js_1.TableCell) {
226
227
  const changes = cellChanges.get(pending.element) || [];
227
228
  changes.push(pending);
228
229
  cellChanges.set(pending.element, changes);
229
230
  }
230
- else if (pending.type === 'sectionPropertiesChange' && pending.element instanceof Section_1.Section) {
231
+ else if (pending.type === 'sectionPropertiesChange' && pending.element instanceof Section_js_1.Section) {
231
232
  const changes = sectionChanges.get(pending.element) || [];
232
233
  changes.push(pending);
233
234
  sectionChanges.set(pending.element, changes);
234
235
  }
235
- else if (pending.type === 'runPropertiesChange' && pending.element instanceof Run_1.Run) {
236
+ else if (pending.type === 'runPropertiesChange' && pending.element instanceof Run_js_1.Run) {
236
237
  const changes = runChanges.get(pending.element) || [];
237
238
  changes.push(pending);
238
239
  runChanges.set(pending.element, changes);
@@ -261,7 +262,7 @@ class DocumentTrackingContext {
261
262
  latestTimestamp = change.timestamp;
262
263
  }
263
264
  }
264
- const date = (0, dateFormatting_1.formatDateForXml)(new Date(latestTimestamp));
265
+ const date = (0, dateFormatting_js_1.formatDateForXml)(new Date(latestTimestamp));
265
266
  const existing = table.getTblPrChange();
266
267
  if (existing) {
267
268
  const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };
@@ -313,7 +314,7 @@ class DocumentTrackingContext {
313
314
  latestTimestamp = change.timestamp;
314
315
  }
315
316
  }
316
- const date = (0, dateFormatting_1.formatDateForXml)(new Date(latestTimestamp));
317
+ const date = (0, dateFormatting_js_1.formatDateForXml)(new Date(latestTimestamp));
317
318
  const existing = cell.getTcPrChange();
318
319
  if (existing) {
319
320
  const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };
@@ -348,7 +349,7 @@ class DocumentTrackingContext {
348
349
  latestTimestamp = change.timestamp;
349
350
  }
350
351
  }
351
- const date = (0, dateFormatting_1.formatDateForXml)(new Date(latestTimestamp));
352
+ const date = (0, dateFormatting_js_1.formatDateForXml)(new Date(latestTimestamp));
352
353
  const existing = section.getSectPrChange();
353
354
  if (existing) {
354
355
  const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };
@@ -397,7 +398,7 @@ class DocumentTrackingContext {
397
398
  const revisionId = this.revisionManager.consumeNextId();
398
399
  paragraph.formatting.pPrChange = {
399
400
  author: this.author,
400
- date: (0, dateFormatting_1.formatDateForXml)(new Date(latestTimestamp)),
401
+ date: (0, dateFormatting_js_1.formatDateForXml)(new Date(latestTimestamp)),
401
402
  id: String(revisionId),
402
403
  previousProperties: newPreviousProperties,
403
404
  };
@@ -442,7 +443,7 @@ class DocumentTrackingContext {
442
443
  latestTimestamp = change.timestamp;
443
444
  }
444
445
  }
445
- const date = (0, dateFormatting_1.formatDateForXml)(new Date(latestTimestamp));
446
+ const date = (0, dateFormatting_js_1.formatDateForXml)(new Date(latestTimestamp));
446
447
  applier(prevProps, () => this.revisionManager.consumeNextId(), date);
447
448
  }
448
449
  addPendingChange(key, change) {
@@ -464,7 +465,7 @@ class DocumentTrackingContext {
464
465
  newProps[pending.property] = pending.newValue;
465
466
  }
466
467
  const run = this.getRunFromElement(pending.element);
467
- return new Revision_1.Revision({
468
+ return new Revision_js_1.Revision({
468
469
  author: this.author,
469
470
  type: pending.type,
470
471
  content: run,
@@ -474,24 +475,24 @@ class DocumentTrackingContext {
474
475
  });
475
476
  }
476
477
  getRunFromElement(element) {
477
- if (element instanceof Run_1.Run) {
478
+ if (element instanceof Run_js_1.Run) {
478
479
  return element;
479
480
  }
480
- if (element instanceof Table_1.Table)
481
- return new Run_1.Run('Table');
482
- if (element instanceof TableRow_1.TableRow)
483
- return new Run_1.Run('TableRow');
484
- if (element instanceof TableCell_1.TableCell)
485
- return new Run_1.Run('TableCell');
486
- if (element instanceof Section_1.Section)
487
- return new Run_1.Run('Section');
488
- if (element instanceof Paragraph_1.Paragraph)
489
- return new Run_1.Run('Paragraph');
481
+ if (element instanceof Table_js_1.Table)
482
+ return new Run_js_1.Run('Table');
483
+ if (element instanceof TableRow_js_1.TableRow)
484
+ return new Run_js_1.Run('TableRow');
485
+ if (element instanceof TableCell_js_1.TableCell)
486
+ return new Run_js_1.Run('TableCell');
487
+ if (element instanceof Section_js_1.Section)
488
+ return new Run_js_1.Run('Section');
489
+ if (element instanceof Paragraph_js_1.Paragraph)
490
+ return new Run_js_1.Run('Paragraph');
490
491
  const hasGetText = 'getText' in element && typeof element.getText === 'function';
491
492
  const text = hasGetText
492
493
  ? element.getText()
493
494
  : element?.constructor?.name || 'Unknown element';
494
- return new Run_1.Run(typeof text === 'string' ? text : String(text));
495
+ return new Run_js_1.Run(typeof text === 'string' ? text : String(text));
495
496
  }
496
497
  getElementId(element) {
497
498
  let id = this.elementIdMap.get(element);
@@ -502,13 +503,7 @@ class DocumentTrackingContext {
502
503
  return id;
503
504
  }
504
505
  valuesEqual(a, b) {
505
- if (a === b)
506
- return true;
507
- if (a == null || b == null)
508
- return false;
509
- if (typeof a !== 'object' || typeof b !== 'object')
510
- return false;
511
- return JSON.stringify(a) === JSON.stringify(b);
506
+ return (0, deepEqual_js_1.deepEqual)(a, b);
512
507
  }
513
508
  stringifyValue(value) {
514
509
  if (value === undefined)
@@ -521,10 +516,10 @@ class DocumentTrackingContext {
521
516
  return String(value);
522
517
  }
523
518
  createInsertion(content, date) {
524
- return Revision_1.Revision.createInsertion(this.author, content, date);
519
+ return Revision_js_1.Revision.createInsertion(this.author, content, date);
525
520
  }
526
521
  createDeletion(content, date) {
527
- return Revision_1.Revision.createDeletion(this.author, content, date);
522
+ return Revision_js_1.Revision.createDeletion(this.author, content, date);
528
523
  }
529
524
  getPendingCount() {
530
525
  return this.pendingChanges.size;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentTrackingContext.js","sourceRoot":"","sources":["../../src/tracking/DocumentTrackingContext.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * DocumentTrackingContext - Implementation of automatic change tracking\n *\n * Manages pending changes and creates Revision objects when flushed.\n * Supports consolidation of similar changes within a time window.\n *\n * @module DocumentTrackingContext\n */\n\nimport { Revision, RevisionType } from '../elements/Revision';\nimport { RevisionManager } from '../elements/RevisionManager';\nimport { Run, type RunFormatting } from '../elements/Run';\nimport { Paragraph } from '../elements/Paragraph';\nimport { Table } from '../elements/Table';\nimport { TableRow } from '../elements/TableRow';\nimport { TableCell } from '../elements/TableCell';\nimport { Section } from '../elements/Section';\nimport type { TrackingContext, PendingChange, TrackableElement } from './TrackingContext';\nimport { formatDateForXml } from '../utils/dateFormatting';\n\n/**\n * Enable options for tracking context\n */\nexport interface TrackingEnableOptions {\n /** Author name for new revisions (default: 'DocHub') */\n author?: string;\n /** Whether to track formatting changes (default: true) */\n trackFormatting?: boolean;\n}\n\n/**\n * Implementation of TrackingContext for Document\n */\nexport class DocumentTrackingContext implements TrackingContext {\n private enabled = false;\n private trackFormatting = true;\n private author = 'DocHub';\n private revisionManager: RevisionManager;\n\n /** Counter for assigning stable element IDs */\n private elementIdCounter = 0;\n /** Stable element identity map (WeakMap so elements can be GC'd) */\n private elementIdMap = new WeakMap<object, number>();\n\n /** Pending changes waiting to be flushed */\n private pendingChanges = new Map<string, PendingChange>();\n\n /** Properties considered \"formatting\" (vs structural) */\n private static readonly FORMATTING_PROPERTIES = new Set([\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'dstrike',\n 'subscript',\n 'superscript',\n 'font',\n 'size',\n 'color',\n 'highlight',\n 'smallCaps',\n 'allCaps',\n 'characterSpacing',\n 'scaling',\n 'position',\n 'emphasis',\n 'shadow',\n 'emboss',\n 'imprint',\n 'outline',\n 'vanish',\n ]);\n\n /**\n * Creates a new DocumentTrackingContext\n * @param revisionManager - RevisionManager to register revisions with\n */\n constructor(revisionManager: RevisionManager) {\n this.revisionManager = revisionManager;\n }\n\n /**\n * Enable change tracking\n * @param options - Enable options\n */\n enable(options?: TrackingEnableOptions): void {\n this.enabled = true;\n if (options?.author) {\n this.author = options.author;\n }\n if (options?.trackFormatting !== undefined) {\n this.trackFormatting = options.trackFormatting;\n }\n }\n\n /**\n * Disable change tracking and flush pending changes\n */\n disable(): void {\n this.flushPendingChanges();\n this.enabled = false;\n }\n\n /**\n * Set the author for new revisions\n * Flushes any pending changes before switching to prevent mixed authorship\n * @param author - Author name\n */\n setAuthor(author: string): void {\n // Flush pending changes before switching authors to prevent mixed authorship\n if (this.enabled && this.pendingChanges.size > 0) {\n this.flushPendingChanges();\n }\n this.author = author;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // TrackingContext Interface Implementation\n // ═══════════════════════════════════════════════════════════════════════════\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n getAuthor(): string {\n return this.author;\n }\n\n getRevisionManager(): RevisionManager {\n return this.revisionManager;\n }\n\n isTrackFormattingEnabled(): boolean {\n return this.trackFormatting;\n }\n\n trackRunPropertyChange(run: Run, property: string, oldValue: unknown, newValue: unknown): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n // Skip formatting changes if not tracking them\n if (!this.trackFormatting && DocumentTrackingContext.FORMATTING_PROPERTIES.has(property)) {\n return;\n }\n\n // Create consolidation key with element identity\n const key = `runProp:${property}:${this.stringifyValue(newValue)}@${this.getElementId(run)}`;\n\n this.addPendingChange(key, {\n type: 'runPropertiesChange',\n property,\n previousValue: oldValue,\n newValue,\n element: run,\n timestamp: Date.now(),\n });\n }\n\n trackParagraphPropertyChange(\n paragraph: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n const key = `paraProp:${property}:${this.stringifyValue(newValue)}@${this.getElementId(paragraph)}`;\n\n this.addPendingChange(key, {\n type: 'paragraphPropertiesChange',\n property,\n previousValue: oldValue,\n newValue,\n element: paragraph,\n timestamp: Date.now(),\n });\n }\n\n trackHyperlinkChange(\n hyperlink: TrackableElement,\n changeType: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n // Hyperlink changes use dedicated type for proper categorization\n const key = `hyperlink:${changeType}:${this.stringifyValue(newValue)}@${this.getElementId(hyperlink)}`;\n\n this.addPendingChange(key, {\n type: 'hyperlinkChange',\n property: changeType,\n previousValue: oldValue,\n newValue,\n element: hyperlink,\n timestamp: Date.now(),\n });\n }\n\n trackTableChange(\n element: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n // Determine revision type based on element type using instanceof (minification-safe)\n let type: RevisionType = 'tablePropertiesChange';\n let elementType = 'Table';\n\n if (element instanceof TableRow) {\n type = 'tableRowPropertiesChange';\n elementType = 'TableRow';\n } else if (element instanceof TableCell) {\n type = 'tableCellPropertiesChange';\n elementType = 'TableCell';\n }\n\n const key = `table:${elementType}:${property}:${this.stringifyValue(newValue)}@${this.getElementId(element)}`;\n\n this.addPendingChange(key, {\n type,\n property,\n previousValue: oldValue,\n newValue,\n element,\n timestamp: Date.now(),\n });\n }\n\n trackSectionChange(\n section: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n const key = `section:${property}:${this.stringifyValue(newValue)}@${this.getElementId(section)}`;\n\n this.addPendingChange(key, {\n type: 'sectionPropertiesChange',\n property,\n previousValue: oldValue,\n newValue,\n element: section,\n timestamp: Date.now(),\n });\n }\n\n trackInsertion(element: TrackableElement, text: string): void {\n if (!this.enabled) return;\n if (!text) return;\n\n const key = `insert:${Date.now()}:${text.substring(0, 20)}`;\n\n this.addPendingChange(key, {\n type: 'insert',\n property: 'text',\n previousValue: undefined,\n newValue: text,\n element,\n timestamp: Date.now(),\n });\n }\n\n trackDeletion(element: TrackableElement, text: string): void {\n if (!this.enabled) return;\n if (!text) return;\n\n const key = `delete:${Date.now()}:${text.substring(0, 20)}`;\n\n this.addPendingChange(key, {\n type: 'delete',\n property: 'text',\n previousValue: text,\n newValue: undefined,\n element,\n timestamp: Date.now(),\n });\n }\n\n flushPendingChanges(): Revision[] {\n const revisions: Revision[] = [];\n\n // Group pending changes by element for consolidation\n const paragraphChanges = new Map<Paragraph, PendingChange[]>();\n const tableChanges = new Map<Table, PendingChange[]>();\n const rowChanges = new Map<TableRow, PendingChange[]>();\n const cellChanges = new Map<TableCell, PendingChange[]>();\n const sectionChanges = new Map<Section, PendingChange[]>();\n const runChanges = new Map<Run, PendingChange[]>();\n\n for (const [, pending] of this.pendingChanges) {\n const revision = this.createRevision(pending);\n this.revisionManager.register(revision);\n revisions.push(revision);\n\n // Collect changes by element type for *PrChange application\n if (pending.type === 'paragraphPropertiesChange' && pending.element instanceof Paragraph) {\n const changes = paragraphChanges.get(pending.element) || [];\n changes.push(pending);\n paragraphChanges.set(pending.element, changes);\n } else if (pending.type === 'tablePropertiesChange' && pending.element instanceof Table) {\n const changes = tableChanges.get(pending.element) || [];\n changes.push(pending);\n tableChanges.set(pending.element, changes);\n } else if (\n pending.type === 'tableRowPropertiesChange' &&\n pending.element instanceof TableRow\n ) {\n const changes = rowChanges.get(pending.element) || [];\n changes.push(pending);\n rowChanges.set(pending.element, changes);\n } else if (\n pending.type === 'tableCellPropertiesChange' &&\n pending.element instanceof TableCell\n ) {\n const changes = cellChanges.get(pending.element) || [];\n changes.push(pending);\n cellChanges.set(pending.element, changes);\n } else if (pending.type === 'sectionPropertiesChange' && pending.element instanceof Section) {\n const changes = sectionChanges.get(pending.element) || [];\n changes.push(pending);\n sectionChanges.set(pending.element, changes);\n } else if (pending.type === 'runPropertiesChange' && pending.element instanceof Run) {\n const changes = runChanges.get(pending.element) || [];\n changes.push(pending);\n runChanges.set(pending.element, changes);\n }\n }\n\n // Apply pPrChange to each paragraph that has property changes\n for (const [paragraph, changes] of paragraphChanges) {\n this.applyParagraphPrChange(paragraph, changes);\n }\n\n // Apply tblPrChange to each Table\n // Per ECMA-376 §17.13.5.36, tblPrChange must contain FULL previous tblPr,\n // not just the delta of changed properties.\n for (const [table, changes] of tableChanges) {\n // Build full snapshot: start from current formatting, roll back changed properties\n const currentFormatting = table.getFormatting();\n const fullPrevProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(currentFormatting)) {\n if (value !== undefined) {\n fullPrevProps[key] = value;\n }\n }\n\n // Roll back changed properties to their previous values\n let latestTimestamp = 0;\n for (const change of changes) {\n if (change.previousValue !== undefined) {\n fullPrevProps[change.property] = change.previousValue;\n } else {\n delete fullPrevProps[change.property];\n }\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n\n const existing = table.getTblPrChange();\n if (existing) {\n // Merge: existing previous state takes precedence (it's the ORIGINAL baseline)\n const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };\n table.setTblPrChange({ ...existing, previousProperties: merged });\n } else {\n table.setTblPrChange({\n author: this.author,\n date,\n id: String(this.revisionManager.consumeNextId()),\n previousProperties: fullPrevProps,\n });\n }\n }\n\n // Apply trPrChange to each TableRow\n for (const [row, changes] of rowChanges) {\n this.applyElementPrChange(changes, (prevProps, getNextId, date) => {\n const existing = row.getTrPrChange();\n if (existing) {\n const merged = { ...(existing.previousProperties || {}), ...prevProps };\n row.setTrPrChange({ ...existing, previousProperties: merged });\n } else {\n row.setTrPrChange({\n author: this.author,\n date,\n id: String(getNextId()),\n previousProperties: prevProps,\n });\n }\n });\n }\n\n // Apply tcPrChange to each TableCell\n // Per ECMA-376 §17.13.5.37, tcPrChange must contain FULL previous tcPr,\n // not just the delta of changed properties.\n for (const [cell, changes] of cellChanges) {\n // Build full snapshot: start from current formatting, roll back changed properties\n const currentFormatting = cell.getFormatting();\n const fullPrevProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(currentFormatting)) {\n if (value !== undefined) {\n fullPrevProps[key] = value;\n }\n }\n\n // Roll back changed properties to their previous values\n let latestTimestamp = 0;\n for (const change of changes) {\n if (change.previousValue !== undefined) {\n fullPrevProps[change.property] = change.previousValue;\n } else {\n delete fullPrevProps[change.property];\n }\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n\n const existing = cell.getTcPrChange();\n if (existing) {\n // Merge: existing previous state takes precedence (it's the ORIGINAL baseline)\n const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };\n cell.setTcPrChange({ ...existing, previousProperties: merged });\n } else {\n cell.setTcPrChange({\n author: this.author,\n date,\n id: String(this.revisionManager.consumeNextId()),\n previousProperties: fullPrevProps,\n });\n }\n }\n\n // Apply sectPrChange to each Section\n // Per ECMA-376 §17.13.5.32, sectPrChange must contain FULL previous sectPr,\n // not just the delta of changed properties.\n for (const [section, changes] of sectionChanges) {\n // Build full snapshot: start from current properties, roll back changed properties\n const currentProps = section.getProperties();\n const fullPrevProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(currentProps)) {\n if (value !== undefined) {\n fullPrevProps[key] = value;\n }\n }\n\n // Roll back changed properties to their previous values\n let latestTimestamp = 0;\n for (const change of changes) {\n if (change.previousValue !== undefined) {\n fullPrevProps[change.property] = change.previousValue;\n } else {\n delete fullPrevProps[change.property];\n }\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n\n const existing = section.getSectPrChange();\n if (existing) {\n // Merge: existing previous state takes precedence (it's the ORIGINAL baseline)\n const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };\n section.setSectPrChange({ ...existing, previousProperties: merged });\n } else {\n section.setSectPrChange({\n author: this.author,\n date,\n id: String(this.revisionManager.consumeNextId()),\n previousProperties: fullPrevProps,\n });\n }\n }\n\n // Apply rPrChange to each Run that has property changes\n for (const [run, changes] of runChanges) {\n this.applyRunPrChange(run, changes);\n }\n\n this.pendingChanges.clear();\n return revisions;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // Private Methods\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Apply pPrChange to a paragraph (extracted from flushPendingChanges for readability)\n */\n private applyParagraphPrChange(paragraph: Paragraph, changes: PendingChange[]): void {\n const newPreviousProperties: Record<string, unknown> = {};\n let latestTimestamp = 0;\n\n for (const change of changes) {\n // Record previous value even if undefined (property wasn't set before)\n newPreviousProperties[change.property] = change.previousValue;\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const existingChange = paragraph.formatting.pPrChange;\n\n if (existingChange) {\n const mergedPreviousProperties: Record<string, unknown> = {\n ...(existingChange.previousProperties || {}),\n };\n for (const [prop, value] of Object.entries(newPreviousProperties)) {\n mergedPreviousProperties[prop] = value;\n }\n paragraph.formatting.pPrChange = {\n author: existingChange.author,\n date: existingChange.date,\n id: existingChange.id,\n previousProperties: mergedPreviousProperties,\n };\n } else {\n const revisionId = this.revisionManager.consumeNextId();\n paragraph.formatting.pPrChange = {\n author: this.author,\n date: formatDateForXml(new Date(latestTimestamp)),\n id: String(revisionId),\n previousProperties: newPreviousProperties,\n };\n }\n }\n\n /**\n * Apply rPrChange to a run (mirrors applyParagraphPrChange for runs)\n */\n private applyRunPrChange(run: Run, changes: PendingChange[]): void {\n const newPreviousProperties: Partial<RunFormatting> = {};\n let latestTimestamp = 0;\n\n for (const change of changes) {\n (newPreviousProperties as Record<string, unknown>)[change.property] = change.previousValue;\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const existingChange = run.getPropertyChangeRevision();\n\n if (existingChange) {\n // Merge with existing rPrChange — preserve original author/date,\n // add new previous properties\n const mergedPreviousProperties: Partial<RunFormatting> = {\n ...(existingChange.previousProperties || {}),\n ...newPreviousProperties,\n };\n run.setPropertyChangeRevision({\n ...existingChange,\n previousProperties: mergedPreviousProperties,\n });\n } else {\n const revisionId = this.revisionManager.consumeNextId();\n run.setPropertyChangeRevision({\n id: revisionId,\n author: this.author,\n date: new Date(latestTimestamp),\n previousProperties: newPreviousProperties,\n });\n }\n }\n\n /**\n * Generic helper to apply *PrChange to table/row/cell/section elements\n */\n private applyElementPrChange(\n changes: PendingChange[],\n applier: (prevProps: Record<string, unknown>, getNextId: () => number, date: string) => void\n ): void {\n const prevProps: Record<string, unknown> = {};\n let latestTimestamp = 0;\n\n for (const change of changes) {\n // Record previous value even if undefined (property wasn't set before)\n prevProps[change.property] = change.previousValue;\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n applier(prevProps, () => this.revisionManager.consumeNextId(), date);\n }\n\n /**\n * Add a pending change, consolidating with existing if same key\n */\n private addPendingChange(key: string, change: PendingChange): void {\n const existing = this.pendingChanges.get(key);\n if (existing) {\n existing.count = (existing.count || 1) + 1;\n // Keep the first previousValue for consolidated changes\n } else {\n this.pendingChanges.set(key, { ...change, count: 1 });\n }\n }\n\n /**\n * Create a Revision from a pending change\n */\n private createRevision(pending: PendingChange): Revision {\n const previousProps: Record<string, any> = {};\n const newProps: Record<string, any> = {};\n\n if (pending.previousValue !== undefined) {\n previousProps[pending.property] = pending.previousValue;\n }\n if (pending.newValue !== undefined) {\n newProps[pending.property] = pending.newValue;\n }\n\n // Get or create a Run for the revision content\n const run = this.getRunFromElement(pending.element);\n\n return new Revision({\n author: this.author,\n type: pending.type,\n content: run,\n previousProperties: Object.keys(previousProps).length > 0 ? previousProps : undefined,\n newProperties: Object.keys(newProps).length > 0 ? newProps : undefined,\n date: new Date(pending.timestamp),\n });\n }\n\n /**\n * Get or create a Run from an element for revision content\n */\n private getRunFromElement(element: TrackableElement): Run {\n if (element instanceof Run) {\n return element;\n }\n\n // Use instanceof for type-safe element identification (minification-safe)\n if (element instanceof Table) return new Run('Table');\n if (element instanceof TableRow) return new Run('TableRow');\n if (element instanceof TableCell) return new Run('TableCell');\n if (element instanceof Section) return new Run('Section');\n if (element instanceof Paragraph) return new Run('Paragraph');\n\n // Fallback for other elements (e.g., Hyperlink)\n const hasGetText =\n 'getText' in element && typeof (element as { getText?: () => string }).getText === 'function';\n const text = hasGetText\n ? (element as { getText: () => string }).getText()\n : element?.constructor?.name || 'Unknown element';\n return new Run(typeof text === 'string' ? text : String(text));\n }\n\n /**\n * Get a stable unique ID for an element (used in consolidation keys)\n */\n private getElementId(element: TrackableElement): number {\n let id = this.elementIdMap.get(element as object);\n if (id === undefined) {\n id = this.elementIdCounter++;\n this.elementIdMap.set(element as object, id);\n }\n return id;\n }\n\n /**\n * Deep equality check for tracking values (handles objects, primitives, null/undefined)\n */\n private valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n return JSON.stringify(a) === JSON.stringify(b);\n }\n\n /**\n * Stringify a value for use in consolidation key\n */\n private stringifyValue(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n\n /**\n * Create an insertion revision (factory to avoid circular dependency in Run)\n */\n createInsertion(content: Run, date?: Date): Revision {\n return Revision.createInsertion(this.author, content, date);\n }\n\n /**\n * Create a deletion revision (factory to avoid circular dependency in Run)\n */\n createDeletion(content: Run, date?: Date): Revision {\n return Revision.createDeletion(this.author, content, date);\n }\n\n /**\n * Get count of pending changes\n */\n getPendingCount(): number {\n return this.pendingChanges.size;\n }\n\n /**\n * Check if there are pending changes\n */\n hasPendingChanges(): boolean {\n return this.pendingChanges.size > 0;\n }\n\n /**\n * Clear all pending changes without creating revisions\n */\n clearPendingChanges(): void {\n this.pendingChanges.clear();\n }\n}\n"]}
1
+ {"version":3,"file":"DocumentTrackingContext.js","sourceRoot":"","sources":["../../src/tracking/DocumentTrackingContext.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * DocumentTrackingContext - Implementation of automatic change tracking\n *\n * Manages pending changes and creates Revision objects when flushed.\n * Supports consolidation of similar changes within a time window.\n *\n * @module DocumentTrackingContext\n */\n\nimport { Revision, RevisionType } from '../elements/Revision.js';\nimport { RevisionManager } from '../elements/RevisionManager.js';\nimport { Run, type RunFormatting } from '../elements/Run.js';\nimport { Paragraph } from '../elements/Paragraph.js';\nimport { Table } from '../elements/Table.js';\nimport { TableRow } from '../elements/TableRow.js';\nimport { TableCell } from '../elements/TableCell.js';\nimport { Section } from '../elements/Section.js';\nimport type { TrackingContext, PendingChange, TrackableElement } from './TrackingContext.js';\nimport { formatDateForXml } from '../utils/dateFormatting.js';\nimport { deepEqual } from '../utils/deepEqual.js';\n\n/**\n * Enable options for tracking context\n */\nexport interface TrackingEnableOptions {\n /** Author name for new revisions (default: 'DocHub') */\n author?: string;\n /** Whether to track formatting changes (default: true) */\n trackFormatting?: boolean;\n}\n\n/**\n * Implementation of TrackingContext for Document\n */\nexport class DocumentTrackingContext implements TrackingContext {\n private enabled = false;\n private trackFormatting = true;\n private author = 'DocHub';\n private revisionManager: RevisionManager;\n\n /** Counter for assigning stable element IDs */\n private elementIdCounter = 0;\n /** Stable element identity map (WeakMap so elements can be GC'd) */\n private elementIdMap = new WeakMap<object, number>();\n\n /** Pending changes waiting to be flushed */\n private pendingChanges = new Map<string, PendingChange>();\n\n /** Properties considered \"formatting\" (vs structural) */\n private static readonly FORMATTING_PROPERTIES = new Set([\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'dstrike',\n 'subscript',\n 'superscript',\n 'font',\n 'size',\n 'color',\n 'highlight',\n 'smallCaps',\n 'allCaps',\n 'characterSpacing',\n 'scaling',\n 'position',\n 'emphasis',\n 'shadow',\n 'emboss',\n 'imprint',\n 'outline',\n 'vanish',\n ]);\n\n /**\n * Creates a new DocumentTrackingContext\n * @param revisionManager - RevisionManager to register revisions with\n */\n constructor(revisionManager: RevisionManager) {\n this.revisionManager = revisionManager;\n }\n\n /**\n * Enable change tracking\n * @param options - Enable options\n */\n enable(options?: TrackingEnableOptions): void {\n this.enabled = true;\n if (options?.author) {\n this.author = options.author;\n }\n if (options?.trackFormatting !== undefined) {\n this.trackFormatting = options.trackFormatting;\n }\n }\n\n /**\n * Disable change tracking and flush pending changes\n */\n disable(): void {\n this.flushPendingChanges();\n this.enabled = false;\n }\n\n /**\n * Set the author for new revisions\n * Flushes any pending changes before switching to prevent mixed authorship\n * @param author - Author name\n */\n setAuthor(author: string): void {\n // Flush pending changes before switching authors to prevent mixed authorship\n if (this.enabled && this.pendingChanges.size > 0) {\n this.flushPendingChanges();\n }\n this.author = author;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // TrackingContext Interface Implementation\n // ═══════════════════════════════════════════════════════════════════════════\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n getAuthor(): string {\n return this.author;\n }\n\n getRevisionManager(): RevisionManager {\n return this.revisionManager;\n }\n\n isTrackFormattingEnabled(): boolean {\n return this.trackFormatting;\n }\n\n trackRunPropertyChange(run: Run, property: string, oldValue: unknown, newValue: unknown): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n // Skip formatting changes if not tracking them\n if (!this.trackFormatting && DocumentTrackingContext.FORMATTING_PROPERTIES.has(property)) {\n return;\n }\n\n // Create consolidation key with element identity\n const key = `runProp:${property}:${this.stringifyValue(newValue)}@${this.getElementId(run)}`;\n\n this.addPendingChange(key, {\n type: 'runPropertiesChange',\n property,\n previousValue: oldValue,\n newValue,\n element: run,\n timestamp: Date.now(),\n });\n }\n\n trackParagraphPropertyChange(\n paragraph: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n const key = `paraProp:${property}:${this.stringifyValue(newValue)}@${this.getElementId(paragraph)}`;\n\n this.addPendingChange(key, {\n type: 'paragraphPropertiesChange',\n property,\n previousValue: oldValue,\n newValue,\n element: paragraph,\n timestamp: Date.now(),\n });\n }\n\n trackHyperlinkChange(\n hyperlink: TrackableElement,\n changeType: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n // Hyperlink changes use dedicated type for proper categorization\n const key = `hyperlink:${changeType}:${this.stringifyValue(newValue)}@${this.getElementId(hyperlink)}`;\n\n this.addPendingChange(key, {\n type: 'hyperlinkChange',\n property: changeType,\n previousValue: oldValue,\n newValue,\n element: hyperlink,\n timestamp: Date.now(),\n });\n }\n\n trackTableChange(\n element: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n // Determine revision type based on element type using instanceof (minification-safe)\n let type: RevisionType = 'tablePropertiesChange';\n let elementType = 'Table';\n\n if (element instanceof TableRow) {\n type = 'tableRowPropertiesChange';\n elementType = 'TableRow';\n } else if (element instanceof TableCell) {\n type = 'tableCellPropertiesChange';\n elementType = 'TableCell';\n }\n\n const key = `table:${elementType}:${property}:${this.stringifyValue(newValue)}@${this.getElementId(element)}`;\n\n this.addPendingChange(key, {\n type,\n property,\n previousValue: oldValue,\n newValue,\n element,\n timestamp: Date.now(),\n });\n }\n\n trackSectionChange(\n section: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void {\n if (!this.enabled) return;\n if (this.valuesEqual(oldValue, newValue)) return;\n\n const key = `section:${property}:${this.stringifyValue(newValue)}@${this.getElementId(section)}`;\n\n this.addPendingChange(key, {\n type: 'sectionPropertiesChange',\n property,\n previousValue: oldValue,\n newValue,\n element: section,\n timestamp: Date.now(),\n });\n }\n\n trackInsertion(element: TrackableElement, text: string): void {\n if (!this.enabled) return;\n if (!text) return;\n\n const key = `insert:${Date.now()}:${text.substring(0, 20)}`;\n\n this.addPendingChange(key, {\n type: 'insert',\n property: 'text',\n previousValue: undefined,\n newValue: text,\n element,\n timestamp: Date.now(),\n });\n }\n\n trackDeletion(element: TrackableElement, text: string): void {\n if (!this.enabled) return;\n if (!text) return;\n\n const key = `delete:${Date.now()}:${text.substring(0, 20)}`;\n\n this.addPendingChange(key, {\n type: 'delete',\n property: 'text',\n previousValue: text,\n newValue: undefined,\n element,\n timestamp: Date.now(),\n });\n }\n\n flushPendingChanges(): Revision[] {\n const revisions: Revision[] = [];\n\n // Group pending changes by element for consolidation\n const paragraphChanges = new Map<Paragraph, PendingChange[]>();\n const tableChanges = new Map<Table, PendingChange[]>();\n const rowChanges = new Map<TableRow, PendingChange[]>();\n const cellChanges = new Map<TableCell, PendingChange[]>();\n const sectionChanges = new Map<Section, PendingChange[]>();\n const runChanges = new Map<Run, PendingChange[]>();\n\n for (const [, pending] of this.pendingChanges) {\n const revision = this.createRevision(pending);\n this.revisionManager.register(revision);\n revisions.push(revision);\n\n // Collect changes by element type for *PrChange application\n if (pending.type === 'paragraphPropertiesChange' && pending.element instanceof Paragraph) {\n const changes = paragraphChanges.get(pending.element) || [];\n changes.push(pending);\n paragraphChanges.set(pending.element, changes);\n } else if (pending.type === 'tablePropertiesChange' && pending.element instanceof Table) {\n const changes = tableChanges.get(pending.element) || [];\n changes.push(pending);\n tableChanges.set(pending.element, changes);\n } else if (\n pending.type === 'tableRowPropertiesChange' &&\n pending.element instanceof TableRow\n ) {\n const changes = rowChanges.get(pending.element) || [];\n changes.push(pending);\n rowChanges.set(pending.element, changes);\n } else if (\n pending.type === 'tableCellPropertiesChange' &&\n pending.element instanceof TableCell\n ) {\n const changes = cellChanges.get(pending.element) || [];\n changes.push(pending);\n cellChanges.set(pending.element, changes);\n } else if (pending.type === 'sectionPropertiesChange' && pending.element instanceof Section) {\n const changes = sectionChanges.get(pending.element) || [];\n changes.push(pending);\n sectionChanges.set(pending.element, changes);\n } else if (pending.type === 'runPropertiesChange' && pending.element instanceof Run) {\n const changes = runChanges.get(pending.element) || [];\n changes.push(pending);\n runChanges.set(pending.element, changes);\n }\n }\n\n // Apply pPrChange to each paragraph that has property changes\n for (const [paragraph, changes] of paragraphChanges) {\n this.applyParagraphPrChange(paragraph, changes);\n }\n\n // Apply tblPrChange to each Table\n // Per ECMA-376 §17.13.5.36, tblPrChange must contain FULL previous tblPr,\n // not just the delta of changed properties.\n for (const [table, changes] of tableChanges) {\n // Build full snapshot: start from current formatting, roll back changed properties\n const currentFormatting = table.getFormatting();\n const fullPrevProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(currentFormatting)) {\n if (value !== undefined) {\n fullPrevProps[key] = value;\n }\n }\n\n // Roll back changed properties to their previous values\n let latestTimestamp = 0;\n for (const change of changes) {\n if (change.previousValue !== undefined) {\n fullPrevProps[change.property] = change.previousValue;\n } else {\n delete fullPrevProps[change.property];\n }\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n\n const existing = table.getTblPrChange();\n if (existing) {\n // Merge: existing previous state takes precedence (it's the ORIGINAL baseline)\n const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };\n table.setTblPrChange({ ...existing, previousProperties: merged });\n } else {\n table.setTblPrChange({\n author: this.author,\n date,\n id: String(this.revisionManager.consumeNextId()),\n previousProperties: fullPrevProps,\n });\n }\n }\n\n // Apply trPrChange to each TableRow\n for (const [row, changes] of rowChanges) {\n this.applyElementPrChange(changes, (prevProps, getNextId, date) => {\n const existing = row.getTrPrChange();\n if (existing) {\n const merged = { ...(existing.previousProperties || {}), ...prevProps };\n row.setTrPrChange({ ...existing, previousProperties: merged });\n } else {\n row.setTrPrChange({\n author: this.author,\n date,\n id: String(getNextId()),\n previousProperties: prevProps,\n });\n }\n });\n }\n\n // Apply tcPrChange to each TableCell\n // Per ECMA-376 §17.13.5.37, tcPrChange must contain FULL previous tcPr,\n // not just the delta of changed properties.\n for (const [cell, changes] of cellChanges) {\n // Build full snapshot: start from current formatting, roll back changed properties\n const currentFormatting = cell.getFormatting();\n const fullPrevProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(currentFormatting)) {\n if (value !== undefined) {\n fullPrevProps[key] = value;\n }\n }\n\n // Roll back changed properties to their previous values\n let latestTimestamp = 0;\n for (const change of changes) {\n if (change.previousValue !== undefined) {\n fullPrevProps[change.property] = change.previousValue;\n } else {\n delete fullPrevProps[change.property];\n }\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n\n const existing = cell.getTcPrChange();\n if (existing) {\n // Merge: existing previous state takes precedence (it's the ORIGINAL baseline)\n const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };\n cell.setTcPrChange({ ...existing, previousProperties: merged });\n } else {\n cell.setTcPrChange({\n author: this.author,\n date,\n id: String(this.revisionManager.consumeNextId()),\n previousProperties: fullPrevProps,\n });\n }\n }\n\n // Apply sectPrChange to each Section\n // Per ECMA-376 §17.13.5.32, sectPrChange must contain FULL previous sectPr,\n // not just the delta of changed properties.\n for (const [section, changes] of sectionChanges) {\n // Build full snapshot: start from current properties, roll back changed properties\n const currentProps = section.getProperties();\n const fullPrevProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(currentProps)) {\n if (value !== undefined) {\n fullPrevProps[key] = value;\n }\n }\n\n // Roll back changed properties to their previous values\n let latestTimestamp = 0;\n for (const change of changes) {\n if (change.previousValue !== undefined) {\n fullPrevProps[change.property] = change.previousValue;\n } else {\n delete fullPrevProps[change.property];\n }\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n\n const existing = section.getSectPrChange();\n if (existing) {\n // Merge: existing previous state takes precedence (it's the ORIGINAL baseline)\n const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };\n section.setSectPrChange({ ...existing, previousProperties: merged });\n } else {\n section.setSectPrChange({\n author: this.author,\n date,\n id: String(this.revisionManager.consumeNextId()),\n previousProperties: fullPrevProps,\n });\n }\n }\n\n // Apply rPrChange to each Run that has property changes\n for (const [run, changes] of runChanges) {\n this.applyRunPrChange(run, changes);\n }\n\n this.pendingChanges.clear();\n return revisions;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // Private Methods\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Apply pPrChange to a paragraph (extracted from flushPendingChanges for readability)\n */\n private applyParagraphPrChange(paragraph: Paragraph, changes: PendingChange[]): void {\n const newPreviousProperties: Record<string, unknown> = {};\n let latestTimestamp = 0;\n\n for (const change of changes) {\n // Record previous value even if undefined (property wasn't set before)\n newPreviousProperties[change.property] = change.previousValue;\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const existingChange = paragraph.formatting.pPrChange;\n\n if (existingChange) {\n const mergedPreviousProperties: Record<string, unknown> = {\n ...(existingChange.previousProperties || {}),\n };\n for (const [prop, value] of Object.entries(newPreviousProperties)) {\n mergedPreviousProperties[prop] = value;\n }\n paragraph.formatting.pPrChange = {\n author: existingChange.author,\n date: existingChange.date,\n id: existingChange.id,\n previousProperties: mergedPreviousProperties,\n };\n } else {\n const revisionId = this.revisionManager.consumeNextId();\n paragraph.formatting.pPrChange = {\n author: this.author,\n date: formatDateForXml(new Date(latestTimestamp)),\n id: String(revisionId),\n previousProperties: newPreviousProperties,\n };\n }\n }\n\n /**\n * Apply rPrChange to a run (mirrors applyParagraphPrChange for runs)\n */\n private applyRunPrChange(run: Run, changes: PendingChange[]): void {\n const newPreviousProperties: Partial<RunFormatting> = {};\n let latestTimestamp = 0;\n\n for (const change of changes) {\n (newPreviousProperties as Record<string, unknown>)[change.property] = change.previousValue;\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const existingChange = run.getPropertyChangeRevision();\n\n if (existingChange) {\n // Merge with existing rPrChange — preserve original author/date,\n // add new previous properties\n const mergedPreviousProperties: Partial<RunFormatting> = {\n ...(existingChange.previousProperties || {}),\n ...newPreviousProperties,\n };\n run.setPropertyChangeRevision({\n ...existingChange,\n previousProperties: mergedPreviousProperties,\n });\n } else {\n const revisionId = this.revisionManager.consumeNextId();\n run.setPropertyChangeRevision({\n id: revisionId,\n author: this.author,\n date: new Date(latestTimestamp),\n previousProperties: newPreviousProperties,\n });\n }\n }\n\n /**\n * Generic helper to apply *PrChange to table/row/cell/section elements\n */\n private applyElementPrChange(\n changes: PendingChange[],\n applier: (prevProps: Record<string, unknown>, getNextId: () => number, date: string) => void\n ): void {\n const prevProps: Record<string, unknown> = {};\n let latestTimestamp = 0;\n\n for (const change of changes) {\n // Record previous value even if undefined (property wasn't set before)\n prevProps[change.property] = change.previousValue;\n if (change.timestamp > latestTimestamp) {\n latestTimestamp = change.timestamp;\n }\n }\n\n const date = formatDateForXml(new Date(latestTimestamp));\n applier(prevProps, () => this.revisionManager.consumeNextId(), date);\n }\n\n /**\n * Add a pending change, consolidating with existing if same key\n */\n private addPendingChange(key: string, change: PendingChange): void {\n const existing = this.pendingChanges.get(key);\n if (existing) {\n existing.count = (existing.count || 1) + 1;\n // Keep the first previousValue for consolidated changes\n } else {\n this.pendingChanges.set(key, { ...change, count: 1 });\n }\n }\n\n /**\n * Create a Revision from a pending change\n */\n private createRevision(pending: PendingChange): Revision {\n const previousProps: Record<string, any> = {};\n const newProps: Record<string, any> = {};\n\n if (pending.previousValue !== undefined) {\n previousProps[pending.property] = pending.previousValue;\n }\n if (pending.newValue !== undefined) {\n newProps[pending.property] = pending.newValue;\n }\n\n // Get or create a Run for the revision content\n const run = this.getRunFromElement(pending.element);\n\n return new Revision({\n author: this.author,\n type: pending.type,\n content: run,\n previousProperties: Object.keys(previousProps).length > 0 ? previousProps : undefined,\n newProperties: Object.keys(newProps).length > 0 ? newProps : undefined,\n date: new Date(pending.timestamp),\n });\n }\n\n /**\n * Get or create a Run from an element for revision content\n */\n private getRunFromElement(element: TrackableElement): Run {\n if (element instanceof Run) {\n return element;\n }\n\n // Use instanceof for type-safe element identification (minification-safe)\n if (element instanceof Table) return new Run('Table');\n if (element instanceof TableRow) return new Run('TableRow');\n if (element instanceof TableCell) return new Run('TableCell');\n if (element instanceof Section) return new Run('Section');\n if (element instanceof Paragraph) return new Run('Paragraph');\n\n // Fallback for other elements (e.g., Hyperlink)\n const hasGetText =\n 'getText' in element && typeof (element as { getText?: () => string }).getText === 'function';\n const text = hasGetText\n ? (element as { getText: () => string }).getText()\n : element?.constructor?.name || 'Unknown element';\n return new Run(typeof text === 'string' ? text : String(text));\n }\n\n /**\n * Get a stable unique ID for an element (used in consolidation keys)\n */\n private getElementId(element: TrackableElement): number {\n let id = this.elementIdMap.get(element as object);\n if (id === undefined) {\n id = this.elementIdCounter++;\n this.elementIdMap.set(element as object, id);\n }\n return id;\n }\n\n /**\n * Deep equality check for tracking values (handles objects, primitives, null/undefined)\n */\n private valuesEqual(a: unknown, b: unknown): boolean {\n return deepEqual(a, b);\n }\n\n /**\n * Stringify a value for use in consolidation key\n */\n private stringifyValue(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n\n /**\n * Create an insertion revision (factory to avoid circular dependency in Run)\n */\n createInsertion(content: Run, date?: Date): Revision {\n return Revision.createInsertion(this.author, content, date);\n }\n\n /**\n * Create a deletion revision (factory to avoid circular dependency in Run)\n */\n createDeletion(content: Run, date?: Date): Revision {\n return Revision.createDeletion(this.author, content, date);\n }\n\n /**\n * Get count of pending changes\n */\n getPendingCount(): number {\n return this.pendingChanges.size;\n }\n\n /**\n * Check if there are pending changes\n */\n hasPendingChanges(): boolean {\n return this.pendingChanges.size > 0;\n }\n\n /**\n * Clear all pending changes without creating revisions\n */\n clearPendingChanges(): void {\n this.pendingChanges.clear();\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
- import type { Revision, RevisionType } from '../elements/Revision';
2
- import type { RevisionManager } from '../elements/RevisionManager';
3
- import type { Run } from '../elements/Run';
4
- import type { Paragraph } from '../elements/Paragraph';
5
- import type { Table } from '../elements/Table';
6
- import type { TableRow } from '../elements/TableRow';
7
- import type { TableCell } from '../elements/TableCell';
8
- import type { Section } from '../elements/Section';
1
+ import type { Revision, RevisionType } from '../elements/Revision.js';
2
+ import type { RevisionManager } from '../elements/RevisionManager.js';
3
+ import type { Run } from '../elements/Run.js';
4
+ import type { Paragraph } from '../elements/Paragraph.js';
5
+ import type { Table } from '../elements/Table.js';
6
+ import type { TableRow } from '../elements/TableRow.js';
7
+ import type { TableCell } from '../elements/TableCell.js';
8
+ import type { Section } from '../elements/Section.js';
9
9
  export type TrackableElement = Run | Paragraph | Table | TableRow | TableCell | Section | {
10
10
  constructor: {
11
11
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"TrackingContext.d.ts","sourceRoot":"","sources":["../../src/tracking/TrackingContext.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,MAAM,gBAAgB,GACxB,GAAG,GACH,SAAS,GACT,KAAK,GACL,QAAQ,GACR,SAAS,GACT,OAAO,GACP;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAKtC,MAAM,WAAW,aAAa;IAE5B,IAAI,EAAE,YAAY,CAAC;IAEnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,OAAO,CAAC;IAEvB,QAAQ,EAAE,OAAO,CAAC;IAElB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,MAAM,WAAW,eAAe;IAI9B,SAAS,IAAI,OAAO,CAAC;IAKrB,SAAS,IAAI,MAAM,CAAC;IAKpB,kBAAkB,IAAI,eAAe,CAAC;IAKtC,wBAAwB,IAAI,OAAO,CAAC;IASpC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAS/F,4BAA4B,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IASR,oBAAoB,CAClB,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IASR,gBAAgB,CACd,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IASR,kBAAkB,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IAOR,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAO9D,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAO7D,mBAAmB,IAAI,QAAQ,EAAE,CAAC;IAOlC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAOrD,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;CACrD"}
1
+ {"version":3,"file":"TrackingContext.d.ts","sourceRoot":"","sources":["../../src/tracking/TrackingContext.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,MAAM,MAAM,gBAAgB,GACxB,GAAG,GACH,SAAS,GACT,KAAK,GACL,QAAQ,GACR,SAAS,GACT,OAAO,GACP;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAKtC,MAAM,WAAW,aAAa;IAE5B,IAAI,EAAE,YAAY,CAAC;IAEnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,OAAO,CAAC;IAEvB,QAAQ,EAAE,OAAO,CAAC;IAElB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,MAAM,WAAW,eAAe;IAI9B,SAAS,IAAI,OAAO,CAAC;IAKrB,SAAS,IAAI,MAAM,CAAC;IAKpB,kBAAkB,IAAI,eAAe,CAAC;IAKtC,wBAAwB,IAAI,OAAO,CAAC;IASpC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAS/F,4BAA4B,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IASR,oBAAoB,CAClB,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IASR,gBAAgB,CACd,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IASR,kBAAkB,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAAC;IAOR,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAO9D,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAO7D,mBAAmB,IAAI,QAAQ,EAAE,CAAC;IAOlC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAOrD,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;CACrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"TrackingContext.js","sourceRoot":"","sources":["../../src/tracking/TrackingContext.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * TrackingContext - Interface for automatic change tracking\n *\n * When enabled via Document.enableTrackChanges(), element setter methods\n * use this context to automatically create Revision objects for changes.\n *\n * @module TrackingContext\n */\n\nimport type { Revision, RevisionType } from '../elements/Revision';\nimport type { RevisionManager } from '../elements/RevisionManager';\nimport type { Run } from '../elements/Run';\nimport type { Paragraph } from '../elements/Paragraph';\nimport type { Table } from '../elements/Table';\nimport type { TableRow } from '../elements/TableRow';\nimport type { TableCell } from '../elements/TableCell';\nimport type { Section } from '../elements/Section';\n\n/** Union of element types that can be tracked */\nexport type TrackableElement =\n | Run\n | Paragraph\n | Table\n | TableRow\n | TableCell\n | Section\n | { constructor: { name: string } };\n\n/**\n * Pending change entry before flushing to RevisionManager\n */\nexport interface PendingChange {\n /** Type of revision to create */\n type: RevisionType;\n /** Property that changed */\n property: string;\n /** Value before the change */\n previousValue: unknown;\n /** Value after the change */\n newValue: unknown;\n /** Element that was modified */\n element: TrackableElement;\n /** When the change occurred */\n timestamp: number;\n /** Count for consolidated changes */\n count?: number;\n}\n\n/**\n * Interface for tracking changes to document elements.\n *\n * Elements call tracking methods when their setters are invoked.\n * The context decides whether to create revisions based on enabled state.\n */\nexport interface TrackingContext {\n /**\n * Check if change tracking is currently enabled\n */\n isEnabled(): boolean;\n\n /**\n * Get the author name for new revisions\n */\n getAuthor(): string;\n\n /**\n * Get the RevisionManager for registering revisions\n */\n getRevisionManager(): RevisionManager;\n\n /**\n * Check if formatting changes should be tracked\n */\n isTrackFormattingEnabled(): boolean;\n\n /**\n * Track a Run property change (bold, italic, font, color, etc.)\n * @param run - The Run that was modified\n * @param property - Property name (e.g., 'bold', 'color')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackRunPropertyChange(run: Run, property: string, oldValue: unknown, newValue: unknown): void;\n\n /**\n * Track a Paragraph property change (alignment, spacing, etc.)\n * @param paragraph - The Paragraph that was modified\n * @param property - Property name (e.g., 'alignment', 'spaceBefore')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackParagraphPropertyChange(\n paragraph: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Hyperlink change (URL, anchor, text, formatting)\n * @param hyperlink - The Hyperlink that was modified\n * @param changeType - Type of change (e.g., 'url', 'text', 'formatting')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackHyperlinkChange(\n hyperlink: TrackableElement,\n changeType: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Table element property change\n * @param element - The table/row/cell that was modified\n * @param property - Property name\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackTableChange(\n element: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Section property change\n * @param section - The Section that was modified\n * @param property - Property name (e.g., 'pageSize', 'margins')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackSectionChange(\n section: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track text insertion\n * @param element - Element containing the insertion\n * @param text - Text that was inserted\n */\n trackInsertion(element: TrackableElement, text: string): void;\n\n /**\n * Track text deletion\n * @param element - Element containing the deletion\n * @param text - Text that was deleted\n */\n trackDeletion(element: TrackableElement, text: string): void;\n\n /**\n * Flush all pending changes and create Revision objects.\n * This is called automatically before document save.\n * @returns Array of created revisions\n */\n flushPendingChanges(): Revision[];\n\n /**\n * Create an insertion revision (factory to avoid circular dependency in Run)\n * @param content - Run or array of content for the insertion\n * @param date - Optional date for the revision\n */\n createInsertion(content: Run, date?: Date): Revision;\n\n /**\n * Create a deletion revision (factory to avoid circular dependency in Run)\n * @param content - Run or array of content for the deletion\n * @param date - Optional date for the revision\n */\n createDeletion(content: Run, date?: Date): Revision;\n}\n"]}
1
+ {"version":3,"file":"TrackingContext.js","sourceRoot":"","sources":["../../src/tracking/TrackingContext.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * TrackingContext - Interface for automatic change tracking\n *\n * When enabled via Document.enableTrackChanges(), element setter methods\n * use this context to automatically create Revision objects for changes.\n *\n * @module TrackingContext\n */\n\nimport type { Revision, RevisionType } from '../elements/Revision.js';\nimport type { RevisionManager } from '../elements/RevisionManager.js';\nimport type { Run } from '../elements/Run.js';\nimport type { Paragraph } from '../elements/Paragraph.js';\nimport type { Table } from '../elements/Table.js';\nimport type { TableRow } from '../elements/TableRow.js';\nimport type { TableCell } from '../elements/TableCell.js';\nimport type { Section } from '../elements/Section.js';\n\n/** Union of element types that can be tracked */\nexport type TrackableElement =\n | Run\n | Paragraph\n | Table\n | TableRow\n | TableCell\n | Section\n | { constructor: { name: string } };\n\n/**\n * Pending change entry before flushing to RevisionManager\n */\nexport interface PendingChange {\n /** Type of revision to create */\n type: RevisionType;\n /** Property that changed */\n property: string;\n /** Value before the change */\n previousValue: unknown;\n /** Value after the change */\n newValue: unknown;\n /** Element that was modified */\n element: TrackableElement;\n /** When the change occurred */\n timestamp: number;\n /** Count for consolidated changes */\n count?: number;\n}\n\n/**\n * Interface for tracking changes to document elements.\n *\n * Elements call tracking methods when their setters are invoked.\n * The context decides whether to create revisions based on enabled state.\n */\nexport interface TrackingContext {\n /**\n * Check if change tracking is currently enabled\n */\n isEnabled(): boolean;\n\n /**\n * Get the author name for new revisions\n */\n getAuthor(): string;\n\n /**\n * Get the RevisionManager for registering revisions\n */\n getRevisionManager(): RevisionManager;\n\n /**\n * Check if formatting changes should be tracked\n */\n isTrackFormattingEnabled(): boolean;\n\n /**\n * Track a Run property change (bold, italic, font, color, etc.)\n * @param run - The Run that was modified\n * @param property - Property name (e.g., 'bold', 'color')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackRunPropertyChange(run: Run, property: string, oldValue: unknown, newValue: unknown): void;\n\n /**\n * Track a Paragraph property change (alignment, spacing, etc.)\n * @param paragraph - The Paragraph that was modified\n * @param property - Property name (e.g., 'alignment', 'spaceBefore')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackParagraphPropertyChange(\n paragraph: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Hyperlink change (URL, anchor, text, formatting)\n * @param hyperlink - The Hyperlink that was modified\n * @param changeType - Type of change (e.g., 'url', 'text', 'formatting')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackHyperlinkChange(\n hyperlink: TrackableElement,\n changeType: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Table element property change\n * @param element - The table/row/cell that was modified\n * @param property - Property name\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackTableChange(\n element: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Section property change\n * @param section - The Section that was modified\n * @param property - Property name (e.g., 'pageSize', 'margins')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackSectionChange(\n section: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track text insertion\n * @param element - Element containing the insertion\n * @param text - Text that was inserted\n */\n trackInsertion(element: TrackableElement, text: string): void;\n\n /**\n * Track text deletion\n * @param element - Element containing the deletion\n * @param text - Text that was deleted\n */\n trackDeletion(element: TrackableElement, text: string): void;\n\n /**\n * Flush all pending changes and create Revision objects.\n * This is called automatically before document save.\n * @returns Array of created revisions\n */\n flushPendingChanges(): Revision[];\n\n /**\n * Create an insertion revision (factory to avoid circular dependency in Run)\n * @param content - Run or array of content for the insertion\n * @param date - Optional date for the revision\n */\n createInsertion(content: Run, date?: Date): Revision;\n\n /**\n * Create a deletion revision (factory to avoid circular dependency in Run)\n * @param content - Run or array of content for the deletion\n * @param date - Optional date for the revision\n */\n createDeletion(content: Run, date?: Date): Revision;\n}\n"]}
@@ -0,0 +1,28 @@
1
+ export interface DocumentProperties {
2
+ title?: string;
3
+ subject?: string;
4
+ creator?: string;
5
+ keywords?: string;
6
+ description?: string;
7
+ lastModifiedBy?: string;
8
+ revision?: number;
9
+ created?: Date;
10
+ modified?: Date;
11
+ language?: string;
12
+ category?: string;
13
+ contentStatus?: string;
14
+ application?: string;
15
+ appVersion?: string;
16
+ company?: string;
17
+ manager?: string;
18
+ version?: string;
19
+ customProperties?: Record<string, string | number | boolean | Date>;
20
+ }
21
+ export interface DocumentPart {
22
+ name: string;
23
+ content: string | Buffer;
24
+ contentType?: string;
25
+ isBinary?: boolean;
26
+ size?: number;
27
+ }
28
+ //# sourceMappingURL=document-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-types.d.ts","sourceRoot":"","sources":["../../src/types/document-types.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,kBAAkB;IAEjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CACrE;AAMD,MAAM,WAAW,YAAY;IAE3B,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=document-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-types.js","sourceRoot":"","sources":["../../src/types/document-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Document-shaped types extracted out of `src/core/Document.ts` so that\n * `DocumentParser`, `DocumentGenerator`, and `DocumentValidator` can\n * import them without re-introducing a circular dependency back to the\n * Document class.\n *\n * `Document.ts` re-exports these for backward compatibility — existing\n * `import { DocumentProperties } from 'docxmlater'` continues to work.\n */\n\n/** Document properties (core and extended). */\nexport interface DocumentProperties {\n // Core Properties (docProps/core.xml)\n title?: string;\n subject?: string;\n creator?: string;\n keywords?: string;\n description?: string;\n lastModifiedBy?: string;\n revision?: number;\n created?: Date;\n modified?: Date;\n language?: string;\n category?: string;\n contentStatus?: string;\n\n // Extended Properties (docProps/app.xml)\n application?: string;\n appVersion?: string;\n company?: string;\n manager?: string;\n version?: string;\n\n // Custom Properties (docProps/custom.xml)\n customProperties?: Record<string, string | number | boolean | Date>;\n}\n\n/**\n * Document part representation. Any part inside the DOCX package\n * (XML, binary).\n */\nexport interface DocumentPart {\n /** Part name/path within the package */\n name: string;\n /** Part content (string for XML/text, Buffer for binary) */\n content: string | Buffer;\n /** MIME content type */\n contentType?: string;\n /** Whether the part is binary */\n isBinary?: boolean;\n /** Part size in bytes */\n size?: number;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { Paragraph } from '../elements/Paragraph';
2
- import type { Run } from '../elements/Run';
1
+ import type { Paragraph } from '../elements/Paragraph.js';
2
+ import type { Run } from '../elements/Run.js';
3
3
  export type BorderStyleType = 'single' | 'double' | 'dashed' | 'dotted' | 'triple' | 'none';
4
4
  export interface BorderStyle {
5
5
  style: BorderStyleType;
@@ -14,8 +14,8 @@ export interface ParagraphBorder {
14
14
  right?: BorderStyle;
15
15
  between?: boolean;
16
16
  }
17
- export type { ShadingPattern } from '../elements/CommonTypes';
18
- export type { ShadingConfig as ParagraphShading } from '../elements/CommonTypes';
17
+ export type { ShadingPattern } from '../elements/CommonTypes.js';
18
+ export type { ShadingConfig as ParagraphShading } from '../elements/CommonTypes.js';
19
19
  export type TabAlignment = 'left' | 'center' | 'right' | 'decimal' | 'bar' | 'clear' | 'num';
20
20
  export type TabLeader = 'none' | 'dot' | 'hyphen' | 'underscore' | 'heavy' | 'middleDot';
21
21
  export interface TabStop {
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/types/formatting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/types/formatting.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/types/formatting.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Additional formatting types for enhanced document manipulation\n */\n\n// Forward references to avoid circular dependencies\nimport type { Paragraph } from '../elements/Paragraph';\nimport type { Run } from '../elements/Run';\n\n/**\n * Border style options\n */\nexport type BorderStyleType = 'single' | 'double' | 'dashed' | 'dotted' | 'triple' | 'none';\n\n/**\n * Individual border configuration\n */\nexport interface BorderStyle {\n /** Border style */\n style: BorderStyleType;\n /** Border width in eighths of a point */\n width: number;\n /** Border color in hex format */\n color: string;\n /** Space between border and text in points */\n space?: number;\n}\n\n/**\n * Paragraph border configuration\n */\nexport interface ParagraphBorder {\n /** Top border */\n top?: BorderStyle;\n /** Bottom border */\n bottom?: BorderStyle;\n /** Left border */\n left?: BorderStyle;\n /** Right border */\n right?: BorderStyle;\n /** Apply border between paragraphs */\n between?: boolean;\n}\n\n/**\n * Shading patterns — re-exported from CommonTypes for backward compatibility.\n * @see CommonTypes.ShadingPattern for the canonical definition\n */\nexport type { ShadingPattern } from '../elements/CommonTypes';\n\n/**\n * Paragraph shading configuration — re-exported from CommonTypes for backward compatibility.\n * @see CommonTypes.ShadingConfig for the canonical definition (includes theme attributes)\n */\nexport type { ShadingConfig as ParagraphShading } from '../elements/CommonTypes';\n\n/**\n * Tab stop alignment\n */\nexport type TabAlignment = 'left' | 'center' | 'right' | 'decimal' | 'bar' | 'clear' | 'num';\n\n/**\n * Tab leader character\n */\nexport type TabLeader = 'none' | 'dot' | 'hyphen' | 'underscore' | 'heavy' | 'middleDot';\n\n/**\n * Tab stop configuration\n */\nexport interface TabStop {\n /** Position in twips from left margin */\n position: number;\n /** Tab alignment type */\n type: TabAlignment;\n /** Leader character */\n leader?: TabLeader;\n}\n\n/**\n * Text search options\n */\nexport interface FindOptions {\n /** Case sensitive search */\n caseSensitive?: boolean;\n /** Match whole words only */\n wholeWord?: boolean;\n /** Use regular expressions */\n useRegex?: boolean;\n /** Include headers and footers */\n includeHeadersFooters?: boolean;\n /** Include footnotes and endnotes */\n includeNotes?: boolean;\n}\n\n/**\n * Text replacement options\n */\nexport interface ReplaceOptions extends FindOptions {\n /** Maximum number of replacements (0 = unlimited) */\n maxReplacements?: number;\n /** Track changes for replacements */\n trackChanges?: boolean;\n /** Author for track changes */\n author?: string;\n}\n\n/**\n * Search result\n */\nexport interface SearchResult {\n /** The paragraph containing the match */\n paragraph: Paragraph;\n /** The run containing the match */\n run?: Run;\n /** Match start position in paragraph */\n startIndex: number;\n /** Match end position in paragraph */\n endIndex: number;\n /** The matched text */\n match: string;\n}\n\n/**\n * Text emphasis options\n */\nexport type EmphasisType = 'bold' | 'italic' | 'underline';\n\n/**\n * List prefix configuration\n */\nexport interface ListPrefix {\n /** List format type */\n format: 'bullet' | 'number';\n /** Custom style string (e.g., '•', '1.', 'a)') */\n style: string;\n}\n\n/**\n * Format options for style application\n */\nexport interface FormatOptions {\n // Text formatting\n /** Font family name (e.g., 'Arial', 'Verdana') */\n font?: string;\n /** Font size in points */\n size?: number;\n /** Text color as 6-digit hex (e.g., 'FF0000' for red) */\n color?: string;\n /** Text emphasis (bold, italic, underline) */\n emphasis?: EmphasisType[];\n\n // Alignment\n /** Paragraph alignment */\n alignment?: 'left' | 'right' | 'center' | 'justify';\n\n // Spacing (in points)\n /** Space before paragraph in points */\n spaceAbove?: number;\n /** Space after paragraph in points */\n spaceBelow?: number;\n /** Line spacing in points or multiplier */\n lineSpacing?: number;\n\n // Indentation (in inches)\n /** Left indentation in inches */\n indentLeft?: number;\n /** Right indentation in inches */\n indentRight?: number;\n /** First line indentation in inches */\n indentFirst?: number;\n /** Hanging indentation in inches */\n indentHanging?: number;\n\n // Padding (in points) - for table cells\n /** Top padding in points */\n paddingTop?: number;\n /** Bottom padding in points */\n paddingBottom?: number;\n /** Left padding in points */\n paddingLeft?: number;\n /** Right padding in points */\n paddingRight?: number;\n\n // List formatting\n /** List prefix style */\n prefixList?: string | ListPrefix;\n\n // Advanced options\n /** Border color as 6-digit hex */\n borderColor?: string;\n /** Border width in points */\n borderWidth?: number;\n /** Background shading color as 6-digit hex */\n shading?: string;\n /** Keep with next paragraph */\n keepWithNext?: boolean;\n /** Keep lines together */\n keepLines?: boolean;\n}\n\n/**\n * Options for applying styles to paragraphs\n */\nexport interface StyleApplyOptions {\n /** Specific paragraphs to apply style to (default: auto-detect) */\n paragraphs?: Paragraph[];\n /** Properties to preserve from existing formatting */\n keepProperties?: string[];\n /** Custom formatting to apply */\n format?: FormatOptions;\n}\n"]}
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/types/formatting.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Additional formatting types for enhanced document manipulation\n */\n\n// Forward references to avoid circular dependencies\nimport type { Paragraph } from '../elements/Paragraph.js';\nimport type { Run } from '../elements/Run.js';\n\n/**\n * Border style options\n */\nexport type BorderStyleType = 'single' | 'double' | 'dashed' | 'dotted' | 'triple' | 'none';\n\n/**\n * Individual border configuration\n */\nexport interface BorderStyle {\n /** Border style */\n style: BorderStyleType;\n /** Border width in eighths of a point */\n width: number;\n /** Border color in hex format */\n color: string;\n /** Space between border and text in points */\n space?: number;\n}\n\n/**\n * Paragraph border configuration\n */\nexport interface ParagraphBorder {\n /** Top border */\n top?: BorderStyle;\n /** Bottom border */\n bottom?: BorderStyle;\n /** Left border */\n left?: BorderStyle;\n /** Right border */\n right?: BorderStyle;\n /** Apply border between paragraphs */\n between?: boolean;\n}\n\n/**\n * Shading patterns — re-exported from CommonTypes for backward compatibility.\n * @see CommonTypes.ShadingPattern for the canonical definition\n */\nexport type { ShadingPattern } from '../elements/CommonTypes.js';\n\n/**\n * Paragraph shading configuration — re-exported from CommonTypes for backward compatibility.\n * @see CommonTypes.ShadingConfig for the canonical definition (includes theme attributes)\n */\nexport type { ShadingConfig as ParagraphShading } from '../elements/CommonTypes.js';\n\n/**\n * Tab stop alignment\n */\nexport type TabAlignment = 'left' | 'center' | 'right' | 'decimal' | 'bar' | 'clear' | 'num';\n\n/**\n * Tab leader character\n */\nexport type TabLeader = 'none' | 'dot' | 'hyphen' | 'underscore' | 'heavy' | 'middleDot';\n\n/**\n * Tab stop configuration\n */\nexport interface TabStop {\n /** Position in twips from left margin */\n position: number;\n /** Tab alignment type */\n type: TabAlignment;\n /** Leader character */\n leader?: TabLeader;\n}\n\n/**\n * Text search options\n */\nexport interface FindOptions {\n /** Case sensitive search */\n caseSensitive?: boolean;\n /** Match whole words only */\n wholeWord?: boolean;\n /** Use regular expressions */\n useRegex?: boolean;\n /** Include headers and footers */\n includeHeadersFooters?: boolean;\n /** Include footnotes and endnotes */\n includeNotes?: boolean;\n}\n\n/**\n * Text replacement options\n */\nexport interface ReplaceOptions extends FindOptions {\n /** Maximum number of replacements (0 = unlimited) */\n maxReplacements?: number;\n /** Track changes for replacements */\n trackChanges?: boolean;\n /** Author for track changes */\n author?: string;\n}\n\n/**\n * Search result\n */\nexport interface SearchResult {\n /** The paragraph containing the match */\n paragraph: Paragraph;\n /** The run containing the match */\n run?: Run;\n /** Match start position in paragraph */\n startIndex: number;\n /** Match end position in paragraph */\n endIndex: number;\n /** The matched text */\n match: string;\n}\n\n/**\n * Text emphasis options\n */\nexport type EmphasisType = 'bold' | 'italic' | 'underline';\n\n/**\n * List prefix configuration\n */\nexport interface ListPrefix {\n /** List format type */\n format: 'bullet' | 'number';\n /** Custom style string (e.g., '•', '1.', 'a)') */\n style: string;\n}\n\n/**\n * Format options for style application\n */\nexport interface FormatOptions {\n // Text formatting\n /** Font family name (e.g., 'Arial', 'Verdana') */\n font?: string;\n /** Font size in points */\n size?: number;\n /** Text color as 6-digit hex (e.g., 'FF0000' for red) */\n color?: string;\n /** Text emphasis (bold, italic, underline) */\n emphasis?: EmphasisType[];\n\n // Alignment\n /** Paragraph alignment */\n alignment?: 'left' | 'right' | 'center' | 'justify';\n\n // Spacing (in points)\n /** Space before paragraph in points */\n spaceAbove?: number;\n /** Space after paragraph in points */\n spaceBelow?: number;\n /** Line spacing in points or multiplier */\n lineSpacing?: number;\n\n // Indentation (in inches)\n /** Left indentation in inches */\n indentLeft?: number;\n /** Right indentation in inches */\n indentRight?: number;\n /** First line indentation in inches */\n indentFirst?: number;\n /** Hanging indentation in inches */\n indentHanging?: number;\n\n // Padding (in points) - for table cells\n /** Top padding in points */\n paddingTop?: number;\n /** Bottom padding in points */\n paddingBottom?: number;\n /** Left padding in points */\n paddingLeft?: number;\n /** Right padding in points */\n paddingRight?: number;\n\n // List formatting\n /** List prefix style */\n prefixList?: string | ListPrefix;\n\n // Advanced options\n /** Border color as 6-digit hex */\n borderColor?: string;\n /** Border width in points */\n borderWidth?: number;\n /** Background shading color as 6-digit hex */\n shading?: string;\n /** Keep with next paragraph */\n keepWithNext?: boolean;\n /** Keep lines together */\n keepLines?: boolean;\n}\n\n/**\n * Options for applying styles to paragraphs\n */\nexport interface StyleApplyOptions {\n /** Specific paragraphs to apply style to (default: auto-detect) */\n paragraphs?: Paragraph[];\n /** Properties to preserve from existing formatting */\n keepProperties?: string[];\n /** Custom formatting to apply */\n format?: FormatOptions;\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  export interface DocumentProtection {
2
2
  edit: 'readOnly' | 'comments' | 'trackedChanges' | 'forms';
3
3
  enforcement: boolean;
4
+ formatting?: boolean;
4
5
  cryptProviderType?: string;
5
6
  cryptAlgorithmClass?: string;
6
7
  cryptAlgorithmType?: string;
@@ -8,11 +9,16 @@ export interface DocumentProtection {
8
9
  cryptSpinCount?: number;
9
10
  hash?: string;
10
11
  salt?: string;
12
+ algorithmName?: string;
13
+ hashValue?: string;
14
+ saltValue?: string;
11
15
  }
12
16
  export interface RevisionViewSettings {
13
17
  showInsertionsAndDeletions: boolean;
14
18
  showFormatting: boolean;
15
19
  showInkAnnotations: boolean;
20
+ showMarkup?: boolean;
21
+ showComments?: boolean;
16
22
  }
17
23
  export interface TrackChangesSettings {
18
24
  trackChangesEnabled?: boolean;