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
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * DocXML - DOCX Editing Framework\n * Main entry point\n */\n\n// =============================================================================\n// PUBLIC API — Core Document Classes\n// =============================================================================\n\nexport {\n Document,\n DocumentProperties,\n DocumentOptions,\n DocumentLoadOptions,\n DocumentPart,\n} from './core/Document';\n\n// =============================================================================\n// PUBLIC API — Document Elements\n// =============================================================================\n\nexport {\n Paragraph,\n ParagraphAlignment,\n ParagraphFormatting,\n ParagraphContent,\n FieldLike,\n isRun,\n isField,\n isSimpleField,\n isComplexField,\n isHyperlink,\n isRevision,\n isRangeMarker,\n isShape,\n isTextBox,\n} from './elements/Paragraph';\nexport { Run, RunFormatting, ThemeColorValue, LanguageConfig } from './elements/Run';\nexport {\n Section,\n PageOrientation,\n SectionType,\n PageNumberFormat,\n PageSize,\n Margins,\n Columns,\n PageNumbering,\n SectionProperties,\n LineNumbering,\n LineNumberingRestart,\n} from './elements/Section';\nexport {\n Table,\n TableAlignment,\n TableLayout,\n TableBorder,\n TableBorders,\n TableFormatting,\n} from './elements/Table';\nexport { TableRow, RowFormatting } from './elements/TableRow';\nexport {\n TableCell,\n CellBorder,\n CellBorders,\n CellShading,\n CellFormatting,\n} from './elements/TableCell';\nexport { TableGridChange, GridColumn, TableGridChangeProperties } from './elements/TableGridChange';\nexport {\n Image,\n ImageFormat,\n ImageProperties,\n ImageBorder,\n ImageEffects,\n PresetGeometry,\n BlipCompressionState,\n PicLockAttribute,\n PicNonVisualProperties,\n} from './elements/Image';\nexport { ImageRun } from './elements/ImageRun';\nexport { Shape, ShapeType, ShapeProperties, ShapeFill, ShapeOutline } from './elements/Shape';\nexport { TextBox, TextBoxProperties, TextBoxFill, TextBoxMargins } from './elements/TextBox';\nexport { Header, HeaderType, HeaderProperties } from './elements/Header';\nexport { Footer, FooterType, FooterProperties } from './elements/Footer';\nexport { Hyperlink, HyperlinkProperties } from './elements/Hyperlink';\nexport { Bookmark, BookmarkProperties } from './elements/Bookmark';\nexport { RangeMarker, RangeMarkerType, RangeMarkerProperties } from './elements/RangeMarker';\nexport { Comment, CommentProperties } from './elements/Comment';\nexport { Footnote, FootnoteType, FootnoteProperties } from './elements/Footnote';\nexport { Endnote, EndnoteType, EndnoteProperties } from './elements/Endnote';\nexport {\n Field,\n FieldType,\n FieldProperties,\n ComplexField,\n ComplexFieldProperties,\n FieldCharType,\n TOCFieldOptions,\n createTOCField,\n} from './elements/Field';\nexport {\n createNestedIFMergeField,\n createMergeField,\n createRefField,\n createIFField,\n createNestedField,\n parseHyperlinkInstruction,\n buildHyperlinkInstruction,\n isHyperlinkInstruction,\n ParsedHyperlinkInstruction,\n} from './elements/FieldHelpers';\nexport {\n StructuredDocumentTag,\n SDTProperties,\n SDTLockType,\n SDTContent,\n SDTPlaceholder,\n SDTDataBinding,\n ContentControlType,\n} from './elements/StructuredDocumentTag';\nexport { TableOfContents, TOCProperties } from './elements/TableOfContents';\nexport { TableOfContentsElement } from './elements/TableOfContentsElement';\nexport { AlternateContent } from './elements/AlternateContent';\nexport { MathParagraph, MathExpression } from './elements/MathElement';\nexport { CustomXmlBlock } from './elements/CustomXml';\nexport { PreservedElement, PreservedElementContext } from './elements/PreservedElement';\n\n// =============================================================================\n// PUBLIC API — Track Changes / Revisions\n// =============================================================================\n\nexport { Revision, RevisionType, RevisionProperties, FieldContext } from './elements/Revision';\nexport { RevisionContent, isRunContent, isHyperlinkContent } from './elements/RevisionContent';\nexport {\n RevisionLocation,\n RunPropertyChange,\n ParagraphPropertyChange,\n ParagraphFormattingPartial,\n ParagraphBorderDef,\n ParagraphBorders,\n ParagraphShading,\n TabStopDef,\n PropertyChangeBase,\n TablePropertyChange,\n TablePropertyChangeType,\n SectionPropertyChange,\n NumberingChange,\n AnyPropertyChange,\n isRunPropertyChange,\n isParagraphPropertyChange,\n isTablePropertyChange,\n isSectionPropertyChange,\n isNumberingChange,\n} from './elements/PropertyChangeTypes';\nexport {\n acceptRevisionsInMemory,\n AcceptRevisionsOptions,\n AcceptRevisionsResult,\n paragraphHasRevisions,\n getRevisionsFromParagraph,\n countRevisionsByType,\n stripRevisionsFromXml,\n} from './utils/InMemoryRevisionAcceptor';\nexport {\n MoveOperationHelper,\n MoveOperationOptions,\n MoveOperationResult,\n} from './utils/MoveOperationHelper';\nexport {\n SelectiveRevisionAcceptor,\n SelectiveAcceptResult,\n} from './utils/SelectiveRevisionAcceptor';\nexport {\n RevisionAwareProcessor,\n RevisionHandlingMode,\n RevisionProcessingOptions,\n SelectionCriteria,\n RevisionProcessingResult,\n ConflictInfo,\n ProcessingLogEntry,\n} from './utils/RevisionAwareProcessor';\nexport {\n ChangelogGenerator,\n ChangeEntry,\n ChangeCategory,\n ChangeLocation,\n ChangelogOptions,\n ChangelogFormat,\n ConsolidatedChange,\n ChangelogSummary,\n} from './utils/ChangelogGenerator';\n\n// =============================================================================\n// PUBLIC API — Formatting / Styles / Numbering\n// =============================================================================\n\nexport { Style, StyleType, StyleProperties } from './formatting/Style';\nexport {\n StylesManager,\n ValidationResult,\n LatentStylesConfig,\n LatentStyleException,\n} from './formatting/StylesManager';\nexport {\n NumberingLevel,\n NumberFormat,\n NumberAlignment,\n NumberingLevelProperties,\n WORD_NATIVE_BULLETS,\n WordNativeBullet,\n} from './formatting/NumberingLevel';\nexport { AbstractNumbering, AbstractNumberingProperties } from './formatting/AbstractNumbering';\nexport { NumberingInstance, NumberingInstanceProperties } from './formatting/NumberingInstance';\nexport {\n NumberingManager,\n NumberingConsolidationOptions,\n NumberingConsolidationResult,\n} from './formatting/NumberingManager';\nexport {\n StyleRunFormatting,\n StyleParagraphFormatting,\n Heading2TableOptions,\n StyleConfig,\n Heading2Config,\n ApplyCustomFormattingOptions,\n} from './types/styleConfig';\nexport { FormatOptions, StyleApplyOptions, EmphasisType, ListPrefix } from './types/formatting';\n\n// =============================================================================\n// PUBLIC API — Managers\n// =============================================================================\n\nexport { RevisionManager, RevisionCategory, RevisionSummary } from './elements/RevisionManager';\nexport { ImageManager } from './elements/ImageManager';\nexport { BookmarkManager } from './elements/BookmarkManager';\nexport { CommentManager } from './elements/CommentManager';\nexport { FootnoteManager } from './elements/FootnoteManager';\nexport { EndnoteManager } from './elements/EndnoteManager';\nexport { HeaderFooterManager } from './elements/HeaderFooterManager';\nexport { FontManager, FontFormat, FontEntry } from './elements/FontManager';\nexport {\n DrawingManager,\n DrawingElement,\n DrawingType,\n PreservedDrawing,\n} from './managers/DrawingManager';\n\n// =============================================================================\n// PUBLIC API — Image Optimization\n// =============================================================================\n\nexport type { ImageOptimizationResult } from './images/ImageOptimizer';\n\n// =============================================================================\n// TYPES — Common / Shared Type Definitions\n// =============================================================================\n\nexport {\n ShadingPattern,\n BasicShadingPattern,\n BorderStyle,\n ExtendedBorderStyle,\n FullBorderStyle,\n BorderDefinition,\n FourSidedBorders,\n TableBorderDefinitions,\n HorizontalAlignment,\n VerticalAlignment,\n PageVerticalAlignment,\n CellVerticalAlignment,\n ParagraphAlignment as CommonParagraphAlignment,\n TableAlignment as CommonTableAlignment,\n RowJustification,\n TextVerticalAlignment,\n TabAlignment,\n PositionAnchor,\n HorizontalAnchor,\n VerticalAnchor,\n TextDirection,\n SectionTextDirection,\n WidthType,\n ShadingConfig,\n buildShadingAttributes,\n TabLeader,\n TabStop,\n isShadingPattern,\n isBorderStyle,\n isHorizontalAlignment,\n isVerticalAlignment,\n isParagraphAlignment,\n isWidthType,\n DEFAULT_BORDER,\n NO_BORDER,\n} from './elements/CommonTypes';\nexport {\n ListCategory,\n NumberFormat as ListNumberFormat,\n BulletFormat,\n ListDetectionResult,\n ListAnalysis,\n ListNormalizationOptions,\n ListNormalizationReport,\n IndentationLevel,\n} from './types/list-types';\n\nexport { CompatibilityMode, CompatibilityInfo, CompatSetting } from './types/compatibility-types';\n\nexport {\n DocumentProtection,\n RevisionViewSettings,\n TrackChangesSettings,\n WebSettingsInfo,\n} from './types/settings-types';\n\n// =============================================================================\n// TYPES — Compatibility Upgrade\n// =============================================================================\n\nexport { CompatibilityUpgrader, UpgradeReport } from './utils/CompatibilityUpgrader';\nexport {\n LEGACY_COMPAT_ELEMENTS,\n LEGACY_COMPAT_ELEMENT_NAMES,\n MODERN_COMPAT_SETTINGS,\n MS_WORD_COMPAT_URI,\n} from './constants/legacyCompatFlags';\n\n// =============================================================================\n// UTILITIES — Unit Conversions\n// =============================================================================\n\nexport {\n STANDARD_DPI,\n UNITS,\n PAGE_SIZES,\n COMMON_MARGINS,\n twipsToPoints,\n twipsToInches,\n twipsToCm,\n twipsToEmus,\n emusToTwips,\n emusToInches,\n emusToCm,\n emusToPoints,\n emusToPixels,\n pointsToTwips,\n pointsToEmus,\n pointsToInches,\n pointsToCm,\n pointsToHalfPoints,\n halfPointsToPoints,\n inchesToTwips,\n inchesToEmus,\n inchesToPoints,\n inchesToCm,\n inchesToPixels,\n cmToTwips,\n cmToEmus,\n cmToInches,\n cmToPoints,\n cmToPixels,\n pixelsToEmus,\n pixelsToInches,\n pixelsToTwips,\n pixelsToCm,\n pixelsToPoints,\n} from './utils/units';\n\n// =============================================================================\n// UTILITIES — Validation, Corruption Detection, Error Handling\n// =============================================================================\n\nexport {\n validateDocxStructure,\n isBinaryFile,\n normalizePath,\n isValidZipBuffer,\n isTextContent,\n validateTwips,\n validateColor,\n validateHexColor,\n normalizeColor,\n validateNumberingId,\n validateLevel,\n validateAlignment,\n validateFontSize,\n validateNonEmptyString,\n validatePercentage,\n validateEmus,\n detectXmlInText,\n cleanXmlFromText,\n validateRunText,\n sanitizeHyperlinkUrl,\n SanitizeHyperlinkUrlResult,\n TextValidationResult,\n} from './utils/validation';\nexport {\n detectCorruptionInDocument,\n detectCorruptionInText,\n suggestFix,\n looksCorrupted,\n CorruptionReport,\n CorruptionLocation,\n CorruptionType,\n} from './utils/corruptionDetection';\nexport { isError, toError, wrapError, getErrorMessage } from './utils/errorHandling';\nexport {\n REVISION_RULES,\n ValidationSeverity,\n ValidationIssue,\n ValidationRule,\n ValidationOptions,\n AutoFixOptions,\n ValidationResult as RevisionValidationResult,\n FixAction,\n AutoFixResult,\n createIssueFromRule,\n getRuleByCode,\n getRulesBySeverity,\n getAutoFixableRules,\n RevisionValidator,\n RevisionAutoFixer,\n} from './validation';\n\n// =============================================================================\n// UTILITIES — Formatting, Parsing, Sanitization\n// =============================================================================\n\nexport {\n mergeFormatting,\n cloneFormatting,\n hasFormatting,\n cleanFormatting,\n isEqualFormatting,\n applyDefaults,\n} from './utils/formatting';\nexport {\n safeParseInt,\n parseOoxmlBoolean,\n isExplicitlySet,\n parseNumericAttribute,\n parseOnOffAttribute,\n} from './utils/parsingHelpers';\nexport {\n removeInvalidXmlChars,\n findInvalidXmlChars,\n hasInvalidXmlChars,\n XML_CONTROL_CHARS,\n} from './utils/xmlSanitization';\n\n// =============================================================================\n// UTILITIES — List Detection (kept for basic detection; normalization moved to consumer)\n// =============================================================================\n\nexport {\n detectTypedPrefix,\n detectListType,\n inferLevelFromIndentation,\n getParagraphIndentation,\n validateListSequence,\n getListCategoryFromFormat,\n getLevelFromFormat,\n TYPED_LIST_PATTERNS,\n PATTERN_TO_CATEGORY,\n FORMAT_TO_LEVEL,\n} from './utils/list-detection';\n\n// =============================================================================\n// UTILITIES — Logging\n// =============================================================================\n\nexport {\n ILogger,\n LogLevel,\n LogEntry,\n ConsoleLogger,\n SilentLogger,\n CollectingLogger,\n defaultLogger,\n createScopedLogger,\n createComponentLogger,\n getGlobalLogger,\n setGlobalLogger,\n resetGlobalLogger,\n} from './utils/logger';\n\n// =============================================================================\n// UTILITIES — Revision Walker\n// =============================================================================\n\nexport { RevisionWalker, RevisionWalkerOptions } from './utils/RevisionWalker';\nexport { resolveCellShading } from './utils/ShadingResolver';\nexport { decodeCnfStyle, getActiveConditionalsInPriorityOrder } from './utils/cnfStyleDecoder';\n\n// =============================================================================\n// UTILITIES — Cleanup\n// =============================================================================\n\nexport { CleanupHelper, CleanupOptions, CleanupReport } from './helpers/CleanupHelper';\n\n// =============================================================================\n// INTERNAL — ZIP Handling (advanced usage)\n// =============================================================================\n\nexport { ZipHandler } from './zip/ZipHandler';\nexport { ZipReader } from './zip/ZipReader';\nexport { ZipWriter } from './zip/ZipWriter';\nexport {\n ZipFile,\n FileMap,\n LoadOptions,\n SaveOptions,\n AddFileOptions,\n SizeLimitOptions,\n DEFAULT_SIZE_LIMITS,\n REQUIRED_DOCX_FILES,\n DOCX_PATHS,\n} from './zip/types';\nexport {\n DocxError,\n DocxNotFoundError,\n InvalidDocxError,\n CorruptedArchiveError,\n MissingRequiredFileError,\n FileOperationError,\n} from './zip/errors';\n\n// =============================================================================\n// INTERNAL — XML Builder and Parser (advanced usage)\n// =============================================================================\n\nexport { XMLBuilder, XMLElement } from './xml/XMLBuilder';\nexport {\n XMLParser,\n ParseToObjectOptions,\n ParsedXMLValue,\n ParsedXMLObject,\n DEFAULT_MAX_NESTING_DEPTH,\n} from './xml/XMLParser';\n\n// =============================================================================\n// INTERNAL — Parser, Generator, Validator (advanced usage)\n// =============================================================================\n\nexport { Relationship, RelationshipType, RelationshipProperties } from './core/Relationship';\nexport { RelationshipManager } from './core/RelationshipManager';\nexport { DocumentParser, ParseError } from './core/DocumentParser';\nexport { DocumentGenerator, IZipHandlerReader } from './core/DocumentGenerator';\nexport { DocumentValidator, SizeEstimate, MemoryOptions } from './core/DocumentValidator';\nexport { DocumentIdManager } from './core/DocumentIdManager';\n\n// =============================================================================\n// INTERNAL — Document Subsystem Classes (advanced usage)\n// =============================================================================\n\nexport { DocumentContent, BodyElement } from './core/DocumentContent';\n\n// =============================================================================\n// INTERNAL — Constants\n// =============================================================================\n\nexport { LIMITS } from './constants/limits';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * DocXML - DOCX Editing Framework\n * Main entry point\n */\n\n// =============================================================================\n// PUBLIC API — Core Document Classes\n// =============================================================================\n\nexport {\n Document,\n DocumentProperties,\n DocumentOptions,\n DocumentLoadOptions,\n DocumentPart,\n} from './core/Document.js';\n\n// =============================================================================\n// PUBLIC API — Document Elements\n// =============================================================================\n\nexport {\n Paragraph,\n ParagraphAlignment,\n ParagraphFormatting,\n ParagraphContent,\n FieldLike,\n isRun,\n isField,\n isSimpleField,\n isComplexField,\n isHyperlink,\n isRevision,\n isRangeMarker,\n isShape,\n isTextBox,\n} from './elements/Paragraph.js';\nexport { Run, RunFormatting, ThemeColorValue, LanguageConfig } from './elements/Run.js';\nexport {\n Section,\n PageOrientation,\n SectionType,\n PageNumberFormat,\n PageSize,\n Margins,\n Columns,\n PageNumbering,\n SectionProperties,\n LineNumbering,\n LineNumberingRestart,\n} from './elements/Section.js';\nexport {\n Table,\n TableAlignment,\n TableLayout,\n TableBorder,\n TableBorders,\n TableFormatting,\n} from './elements/Table.js';\nexport { TableRow, RowFormatting } from './elements/TableRow.js';\nexport {\n TableCell,\n CellBorder,\n CellBorders,\n CellShading,\n CellFormatting,\n} from './elements/TableCell.js';\nexport {\n TableGridChange,\n GridColumn,\n TableGridChangeProperties,\n} from './elements/TableGridChange.js';\nexport {\n Image,\n ImageFormat,\n ImageProperties,\n ImageBorder,\n ImageEffects,\n PresetGeometry,\n BlipCompressionState,\n PicLockAttribute,\n PicNonVisualProperties,\n} from './elements/Image.js';\nexport { ImageRun } from './elements/ImageRun.js';\nexport { Shape, ShapeType, ShapeProperties, ShapeFill, ShapeOutline } from './elements/Shape.js';\nexport { TextBox, TextBoxProperties, TextBoxFill, TextBoxMargins } from './elements/TextBox.js';\nexport { Header, HeaderType, HeaderProperties } from './elements/Header.js';\nexport { Footer, FooterType, FooterProperties } from './elements/Footer.js';\nexport { Hyperlink, HyperlinkProperties } from './elements/Hyperlink.js';\nexport { Bookmark, BookmarkProperties } from './elements/Bookmark.js';\nexport { RangeMarker, RangeMarkerType, RangeMarkerProperties } from './elements/RangeMarker.js';\nexport { Comment, CommentProperties } from './elements/Comment.js';\nexport { Footnote, FootnoteType, FootnoteProperties } from './elements/Footnote.js';\nexport { Endnote, EndnoteType, EndnoteProperties } from './elements/Endnote.js';\nexport {\n Field,\n FieldType,\n FieldProperties,\n ComplexField,\n ComplexFieldProperties,\n FieldCharType,\n TOCFieldOptions,\n createTOCField,\n} from './elements/Field.js';\nexport {\n createNestedIFMergeField,\n createMergeField,\n createRefField,\n createIFField,\n createNestedField,\n parseHyperlinkInstruction,\n buildHyperlinkInstruction,\n isHyperlinkInstruction,\n ParsedHyperlinkInstruction,\n} from './elements/FieldHelpers.js';\nexport {\n StructuredDocumentTag,\n SDTProperties,\n SDTLockType,\n SDTContent,\n SDTPlaceholder,\n SDTDataBinding,\n ContentControlType,\n} from './elements/StructuredDocumentTag.js';\nexport { TableOfContents, TOCProperties } from './elements/TableOfContents.js';\nexport { TableOfContentsElement } from './elements/TableOfContentsElement.js';\nexport { AlternateContent } from './elements/AlternateContent.js';\nexport { MathParagraph, MathExpression } from './elements/MathElement.js';\nexport { CustomXmlBlock } from './elements/CustomXml.js';\nexport { PreservedElement, PreservedElementContext } from './elements/PreservedElement.js';\n\n// =============================================================================\n// PUBLIC API — Track Changes / Revisions\n// =============================================================================\n\nexport { Revision, RevisionType, RevisionProperties, FieldContext } from './elements/Revision.js';\nexport { RevisionContent, isRunContent, isHyperlinkContent } from './elements/RevisionContent.js';\nexport {\n RevisionLocation,\n RunPropertyChange,\n ParagraphPropertyChange,\n ParagraphFormattingPartial,\n ParagraphBorderDef,\n ParagraphBorders,\n ParagraphShading,\n TabStopDef,\n PropertyChangeBase,\n TablePropertyChange,\n TablePropertyChangeType,\n SectionPropertyChange,\n NumberingChange,\n AnyPropertyChange,\n isRunPropertyChange,\n isParagraphPropertyChange,\n isTablePropertyChange,\n isSectionPropertyChange,\n isNumberingChange,\n} from './elements/PropertyChangeTypes.js';\nexport {\n acceptRevisionsInMemory,\n AcceptRevisionsOptions,\n AcceptRevisionsResult,\n paragraphHasRevisions,\n getRevisionsFromParagraph,\n countRevisionsByType,\n stripRevisionsFromXml,\n} from './processors/InMemoryRevisionAcceptor.js';\nexport {\n MoveOperationHelper,\n MoveOperationOptions,\n MoveOperationResult,\n} from './processors/MoveOperationHelper.js';\nexport {\n SelectiveRevisionAcceptor,\n SelectiveAcceptResult,\n} from './processors/SelectiveRevisionAcceptor.js';\nexport {\n RevisionAwareProcessor,\n RevisionHandlingMode,\n RevisionProcessingOptions,\n SelectionCriteria,\n RevisionProcessingResult,\n ConflictInfo,\n ProcessingLogEntry,\n} from './processors/RevisionAwareProcessor.js';\nexport {\n ChangelogGenerator,\n ChangeEntry,\n ChangeCategory,\n ChangeLocation,\n ChangelogOptions,\n ChangelogFormat,\n ConsolidatedChange,\n ChangelogSummary,\n} from './processors/ChangelogGenerator.js';\n\n// =============================================================================\n// PUBLIC API — Formatting / Styles / Numbering\n// =============================================================================\n\nexport { Style, StyleType, StyleProperties } from './formatting/Style.js';\nexport {\n StylesManager,\n ValidationResult,\n LatentStylesConfig,\n LatentStyleException,\n} from './formatting/StylesManager.js';\nexport {\n NumberingLevel,\n NumberFormat,\n NumberAlignment,\n NumberingLevelProperties,\n WORD_NATIVE_BULLETS,\n WordNativeBullet,\n} from './formatting/NumberingLevel.js';\nexport { AbstractNumbering, AbstractNumberingProperties } from './formatting/AbstractNumbering.js';\nexport { NumberingInstance, NumberingInstanceProperties } from './formatting/NumberingInstance.js';\nexport {\n NumberingManager,\n NumberingConsolidationOptions,\n NumberingConsolidationResult,\n} from './formatting/NumberingManager.js';\nexport {\n StyleRunFormatting,\n StyleParagraphFormatting,\n Heading2TableOptions,\n StyleConfig,\n Heading2Config,\n ApplyCustomFormattingOptions,\n} from './types/styleConfig.js';\nexport { FormatOptions, StyleApplyOptions, EmphasisType, ListPrefix } from './types/formatting.js';\n\n// =============================================================================\n// PUBLIC API — Managers\n// =============================================================================\n\nexport { RevisionManager, RevisionCategory, RevisionSummary } from './elements/RevisionManager.js';\nexport { ImageManager } from './elements/ImageManager.js';\nexport { BookmarkManager } from './elements/BookmarkManager.js';\nexport { CommentManager } from './elements/CommentManager.js';\nexport { FootnoteManager } from './elements/FootnoteManager.js';\nexport { EndnoteManager } from './elements/EndnoteManager.js';\nexport { HeaderFooterManager } from './elements/HeaderFooterManager.js';\nexport { FontManager, FontFormat, FontEntry } from './elements/FontManager.js';\nexport {\n DrawingManager,\n DrawingElement,\n DrawingType,\n PreservedDrawing,\n} from './managers/DrawingManager.js';\n\n// =============================================================================\n// PUBLIC API — Image Optimization\n// =============================================================================\n\nexport type { ImageOptimizationResult } from './images/ImageOptimizer.js';\n\n// =============================================================================\n// TYPES — Common / Shared Type Definitions\n// =============================================================================\n\nexport {\n ShadingPattern,\n BasicShadingPattern,\n BorderStyle,\n ExtendedBorderStyle,\n FullBorderStyle,\n BorderDefinition,\n FourSidedBorders,\n TableBorderDefinitions,\n HorizontalAlignment,\n VerticalAlignment,\n PageVerticalAlignment,\n CellVerticalAlignment,\n ParagraphAlignment as CommonParagraphAlignment,\n TableAlignment as CommonTableAlignment,\n RowJustification,\n TextVerticalAlignment,\n TabAlignment,\n PositionAnchor,\n HorizontalAnchor,\n VerticalAnchor,\n TextDirection,\n SectionTextDirection,\n WidthType,\n ShadingConfig,\n buildShadingAttributes,\n TabLeader,\n TabStop,\n isShadingPattern,\n isBorderStyle,\n isHorizontalAlignment,\n isVerticalAlignment,\n isParagraphAlignment,\n isWidthType,\n DEFAULT_BORDER,\n NO_BORDER,\n} from './elements/CommonTypes.js';\nexport {\n ListCategory,\n NumberFormat as ListNumberFormat,\n BulletFormat,\n ListDetectionResult,\n ListAnalysis,\n ListNormalizationOptions,\n ListNormalizationReport,\n IndentationLevel,\n} from './types/list-types.js';\n\nexport {\n CompatibilityMode,\n CompatibilityInfo,\n CompatSetting,\n} from './types/compatibility-types.js';\n\nexport {\n DocumentProtection,\n RevisionViewSettings,\n TrackChangesSettings,\n WebSettingsInfo,\n} from './types/settings-types.js';\n\n// =============================================================================\n// TYPES — Compatibility Upgrade\n// =============================================================================\n\nexport { CompatibilityUpgrader, UpgradeReport } from './processors/CompatibilityUpgrader.js';\nexport {\n LEGACY_COMPAT_ELEMENTS,\n LEGACY_COMPAT_ELEMENT_NAMES,\n MODERN_COMPAT_SETTINGS,\n MS_WORD_COMPAT_URI,\n} from './constants/legacyCompatFlags.js';\n\n// =============================================================================\n// UTILITIES — Unit Conversions\n// =============================================================================\n\nexport {\n STANDARD_DPI,\n UNITS,\n PAGE_SIZES,\n COMMON_MARGINS,\n twipsToPoints,\n twipsToInches,\n twipsToCm,\n twipsToEmus,\n emusToTwips,\n emusToInches,\n emusToCm,\n emusToPoints,\n emusToPixels,\n pointsToTwips,\n pointsToEmus,\n pointsToInches,\n pointsToCm,\n pointsToHalfPoints,\n halfPointsToPoints,\n inchesToTwips,\n inchesToEmus,\n inchesToPoints,\n inchesToCm,\n inchesToPixels,\n cmToTwips,\n cmToEmus,\n cmToInches,\n cmToPoints,\n cmToPixels,\n pixelsToEmus,\n pixelsToInches,\n pixelsToTwips,\n pixelsToCm,\n pixelsToPoints,\n} from './utils/units.js';\n\n// =============================================================================\n// UTILITIES — Validation, Corruption Detection, Error Handling\n// =============================================================================\n\nexport {\n validateDocxStructure,\n isBinaryFile,\n normalizePath,\n isValidZipBuffer,\n isTextContent,\n validateTwips,\n validateColor,\n validateHexColor,\n normalizeColor,\n validateNumberingId,\n validateLevel,\n validateAlignment,\n validateFontSize,\n validateNonEmptyString,\n validatePercentage,\n validateEmus,\n detectXmlInText,\n cleanXmlFromText,\n validateRunText,\n sanitizeHyperlinkUrl,\n SanitizeHyperlinkUrlResult,\n TextValidationResult,\n} from './utils/validation.js';\nexport {\n detectCorruptionInDocument,\n detectCorruptionInText,\n suggestFix,\n looksCorrupted,\n CorruptionReport,\n CorruptionLocation,\n CorruptionType,\n} from './utils/corruptionDetection.js';\nexport { isError, toError, wrapError, getErrorMessage } from './utils/errorHandling.js';\nexport {\n REVISION_RULES,\n ValidationSeverity,\n ValidationIssue,\n ValidationRule,\n ValidationOptions,\n AutoFixOptions,\n ValidationResult as RevisionValidationResult,\n FixAction,\n AutoFixResult,\n createIssueFromRule,\n getRuleByCode,\n getRulesBySeverity,\n getAutoFixableRules,\n RevisionValidator,\n RevisionAutoFixer,\n} from './validation/index.js';\n\n// =============================================================================\n// UTILITIES — Formatting, Parsing, Sanitization\n// =============================================================================\n\nexport {\n mergeFormatting,\n cloneFormatting,\n hasFormatting,\n cleanFormatting,\n isEqualFormatting,\n applyDefaults,\n} from './utils/formatting.js';\nexport {\n safeParseInt,\n parseOoxmlBoolean,\n isExplicitlySet,\n parseNumericAttribute,\n parseOnOffAttribute,\n} from './utils/parsingHelpers.js';\nexport {\n removeInvalidXmlChars,\n findInvalidXmlChars,\n hasInvalidXmlChars,\n XML_CONTROL_CHARS,\n} from './utils/xmlSanitization.js';\n\n// =============================================================================\n// UTILITIES — List Detection (kept for basic detection; normalization moved to consumer)\n// =============================================================================\n\nexport {\n detectTypedPrefix,\n detectListType,\n inferLevelFromIndentation,\n getParagraphIndentation,\n validateListSequence,\n getListCategoryFromFormat,\n getLevelFromFormat,\n TYPED_LIST_PATTERNS,\n PATTERN_TO_CATEGORY,\n FORMAT_TO_LEVEL,\n} from './utils/list-detection.js';\n\n// =============================================================================\n// UTILITIES — Logging\n// =============================================================================\n\nexport {\n ILogger,\n LogLevel,\n LogEntry,\n ConsoleLogger,\n SilentLogger,\n CollectingLogger,\n defaultLogger,\n createScopedLogger,\n createComponentLogger,\n getGlobalLogger,\n setGlobalLogger,\n resetGlobalLogger,\n} from './utils/logger.js';\n\n// =============================================================================\n// UTILITIES — Revision Walker\n// =============================================================================\n\nexport { RevisionWalker, RevisionWalkerOptions } from './processors/RevisionWalker.js';\nexport { resolveCellShading } from './processors/ShadingResolver.js';\nexport {\n decodeCnfStyle,\n getActiveConditionalsInPriorityOrder,\n} from './processors/cnfStyleDecoder.js';\n\n// =============================================================================\n// UTILITIES — Cleanup\n// =============================================================================\n\nexport { CleanupHelper, CleanupOptions, CleanupReport } from './helpers/CleanupHelper.js';\n\n// =============================================================================\n// PUBLIC — Type unions consumers see when iterating doc.getBodyElements()\n// =============================================================================\n\nexport type { BodyElement } from './core/DocumentContent.js';\nexport {\n RelationshipType,\n type Relationship,\n type RelationshipProperties,\n} from './core/Relationship.js';\n\n// =============================================================================\n// EXTENSIBILITY — Plugin Registries and Document Events\n// =============================================================================\n\nexport {\n ElementRegistry,\n type ElementHandler,\n type ElementParseContext,\n type ElementSerializeContext,\n} from './core/ElementRegistry.js';\nexport { RegisteredBodyElement } from './elements/RegisteredBodyElement.js';\nexport {\n ValidationRuleRegistry,\n type CustomValidationRule,\n type CustomValidationIssue,\n type CustomValidationSeverity,\n} from './validation/ValidationRuleRegistry.js';\nexport type {\n DocumentEventMap,\n DocumentEventType,\n DocumentEventListener,\n} from './core/DocumentEvents.js';\n\n// Low-level building blocks — XMLBuilder, XMLParser, ZipHandler,\n// ZipReader, ZipWriter, DocumentParser, DocumentGenerator,\n// DocumentValidator, DocumentIdManager, DocumentContent,\n// RelationshipManager, DocumentEventEmitter, plus zip/xml types and\n// DocxError hierarchy — moved to the `docxmlater/internal` subpath in\n// 11.0.0. Migrate via:\n// import { XMLParser, ZipHandler } from 'docxmlater/internal';\n// The internal subpath has relaxed semver — pin an exact version.\n"]}
@@ -0,0 +1,16 @@
1
+ export { ZipHandler } from './zip/ZipHandler.js';
2
+ export { ZipReader } from './zip/ZipReader.js';
3
+ export { ZipWriter } from './zip/ZipWriter.js';
4
+ export { type ZipFile, type FileMap, type LoadOptions, type SaveOptions, type AddFileOptions, type SizeLimitOptions, DEFAULT_SIZE_LIMITS, REQUIRED_DOCX_FILES, DOCX_PATHS, } from './zip/types.js';
5
+ export { DocxError, DocxNotFoundError, InvalidDocxError, CorruptedArchiveError, MissingRequiredFileError, FileOperationError, } from './zip/errors.js';
6
+ export { XMLBuilder, type XMLElement } from './xml/XMLBuilder.js';
7
+ export { XMLParser, type ParseToObjectOptions, type ParsedXMLValue, type ParsedXMLObject, DEFAULT_MAX_NESTING_DEPTH, } from './xml/XMLParser.js';
8
+ export { RelationshipManager } from './core/RelationshipManager.js';
9
+ export { DocumentParser, ParseError } from './core/DocumentParser.js';
10
+ export { DocumentGenerator, type IZipHandlerReader } from './core/DocumentGenerator.js';
11
+ export { DocumentValidator, type SizeEstimate, type MemoryOptions, } from './core/DocumentValidator.js';
12
+ export { DocumentIdManager } from './core/DocumentIdManager.js';
13
+ export { DocumentContent } from './core/DocumentContent.js';
14
+ export { DocumentEventEmitter } from './core/DocumentEvents.js';
15
+ export { LIMITS } from './constants/limits.js';
16
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,SAAS,EACT,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAK5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LIMITS = exports.DocumentEventEmitter = exports.DocumentContent = exports.DocumentIdManager = exports.DocumentValidator = exports.DocumentGenerator = exports.DocumentParser = exports.RelationshipManager = exports.DEFAULT_MAX_NESTING_DEPTH = exports.XMLParser = exports.XMLBuilder = exports.FileOperationError = exports.MissingRequiredFileError = exports.CorruptedArchiveError = exports.InvalidDocxError = exports.DocxNotFoundError = exports.DocxError = exports.DOCX_PATHS = exports.REQUIRED_DOCX_FILES = exports.DEFAULT_SIZE_LIMITS = exports.ZipWriter = exports.ZipReader = exports.ZipHandler = void 0;
4
+ var ZipHandler_js_1 = require("./zip/ZipHandler.js");
5
+ Object.defineProperty(exports, "ZipHandler", { enumerable: true, get: function () { return ZipHandler_js_1.ZipHandler; } });
6
+ var ZipReader_js_1 = require("./zip/ZipReader.js");
7
+ Object.defineProperty(exports, "ZipReader", { enumerable: true, get: function () { return ZipReader_js_1.ZipReader; } });
8
+ var ZipWriter_js_1 = require("./zip/ZipWriter.js");
9
+ Object.defineProperty(exports, "ZipWriter", { enumerable: true, get: function () { return ZipWriter_js_1.ZipWriter; } });
10
+ var types_js_1 = require("./zip/types.js");
11
+ Object.defineProperty(exports, "DEFAULT_SIZE_LIMITS", { enumerable: true, get: function () { return types_js_1.DEFAULT_SIZE_LIMITS; } });
12
+ Object.defineProperty(exports, "REQUIRED_DOCX_FILES", { enumerable: true, get: function () { return types_js_1.REQUIRED_DOCX_FILES; } });
13
+ Object.defineProperty(exports, "DOCX_PATHS", { enumerable: true, get: function () { return types_js_1.DOCX_PATHS; } });
14
+ var errors_js_1 = require("./zip/errors.js");
15
+ Object.defineProperty(exports, "DocxError", { enumerable: true, get: function () { return errors_js_1.DocxError; } });
16
+ Object.defineProperty(exports, "DocxNotFoundError", { enumerable: true, get: function () { return errors_js_1.DocxNotFoundError; } });
17
+ Object.defineProperty(exports, "InvalidDocxError", { enumerable: true, get: function () { return errors_js_1.InvalidDocxError; } });
18
+ Object.defineProperty(exports, "CorruptedArchiveError", { enumerable: true, get: function () { return errors_js_1.CorruptedArchiveError; } });
19
+ Object.defineProperty(exports, "MissingRequiredFileError", { enumerable: true, get: function () { return errors_js_1.MissingRequiredFileError; } });
20
+ Object.defineProperty(exports, "FileOperationError", { enumerable: true, get: function () { return errors_js_1.FileOperationError; } });
21
+ var XMLBuilder_js_1 = require("./xml/XMLBuilder.js");
22
+ Object.defineProperty(exports, "XMLBuilder", { enumerable: true, get: function () { return XMLBuilder_js_1.XMLBuilder; } });
23
+ var XMLParser_js_1 = require("./xml/XMLParser.js");
24
+ Object.defineProperty(exports, "XMLParser", { enumerable: true, get: function () { return XMLParser_js_1.XMLParser; } });
25
+ Object.defineProperty(exports, "DEFAULT_MAX_NESTING_DEPTH", { enumerable: true, get: function () { return XMLParser_js_1.DEFAULT_MAX_NESTING_DEPTH; } });
26
+ var RelationshipManager_js_1 = require("./core/RelationshipManager.js");
27
+ Object.defineProperty(exports, "RelationshipManager", { enumerable: true, get: function () { return RelationshipManager_js_1.RelationshipManager; } });
28
+ var DocumentParser_js_1 = require("./core/DocumentParser.js");
29
+ Object.defineProperty(exports, "DocumentParser", { enumerable: true, get: function () { return DocumentParser_js_1.DocumentParser; } });
30
+ var DocumentGenerator_js_1 = require("./core/DocumentGenerator.js");
31
+ Object.defineProperty(exports, "DocumentGenerator", { enumerable: true, get: function () { return DocumentGenerator_js_1.DocumentGenerator; } });
32
+ var DocumentValidator_js_1 = require("./core/DocumentValidator.js");
33
+ Object.defineProperty(exports, "DocumentValidator", { enumerable: true, get: function () { return DocumentValidator_js_1.DocumentValidator; } });
34
+ var DocumentIdManager_js_1 = require("./core/DocumentIdManager.js");
35
+ Object.defineProperty(exports, "DocumentIdManager", { enumerable: true, get: function () { return DocumentIdManager_js_1.DocumentIdManager; } });
36
+ var DocumentContent_js_1 = require("./core/DocumentContent.js");
37
+ Object.defineProperty(exports, "DocumentContent", { enumerable: true, get: function () { return DocumentContent_js_1.DocumentContent; } });
38
+ var DocumentEvents_js_1 = require("./core/DocumentEvents.js");
39
+ Object.defineProperty(exports, "DocumentEventEmitter", { enumerable: true, get: function () { return DocumentEvents_js_1.DocumentEventEmitter; } });
40
+ var limits_js_1 = require("./constants/limits.js");
41
+ Object.defineProperty(exports, "LIMITS", { enumerable: true, get: function () { return limits_js_1.LIMITS; } });
42
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":";;;AA2BA,qDAAiD;AAAxC,2GAAA,UAAU,OAAA;AACnB,mDAA+C;AAAtC,yGAAA,SAAS,OAAA;AAClB,mDAA+C;AAAtC,yGAAA,SAAS,OAAA;AAClB,2CAUwB;AAHtB,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,sGAAA,UAAU,OAAA;AAEZ,6CAOyB;AANvB,sGAAA,SAAS,OAAA;AACT,8GAAA,iBAAiB,OAAA;AACjB,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,qHAAA,wBAAwB,OAAA;AACxB,+GAAA,kBAAkB,OAAA;AAIpB,qDAAkE;AAAzD,2GAAA,UAAU,OAAA;AACnB,mDAM4B;AAL1B,yGAAA,SAAS,OAAA;AAIT,yHAAA,yBAAyB,OAAA;AAI3B,wEAAoE;AAA3D,6HAAA,mBAAmB,OAAA;AAC5B,8DAAsE;AAA7D,mHAAA,cAAc,OAAA;AACvB,oEAAwF;AAA/E,yHAAA,iBAAiB,OAAA;AAC1B,oEAIqC;AAHnC,yHAAA,iBAAiB,OAAA;AAInB,oEAAgE;AAAvD,yHAAA,iBAAiB,OAAA;AAC1B,gEAA4D;AAAnD,qHAAA,eAAe,OAAA;AAKxB,8DAAgE;AAAvD,yHAAA,oBAAoB,OAAA;AAG7B,mDAA+C;AAAtC,mGAAA,MAAM,OAAA","sourcesContent":["/**\n * docxmlater INTERNAL API\n *\n * Subpath export consumed via `import { ... } from 'docxmlater/internal'`.\n * Surfaces low-level building blocks for advanced consumers writing\n * tooling that needs raw XML / ZIP / parser access:\n * - ZipHandler, ZipReader, ZipWriter (+ types and DocxError hierarchy)\n * - XMLBuilder, XMLParser (+ ParseToObjectOptions etc.)\n * - DocumentParser, DocumentGenerator, DocumentValidator\n * - DocumentIdManager, DocumentContent, RelationshipManager\n * - DocumentEventEmitter (the emitter class itself)\n * - LIMITS constants\n *\n * **Stability:** these exports follow a relaxed semver — minor version\n * bumps may change signatures. Pin an exact docxmlater version when\n * consuming the internal subpath. The main API (`from 'docxmlater'`)\n * follows full semver.\n *\n * Symbols moved out of the main API in 11.0.0 — see CHANGELOG.\n *\n * The plugin registries (`ElementRegistry`, `ValidationRuleRegistry`)\n * and event types (`DocumentEventMap`, `DocumentEventListener`,\n * `DocumentEventType`) are NOT re-exported here — they belong in the\n * main API as stable extension points.\n */\n\n// ZIP layer\nexport { ZipHandler } from './zip/ZipHandler.js';\nexport { ZipReader } from './zip/ZipReader.js';\nexport { ZipWriter } from './zip/ZipWriter.js';\nexport {\n type ZipFile,\n type FileMap,\n type LoadOptions,\n type SaveOptions,\n type AddFileOptions,\n type SizeLimitOptions,\n DEFAULT_SIZE_LIMITS,\n REQUIRED_DOCX_FILES,\n DOCX_PATHS,\n} from './zip/types.js';\nexport {\n DocxError,\n DocxNotFoundError,\n InvalidDocxError,\n CorruptedArchiveError,\n MissingRequiredFileError,\n FileOperationError,\n} from './zip/errors.js';\n\n// XML layer\nexport { XMLBuilder, type XMLElement } from './xml/XMLBuilder.js';\nexport {\n XMLParser,\n type ParseToObjectOptions,\n type ParsedXMLValue,\n type ParsedXMLObject,\n DEFAULT_MAX_NESTING_DEPTH,\n} from './xml/XMLParser.js';\n\n// Core orchestration\nexport { RelationshipManager } from './core/RelationshipManager.js';\nexport { DocumentParser, ParseError } from './core/DocumentParser.js';\nexport { DocumentGenerator, type IZipHandlerReader } from './core/DocumentGenerator.js';\nexport {\n DocumentValidator,\n type SizeEstimate,\n type MemoryOptions,\n} from './core/DocumentValidator.js';\nexport { DocumentIdManager } from './core/DocumentIdManager.js';\nexport { DocumentContent } from './core/DocumentContent.js';\n\n// Document events — the emitter class is internal; the type aliases\n// (DocumentEventMap, DocumentEventListener, DocumentEventType) live in\n// the main API.\nexport { DocumentEventEmitter } from './core/DocumentEvents.js';\n\n// Constants\nexport { LIMITS } from './constants/limits.js';\n"]}
@@ -1,6 +1,6 @@
1
- import { Image } from '../elements/Image';
2
- import { Shape } from '../elements/Shape';
3
- import { TextBox } from '../elements/TextBox';
1
+ import { Image } from '../elements/Image.js';
2
+ import { Shape } from '../elements/Shape.js';
3
+ import { TextBox } from '../elements/TextBox.js';
4
4
  export type DrawingElement = Image | Shape | TextBox;
