@usejunior/docx-core 0.10.0 → 0.11.0

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 (232) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +2 -0
  3. package/README.md +2 -2
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/atomizer.d.ts +13 -7
  6. package/dist/atomizer.d.ts.map +1 -1
  7. package/dist/atomizer.js +59 -24
  8. package/dist/atomizer.js.map +1 -1
  9. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +99 -0
  10. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +1 -0
  11. package/dist/baselines/atomizer/auxiliaryIdCollision.js +415 -0
  12. package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +1 -0
  13. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
  14. package/dist/baselines/atomizer/documentReconstructor.js +120 -27
  15. package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
  16. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +9 -0
  17. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +1 -1
  18. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +52 -4
  19. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +1 -1
  20. package/dist/baselines/atomizer/pipeline.d.ts +12 -53
  21. package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
  22. package/dist/baselines/atomizer/pipeline.js +126 -231
  23. package/dist/baselines/atomizer/pipeline.js.map +1 -1
  24. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
  25. package/dist/baselines/atomizer/trackChangesAcceptorAst.js +153 -23
  26. package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
  27. package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -1
  28. package/dist/baselines/wmlcomparer/DotnetCli.js +7 -0
  29. package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -1
  30. package/dist/cli/compare-two.d.ts.map +1 -1
  31. package/dist/cli/compare-two.js +3 -1
  32. package/dist/cli/compare-two.js.map +1 -1
  33. package/dist/cli/conformance-adapter.d.ts +3 -0
  34. package/dist/cli/conformance-adapter.d.ts.map +1 -0
  35. package/dist/cli/conformance-adapter.js +93 -0
  36. package/dist/cli/conformance-adapter.js.map +1 -0
  37. package/dist/cli/index.d.ts.map +1 -1
  38. package/dist/cli/index.js +5 -1
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/compare-types.d.ts +46 -0
  41. package/dist/compare-types.d.ts.map +1 -1
  42. package/dist/generation/compile.d.ts +21 -0
  43. package/dist/generation/compile.d.ts.map +1 -0
  44. package/dist/generation/compile.js +46 -0
  45. package/dist/generation/compile.js.map +1 -0
  46. package/dist/generation/context.d.ts +42 -0
  47. package/dist/generation/context.d.ts.map +1 -0
  48. package/dist/generation/context.js +65 -0
  49. package/dist/generation/context.js.map +1 -0
  50. package/dist/generation/emit/comments-part.d.ts +36 -0
  51. package/dist/generation/emit/comments-part.d.ts.map +1 -0
  52. package/dist/generation/emit/comments-part.js +116 -0
  53. package/dist/generation/emit/comments-part.js.map +1 -0
  54. package/dist/generation/emit/document-part.d.ts +24 -0
  55. package/dist/generation/emit/document-part.d.ts.map +1 -0
  56. package/dist/generation/emit/document-part.js +60 -0
  57. package/dist/generation/emit/document-part.js.map +1 -0
  58. package/dist/generation/emit/emit-context.d.ts +26 -0
  59. package/dist/generation/emit/emit-context.d.ts.map +1 -0
  60. package/dist/generation/emit/emit-context.js +19 -0
  61. package/dist/generation/emit/emit-context.js.map +1 -0
  62. package/dist/generation/emit/header-footer-part.d.ts +23 -0
  63. package/dist/generation/emit/header-footer-part.d.ts.map +1 -0
  64. package/dist/generation/emit/header-footer-part.js +57 -0
  65. package/dist/generation/emit/header-footer-part.js.map +1 -0
  66. package/dist/generation/emit/numbering-part.d.ts +29 -0
  67. package/dist/generation/emit/numbering-part.d.ts.map +1 -0
  68. package/dist/generation/emit/numbering-part.js +100 -0
  69. package/dist/generation/emit/numbering-part.js.map +1 -0
  70. package/dist/generation/emit/package-parts.d.ts +24 -0
  71. package/dist/generation/emit/package-parts.d.ts.map +1 -0
  72. package/dist/generation/emit/package-parts.js +121 -0
  73. package/dist/generation/emit/package-parts.js.map +1 -0
  74. package/dist/generation/emit/paragraph.d.ts +24 -0
  75. package/dist/generation/emit/paragraph.d.ts.map +1 -0
  76. package/dist/generation/emit/paragraph.js +63 -0
  77. package/dist/generation/emit/paragraph.js.map +1 -0
  78. package/dist/generation/emit/properties.d.ts +34 -0
  79. package/dist/generation/emit/properties.d.ts.map +1 -0
  80. package/dist/generation/emit/properties.js +138 -0
  81. package/dist/generation/emit/properties.js.map +1 -0
  82. package/dist/generation/emit/run.d.ts +15 -0
  83. package/dist/generation/emit/run.d.ts.map +1 -0
  84. package/dist/generation/emit/run.js +71 -0
  85. package/dist/generation/emit/run.js.map +1 -0
  86. package/dist/generation/emit/section.d.ts +29 -0
  87. package/dist/generation/emit/section.d.ts.map +1 -0
  88. package/dist/generation/emit/section.js +117 -0
  89. package/dist/generation/emit/section.js.map +1 -0
  90. package/dist/generation/emit/settings-part.d.ts +13 -0
  91. package/dist/generation/emit/settings-part.d.ts.map +1 -0
  92. package/dist/generation/emit/settings-part.js +24 -0
  93. package/dist/generation/emit/settings-part.js.map +1 -0
  94. package/dist/generation/emit/styles-part.d.ts +16 -0
  95. package/dist/generation/emit/styles-part.d.ts.map +1 -0
  96. package/dist/generation/emit/styles-part.js +80 -0
  97. package/dist/generation/emit/styles-part.js.map +1 -0
  98. package/dist/generation/emit/table.d.ts +26 -0
  99. package/dist/generation/emit/table.d.ts.map +1 -0
  100. package/dist/generation/emit/table.js +196 -0
  101. package/dist/generation/emit/table.js.map +1 -0
  102. package/dist/generation/errors.d.ts +22 -0
  103. package/dist/generation/errors.d.ts.map +1 -0
  104. package/dist/generation/errors.js +29 -0
  105. package/dist/generation/errors.js.map +1 -0
  106. package/dist/generation/index.d.ts +13 -0
  107. package/dist/generation/index.d.ts.map +1 -0
  108. package/dist/generation/index.js +12 -0
  109. package/dist/generation/index.js.map +1 -0
  110. package/dist/generation/ordering.d.ts +46 -0
  111. package/dist/generation/ordering.d.ts.map +1 -0
  112. package/dist/generation/ordering.js +119 -0
  113. package/dist/generation/ordering.js.map +1 -0
  114. package/dist/generation/recipes.d.ts +47 -0
  115. package/dist/generation/recipes.d.ts.map +1 -0
  116. package/dist/generation/recipes.js +84 -0
  117. package/dist/generation/recipes.js.map +1 -0
  118. package/dist/generation/structural-checks.d.ts +24 -0
  119. package/dist/generation/structural-checks.d.ts.map +1 -0
  120. package/dist/generation/structural-checks.js +318 -0
  121. package/dist/generation/structural-checks.js.map +1 -0
  122. package/dist/generation/types.d.ts +217 -0
  123. package/dist/generation/types.d.ts.map +1 -0
  124. package/dist/generation/types.js +16 -0
  125. package/dist/generation/types.js.map +1 -0
  126. package/dist/generation/validate-spec.d.ts +27 -0
  127. package/dist/generation/validate-spec.d.ts.map +1 -0
  128. package/dist/generation/validate-spec.js +307 -0
  129. package/dist/generation/validate-spec.js.map +1 -0
  130. package/dist/index.d.ts +3 -0
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +8 -0
  133. package/dist/index.js.map +1 -1
  134. package/dist/integration/generation-probes.d.ts +15 -0
  135. package/dist/integration/generation-probes.d.ts.map +1 -0
  136. package/dist/integration/generation-probes.js +84 -0
  137. package/dist/integration/generation-probes.js.map +1 -0
  138. package/dist/integration/libreoffice-oracle.d.ts +8 -0
  139. package/dist/integration/libreoffice-oracle.d.ts.map +1 -1
  140. package/dist/integration/libreoffice-oracle.js +14 -6
  141. package/dist/integration/libreoffice-oracle.js.map +1 -1
  142. package/dist/integration/synthetic-docx-fixture.d.ts +72 -0
  143. package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
  144. package/dist/integration/synthetic-docx-fixture.js +131 -4
  145. package/dist/integration/synthetic-docx-fixture.js.map +1 -1
  146. package/dist/primitives/accept_changes.d.ts +2 -1
  147. package/dist/primitives/accept_changes.d.ts.map +1 -1
  148. package/dist/primitives/accept_changes.js +153 -12
  149. package/dist/primitives/accept_changes.js.map +1 -1
  150. package/dist/primitives/document.d.ts +38 -0
  151. package/dist/primitives/document.d.ts.map +1 -1
  152. package/dist/primitives/document.js +75 -9
  153. package/dist/primitives/document.js.map +1 -1
  154. package/dist/primitives/document_view-comments.d.ts.map +1 -1
  155. package/dist/primitives/document_view-comments.js +4 -3
  156. package/dist/primitives/document_view-comments.js.map +1 -1
  157. package/dist/primitives/document_view-types.d.ts +15 -0
  158. package/dist/primitives/document_view-types.d.ts.map +1 -1
  159. package/dist/primitives/document_view.d.ts.map +1 -1
  160. package/dist/primitives/document_view.js +21 -13
  161. package/dist/primitives/document_view.js.map +1 -1
  162. package/dist/primitives/formatting_tags.d.ts +1 -0
  163. package/dist/primitives/formatting_tags.d.ts.map +1 -1
  164. package/dist/primitives/formatting_tags.js +16 -10
  165. package/dist/primitives/formatting_tags.js.map +1 -1
  166. package/dist/primitives/index.d.ts +4 -0
  167. package/dist/primitives/index.d.ts.map +1 -1
  168. package/dist/primitives/index.js +4 -0
  169. package/dist/primitives/index.js.map +1 -1
  170. package/dist/primitives/layout.d.ts.map +1 -1
  171. package/dist/primitives/layout.js +13 -0
  172. package/dist/primitives/layout.js.map +1 -1
  173. package/dist/primitives/minimal_save.d.ts +38 -0
  174. package/dist/primitives/minimal_save.d.ts.map +1 -0
  175. package/dist/primitives/minimal_save.js +323 -0
  176. package/dist/primitives/minimal_save.js.map +1 -0
  177. package/dist/primitives/namespaces.d.ts +41 -0
  178. package/dist/primitives/namespaces.d.ts.map +1 -1
  179. package/dist/primitives/namespaces.js +43 -0
  180. package/dist/primitives/namespaces.js.map +1 -1
  181. package/dist/primitives/reject_changes.d.ts +4 -2
  182. package/dist/primitives/reject_changes.d.ts.map +1 -1
  183. package/dist/primitives/reject_changes.js +177 -24
  184. package/dist/primitives/reject_changes.js.map +1 -1
  185. package/dist/primitives/revision-parts.d.ts +7 -0
  186. package/dist/primitives/revision-parts.d.ts.map +1 -0
  187. package/dist/primitives/revision-parts.js +27 -0
  188. package/dist/primitives/revision-parts.js.map +1 -0
  189. package/dist/primitives/revision-vocabulary.d.ts +7 -0
  190. package/dist/primitives/revision-vocabulary.d.ts.map +1 -0
  191. package/dist/primitives/revision-vocabulary.js +39 -0
  192. package/dist/primitives/revision-vocabulary.js.map +1 -0
  193. package/dist/primitives/schema-corpus-capture.d.ts +19 -0
  194. package/dist/primitives/schema-corpus-capture.d.ts.map +1 -0
  195. package/dist/primitives/schema-corpus-capture.js +29 -0
  196. package/dist/primitives/schema-corpus-capture.js.map +1 -0
  197. package/dist/primitives/sectPrAudit.d.ts +19 -0
  198. package/dist/primitives/sectPrAudit.d.ts.map +1 -0
  199. package/dist/primitives/sectPrAudit.js +165 -0
  200. package/dist/primitives/sectPrAudit.js.map +1 -0
  201. package/dist/primitives/semantic_tags.d.ts.map +1 -1
  202. package/dist/primitives/semantic_tags.js +2 -1
  203. package/dist/primitives/semantic_tags.js.map +1 -1
  204. package/dist/primitives/serialize_html.d.ts +1 -0
  205. package/dist/primitives/serialize_html.d.ts.map +1 -1
  206. package/dist/primitives/serialize_html.js +4 -2
  207. package/dist/primitives/serialize_html.js.map +1 -1
  208. package/dist/primitives/styles.d.ts +15 -0
  209. package/dist/primitives/styles.d.ts.map +1 -1
  210. package/dist/primitives/styles.js +11 -0
  211. package/dist/primitives/styles.js.map +1 -1
  212. package/dist/primitives/track-changes-emitter.d.ts +9 -0
  213. package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
  214. package/dist/primitives/track-changes-emitter.js +54 -4
  215. package/dist/primitives/track-changes-emitter.js.map +1 -1
  216. package/dist/primitives/validate_ai_revisions.d.ts +35 -0
  217. package/dist/primitives/validate_ai_revisions.d.ts.map +1 -0
  218. package/dist/primitives/validate_ai_revisions.js +323 -0
  219. package/dist/primitives/validate_ai_revisions.js.map +1 -0
  220. package/dist/primitives/xml.d.ts +5 -0
  221. package/dist/primitives/xml.d.ts.map +1 -1
  222. package/dist/primitives/xml.js +5 -0
  223. package/dist/primitives/xml.js.map +1 -1
  224. package/dist/primitives/zip.d.ts +1 -0
  225. package/dist/primitives/zip.d.ts.map +1 -1
  226. package/dist/primitives/zip.js +21 -3
  227. package/dist/primitives/zip.js.map +1 -1
  228. package/dist/shared/field-structure.d.ts +14 -0
  229. package/dist/shared/field-structure.d.ts.map +1 -0
  230. package/dist/shared/field-structure.js +166 -0
  231. package/dist/shared/field-structure.js.map +1 -0
  232. package/package.json +7 -4