5
5
  export type DrawingType = 'image' | 'shape' | 'textbox' | 'preserved';
6
6
  export interface PreservedDrawing {
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingManager.d.ts","sourceRoot":"","sources":["../../src/managers/DrawingManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAK9C,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAKrD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAMtE,MAAM,WAAW,gBAAgB;IAE/B,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;IAEvC,GAAG,EAAE,MAAM,CAAC;IAEZ,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,EAAE,EAAE,MAAM,CAAC;CACZ;AAQD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAwD;IACxE,OAAO,CAAC,MAAM,CAAK;IAGnB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,YAAY,CAAqB;;IAczC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAa9B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAa9B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAapC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAYtD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,SAAS;IAQrE,cAAc,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,EAAE;IASvD,YAAY,IAAI,KAAK,EAAE;IAgBvB,YAAY,IAAI,KAAK,EAAE;IAgBvB,eAAe,IAAI,OAAO,EAAE;IAgB5B,uBAAuB,IAAI,gBAAgB,EAAE;IAgB7C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAgBlC,QAAQ,IAAI,MAAM;IAQlB,OAAO,IAAI,OAAO;IAOlB,KAAK,IAAI,IAAI;IAcb,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,gBAAgB,GAAG,WAAW;IAiBvE,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,UAAU;IAUlB,SAAS,IAAI,IAAI;IAmBjB,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB;CASF"}
1
+ {"version":3,"file":"DrawingManager.d.ts","sourceRoot":"","sources":["../../src/managers/DrawingManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAKjD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAKrD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAMtE,MAAM,WAAW,gBAAgB;IAE/B,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;IAEvC,GAAG,EAAE,MAAM,CAAC;IAEZ,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,EAAE,EAAE,MAAM,CAAC;CACZ;AAQD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAwD;IACxE,OAAO,CAAC,MAAM,CAAK;IAGnB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,YAAY,CAAqB;;IAczC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAa9B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAa9B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAapC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAYtD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,SAAS;IAQrE,cAAc,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,EAAE;IASvD,YAAY,IAAI,KAAK,EAAE;IAgBvB,YAAY,IAAI,KAAK,EAAE;IAgBvB,eAAe,IAAI,OAAO,EAAE;IAgB5B,uBAAuB,IAAI,gBAAgB,EAAE;IAgB7C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAgBlC,QAAQ,IAAI,MAAM;IAQlB,OAAO,IAAI,OAAO;IAOlB,KAAK,IAAI,IAAI;IAcb,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,gBAAgB,GAAG,WAAW;IAiBvE,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,UAAU;IAUlB,SAAS,IAAI,IAAI;IAmBjB,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB;CASF"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DrawingManager = void 0;
4
- const Image_1 = require("../elements/Image");
5
- const Shape_1 = require("../elements/Shape");
6
- const TextBox_1 = require("../elements/TextBox");
4
+ const Image_js_1 = require("../elements/Image.js");
5
+ const Shape_js_1 = require("../elements/Shape.js");
6
+ const TextBox_js_1 = require("../elements/TextBox.js");
7
7
  class DrawingManager {
8
8
  drawings = new Map();
9
9
  nextId = 1;
@@ -50,7 +50,7 @@ class DrawingManager {
50
50
  const images = [];
51
51
  for (const id of this.imageIds) {
52
52
  const drawing = this.drawings.get(id);
53
- if (drawing instanceof Image_1.Image) {
53
+ if (drawing instanceof Image_js_1.Image) {
54
54
  images.push(drawing);
55
55
  }
56
56
  }
@@ -60,7 +60,7 @@ class DrawingManager {
60
60
  const shapes = [];
61
61
  for (const id of this.shapeIds) {
62
62
  const drawing = this.drawings.get(id);
63
- if (drawing instanceof Shape_1.Shape) {
63
+ if (drawing instanceof Shape_js_1.Shape) {
64
64
  shapes.push(drawing);
65
65
  }
66
66
  }
@@ -70,7 +70,7 @@ class DrawingManager {
70
70
  const textboxes = [];
71
71
  for (const id of this.textboxIds) {
72
72
  const drawing = this.drawings.get(id);
73
- if (drawing instanceof TextBox_1.TextBox) {
73
+ if (drawing instanceof TextBox_js_1.TextBox) {
74
74
  textboxes.push(drawing);
75
75
  }
76
76
  }
@@ -111,13 +111,13 @@ class DrawingManager {
111
111
  this.nextId = 1;
112
112
  }
113
113
  getDrawingType(drawing) {
114
- if (drawing instanceof Image_1.Image) {
114
+ if (drawing instanceof Image_js_1.Image) {
115
115
  return 'image';
116
116
  }
117
- else if (drawing instanceof Shape_1.Shape) {
117
+ else if (drawing instanceof Shape_js_1.Shape) {
118
118
  return 'shape';
119
119
  }
120
- else if (drawing instanceof TextBox_1.TextBox) {
120
+ else if (drawing instanceof TextBox_js_1.TextBox) {
121
121
  return 'textbox';
122
122
  }
123
123
  else {
@@ -142,13 +142,13 @@ class DrawingManager {
142
142
  assignIds() {
143
143
  let docPrId = 1;
144
144
  for (const drawing of this.drawings.values()) {
145
- if (drawing instanceof Image_1.Image) {
145
+ if (drawing instanceof Image_js_1.Image) {
146
146
  drawing.setDocPrId(docPrId++);
147
147
  }
148
- else if (drawing instanceof Shape_1.Shape) {
148
+ else if (drawing instanceof Shape_js_1.Shape) {
149
149
  drawing.setDocPrId(docPrId++);
150
150
  }
151
- else if (drawing instanceof TextBox_1.TextBox) {
151
+ else if (drawing instanceof TextBox_js_1.TextBox) {
152
152
  drawing.setDocPrId(docPrId++);
153
153
  }
154
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingManager.js","sourceRoot":"","sources":["../../src/managers/DrawingManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * DrawingManager - Manages all drawing elements in a document\n *\n * Centralizes management of images, shapes, and text boxes.\n * Assigns unique IDs and handles relationship management.\n */\n\nimport { Image } from '../elements/Image';\nimport { Shape } from '../elements/Shape';\nimport { TextBox } from '../elements/TextBox';\n\n/**\n * Type representing any drawing element\n */\nexport type DrawingElement = Image | Shape | TextBox;\n\n/**\n * Drawing type discriminator\n */\nexport type DrawingType = 'image' | 'shape' | 'textbox' | 'preserved';\n\n/**\n * Preserved drawing (SmartArt, Chart, WordArt)\n * These are stored as raw XML for round-trip preservation\n */\nexport interface PreservedDrawing {\n /** Type of preserved drawing */\n type: 'smartart' | 'chart' | 'wordart';\n /** Raw XML content */\n xml: string;\n /** Relationship IDs referenced by this drawing */\n relationshipIds: string[];\n /** Unique ID for this drawing */\n id: string;\n}\n\n/**\n * Manages all drawing elements in a document\n *\n * Performance: Uses type-indexed Sets for O(1) type-specific lookups\n * instead of O(n) linear scans through the main Map.\n */\nexport class DrawingManager {\n private drawings = new Map<string, DrawingElement | PreservedDrawing>();\n private nextId = 1;\n\n // Type-indexed Sets for O(1) type-specific lookups\n private imageIds = new Set<string>();\n private shapeIds = new Set<string>();\n private textboxIds = new Set<string>();\n private preservedIds = new Set<string>();\n\n /**\n * Creates a new DrawingManager\n */\n constructor() {\n // Empty constructor\n }\n\n /**\n * Adds an image to the manager\n * @param image Image to add\n * @returns Assigned ID\n */\n addImage(image: Image): string {\n const id = this.generateId();\n image.setDocPrId(this.nextId - 1);\n this.drawings.set(id, image);\n this.imageIds.add(id);\n return id;\n }\n\n /**\n * Adds a shape to the manager\n * @param shape Shape to add\n * @returns Assigned ID\n */\n addShape(shape: Shape): string {\n const id = this.generateId();\n shape.setDocPrId(this.nextId - 1);\n this.drawings.set(id, shape);\n this.shapeIds.add(id);\n return id;\n }\n\n /**\n * Adds a text box to the manager\n * @param textbox TextBox to add\n * @returns Assigned ID\n */\n addTextBox(textbox: TextBox): string {\n const id = this.generateId();\n textbox.setDocPrId(this.nextId - 1);\n this.drawings.set(id, textbox);\n this.textboxIds.add(id);\n return id;\n }\n\n /**\n * Adds a preserved drawing (SmartArt, Chart, WordArt)\n * @param drawing Preserved drawing to add\n * @returns Assigned ID\n */\n addPreservedDrawing(drawing: PreservedDrawing): string {\n const id = this.generateId();\n this.drawings.set(id, { ...drawing, id });\n this.preservedIds.add(id);\n return id;\n }\n\n /**\n * Gets a drawing by ID\n * @param id Drawing ID\n * @returns Drawing element or undefined\n */\n getDrawing(id: string): DrawingElement | PreservedDrawing | undefined {\n return this.drawings.get(id);\n }\n\n /**\n * Gets all drawings\n * @returns Array of all drawing elements\n */\n getAllDrawings(): (DrawingElement | PreservedDrawing)[] {\n return Array.from(this.drawings.values());\n }\n\n /**\n * Gets all images\n * Performance: O(k) where k = number of images (uses indexed lookup)\n * @returns Array of images\n */\n getAllImages(): Image[] {\n const images: Image[] = [];\n for (const id of this.imageIds) {\n const drawing = this.drawings.get(id);\n if (drawing instanceof Image) {\n images.push(drawing);\n }\n }\n return images;\n }\n\n /**\n * Gets all shapes\n * Performance: O(k) where k = number of shapes (uses indexed lookup)\n * @returns Array of shapes\n */\n getAllShapes(): Shape[] {\n const shapes: Shape[] = [];\n for (const id of this.shapeIds) {\n const drawing = this.drawings.get(id);\n if (drawing instanceof Shape) {\n shapes.push(drawing);\n }\n }\n return shapes;\n }\n\n /**\n * Gets all text boxes\n * Performance: O(k) where k = number of text boxes (uses indexed lookup)\n * @returns Array of text boxes\n */\n getAllTextBoxes(): TextBox[] {\n const textboxes: TextBox[] = [];\n for (const id of this.textboxIds) {\n const drawing = this.drawings.get(id);\n if (drawing instanceof TextBox) {\n textboxes.push(drawing);\n }\n }\n return textboxes;\n }\n\n /**\n * Gets all preserved drawings\n * Performance: O(k) where k = number of preserved drawings (uses indexed lookup)\n * @returns Array of preserved drawings\n */\n getAllPreservedDrawings(): PreservedDrawing[] {\n const preserved: PreservedDrawing[] = [];\n for (const id of this.preservedIds) {\n const drawing = this.drawings.get(id);\n if (drawing && this.isPreservedDrawing(drawing)) {\n preserved.push(drawing);\n }\n }\n return preserved;\n }\n\n /**\n * Removes a drawing by ID\n * @param id Drawing ID\n * @returns True if removed, false if not found\n */\n removeDrawing(id: string): boolean {\n const deleted = this.drawings.delete(id);\n if (deleted) {\n // Remove from type-specific indices\n this.imageIds.delete(id);\n this.shapeIds.delete(id);\n this.textboxIds.delete(id);\n this.preservedIds.delete(id);\n }\n return deleted;\n }\n\n /**\n * Gets the total number of drawings\n * @returns Number of drawings\n */\n getCount(): number {\n return this.drawings.size;\n }\n\n /**\n * Checks if the manager has any drawings\n * @returns True if empty, false otherwise\n */\n isEmpty(): boolean {\n return this.drawings.size === 0;\n }\n\n /**\n * Clears all drawings\n */\n clear(): void {\n this.drawings.clear();\n this.imageIds.clear();\n this.shapeIds.clear();\n this.textboxIds.clear();\n this.preservedIds.clear();\n this.nextId = 1;\n }\n\n /**\n * Gets the drawing type\n * @param drawing Drawing element\n * @returns Drawing type\n */\n getDrawingType(drawing: DrawingElement | PreservedDrawing): DrawingType {\n if (drawing instanceof Image) {\n return 'image';\n } else if (drawing instanceof Shape) {\n return 'shape';\n } else if (drawing instanceof TextBox) {\n return 'textbox';\n } else {\n return 'preserved';\n }\n }\n\n /**\n * Type guard for PreservedDrawing\n * @param drawing Drawing to check\n * @returns True if PreservedDrawing\n */\n private isPreservedDrawing(drawing: unknown): drawing is PreservedDrawing {\n return (\n !!drawing &&\n typeof drawing === 'object' &&\n 'type' in drawing &&\n 'xml' in drawing &&\n 'relationshipIds' in drawing &&\n ((drawing as PreservedDrawing).type === 'smartart' ||\n (drawing as PreservedDrawing).type === 'chart' ||\n (drawing as PreservedDrawing).type === 'wordart')\n );\n }\n\n /**\n * Generates a unique ID for a drawing\n * @private\n * @returns Unique ID string\n */\n private generateId(): string {\n const id = `drawing_${this.nextId}`;\n this.nextId++;\n return id;\n }\n\n /**\n * Assigns sequential docPr IDs to all drawings\n * Call this before generating the document to ensure unique IDs\n */\n assignIds(): void {\n let docPrId = 1;\n for (const drawing of this.drawings.values()) {\n if (drawing instanceof Image) {\n drawing.setDocPrId(docPrId++);\n } else if (drawing instanceof Shape) {\n drawing.setDocPrId(docPrId++);\n } else if (drawing instanceof TextBox) {\n drawing.setDocPrId(docPrId++);\n }\n // PreservedDrawings don't need docPrId assignment (already in XML)\n }\n }\n\n /**\n * Gets statistics about the drawings\n * Performance: O(1) using indexed Set sizes\n * @returns Statistics object\n */\n getStats(): {\n total: number;\n images: number;\n shapes: number;\n textboxes: number;\n preserved: number;\n } {\n return {\n total: this.drawings.size,\n images: this.imageIds.size,\n shapes: this.shapeIds.size,\n textboxes: this.textboxIds.size,\n preserved: this.preservedIds.size,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"DrawingManager.js","sourceRoot":"","sources":["../../src/managers/DrawingManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * DrawingManager - Manages all drawing elements in a document\n *\n * Centralizes management of images, shapes, and text boxes.\n * Assigns unique IDs and handles relationship management.\n */\n\nimport { Image } from '../elements/Image.js';\nimport { Shape } from '../elements/Shape.js';\nimport { TextBox } from '../elements/TextBox.js';\n\n/**\n * Type representing any drawing element\n */\nexport type DrawingElement = Image | Shape | TextBox;\n\n/**\n * Drawing type discriminator\n */\nexport type DrawingType = 'image' | 'shape' | 'textbox' | 'preserved';\n\n/**\n * Preserved drawing (SmartArt, Chart, WordArt)\n * These are stored as raw XML for round-trip preservation\n */\nexport interface PreservedDrawing {\n /** Type of preserved drawing */\n type: 'smartart' | 'chart' | 'wordart';\n /** Raw XML content */\n xml: string;\n /** Relationship IDs referenced by this drawing */\n relationshipIds: string[];\n /** Unique ID for this drawing */\n id: string;\n}\n\n/**\n * Manages all drawing elements in a document\n *\n * Performance: Uses type-indexed Sets for O(1) type-specific lookups\n * instead of O(n) linear scans through the main Map.\n */\nexport class DrawingManager {\n private drawings = new Map<string, DrawingElement | PreservedDrawing>();\n private nextId = 1;\n\n // Type-indexed Sets for O(1) type-specific lookups\n private imageIds = new Set<string>();\n private shapeIds = new Set<string>();\n private textboxIds = new Set<string>();\n private preservedIds = new Set<string>();\n\n /**\n * Creates a new DrawingManager\n */\n constructor() {\n // Empty constructor\n }\n\n /**\n * Adds an image to the manager\n * @param image Image to add\n * @returns Assigned ID\n */\n addImage(image: Image): string {\n const id = this.generateId();\n image.setDocPrId(this.nextId - 1);\n this.drawings.set(id, image);\n this.imageIds.add(id);\n return id;\n }\n\n /**\n * Adds a shape to the manager\n * @param shape Shape to add\n * @returns Assigned ID\n */\n addShape(shape: Shape): string {\n const id = this.generateId();\n shape.setDocPrId(this.nextId - 1);\n this.drawings.set(id, shape);\n this.shapeIds.add(id);\n return id;\n }\n\n /**\n * Adds a text box to the manager\n * @param textbox TextBox to add\n * @returns Assigned ID\n */\n addTextBox(textbox: TextBox): string {\n const id = this.generateId();\n textbox.setDocPrId(this.nextId - 1);\n this.drawings.set(id, textbox);\n this.textboxIds.add(id);\n return id;\n }\n\n /**\n * Adds a preserved drawing (SmartArt, Chart, WordArt)\n * @param drawing Preserved drawing to add\n * @returns Assigned ID\n */\n addPreservedDrawing(drawing: PreservedDrawing): string {\n const id = this.generateId();\n this.drawings.set(id, { ...drawing, id });\n this.preservedIds.add(id);\n return id;\n }\n\n /**\n * Gets a drawing by ID\n * @param id Drawing ID\n * @returns Drawing element or undefined\n */\n getDrawing(id: string): DrawingElement | PreservedDrawing | undefined {\n return this.drawings.get(id);\n }\n\n /**\n * Gets all drawings\n * @returns Array of all drawing elements\n */\n getAllDrawings(): (DrawingElement | PreservedDrawing)[] {\n return Array.from(this.drawings.values());\n }\n\n /**\n * Gets all images\n * Performance: O(k) where k = number of images (uses indexed lookup)\n * @returns Array of images\n */\n getAllImages(): Image[] {\n const images: Image[] = [];\n for (const id of this.imageIds) {\n const drawing = this.drawings.get(id);\n if (drawing instanceof Image) {\n images.push(drawing);\n }\n }\n return images;\n }\n\n /**\n * Gets all shapes\n * Performance: O(k) where k = number of shapes (uses indexed lookup)\n * @returns Array of shapes\n */\n getAllShapes(): Shape[] {\n const shapes: Shape[] = [];\n for (const id of this.shapeIds) {\n const drawing = this.drawings.get(id);\n if (drawing instanceof Shape) {\n shapes.push(drawing);\n }\n }\n return shapes;\n }\n\n /**\n * Gets all text boxes\n * Performance: O(k) where k = number of text boxes (uses indexed lookup)\n * @returns Array of text boxes\n */\n getAllTextBoxes(): TextBox[] {\n const textboxes: TextBox[] = [];\n for (const id of this.textboxIds) {\n const drawing = this.drawings.get(id);\n if (drawing instanceof TextBox) {\n textboxes.push(drawing);\n }\n }\n return textboxes;\n }\n\n /**\n * Gets all preserved drawings\n * Performance: O(k) where k = number of preserved drawings (uses indexed lookup)\n * @returns Array of preserved drawings\n */\n getAllPreservedDrawings(): PreservedDrawing[] {\n const preserved: PreservedDrawing[] = [];\n for (const id of this.preservedIds) {\n const drawing = this.drawings.get(id);\n if (drawing && this.isPreservedDrawing(drawing)) {\n preserved.push(drawing);\n }\n }\n return preserved;\n }\n\n /**\n * Removes a drawing by ID\n * @param id Drawing ID\n * @returns True if removed, false if not found\n */\n removeDrawing(id: string): boolean {\n const deleted = this.drawings.delete(id);\n if (deleted) {\n // Remove from type-specific indices\n this.imageIds.delete(id);\n this.shapeIds.delete(id);\n this.textboxIds.delete(id);\n this.preservedIds.delete(id);\n }\n return deleted;\n }\n\n /**\n * Gets the total number of drawings\n * @returns Number of drawings\n */\n getCount(): number {\n return this.drawings.size;\n }\n\n /**\n * Checks if the manager has any drawings\n * @returns True if empty, false otherwise\n */\n isEmpty(): boolean {\n return this.drawings.size === 0;\n }\n\n /**\n * Clears all drawings\n */\n clear(): void {\n this.drawings.clear();\n this.imageIds.clear();\n this.shapeIds.clear();\n this.textboxIds.clear();\n this.preservedIds.clear();\n this.nextId = 1;\n }\n\n /**\n * Gets the drawing type\n * @param drawing Drawing element\n * @returns Drawing type\n */\n getDrawingType(drawing: DrawingElement | PreservedDrawing): DrawingType {\n if (drawing instanceof Image) {\n return 'image';\n } else if (drawing instanceof Shape) {\n return 'shape';\n } else if (drawing instanceof TextBox) {\n return 'textbox';\n } else {\n return 'preserved';\n }\n }\n\n /**\n * Type guard for PreservedDrawing\n * @param drawing Drawing to check\n * @returns True if PreservedDrawing\n */\n private isPreservedDrawing(drawing: unknown): drawing is PreservedDrawing {\n return (\n !!drawing &&\n typeof drawing === 'object' &&\n 'type' in drawing &&\n 'xml' in drawing &&\n 'relationshipIds' in drawing &&\n ((drawing as PreservedDrawing).type === 'smartart' ||\n (drawing as PreservedDrawing).type === 'chart' ||\n (drawing as PreservedDrawing).type === 'wordart')\n );\n }\n\n /**\n * Generates a unique ID for a drawing\n * @private\n * @returns Unique ID string\n */\n private generateId(): string {\n const id = `drawing_${this.nextId}`;\n this.nextId++;\n return id;\n }\n\n /**\n * Assigns sequential docPr IDs to all drawings\n * Call this before generating the document to ensure unique IDs\n */\n assignIds(): void {\n let docPrId = 1;\n for (const drawing of this.drawings.values()) {\n if (drawing instanceof Image) {\n drawing.setDocPrId(docPrId++);\n } else if (drawing instanceof Shape) {\n drawing.setDocPrId(docPrId++);\n } else if (drawing instanceof TextBox) {\n drawing.setDocPrId(docPrId++);\n }\n // PreservedDrawings don't need docPrId assignment (already in XML)\n }\n }\n\n /**\n * Gets statistics about the drawings\n * Performance: O(1) using indexed Set sizes\n * @returns Statistics object\n */\n getStats(): {\n total: number;\n images: number;\n shapes: number;\n textboxes: number;\n preserved: number;\n } {\n return {\n total: this.drawings.size,\n images: this.imageIds.size,\n shapes: this.shapeIds.size,\n textboxes: this.textboxIds.size,\n preserved: this.preservedIds.size,\n };\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { Document } from '../core/Document';
2
- import { Revision, RevisionType } from '../elements/Revision';
1
+ import type { Document } from '../core/Document.js';
2
+ import { Revision, RevisionType } from '../elements/Revision.js';
3
3
  export type ChangeCategory = 'content' | 'formatting' | 'structural' | 'table' | 'hyperlink' | 'image' | 'field' | 'comment' | 'bookmark' | 'contentControl';
4
4
  export interface ChangeLocation {
5
5
  sectionIndex?: number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogGenerator.d.ts","sourceRoot":"","sources":["../../src/processors/ChangelogGenerator.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ChangelogGenerator = void 0;
4
- const logger_1 = require("./logger");
4
+ const logger_js_1 = require("../utils/logger.js");
5
5
  function getLogger() {
6
- return (0, logger_1.createScopedLogger)((0, logger_1.getGlobalLogger)(), 'ChangelogGenerator');
6
+ return (0, logger_js_1.createScopedLogger)((0, logger_js_1.getGlobalLogger)(), 'ChangelogGenerator');
7
7
  }
8
8
  class ChangelogGenerator {
9
9
  static fromDocument(doc, options) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogGenerator.js","sourceRoot":"","sources":["../../src/processors/ChangelogGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChangelogGenerator - Generates structured changelog from Word tracked changes\n *\n * Converts Word revisions (w:ins, w:del, property changes) into structured\n * changelog data with support for consolidation, categorization, and\n * multiple output formats.\n *\n * Follows ECMA-376 revision semantics.\n *\n * @module ChangelogGenerator\n */\n\nimport type { Document } from '../core/Document.js';\nimport { Revision, RevisionType } from '../elements/Revision.js';\nimport { getGlobalLogger, createScopedLogger, ILogger } from '../utils/logger.js';\n\n// Scoped logger for ChangelogGenerator\nfunction getLogger(): ILogger {\n return createScopedLogger(getGlobalLogger(), 'ChangelogGenerator');\n}\n\n/**\n * Semantic category for grouping changes.\n */\nexport type ChangeCategory =\n | 'content' // Text insertions, deletions\n | 'formatting' // Run/paragraph property changes\n | 'structural' // Moves, section changes\n | 'table' // Table structure changes\n | 'hyperlink' // Hyperlink URL, text, or formatting changes\n | 'image' // Image insertion, deletion, or property changes\n | 'field' // Field insertion, deletion, or value changes\n | 'comment' // Comment changes\n | 'bookmark' // Bookmark changes\n | 'contentControl'; // Content control (SDT) changes\n\n/**\n * Location of a change within the document.\n */\nexport interface ChangeLocation {\n /** Section index (0-based) */\n sectionIndex?: number;\n /** Paragraph index within body (0-based) */\n paragraphIndex: number;\n /** Run index within paragraph (0-based) */\n runIndex?: number;\n /** Nearest heading for context */\n nearestHeading?: string;\n /** Character offset within paragraph */\n characterOffset?: number;\n}\n\n/**\n * Represents a single change entry in the changelog.\n * Follows ECMA-376 revision semantics.\n */\nexport interface ChangeEntry {\n /** Unique identifier (matches revision ID) */\n id: string;\n\n /** ECMA-376 revision type */\n revisionType: RevisionType;\n\n /** Semantic category for grouping */\n category: ChangeCategory;\n\n /** Human-readable description */\n description: string;\n\n /** Author who made the change */\n author: string;\n\n /** ISO 8601 timestamp */\n date: Date;\n\n /** Location in document */\n location: ChangeLocation;\n\n /** Content details */\n content: {\n /** Text before change (for deletions/modifications) */\n before?: string;\n /** Text after change (for insertions/modifications) */\n after?: string;\n /** Affected text (for property changes) */\n affectedText?: string;\n };\n\n /** Property change details (for formatting changes) */\n propertyChange?: {\n property: string;\n oldValue?: string;\n newValue?: string;\n };\n}\n\n/**\n * Output format for changelog generation.\n */\nexport type ChangelogFormat = 'json' | 'markdown' | 'text' | 'html' | 'csv';\n\n/**\n * Options for changelog generation.\n */\nexport interface ChangelogOptions {\n /** Include formatting/property changes (default: true) */\n includeFormattingChanges?: boolean;\n /** Consolidate similar changes (default: false) */\n consolidate?: boolean;\n /** Maximum context length for descriptions (default: 50) */\n maxContextLength?: number;\n /** Filter by authors */\n filterAuthors?: string[];\n /** Filter by date range */\n filterDateRange?: { start: Date; end: Date };\n /** Filter by categories */\n filterCategories?: ChangeCategory[];\n /** Output format (default: 'markdown') */\n format?: ChangelogFormat;\n /** Sort changes by field */\n sortBy?: 'date' | 'author' | 'type' | 'category';\n /** Sort order (default: 'asc') */\n sortOrder?: 'asc' | 'desc';\n /** Group changes by element type */\n groupByElement?: boolean;\n /** Include document context (nearest heading, section) */\n includeDocumentContext?: boolean;\n}\n\n/**\n * Consolidated change grouping similar changes together.\n */\nexport interface ConsolidatedChange {\n /** Description of the consolidated change */\n description: string;\n /** Number of individual changes */\n count: number;\n /** Category of changes */\n category: ChangeCategory;\n /** Common attributes shared by all changes */\n commonAttributes: {\n author?: string;\n revisionType?: RevisionType;\n propertyChanged?: string;\n newValue?: string;\n };\n /** Individual change IDs */\n changeIds: string[];\n}\n\n/**\n * Summary statistics for changelog entries.\n */\nexport interface ChangelogSummary {\n /** Total number of changes */\n total: number;\n /** Breakdown by category */\n byCategory: Record<ChangeCategory, number>;\n /** Breakdown by revision type */\n byType: Record<string, number>;\n /** Breakdown by author */\n byAuthor: Record<string, number>;\n /** Date range of changes */\n dateRange: { earliest: Date; latest: Date } | null;\n}\n\n/**\n * Generates changelog from Word tracked changes.\n * Follows ECMA-376 revision semantics.\n */\nexport class ChangelogGenerator {\n /**\n * Generate changelog entries from a document.\n * Document must be loaded with { revisionHandling: 'preserve' }.\n *\n * @param doc - Document to extract revisions from\n * @param options - Changelog generation options\n * @returns Array of changelog entries\n */\n static fromDocument(doc: Document, options?: ChangelogOptions): ChangeEntry[] {\n const revisionManager = doc.getRevisionManager();\n if (!revisionManager) {\n return [];\n }\n\n const revisions = revisionManager.getAllRevisions();\n return this.fromRevisions(revisions, options, doc);\n }\n\n /**\n * Generate changelog entries from specific revisions.\n *\n * @param revisions - Array of revisions to convert\n * @param options - Changelog generation options\n * @param doc - Optional document for context (paragraph indices, headings)\n * @returns Array of changelog entries\n */\n static fromRevisions(\n revisions: Revision[],\n options?: ChangelogOptions,\n _doc?: Document\n ): ChangeEntry[] {\n const logger = getLogger();\n const opts = {\n includeFormattingChanges: true,\n consolidate: false,\n maxContextLength: 50,\n ...options,\n };\n\n logger.debug('Processing revisions', {\n total: revisions.length,\n filters: {\n categories: opts.filterCategories?.length ?? 0,\n authors: opts.filterAuthors?.length ?? 0,\n dateRange: !!opts.filterDateRange,\n },\n });\n\n const entries: ChangeEntry[] = [];\n let filtered = 0;\n\n for (let i = 0; i < revisions.length; i++) {\n const revision = revisions[i];\n if (!revision) continue;\n\n const category = this.categorize(revision);\n\n // Filter by category\n if (opts.filterCategories && !opts.filterCategories.includes(category)) {\n filtered++;\n continue;\n }\n\n // Filter out formatting changes if requested\n if (!opts.includeFormattingChanges && category === 'formatting') {\n filtered++;\n continue;\n }\n\n // Filter by author\n if (opts.filterAuthors && !opts.filterAuthors.includes(revision.getAuthor())) {\n filtered++;\n continue;\n }\n\n // Filter by date range\n if (opts.filterDateRange) {\n const revDate = revision.getDate();\n if (revDate < opts.filterDateRange.start || revDate > opts.filterDateRange.end) {\n filtered++;\n continue;\n }\n }\n\n const entry = this.revisionToEntry(revision, i, opts.maxContextLength);\n entries.push(entry);\n }\n\n if (filtered > 0) {\n logger.debug('Revisions filtered', { included: entries.length, filtered });\n }\n\n return entries;\n }\n\n /**\n * Convert a single revision to a changelog entry.\n *\n * @param revision - Revision to convert\n * @param index - Index for paragraph location (default location)\n * @param maxContextLength - Maximum length for text context\n * @returns Changelog entry\n */\n private static revisionToEntry(\n revision: Revision,\n index: number,\n maxContextLength: number\n ): ChangeEntry {\n const type = revision.getType();\n const category = this.categorize(revision);\n const runs = revision.getRuns();\n\n // Extract text content from runs\n const text = runs.map((r) => r.getText()).join('');\n const truncatedText =\n text.length > maxContextLength ? text.substring(0, maxContextLength) + '...' : text;\n\n // Build content object based on revision type\n const content: ChangeEntry['content'] = {};\n if (type === 'insert' || type === 'moveTo') {\n content.after = truncatedText;\n } else if (type === 'delete' || type === 'moveFrom') {\n content.before = truncatedText;\n } else if (this.isPropertyChangeType(type)) {\n content.affectedText = truncatedText;\n }\n\n // Handle hyperlink changes specially\n const prevProps = revision.getPreviousProperties();\n const newProps = revision.getNewProperties();\n if (type === 'hyperlinkChange' && (prevProps || newProps)) {\n (content as any).hyperlinkChange = {\n urlBefore: prevProps?.url,\n urlAfter: newProps?.url,\n textBefore: prevProps?.text,\n textAfter: newProps?.text,\n };\n // Set before/after for standard diff view\n if (prevProps?.url !== newProps?.url) {\n content.before = prevProps?.url;\n content.after = newProps?.url;\n } else if (prevProps?.text !== newProps?.text) {\n content.before = prevProps?.text;\n content.after = newProps?.text;\n }\n }\n\n // Build property change details if applicable\n let propertyChange: ChangeEntry['propertyChange'] | undefined;\n if (prevProps || newProps) {\n // Get the first property that changed\n const allKeys = new Set([...Object.keys(prevProps || {}), ...Object.keys(newProps || {})]);\n const firstKey = Array.from(allKeys)[0];\n if (firstKey) {\n propertyChange = {\n property: firstKey,\n oldValue: this.formatPropertyValue(prevProps?.[firstKey]),\n newValue: this.formatPropertyValue(newProps?.[firstKey]),\n };\n }\n }\n\n // Use revision's location if available, otherwise fall back to index\n const revisionLocation = revision.getLocation();\n const location: ChangeLocation = {\n paragraphIndex: revisionLocation?.paragraphIndex ?? index, // Use actual or fallback\n sectionIndex: revisionLocation?.sectionIndex,\n runIndex: revisionLocation?.runIndex,\n };\n\n return {\n id: revision.getId().toString(),\n revisionType: type,\n category,\n description: this.describeRevision(revision, maxContextLength),\n author: revision.getAuthor(),\n date: revision.getDate(),\n location,\n content,\n propertyChange,\n };\n }\n\n /**\n * Get summary statistics for changelog entries.\n *\n * @param entries - Array of changelog entries\n * @returns Summary statistics\n */\n static getSummary(entries: ChangeEntry[]): ChangelogSummary {\n const byCategory: Record<ChangeCategory, number> = {\n content: 0,\n formatting: 0,\n structural: 0,\n table: 0,\n hyperlink: 0,\n image: 0,\n field: 0,\n comment: 0,\n bookmark: 0,\n contentControl: 0,\n };\n const byType: Record<string, number> = {};\n const byAuthor: Record<string, number> = {};\n let earliest: Date | null = null;\n let latest: Date | null = null;\n\n for (const entry of entries) {\n // Count by category\n byCategory[entry.category]++;\n\n // Count by type\n byType[entry.revisionType] = (byType[entry.revisionType] || 0) + 1;\n\n // Count by author\n byAuthor[entry.author] = (byAuthor[entry.author] || 0) + 1;\n\n // Track date range\n if (!earliest || entry.date < earliest) {\n earliest = entry.date;\n }\n if (!latest || entry.date > latest) {\n latest = entry.date;\n }\n }\n\n return {\n total: entries.length,\n byCategory,\n byType,\n byAuthor,\n dateRange: earliest && latest ? { earliest, latest } : null,\n };\n }\n\n /**\n * Consolidate similar changes into groups.\n * Groups changes that share: same type, same property, same new value.\n *\n * @param entries - Array of changelog entries\n * @returns Array of consolidated changes\n */\n static consolidate(entries: ChangeEntry[]): ConsolidatedChange[] {\n const groups = new Map<string, ChangeEntry[]>();\n\n for (const entry of entries) {\n // Create grouping key\n let key = `${entry.revisionType}_${entry.category}`;\n\n // For property changes, include the property name and new value\n if (entry.propertyChange) {\n key += `_${entry.propertyChange.property}_${entry.propertyChange.newValue || ''}`;\n }\n\n // For content changes by same author, group them\n key += `_${entry.author}`;\n\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(entry);\n }\n\n const consolidated: ConsolidatedChange[] = [];\n\n for (const [_, groupEntries] of groups) {\n const first = groupEntries[0];\n if (!first) continue;\n\n let description: string;\n\n if (groupEntries.length === 1) {\n description = first.description;\n } else {\n // Generate consolidated description\n description = this.generateConsolidatedDescription(groupEntries);\n }\n\n consolidated.push({\n description,\n count: groupEntries.length,\n category: first.category,\n commonAttributes: {\n author: this.allSame(groupEntries.map((e) => e.author)) ? first.author : undefined,\n revisionType: first.revisionType,\n propertyChanged: first.propertyChange?.property,\n newValue: first.propertyChange?.newValue,\n },\n changeIds: groupEntries.map((e) => e.id),\n });\n }\n\n // Sort by count descending\n consolidated.sort((a, b) => b.count - a.count);\n\n if (entries.length > 0) {\n getLogger().info('Entries consolidated', {\n input: entries.length,\n groups: consolidated.length,\n reduction: `${Math.round((1 - consolidated.length / entries.length) * 100)}%`,\n });\n }\n\n return consolidated;\n }\n\n /**\n * Generate a consolidated description for a group of similar changes.\n */\n private static generateConsolidatedDescription(entries: ChangeEntry[]): string {\n const first = entries[0];\n if (!first) {\n return `${entries.length} changes`;\n }\n\n const count = entries.length;\n\n switch (first.revisionType) {\n case 'insert':\n return `Inserted text in ${count} locations`;\n case 'delete':\n return `Deleted text from ${count} locations`;\n case 'moveFrom':\n case 'moveTo':\n return `Moved content (${count} operations)`;\n case 'runPropertiesChange':\n if (first.propertyChange) {\n return `Changed ${first.propertyChange.property} to \"${first.propertyChange.newValue}\" (${count} times)`;\n }\n return `Changed run formatting (${count} times)`;\n case 'paragraphPropertiesChange':\n if (first.propertyChange) {\n return `Changed paragraph ${first.propertyChange.property} (${count} times)`;\n }\n return `Changed paragraph formatting (${count} times)`;\n case 'tablePropertiesChange':\n case 'tableRowPropertiesChange':\n case 'tableCellPropertiesChange':\n return `Changed table formatting (${count} times)`;\n case 'tableCellInsert':\n return `Inserted ${count} table cells`;\n case 'tableCellDelete':\n return `Deleted ${count} table cells`;\n case 'tableCellMerge':\n return `Merged table cells (${count} operations)`;\n case 'numberingChange':\n return `Changed list numbering (${count} times)`;\n case 'sectionPropertiesChange':\n return `Changed section properties (${count} times)`;\n default:\n return `${count} changes of type ${first.revisionType}`;\n }\n }\n\n /**\n * Check if all values in an array are the same.\n */\n private static allSame<T>(arr: T[]): boolean {\n if (arr.length === 0) return true;\n const first = arr[0];\n return arr.every((v) => v === first);\n }\n\n /**\n * Categorize a revision into a semantic category.\n *\n * @param revision - Revision to categorize\n * @returns Semantic category\n */\n static categorize(revision: Revision): ChangeCategory {\n const type = revision.getType();\n\n switch (type) {\n // Content changes\n case 'insert':\n case 'delete':\n return 'content';\n\n // Structural changes\n case 'moveFrom':\n case 'moveTo':\n case 'sectionPropertiesChange':\n return 'structural';\n\n // Formatting changes\n case 'runPropertiesChange':\n case 'paragraphPropertiesChange':\n case 'numberingChange':\n return 'formatting';\n\n // Table changes\n case 'tablePropertiesChange':\n case 'tableExceptionPropertiesChange':\n case 'tableRowPropertiesChange':\n case 'tableCellPropertiesChange':\n case 'tableCellInsert':\n case 'tableCellDelete':\n case 'tableCellMerge':\n return 'table';\n\n // Hyperlink changes\n case 'hyperlinkChange':\n return 'hyperlink';\n\n // Rich content changes\n case 'imageChange':\n return 'image';\n\n case 'fieldChange':\n return 'field';\n\n case 'commentChange':\n return 'comment';\n\n case 'bookmarkChange':\n return 'bookmark';\n\n case 'contentControlChange':\n return 'contentControl';\n\n default:\n return 'content';\n }\n }\n\n /**\n * Check if a revision type is a property change type.\n */\n private static isPropertyChangeType(type: RevisionType): boolean {\n return [\n 'runPropertiesChange',\n 'paragraphPropertiesChange',\n 'tablePropertiesChange',\n 'tableExceptionPropertiesChange',\n 'tableRowPropertiesChange',\n 'tableCellPropertiesChange',\n 'sectionPropertiesChange',\n 'numberingChange',\n ].includes(type);\n }\n\n /**\n * Generate human-readable description for a revision.\n *\n * @param revision - Revision to describe\n * @param maxLength - Maximum length for text excerpts\n * @returns Human-readable description\n */\n static describeRevision(revision: Revision, maxLength = 50): string {\n const type = revision.getType();\n const runs = revision.getRuns();\n const text = runs.map((r) => r.getText()).join('');\n const excerpt =\n text.length > maxLength ? `\"${text.substring(0, maxLength)}...\"` : text ? `\"${text}\"` : '';\n\n switch (type) {\n case 'insert':\n return excerpt ? `Inserted ${excerpt}` : 'Inserted content';\n case 'delete':\n return excerpt ? `Deleted ${excerpt}` : 'Deleted content';\n case 'moveFrom':\n return excerpt ? `Moved ${excerpt} from here` : 'Moved content from here';\n case 'moveTo':\n return excerpt ? `Moved ${excerpt} to here` : 'Moved content to here';\n case 'runPropertiesChange':\n return this.describePropertyChange(revision, 'run formatting');\n case 'paragraphPropertiesChange':\n return this.describePropertyChange(revision, 'paragraph formatting');\n case 'tablePropertiesChange':\n return 'Changed table properties';\n case 'tableExceptionPropertiesChange':\n return 'Changed table exception properties';\n case 'tableRowPropertiesChange':\n return 'Changed table row properties';\n case 'tableCellPropertiesChange':\n return 'Changed table cell properties';\n case 'sectionPropertiesChange':\n return 'Changed section properties';\n case 'tableCellInsert':\n return 'Inserted table cell';\n case 'tableCellDelete':\n return 'Deleted table cell';\n case 'tableCellMerge':\n return 'Merged table cells';\n case 'numberingChange':\n return 'Changed list numbering';\n case 'hyperlinkChange':\n return this.describeHyperlinkChange(revision, maxLength);\n case 'imageChange':\n return this.describeImageChange(revision);\n case 'fieldChange':\n return this.describeFieldChange(revision);\n case 'commentChange':\n return this.describeCommentChange(revision);\n case 'bookmarkChange':\n return this.describeBookmarkChange(revision);\n case 'contentControlChange':\n return this.describeContentControlChange(revision);\n default:\n return `Changed (${type})`;\n }\n }\n\n /**\n * Generate description for a hyperlink change revision.\n */\n private static describeHyperlinkChange(revision: Revision, _maxLength: number): string {\n const prevProps = revision.getPreviousProperties() || {};\n const newProps = revision.getNewProperties() || {};\n const changes: string[] = [];\n\n if (prevProps.url !== newProps.url) {\n changes.push('URL');\n }\n if (prevProps.text !== newProps.text) {\n changes.push('display text');\n }\n if (prevProps.formatting !== newProps.formatting) {\n changes.push('formatting');\n }\n\n if (changes.length === 0) {\n return 'Updated hyperlink';\n }\n\n return `Changed hyperlink ${changes.join(' and ')}`;\n }\n\n /**\n * Generate description for an image change revision.\n */\n private static describeImageChange(revision: Revision): string {\n const prevProps = revision.getPreviousProperties() || {};\n const newProps = revision.getNewProperties() || {};\n const changes: string[] = [];\n\n // Detect type of change\n if (!prevProps.imageId && newProps.imageId) {\n return `Inserted image${newProps.filename ? ` \"${newProps.filename}\"` : ''}`;\n }\n if (prevProps.imageId && !newProps.imageId) {\n return `Deleted image${prevProps.filename ? ` \"${prevProps.filename}\"` : ''}`;\n }\n\n // Property changes\n if (prevProps.width !== newProps.width || prevProps.height !== newProps.height) {\n changes.push('size');\n }\n if (prevProps.position !== newProps.position) {\n changes.push('position');\n }\n if (prevProps.wrapping !== newProps.wrapping) {\n changes.push('wrapping');\n }\n if (prevProps.altText !== newProps.altText) {\n changes.push('alt text');\n }\n\n if (changes.length === 0) {\n return 'Updated image';\n }\n\n return `Changed image ${changes.join(' and ')}`;\n }\n\n /**\n * Generate description for a field change revision.\n */\n private static describeFieldChange(revision: Revision): string {\n const prevProps = revision.getPreviousProperties() || {};\n const newProps = revision.getNewProperties() || {};\n\n // Detect type of change\n if (!prevProps.fieldType && newProps.fieldType) {\n return `Inserted ${newProps.fieldType || 'field'}`;\n }\n if (prevProps.fieldType && !newProps.fieldType) {\n return `Deleted ${prevProps.fieldType || 'field'}`;\n }\n\n // Value/formula changes\n if (prevProps.value !== newProps.value) {\n return `Updated ${newProps.fieldType || 'field'} value`;\n }\n if (prevProps.formula !== newProps.formula) {\n return `Changed ${newProps.fieldType || 'field'} formula`;\n }\n\n return `Updated ${newProps.fieldType || 'field'}`;\n }\n\n /**\n * Generate description for a comment change revision.\n */\n private static describeCommentChange(revision: Revision): string {\n const prevProps = revision.getPreviousProperties() || {};\n const newProps = revision.getNewProperties() || {};\n\n // Detect type of change\n if (!prevProps.commentId && newProps.commentId) {\n return `Added comment${newProps.author ? ` by ${newProps.author}` : ''}`;\n }\n if (prevProps.commentId && !newProps.commentId) {\n return `Deleted comment${prevProps.author ? ` by ${prevProps.author}` : ''}`;\n }\n if (prevProps.text !== newProps.text) {\n return `Edited comment${newProps.author ? ` by ${newProps.author}` : ''}`;\n }\n\n return 'Updated comment';\n }\n\n /**\n * Generate description for a bookmark change revision.\n */\n private static describeBookmarkChange(revision: Revision): string {\n const prevProps = revision.getPreviousProperties() || {};\n const newProps = revision.getNewProperties() || {};\n\n // Detect type of change\n if (!prevProps.bookmarkId && newProps.bookmarkId) {\n return `Created bookmark \"${newProps.name || 'unnamed'}\"`;\n }\n if (prevProps.bookmarkId && !newProps.bookmarkId) {\n return `Deleted bookmark \"${prevProps.name || 'unnamed'}\"`;\n }\n if (prevProps.name !== newProps.name) {\n return `Renamed bookmark from \"${prevProps.name}\" to \"${newProps.name}\"`;\n }\n if (prevProps.rangeStart !== newProps.rangeStart || prevProps.rangeEnd !== newProps.rangeEnd) {\n return `Changed bookmark \"${newProps.name || 'unnamed'}\" range`;\n }\n\n return `Updated bookmark \"${newProps.name || prevProps.name || 'unnamed'}\"`;\n }\n\n /**\n * Generate description for a content control change revision.\n */\n private static describeContentControlChange(revision: Revision): string {\n const prevProps = revision.getPreviousProperties() || {};\n const newProps = revision.getNewProperties() || {};\n\n // Detect type of change\n if (!prevProps.sdtId && newProps.sdtId) {\n return `Inserted content control${newProps.title ? ` \"${newProps.title}\"` : ''}`;\n }\n if (prevProps.sdtId && !newProps.sdtId) {\n return `Deleted content control${prevProps.title ? ` \"${prevProps.title}\"` : ''}`;\n }\n if (prevProps.title !== newProps.title) {\n return `Renamed content control to \"${newProps.title}\"`;\n }\n if (prevProps.content !== newProps.content) {\n return `Changed content control${newProps.title ? ` \"${newProps.title}\"` : ''} content`;\n }\n\n return `Updated content control${newProps.title || prevProps.title ? ` \"${newProps.title || prevProps.title}\"` : ''}`;\n }\n\n /**\n * Generate description for a property change revision.\n */\n private static describePropertyChange(revision: Revision, context: string): string {\n const prevProps = revision.getPreviousProperties();\n const newProps = revision.getNewProperties();\n\n if (!prevProps && !newProps) {\n return `Changed ${context}`;\n }\n\n // Get meaningful property names\n const propNames: string[] = [];\n const allKeys = new Set([...Object.keys(prevProps || {}), ...Object.keys(newProps || {})]);\n\n for (const key of allKeys) {\n const oldVal = prevProps?.[key];\n const newVal = newProps?.[key];\n if (oldVal !== newVal) {\n propNames.push(this.friendlyPropertyName(key));\n }\n }\n\n if (propNames.length === 0) {\n return `Changed ${context}`;\n }\n\n if (propNames.length === 1) {\n return `Changed ${propNames[0]}`;\n }\n\n if (propNames.length <= 3) {\n return `Changed ${propNames.join(', ')}`;\n }\n\n return `Changed ${propNames.slice(0, 2).join(', ')} and ${propNames.length - 2} more`;\n }\n\n /**\n * Format a property value for display.\n * Handles objects, arrays, and primitives properly.\n */\n private static formatPropertyValue(value: unknown): string | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === 'object') {\n try {\n // For objects, use JSON.stringify for proper representation\n const json = JSON.stringify(value);\n // Truncate if too long\n return json.length > 100 ? json.substring(0, 97) + '...' : json;\n } catch (e) {\n getLogger().warn('Failed to stringify value for changelog', { error: String(e) });\n return '[complex value]';\n }\n }\n // For primitives, use String() for safe conversion\n return String(value);\n }\n\n /**\n * Convert property key to friendly name.\n */\n private static friendlyPropertyName(key: string): string {\n const friendlyNames: Record<string, string> = {\n // Run (character) properties\n b: 'bold',\n i: 'italic',\n u: 'underline',\n strike: 'strikethrough',\n dstrike: 'double strikethrough',\n sz: 'font size',\n szCs: 'complex script font size',\n color: 'text color',\n highlight: 'highlight',\n rFonts: 'font',\n rStyle: 'character style',\n vertAlign: 'vertical alignment',\n vanish: 'hidden text',\n caps: 'all capitals',\n smallCaps: 'small capitals',\n outline: 'outline effect',\n shadow: 'shadow effect',\n emboss: 'emboss effect',\n imprint: 'imprint effect',\n kern: 'kerning',\n w: 'character width',\n spacing: 'character spacing',\n position: 'text position',\n shd: 'shading',\n bdr: 'border',\n lang: 'language',\n eastAsianLayout: 'East Asian layout',\n specVanish: 'special vanish',\n oMath: 'math mode',\n\n // Paragraph properties\n jc: 'alignment',\n ind: 'indentation',\n pStyle: 'paragraph style',\n numPr: 'list numbering',\n pBdr: 'paragraph border',\n tabs: 'tab stops',\n suppressAutoHyphens: 'hyphenation',\n kinsoku: 'kinsoku rules',\n wordWrap: 'word wrap',\n overflowPunct: 'overflow punctuation',\n topLinePunct: 'top line punctuation',\n autoSpaceDE: 'auto space (DE)',\n autoSpaceDN: 'auto space (DN)',\n bidi: 'bidirectional',\n adjustRightInd: 'right indent adjustment',\n snapToGrid: 'snap to grid',\n contextualSpacing: 'contextual spacing',\n mirrorIndents: 'mirror indents',\n suppressOverlap: 'suppress overlap',\n outlineLvl: 'outline level',\n divId: 'HTML division',\n keepNext: 'keep with next',\n keepLines: 'keep lines together',\n pageBreakBefore: 'page break before',\n widowControl: 'widow/orphan control',\n suppressLineNumbers: 'suppress line numbers',\n textboxTightWrap: 'textbox tight wrap',\n\n // Table properties\n tblStyle: 'table style',\n tblW: 'table width',\n tblInd: 'table indent',\n tblBorders: 'table borders',\n tblCellMar: 'table cell margins',\n tblLook: 'table look',\n tblLayout: 'table layout',\n gridSpan: 'column span',\n vMerge: 'vertical merge',\n tcW: 'cell width',\n tcBorders: 'cell borders',\n vAlign: 'vertical alignment',\n textDirection: 'text direction',\n noWrap: 'no wrap',\n tcMar: 'cell margins',\n tcFitText: 'fit text',\n hideMark: 'hide mark',\n\n // Section properties\n sectPr: 'section properties',\n pgSz: 'page size',\n pgMar: 'page margins',\n cols: 'columns',\n docGrid: 'document grid',\n headerReference: 'header',\n footerReference: 'footer',\n pgNumType: 'page numbering',\n formProt: 'form protection',\n titlePg: 'different first page',\n type: 'section type',\n };\n\n return friendlyNames[key] || key;\n }\n\n /**\n * Export changelog to Markdown format.\n *\n * @param entries - Array of changelog entries\n * @param options - Export options\n * @returns Markdown string\n */\n static toMarkdown(entries: ChangeEntry[], options?: { includeMetadata?: boolean }): string {\n const opts = { includeMetadata: true, ...options };\n const lines: string[] = [];\n\n lines.push('# Document Changes');\n lines.push('');\n\n if (opts.includeMetadata) {\n const summary = this.getSummary(entries);\n lines.push(`**Total Changes:** ${summary.total}`);\n lines.push('');\n\n if (summary.dateRange) {\n lines.push(\n `**Date Range:** ${summary.dateRange.earliest.toLocaleDateString()} - ${summary.dateRange.latest.toLocaleDateString()}`\n );\n lines.push('');\n }\n\n const authors = Object.keys(summary.byAuthor);\n if (authors.length > 0) {\n lines.push(`**Authors:** ${authors.join(', ')}`);\n lines.push('');\n }\n\n lines.push('---');\n lines.push('');\n }\n\n // Group by category\n const byCategory = new Map<ChangeCategory, ChangeEntry[]>();\n for (const entry of entries) {\n if (!byCategory.has(entry.category)) {\n byCategory.set(entry.category, []);\n }\n byCategory.get(entry.category)!.push(entry);\n }\n\n const categoryTitles: Record<ChangeCategory, string> = {\n content: 'Content Changes',\n formatting: 'Formatting Changes',\n structural: 'Structural Changes',\n table: 'Table Changes',\n hyperlink: 'Hyperlink Changes',\n image: 'Image Changes',\n field: 'Field Changes',\n comment: 'Comment Changes',\n bookmark: 'Bookmark Changes',\n contentControl: 'Content Control Changes',\n };\n\n for (const [category, categoryEntries] of byCategory) {\n if (categoryEntries.length === 0) continue;\n\n lines.push(`## ${categoryTitles[category]}`);\n lines.push('');\n\n for (const entry of categoryEntries) {\n const date = entry.date.toLocaleDateString();\n lines.push(`- ${entry.description} *(${entry.author}, ${date})*`);\n\n if (entry.content.before) {\n lines.push(` - Removed: \"${entry.content.before}\"`);\n }\n if (entry.content.after) {\n lines.push(` - Added: \"${entry.content.after}\"`);\n }\n }\n\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Export changelog to plain text format.\n *\n * @param entries - Array of changelog entries\n * @returns Plain text string\n */\n static toPlainText(entries: ChangeEntry[]): string {\n const lines: string[] = [];\n\n lines.push('DOCUMENT CHANGES');\n lines.push('================');\n lines.push('');\n\n for (const entry of entries) {\n const date = entry.date.toLocaleDateString();\n lines.push(`[${date}] ${entry.author}: ${entry.description}`);\n\n if (entry.content.before) {\n lines.push(` - ${entry.content.before}`);\n }\n if (entry.content.after) {\n lines.push(` + ${entry.content.after}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Export changelog to JSON (for programmatic consumption).\n *\n * @param entries - Array of changelog entries\n * @returns JSON string\n */\n static toJSON(entries: ChangeEntry[]): string {\n return JSON.stringify(\n {\n generated: new Date().toISOString(),\n summary: this.getSummary(entries),\n entries,\n },\n null,\n 2\n );\n }\n\n // ============================================================\n // Unified API (Phase 2 Enhancement)\n // ============================================================\n\n /**\n * Unified changelog generation - single entry point for all formats.\n *\n * Generates changelog from a document in the specified format.\n * This is the recommended method for most use cases.\n *\n * @param doc - Document to extract revisions from\n * @param options - Generation options including format\n * @returns Formatted changelog string\n *\n * @example\n * ```typescript\n * // Generate Markdown changelog\n * const md = ChangelogGenerator.generate(doc, { format: 'markdown' });\n *\n * // Generate HTML changelog\n * const html = ChangelogGenerator.generate(doc, { format: 'html' });\n *\n * // Generate CSV with filtering\n * const csv = ChangelogGenerator.generate(doc, {\n * format: 'csv',\n * filterAuthors: ['John Doe'],\n * sortBy: 'date',\n * sortOrder: 'desc'\n * });\n * ```\n */\n static generate(doc: Document, options?: ChangelogOptions): string {\n const logger = getLogger();\n const format = options?.format || 'markdown';\n\n logger.info('Generating changelog', { format });\n\n // Get entries with filtering\n let entries = this.fromDocument(doc, options);\n\n // Apply sorting if specified\n if (options?.sortBy) {\n entries = this.sortEntries(entries, options.sortBy, options.sortOrder || 'asc');\n }\n\n logger.info('Changelog entries processed', {\n entries: entries.length,\n format,\n sorted: !!options?.sortBy,\n });\n\n // Generate output in specified format\n switch (format) {\n case 'json':\n return this.toJSON(entries);\n case 'markdown':\n return this.toMarkdown(entries, { includeMetadata: true });\n case 'text':\n return this.toPlainText(entries);\n case 'html':\n return this.toHTML(entries, options);\n case 'csv':\n return this.toCSV(entries);\n default:\n return this.toMarkdown(entries);\n }\n }\n\n /**\n * Export changelog to HTML format.\n *\n * Generates a complete HTML document with styling and structure.\n *\n * @param entries - Array of changelog entries\n * @param options - HTML generation options\n * @returns Complete HTML document string\n *\n * @example\n * ```typescript\n * const html = ChangelogGenerator.toHTML(entries);\n * fs.writeFileSync('changelog.html', html);\n * ```\n */\n static toHTML(entries: ChangeEntry[], _options?: ChangelogOptions): string {\n const summary = this.getSummary(entries);\n\n // Group entries by category\n const byCategory = new Map<ChangeCategory, ChangeEntry[]>();\n for (const entry of entries) {\n if (!byCategory.has(entry.category)) {\n byCategory.set(entry.category, []);\n }\n byCategory.get(entry.category)!.push(entry);\n }\n\n const categoryTitles: Record<ChangeCategory, string> = {\n content: 'Content Changes',\n formatting: 'Formatting Changes',\n structural: 'Structural Changes',\n table: 'Table Changes',\n hyperlink: 'Hyperlink Changes',\n image: 'Image Changes',\n field: 'Field Changes',\n comment: 'Comment Changes',\n bookmark: 'Bookmark Changes',\n contentControl: 'Content Control Changes',\n };\n\n // Build HTML\n let html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Document Changes</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n max-width: 900px;\n margin: 0 auto;\n padding: 20px;\n line-height: 1.6;\n color: #333;\n }\n h1 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }\n h2 { color: #34495e; margin-top: 30px; }\n .summary { background: #f8f9fa; padding: 15px; border-radius: 8px; margin-bottom: 20px; }\n .summary p { margin: 5px 0; }\n .category { margin-bottom: 30px; }\n .change-list { list-style: none; padding: 0; }\n .change-item {\n background: #fff;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 12px 15px;\n margin-bottom: 10px;\n }\n .change-item:hover { box-shadow: 0 2px 5px rgba(0,0,0,0.1); }\n .change-description { font-weight: 500; color: #2c3e50; }\n .change-meta { font-size: 0.85em; color: #7f8c8d; margin-top: 5px; }\n .change-content { margin-top: 8px; font-size: 0.9em; }\n .removed { color: #c0392b; text-decoration: line-through; }\n .added { color: #27ae60; }\n .badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 0.75em;\n font-weight: 600;\n text-transform: uppercase;\n }\n .badge-insert { background: #d4edda; color: #155724; }\n .badge-delete { background: #f8d7da; color: #721c24; }\n .badge-formatting { background: #cce5ff; color: #004085; }\n .badge-structural { background: #fff3cd; color: #856404; }\n .badge-table { background: #e2e3e5; color: #383d41; }\n </style>\n</head>\n<body>\n <h1>Document Changes</h1>\n\n <div class=\"summary\">\n <p><strong>Total Changes:</strong> ${summary.total}</p>`;\n\n if (summary.dateRange) {\n html += `\n <p><strong>Date Range:</strong> ${summary.dateRange.earliest.toLocaleDateString()} - ${summary.dateRange.latest.toLocaleDateString()}</p>`;\n }\n\n const authors = Object.keys(summary.byAuthor);\n if (authors.length > 0) {\n html += `\n <p><strong>Authors:</strong> ${authors.join(', ')}</p>`;\n }\n\n html += `\n </div>\n`;\n\n // Add sections by category\n for (const [category, categoryEntries] of byCategory) {\n if (categoryEntries.length === 0) continue;\n\n html += `\n <section class=\"category\">\n <h2>${categoryTitles[category]}</h2>\n <ul class=\"change-list\">`;\n\n for (const entry of categoryEntries) {\n const badgeClass = this.getBadgeClass(entry.revisionType);\n const date = entry.date.toLocaleDateString();\n\n html += `\n <li class=\"change-item\">\n <span class=\"badge ${badgeClass}\">${entry.revisionType}</span>\n <div class=\"change-description\">${this.escapeHTML(entry.description)}</div>\n <div class=\"change-meta\">${this.escapeHTML(entry.author)} - ${date}</div>`;\n\n if (entry.content.before || entry.content.after) {\n html += `\n <div class=\"change-content\">`;\n if (entry.content.before) {\n html += `<span class=\"removed\">${this.escapeHTML(entry.content.before || '')}</span> `;\n }\n if (entry.content.after) {\n html += `<span class=\"added\">${this.escapeHTML(entry.content.after || '')}</span>`;\n }\n html += `</div>`;\n }\n\n html += `\n </li>`;\n }\n\n html += `\n </ul>\n </section>`;\n }\n\n html += `\n</body>\n</html>`;\n\n return html;\n }\n\n /**\n * Export changelog to CSV format.\n *\n * Generates CSV data suitable for spreadsheet applications.\n *\n * @param entries - Array of changelog entries\n * @param options - CSV generation options\n * @returns CSV string\n *\n * @example\n * ```typescript\n * const csv = ChangelogGenerator.toCSV(entries);\n * fs.writeFileSync('changelog.csv', csv);\n * ```\n */\n static toCSV(\n entries: ChangeEntry[],\n options?: {\n delimiter?: string;\n includeHeaders?: boolean;\n }\n ): string {\n const delimiter = options?.delimiter || ',';\n const includeHeaders = options?.includeHeaders !== false;\n\n const headers = [\n 'ID',\n 'Type',\n 'Category',\n 'Author',\n 'Date',\n 'Description',\n 'Before',\n 'After',\n 'Paragraph',\n 'Run',\n ];\n\n const lines: string[] = [];\n\n if (includeHeaders) {\n lines.push(headers.join(delimiter));\n }\n\n for (const entry of entries) {\n const row = [\n entry.id,\n entry.revisionType,\n entry.category,\n this.escapeCSV(entry.author),\n entry.date.toISOString(),\n this.escapeCSV(entry.description),\n this.escapeCSV(entry.content.before || ''),\n this.escapeCSV(entry.content.after || ''),\n entry.location.paragraphIndex?.toString() || '',\n entry.location.runIndex?.toString() || '',\n ];\n lines.push(row.join(delimiter));\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Get timeline view - changes organized by date.\n *\n * Groups changelog entries by date (YYYY-MM-DD) for timeline visualization.\n *\n * @param entries - Array of changelog entries\n * @returns Map of date strings to entries for that date\n *\n * @example\n * ```typescript\n * const timeline = ChangelogGenerator.getTimeline(entries);\n * for (const [date, dayEntries] of timeline) {\n * console.log(`${date}: ${dayEntries.length} changes`);\n * }\n * ```\n */\n static getTimeline(entries: ChangeEntry[]): Map<string, ChangeEntry[]> {\n const timeline = new Map<string, ChangeEntry[]>();\n\n for (const entry of entries) {\n const dateKey = entry.date.toISOString().split('T')[0]!; // YYYY-MM-DD\n if (!timeline.has(dateKey)) {\n timeline.set(dateKey, []);\n }\n timeline.get(dateKey)!.push(entry);\n }\n\n // Sort the map by date\n const sortedTimeline = new Map<string, ChangeEntry[]>(\n [...timeline.entries()].sort((a, b) => a[0].localeCompare(b[0]))\n );\n\n return sortedTimeline;\n }\n\n /**\n * Get summary by element type.\n *\n * Groups entries by the type of document element they affect.\n *\n * @param entries - Array of changelog entries\n * @returns Object with entries grouped by element type\n */\n static getSummaryByElement(entries: ChangeEntry[]): {\n paragraphs: ChangeEntry[];\n tables: ChangeEntry[];\n sections: ChangeEntry[];\n runs: ChangeEntry[];\n hyperlinks: ChangeEntry[];\n } {\n return {\n paragraphs: entries.filter(\n (e) =>\n e.revisionType === 'paragraphPropertiesChange' ||\n e.revisionType === 'numberingChange' ||\n (e.revisionType === 'insert' && !e.location.runIndex) ||\n (e.revisionType === 'delete' && !e.location.runIndex)\n ),\n tables: entries.filter((e) =>\n [\n 'tablePropertiesChange',\n 'tableRowPropertiesChange',\n 'tableCellPropertiesChange',\n 'tableExceptionPropertiesChange',\n 'tableCellInsert',\n 'tableCellDelete',\n 'tableCellMerge',\n ].includes(e.revisionType)\n ),\n sections: entries.filter((e) => e.revisionType === 'sectionPropertiesChange'),\n runs: entries.filter(\n (e) =>\n e.revisionType === 'runPropertiesChange' ||\n (e.revisionType === 'insert' && e.location.runIndex !== undefined) ||\n (e.revisionType === 'delete' && e.location.runIndex !== undefined)\n ),\n hyperlinks: entries.filter((e) => e.revisionType === 'hyperlinkChange'),\n };\n }\n\n // ============================================================\n // Helper Methods\n // ============================================================\n\n /**\n * Sort entries by specified field.\n * @internal\n */\n private static sortEntries(\n entries: ChangeEntry[],\n sortBy: 'date' | 'author' | 'type' | 'category',\n order: 'asc' | 'desc'\n ): ChangeEntry[] {\n const sorted = [...entries].sort((a, b) => {\n let comparison = 0;\n\n switch (sortBy) {\n case 'date':\n comparison = a.date.getTime() - b.date.getTime();\n break;\n case 'author':\n comparison = a.author.localeCompare(b.author);\n break;\n case 'type':\n comparison = a.revisionType.localeCompare(b.revisionType);\n break;\n case 'category':\n comparison = a.category.localeCompare(b.category);\n break;\n }\n\n return order === 'desc' ? -comparison : comparison;\n });\n\n return sorted;\n }\n\n /**\n * Get CSS badge class for revision type.\n * @internal\n */\n private static getBadgeClass(type: RevisionType): string {\n switch (type) {\n case 'insert':\n case 'moveTo':\n case 'tableCellInsert':\n return 'badge-insert';\n case 'delete':\n case 'moveFrom':\n case 'tableCellDelete':\n return 'badge-delete';\n case 'runPropertiesChange':\n case 'paragraphPropertiesChange':\n case 'numberingChange':\n return 'badge-formatting';\n case 'sectionPropertiesChange':\n return 'badge-structural';\n case 'tablePropertiesChange':\n case 'tableRowPropertiesChange':\n case 'tableCellPropertiesChange':\n case 'tableCellMerge':\n return 'badge-table';\n default:\n return 'badge-formatting';\n }\n }\n\n /**\n * Escape HTML special characters.\n * @internal\n */\n private static escapeHTML(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n /**\n * Escape CSV special characters.\n * @internal\n */\n private static escapeCSV(str: string): string {\n // If string contains delimiter, newline, or quotes, wrap in quotes\n if (str.includes(',') || str.includes('\\n') || str.includes('\"')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n }\n}\n"]}