@@ -0,0 +1,415 @@
1
+ /**
2
+ * Auxiliary Part ID Collision Resolution
3
+ *
4
+ * Auxiliary part IDs (`w:id` on comments, footnotes, endnotes — OOXML
5
+ * ST_DecimalNumber) are document-local: independently authored documents
6
+ * routinely both start at `w:id="1"`. When the original and revised inputs
7
+ * define *different* content under the same ID, the post-reconstruction
8
+ * definition merge used to silently skip the source-side definition ("ID
9
+ * already present"), leaving anchors from one side bound to the other side's
10
+ * content.
11
+ *
12
+ * Strategy decision (issue #107 offered renumber vs. detect-and-flag): we
13
+ * renumber, because detect-and-flag would fail comparisons between any two
14
+ * independently authored commented documents — a core use case — and there is
15
+ * no collision-free fallback mode to flag into. Renumbering happens *before*
16
+ * comparison, on the revised archive, rather than inside the merge step:
17
+ * after reconstruction the merged document.xml no longer records which anchor
18
+ * came from which side, but at load time the revised archive can be rewritten
19
+ * consistently (part definition + every ID-bearing anchor in document.xml,
20
+ * header/footer parts, and the note stories — comments may be anchored on
21
+ * footnote/endnote text). Downstream, colliding anchors then differ by ID, so
22
+ * the LCS emits them as delete/insert pairs and the existing definition merge
23
+ * imports the renumbered definition — each anchor resolves to the content it
24
+ * was authored against, in both reconstruction modes.
25
+ *
26
+ * IDs whose definitions are content-identical on both sides are left alone so
27
+ * their anchors still match as unchanged content (no duplicate definitions),
28
+ * which keeps the common derived-document case byte-stable.
29
+ *
30
+ * Comment ancillary parts have a second collision axis: commentsExtended.xml
31
+ * and commentsIds.xml are keyed by the w14:paraId on comment-content
32
+ * paragraphs, not by w:id. We restamp colliding revised-side comment paraIds
33
+ * before comparison for the same reason: merged ancillary rows must never bind
34
+ * to the other document's comment paragraph.
35
+ *
36
+ * @see https://github.com/UseJunior/safe-docx/issues/107
37
+ * @see https://github.com/UseJunior/safe-docx/issues/448
38
+ */
39
+ import { XMLSerializer } from '@xmldom/xmldom';
40
+ import { parseXml } from '../../primitives/xml.js';
41
+ const serializer = new XMLSerializer();
42
+ export const AUXILIARY_PARTS = [
43
+ {
44
+ label: 'footnote',
45
+ partPath: 'word/footnotes.xml',
46
+ referenceTag: 'w:footnoteReference',
47
+ entryTag: 'w:footnote',
48
+ rootTag: 'w:footnotes',
49
+ contentType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml',
50
+ relationshipType: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes',
51
+ idBearingTags: ['w:footnoteReference'],
52
+ },
53
+ {
54
+ label: 'endnote',
55
+ partPath: 'word/endnotes.xml',
56
+ referenceTag: 'w:endnoteReference',
57
+ entryTag: 'w:endnote',
58
+ rootTag: 'w:endnotes',
59
+ contentType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml',
60
+ relationshipType: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes',
61
+ idBearingTags: ['w:endnoteReference'],
62
+ },
63
+ {
64
+ label: 'comment',
65
+ partPath: 'word/comments.xml',
66
+ referenceTag: 'w:commentReference',
67
+ entryTag: 'w:comment',
68
+ rootTag: 'w:comments',
69
+ contentType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml',
70
+ relationshipType: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',
71
+ idBearingTags: ['w:commentReference', 'w:commentRangeStart', 'w:commentRangeEnd'],
72
+ },
73
+ ];
74
+ /**
75
+ * Parse an auxiliary part and extract entry elements by ID.
76
+ */
77
+ export function parseEntries(xml, entryTag) {
78
+ const doc = parseXml(xml);
79
+ const entries = new Map();
80
+ const elements = doc.getElementsByTagName(entryTag);
81
+ for (let i = 0; i < elements.length; i++) {
82
+ const el = elements[i];
83
+ const id = el.getAttribute('w:id');
84
+ if (id)
85
+ entries.set(id, el);
86
+ }
87
+ return { doc, entries };
88
+ }
89
+ /**
90
+ * Footnote/endnote separator entries exist in virtually every document and
91
+ * are never anchored from document.xml; renumbering them would only churn
92
+ * IDs Word expects to find.
93
+ */
94
+ function isSeparatorEntry(el) {
95
+ const type = el.getAttribute('w:type');
96
+ return type === 'separator' || type === 'continuationSeparator';
97
+ }
98
+ function trackMaxNumericId(value, current) {
99
+ if (!value)
100
+ return current;
101
+ const parsed = Number.parseInt(value, 10);
102
+ if (!Number.isSafeInteger(parsed))
103
+ return current;
104
+ return Math.max(current, parsed);
105
+ }
106
+ /** Lazily-parsed XML file inside an archive, serialized back only if touched. */
107
+ class LazyArchiveXml {
108
+ archive;
109
+ path;
110
+ xml;
111
+ parsed = null;
112
+ dirty = false;
113
+ constructor(archive, path, xml) {
114
+ this.archive = archive;
115
+ this.path = path;
116
+ this.xml = xml;
117
+ }
118
+ doc() {
119
+ if (!this.parsed)
120
+ this.parsed = parseXml(this.xml);
121
+ return this.parsed;
122
+ }
123
+ /** Rewrite matching attributes on every `tag` element per `valueMap`. */
124
+ applyAttributeMap(tags, attrName, valueMap, normalizeKey = (value) => value) {
125
+ if (valueMap.size === 0)
126
+ return;
127
+ for (const tag of tags) {
128
+ const elements = this.doc().getElementsByTagName(tag);
129
+ for (let i = 0; i < elements.length; i++) {
130
+ const el = elements[i];
131
+ const value = el.getAttribute(attrName);
132
+ if (value === null)
133
+ continue;
134
+ const replacement = valueMap.get(normalizeKey(value));
135
+ if (replacement) {
136
+ el.setAttribute(attrName, replacement);
137
+ this.dirty = true;
138
+ }
139
+ }
140
+ }
141
+ }
142
+ /** Rewrite `w:id` on every `tag` element per `idMap`. */
143
+ applyIdMap(tags, idMap) {
144
+ this.applyAttributeMap(tags, 'w:id', idMap);
145
+ }
146
+ flush() {
147
+ if (!this.dirty || !this.parsed)
148
+ return;
149
+ // xmldom 0.9 keeps the source's XML declaration as a document child, so
150
+ // plain serialization round-trips it.
151
+ this.archive.setFile(this.path, serializer.serializeToString(this.parsed));
152
+ }
153
+ }
154
+ /**
155
+ * Detect auxiliary `w:id` values defined with different content on both
156
+ * sides and renumber the revised side's definitions and anchors into a fresh
157
+ * ID space, so the comparison never binds an anchor to the other document's
158
+ * content. Mutates `revisedArchive` in place; the originals' IDs are kept so
159
+ * the comparison base (rebuild mode clones the original archive) stays
160
+ * untouched.
161
+ *
162
+ * Anchors are rewritten in every revised-side story that can carry them:
163
+ * document.xml, header/footer parts, and the auxiliary parts themselves —
164
+ * Word allows comments anchored on footnote/endnote text, so a renumbered
165
+ * comment's anchor may live inside footnotes.xml/endnotes.xml.
166
+ *
167
+ * Returns the applied renumberings (empty on the no-collision fast path).
168
+ */
169
+ export async function renumberCollidingAuxiliaryIds(originalArchive, revisedArchive) {
170
+ // Phase 1: detect collisions per descriptor (read-only).
171
+ const plans = [];
172
+ const originalEntryIds = new Map();
173
+ for (const descriptor of AUXILIARY_PARTS) {
174
+ const [originalPartXml, revisedPartXml] = await Promise.all([
175
+ originalArchive.getFile(descriptor.partPath),
176
+ revisedArchive.getFile(descriptor.partPath),
177
+ ]);
178
+ // A collision needs a definition on both sides.
179
+ if (!originalPartXml || !revisedPartXml)
180
+ continue;
181
+ const originalParsed = parseEntries(originalPartXml, descriptor.entryTag);
182
+ const revisedParsed = parseEntries(revisedPartXml, descriptor.entryTag);
183
+ originalEntryIds.set(descriptor.label, new Set(originalParsed.entries.keys()));
184
+ const collidingIds = [];
185
+ for (const [id, revisedEntry] of revisedParsed.entries) {
186
+ const originalEntry = originalParsed.entries.get(id);
187
+ if (!originalEntry)
188
+ continue;
189
+ if (isSeparatorEntry(originalEntry) || isSeparatorEntry(revisedEntry))
190
+ continue;
191
+ // Both parts went through the same parse, so serialization is a
192
+ // canonical-enough content identity. xmldom preserves source attribute
193
+ // order, so two byte-different but semantically identical entries DO
194
+ // mismatch — intentionally accepted: a false mismatch only costs an
195
+ // unnecessary renumber (both definitions ship as a delete/insert
196
+ // anchor pair), never a wrong binding.
197
+ if (serializer.serializeToString(originalEntry) === serializer.serializeToString(revisedEntry)) {
198
+ continue;
199
+ }
200
+ collidingIds.push(id);
201
+ }
202
+ if (collidingIds.length > 0)
203
+ plans.push({ descriptor, collidingIds });
204
+ }
205
+ if (plans.length === 0)
206
+ return [];
207
+ // Phase 2: rewrite. Load every revised-side story file that can define or
208
+ // anchor auxiliary content; each descriptor's definitions AND anchors are
209
+ // rewritten through this one set of parsed docs so later descriptors can't
210
+ // clobber earlier rewrites of the same file.
211
+ const rewriteFiles = new Map();
212
+ const rewritePaths = [
213
+ 'word/document.xml',
214
+ ...revisedArchive.listFiles().filter((p) => /^word\/(?:header|footer)\d*\.xml$/.test(p)),
215
+ ...AUXILIARY_PARTS.map((d) => d.partPath),
216
+ ];
217
+ for (const path of rewritePaths) {
218
+ const xml = await revisedArchive.getFile(path);
219
+ if (xml)
220
+ rewriteFiles.set(path, new LazyArchiveXml(revisedArchive, path, xml));
221
+ }
222
+ const originalDocumentDoc = parseXml(await originalArchive.getDocumentXml());
223
+ const renumbered = [];
224
+ for (const { descriptor, collidingIds } of plans) {
225
+ // Fresh IDs must clear every ID either side defines or references —
226
+ // the merged output part will contain the union of both sides.
227
+ let maxUsedId = 0;
228
+ const revisedPart = rewriteFiles.get(descriptor.partPath);
229
+ const entryElements = revisedPart.doc().getElementsByTagName(descriptor.entryTag);
230
+ for (let i = 0; i < entryElements.length; i++) {
231
+ maxUsedId = trackMaxNumericId(entryElements[i].getAttribute('w:id'), maxUsedId);
232
+ }
233
+ for (const id of originalEntryIds.get(descriptor.label) ?? []) {
234
+ maxUsedId = trackMaxNumericId(id, maxUsedId);
235
+ }
236
+ const anchorDocs = [originalDocumentDoc, ...Array.from(rewriteFiles.values(), (f) => f.doc())];
237
+ for (const doc of anchorDocs) {
238
+ for (const tag of descriptor.idBearingTags) {
239
+ const refs = doc.getElementsByTagName(tag);
240
+ for (let i = 0; i < refs.length; i++) {
241
+ maxUsedId = trackMaxNumericId(refs[i].getAttribute('w:id'), maxUsedId);
242
+ }
243
+ }
244
+ }
245
+ let nextId = maxUsedId + 1;
246
+ const idMap = new Map();
247
+ for (const fromId of collidingIds) {
248
+ const toId = String(nextId++);
249
+ idMap.set(fromId, toId);
250
+ renumbered.push({ label: descriptor.label, fromId, toId });
251
+ }
252
+ // Rewrite the revised part's definitions and every revised-side anchor
253
+ // that carries the part's IDs (the definition rewrite is safe as an
254
+ // id-map application: separator entries never enter the map).
255
+ revisedPart.applyIdMap([descriptor.entryTag], idMap);
256
+ for (const file of rewriteFiles.values()) {
257
+ file.applyIdMap(descriptor.idBearingTags, idMap);
258
+ }
259
+ }
260
+ for (const file of rewriteFiles.values())
261
+ file.flush();
262
+ return renumbered;
263
+ }
264
+ function normalizeParaId(value) {
265
+ return value.toUpperCase();
266
+ }
267
+ function collectCommentParaIdOwners(xml) {
268
+ const owners = new Map();
269
+ if (!xml)
270
+ return owners;
271
+ const doc = parseXml(xml);
272
+ const comments = doc.getElementsByTagName('w:comment');
273
+ for (let i = 0; i < comments.length; i++) {
274
+ const comment = comments[i];
275
+ const seenInComment = new Set();
276
+ const paragraphs = comment.getElementsByTagName('w:p');
277
+ for (let j = 0; j < paragraphs.length; j++) {
278
+ const paraId = paragraphs[j].getAttribute('w14:paraId');
279
+ if (!paraId)
280
+ continue;
281
+ const normalized = normalizeParaId(paraId);
282
+ if (seenInComment.has(normalized))
283
+ continue;
284
+ seenInComment.add(normalized);
285
+ const entries = owners.get(normalized);
286
+ if (entries)
287
+ entries.push(comment);
288
+ else
289
+ owners.set(normalized, [comment]);
290
+ }
291
+ }
292
+ return owners;
293
+ }
294
+ function collectAttributeValues(xml, tag, attrNames) {
295
+ const values = new Set();
296
+ if (!xml)
297
+ return values;
298
+ const doc = parseXml(xml);
299
+ const elements = doc.getElementsByTagName(tag);
300
+ for (let i = 0; i < elements.length; i++) {
301
+ const el = elements[i];
302
+ for (const attrName of attrNames) {
303
+ const value = el.getAttribute(attrName);
304
+ if (value)
305
+ values.add(normalizeParaId(value));
306
+ }
307
+ }
308
+ return values;
309
+ }
310
+ function collectUsedParaIds(xml, used) {
311
+ if (!xml)
312
+ return;
313
+ const paraIdAttrPattern = /(?:w14:paraId|w15:paraId|w15:paraIdParent|w16cid:paraId)\s*=\s*["']([0-9A-Fa-f]{1,8})["']/g;
314
+ for (const match of xml.matchAll(paraIdAttrPattern)) {
315
+ used.add(normalizeParaId(match[1]));
316
+ }
317
+ }
318
+ /**
319
+ * Restamp revised-side comment paragraph paraIds when they collide with
320
+ * original-side comment paraIds that belong to different comment content.
321
+ *
322
+ * This pass intentionally matches literal Word prefixes (`w14`, `w15`, and
323
+ * `w16cid`) for both DOM lookup and raw allocation scans, consistent with the
324
+ * rest of this module's prefix-literal auxiliary part handling. Mutates
325
+ * `revisedArchive` in place and returns the applied restamps.
326
+ *
327
+ * @see https://github.com/UseJunior/safe-docx/issues/448
328
+ */
329
+ export async function restampCollidingCommentParaIds(originalArchive, revisedArchive) {
330
+ const [originalCommentsXml, revisedCommentsXml, revisedCommentsExtendedXml, revisedCommentsIdsXml,] = await Promise.all([
331
+ originalArchive.getFile('word/comments.xml'),
332
+ revisedArchive.getFile('word/comments.xml'),
333
+ revisedArchive.getFile('word/commentsExtended.xml'),
334
+ revisedArchive.getFile('word/commentsIds.xml'),
335
+ ]);
336
+ if (!originalCommentsXml)
337
+ return [];
338
+ const originalOwners = collectCommentParaIdOwners(originalCommentsXml);
339
+ if (originalOwners.size === 0)
340
+ return [];
341
+ const revisedOwners = collectCommentParaIdOwners(revisedCommentsXml);
342
+ const collidingParaIds = new Set();
343
+ for (const [paraId, revisedOwnerEntries] of revisedOwners) {
344
+ const originalOwnerEntries = originalOwners.get(paraId);
345
+ if (!originalOwnerEntries)
346
+ continue;
347
+ if (originalOwnerEntries.length === 1 &&
348
+ revisedOwnerEntries.length === 1 &&
349
+ serializer.serializeToString(originalOwnerEntries[0]) ===
350
+ serializer.serializeToString(revisedOwnerEntries[0])) {
351
+ continue;
352
+ }
353
+ collidingParaIds.add(paraId);
354
+ }
355
+ const revisedBackedParaIds = new Set(revisedOwners.keys());
356
+ const revisedAncillaryParaIds = new Set();
357
+ for (const value of collectAttributeValues(revisedCommentsExtendedXml, 'w15:commentEx', ['w15:paraId', 'w15:paraIdParent'])) {
358
+ revisedAncillaryParaIds.add(value);
359
+ }
360
+ for (const value of collectAttributeValues(revisedCommentsIdsXml, 'w16cid:commentId', ['w16cid:paraId'])) {
361
+ revisedAncillaryParaIds.add(value);
362
+ }
363
+ for (const paraId of revisedAncillaryParaIds) {
364
+ if (!revisedBackedParaIds.has(paraId) && originalOwners.has(paraId)) {
365
+ collidingParaIds.add(paraId);
366
+ }
367
+ }
368
+ if (collidingParaIds.size === 0)
369
+ return [];
370
+ const usedParaIds = new Set();
371
+ const allocationScanPaths = [
372
+ 'word/comments.xml',
373
+ 'word/commentsExtended.xml',
374
+ 'word/commentsIds.xml',
375
+ 'word/document.xml',
376
+ ];
377
+ for (const archive of [originalArchive, revisedArchive]) {
378
+ await Promise.all(allocationScanPaths.map(async (path) => {
379
+ collectUsedParaIds(await archive.getFile(path), usedParaIds);
380
+ }));
381
+ }
382
+ const valueMap = new Map();
383
+ let next = 1;
384
+ for (const fromParaId of [...collidingParaIds].sort()) {
385
+ let toParaId;
386
+ do {
387
+ toParaId = next.toString(16).toUpperCase().padStart(8, '0');
388
+ next++;
389
+ } while (usedParaIds.has(toParaId) || toParaId === '00000000');
390
+ usedParaIds.add(toParaId);
391
+ valueMap.set(fromParaId, toParaId);
392
+ }
393
+ const rewriteFiles = new Map();
394
+ for (const path of ['word/comments.xml', 'word/commentsExtended.xml', 'word/commentsIds.xml']) {
395
+ const xml = await revisedArchive.getFile(path);
396
+ if (xml)
397
+ rewriteFiles.set(path, new LazyArchiveXml(revisedArchive, path, xml));
398
+ }
399
+ rewriteFiles
400
+ .get('word/comments.xml')
401
+ ?.applyAttributeMap(['w:p'], 'w14:paraId', valueMap, normalizeParaId);
402
+ rewriteFiles
403
+ .get('word/commentsExtended.xml')
404
+ ?.applyAttributeMap(['w15:commentEx'], 'w15:paraId', valueMap, normalizeParaId);
405
+ rewriteFiles
406
+ .get('word/commentsExtended.xml')
407
+ ?.applyAttributeMap(['w15:commentEx'], 'w15:paraIdParent', valueMap, normalizeParaId);
408
+ rewriteFiles
409
+ .get('word/commentsIds.xml')
410
+ ?.applyAttributeMap(['w16cid:commentId'], 'w16cid:paraId', valueMap, normalizeParaId);
411
+ for (const file of rewriteFiles.values())
412
+ file.flush();
413
+ return [...valueMap].map(([fromParaId, toParaId]) => ({ fromParaId, toParaId }));
414
+ }
415
+ //# sourceMappingURL=auxiliaryIdCollision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auxiliaryIdCollision.js","sourceRoot":"","sources":["../../../src/baselines/atomizer/auxiliaryIdCollision.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"documentReconstructor.d.ts","sourceRoot":"","sources":["../../../src/baselines/atomizer/documentReconstructor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA8B9D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,IAAI,EAAE,IAAI,CAAC;CACZ;AAoBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,kBAAkB,EAAE,EACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAsCR;AAgYD;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAKlD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAOA;AAwUD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAEhE;AA4yBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAmBlF;AAYD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,kBAAkB,EAAE,GAChC,mBAAmB,CAuCrB"}
1
+ {"version":3,"file":"documentReconstructor.d.ts","sourceRoot":"","sources":["../../../src/baselines/atomizer/documentReconstructor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA+B9D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,IAAI,EAAE,IAAI,CAAC;CACZ;AAoBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,kBAAkB,EAAE,EACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAsCR;AAsYD;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAKlD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAOA;AA+XD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAEhE;AAs2BD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAmBlF;AAYD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,kBAAkB,EAAE,GAChC,mBAAmB,CAuCrB"}