@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.
- package/LICENSE +202 -21
- package/NOTICE +2 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/atomizer.d.ts +13 -7
- package/dist/atomizer.d.ts.map +1 -1
- package/dist/atomizer.js +59 -24
- package/dist/atomizer.js.map +1 -1
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +99 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +1 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js +415 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
- package/dist/baselines/atomizer/documentReconstructor.js +120 -27
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +9 -0
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +52 -4
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +1 -1
- package/dist/baselines/atomizer/pipeline.d.ts +12 -53
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
- package/dist/baselines/atomizer/pipeline.js +126 -231
- package/dist/baselines/atomizer/pipeline.js.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +153 -23
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.js +7 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -1
- package/dist/cli/compare-two.d.ts.map +1 -1
- package/dist/cli/compare-two.js +3 -1
- package/dist/cli/compare-two.js.map +1 -1
- package/dist/cli/conformance-adapter.d.ts +3 -0
- package/dist/cli/conformance-adapter.d.ts.map +1 -0
- package/dist/cli/conformance-adapter.js +93 -0
- package/dist/cli/conformance-adapter.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/compare-types.d.ts +46 -0
- package/dist/compare-types.d.ts.map +1 -1
- package/dist/generation/compile.d.ts +21 -0
- package/dist/generation/compile.d.ts.map +1 -0
- package/dist/generation/compile.js +46 -0
- package/dist/generation/compile.js.map +1 -0
- package/dist/generation/context.d.ts +42 -0
- package/dist/generation/context.d.ts.map +1 -0
- package/dist/generation/context.js +65 -0
- package/dist/generation/context.js.map +1 -0
- package/dist/generation/emit/comments-part.d.ts +36 -0
- package/dist/generation/emit/comments-part.d.ts.map +1 -0
- package/dist/generation/emit/comments-part.js +116 -0
- package/dist/generation/emit/comments-part.js.map +1 -0
- package/dist/generation/emit/document-part.d.ts +24 -0
- package/dist/generation/emit/document-part.d.ts.map +1 -0
- package/dist/generation/emit/document-part.js +60 -0
- package/dist/generation/emit/document-part.js.map +1 -0
- package/dist/generation/emit/emit-context.d.ts +26 -0
- package/dist/generation/emit/emit-context.d.ts.map +1 -0
- package/dist/generation/emit/emit-context.js +19 -0
- package/dist/generation/emit/emit-context.js.map +1 -0
- package/dist/generation/emit/header-footer-part.d.ts +23 -0
- package/dist/generation/emit/header-footer-part.d.ts.map +1 -0
- package/dist/generation/emit/header-footer-part.js +57 -0
- package/dist/generation/emit/header-footer-part.js.map +1 -0
- package/dist/generation/emit/numbering-part.d.ts +29 -0
- package/dist/generation/emit/numbering-part.d.ts.map +1 -0
- package/dist/generation/emit/numbering-part.js +100 -0
- package/dist/generation/emit/numbering-part.js.map +1 -0
- package/dist/generation/emit/package-parts.d.ts +24 -0
- package/dist/generation/emit/package-parts.d.ts.map +1 -0
- package/dist/generation/emit/package-parts.js +121 -0
- package/dist/generation/emit/package-parts.js.map +1 -0
- package/dist/generation/emit/paragraph.d.ts +24 -0
- package/dist/generation/emit/paragraph.d.ts.map +1 -0
- package/dist/generation/emit/paragraph.js +63 -0
- package/dist/generation/emit/paragraph.js.map +1 -0
- package/dist/generation/emit/properties.d.ts +34 -0
- package/dist/generation/emit/properties.d.ts.map +1 -0
- package/dist/generation/emit/properties.js +138 -0
- package/dist/generation/emit/properties.js.map +1 -0
- package/dist/generation/emit/run.d.ts +15 -0
- package/dist/generation/emit/run.d.ts.map +1 -0
- package/dist/generation/emit/run.js +71 -0
- package/dist/generation/emit/run.js.map +1 -0
- package/dist/generation/emit/section.d.ts +29 -0
- package/dist/generation/emit/section.d.ts.map +1 -0
- package/dist/generation/emit/section.js +117 -0
- package/dist/generation/emit/section.js.map +1 -0
- package/dist/generation/emit/settings-part.d.ts +13 -0
- package/dist/generation/emit/settings-part.d.ts.map +1 -0
- package/dist/generation/emit/settings-part.js +24 -0
- package/dist/generation/emit/settings-part.js.map +1 -0
- package/dist/generation/emit/styles-part.d.ts +16 -0
- package/dist/generation/emit/styles-part.d.ts.map +1 -0
- package/dist/generation/emit/styles-part.js +80 -0
- package/dist/generation/emit/styles-part.js.map +1 -0
- package/dist/generation/emit/table.d.ts +26 -0
- package/dist/generation/emit/table.d.ts.map +1 -0
- package/dist/generation/emit/table.js +196 -0
- package/dist/generation/emit/table.js.map +1 -0
- package/dist/generation/errors.d.ts +22 -0
- package/dist/generation/errors.d.ts.map +1 -0
- package/dist/generation/errors.js +29 -0
- package/dist/generation/errors.js.map +1 -0
- package/dist/generation/index.d.ts +13 -0
- package/dist/generation/index.d.ts.map +1 -0
- package/dist/generation/index.js +12 -0
- package/dist/generation/index.js.map +1 -0
- package/dist/generation/ordering.d.ts +46 -0
- package/dist/generation/ordering.d.ts.map +1 -0
- package/dist/generation/ordering.js +119 -0
- package/dist/generation/ordering.js.map +1 -0
- package/dist/generation/recipes.d.ts +47 -0
- package/dist/generation/recipes.d.ts.map +1 -0
- package/dist/generation/recipes.js +84 -0
- package/dist/generation/recipes.js.map +1 -0
- package/dist/generation/structural-checks.d.ts +24 -0
- package/dist/generation/structural-checks.d.ts.map +1 -0
- package/dist/generation/structural-checks.js +318 -0
- package/dist/generation/structural-checks.js.map +1 -0
- package/dist/generation/types.d.ts +217 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +16 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/generation/validate-spec.d.ts +27 -0
- package/dist/generation/validate-spec.d.ts.map +1 -0
- package/dist/generation/validate-spec.js +307 -0
- package/dist/generation/validate-spec.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/integration/generation-probes.d.ts +15 -0
- package/dist/integration/generation-probes.d.ts.map +1 -0
- package/dist/integration/generation-probes.js +84 -0
- package/dist/integration/generation-probes.js.map +1 -0
- package/dist/integration/libreoffice-oracle.d.ts +8 -0
- package/dist/integration/libreoffice-oracle.d.ts.map +1 -1
- package/dist/integration/libreoffice-oracle.js +14 -6
- package/dist/integration/libreoffice-oracle.js.map +1 -1
- package/dist/integration/synthetic-docx-fixture.d.ts +72 -0
- package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
- package/dist/integration/synthetic-docx-fixture.js +131 -4
- package/dist/integration/synthetic-docx-fixture.js.map +1 -1
- package/dist/primitives/accept_changes.d.ts +2 -1
- package/dist/primitives/accept_changes.d.ts.map +1 -1
- package/dist/primitives/accept_changes.js +153 -12
- package/dist/primitives/accept_changes.js.map +1 -1
- package/dist/primitives/document.d.ts +38 -0
- package/dist/primitives/document.d.ts.map +1 -1
- package/dist/primitives/document.js +75 -9
- package/dist/primitives/document.js.map +1 -1
- package/dist/primitives/document_view-comments.d.ts.map +1 -1
- package/dist/primitives/document_view-comments.js +4 -3
- package/dist/primitives/document_view-comments.js.map +1 -1
- package/dist/primitives/document_view-types.d.ts +15 -0
- package/dist/primitives/document_view-types.d.ts.map +1 -1
- package/dist/primitives/document_view.d.ts.map +1 -1
- package/dist/primitives/document_view.js +21 -13
- package/dist/primitives/document_view.js.map +1 -1
- package/dist/primitives/formatting_tags.d.ts +1 -0
- package/dist/primitives/formatting_tags.d.ts.map +1 -1
- package/dist/primitives/formatting_tags.js +16 -10
- package/dist/primitives/formatting_tags.js.map +1 -1
- package/dist/primitives/index.d.ts +4 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +4 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/layout.d.ts.map +1 -1
- package/dist/primitives/layout.js +13 -0
- package/dist/primitives/layout.js.map +1 -1
- package/dist/primitives/minimal_save.d.ts +38 -0
- package/dist/primitives/minimal_save.d.ts.map +1 -0
- package/dist/primitives/minimal_save.js +323 -0
- package/dist/primitives/minimal_save.js.map +1 -0
- package/dist/primitives/namespaces.d.ts +41 -0
- package/dist/primitives/namespaces.d.ts.map +1 -1
- package/dist/primitives/namespaces.js +43 -0
- package/dist/primitives/namespaces.js.map +1 -1
- package/dist/primitives/reject_changes.d.ts +4 -2
- package/dist/primitives/reject_changes.d.ts.map +1 -1
- package/dist/primitives/reject_changes.js +177 -24
- package/dist/primitives/reject_changes.js.map +1 -1
- package/dist/primitives/revision-parts.d.ts +7 -0
- package/dist/primitives/revision-parts.d.ts.map +1 -0
- package/dist/primitives/revision-parts.js +27 -0
- package/dist/primitives/revision-parts.js.map +1 -0
- package/dist/primitives/revision-vocabulary.d.ts +7 -0
- package/dist/primitives/revision-vocabulary.d.ts.map +1 -0
- package/dist/primitives/revision-vocabulary.js +39 -0
- package/dist/primitives/revision-vocabulary.js.map +1 -0
- package/dist/primitives/schema-corpus-capture.d.ts +19 -0
- package/dist/primitives/schema-corpus-capture.d.ts.map +1 -0
- package/dist/primitives/schema-corpus-capture.js +29 -0
- package/dist/primitives/schema-corpus-capture.js.map +1 -0
- package/dist/primitives/sectPrAudit.d.ts +19 -0
- package/dist/primitives/sectPrAudit.d.ts.map +1 -0
- package/dist/primitives/sectPrAudit.js +165 -0
- package/dist/primitives/sectPrAudit.js.map +1 -0
- package/dist/primitives/semantic_tags.d.ts.map +1 -1
- package/dist/primitives/semantic_tags.js +2 -1
- package/dist/primitives/semantic_tags.js.map +1 -1
- package/dist/primitives/serialize_html.d.ts +1 -0
- package/dist/primitives/serialize_html.d.ts.map +1 -1
- package/dist/primitives/serialize_html.js +4 -2
- package/dist/primitives/serialize_html.js.map +1 -1
- package/dist/primitives/styles.d.ts +15 -0
- package/dist/primitives/styles.d.ts.map +1 -1
- package/dist/primitives/styles.js +11 -0
- package/dist/primitives/styles.js.map +1 -1
- package/dist/primitives/track-changes-emitter.d.ts +9 -0
- package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
- package/dist/primitives/track-changes-emitter.js +54 -4
- package/dist/primitives/track-changes-emitter.js.map +1 -1
- package/dist/primitives/validate_ai_revisions.d.ts +35 -0
- package/dist/primitives/validate_ai_revisions.d.ts.map +1 -0
- package/dist/primitives/validate_ai_revisions.js +323 -0
- package/dist/primitives/validate_ai_revisions.js.map +1 -0
- package/dist/primitives/xml.d.ts +5 -0
- package/dist/primitives/xml.d.ts.map +1 -1
- package/dist/primitives/xml.js +5 -0
- package/dist/primitives/xml.js.map +1 -1
- package/dist/primitives/zip.d.ts +1 -0
- package/dist/primitives/zip.d.ts.map +1 -1
- package/dist/primitives/zip.js +21 -3
- package/dist/primitives/zip.js.map +1 -1
- package/dist/shared/field-structure.d.ts +14 -0
- package/dist/shared/field-structure.d.ts.map +1 -0
- package/dist/shared/field-structure.js +166 -0
- package/dist/shared/field-structure.js.map +1 -0
- 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,MAAM,UAAU,GAAG,IAAI,aAAa,EAAE,CAAC;AAiBvC,MAAM,CAAC,MAAM,eAAe,GAA8B;IACxD;QACE,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,oBAAoB;QAC9B,YAAY,EAAE,qBAAqB;QACnC,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,8EAA8E;QAC3F,gBAAgB,EAAE,+EAA+E;QACjG,aAAa,EAAE,CAAC,qBAAqB,CAAC;KACvC;IACD;QACE,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,mBAAmB;QAC7B,YAAY,EAAE,oBAAoB;QAClC,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,6EAA6E;QAC1F,gBAAgB,EAAE,8EAA8E;QAChG,aAAa,EAAE,CAAC,oBAAoB,CAAC;KACtC;IACD;QACE,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,mBAAmB;QAC7B,YAAY,EAAE,oBAAoB;QAClC,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,6EAA6E;QAC1F,gBAAgB,EAAE,8EAA8E;QAChG,aAAa,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;KAClF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,QAAgB;IAEhB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAY,CAAC;QAClC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAQD;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,EAAW;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,uBAAuB,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB,EAAE,OAAe;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,iFAAiF;AACjF,MAAM,cAAc;IAKC;IACA;IACA;IANX,MAAM,GAAoB,IAAI,CAAC;IAC/B,KAAK,GAAG,KAAK,CAAC;IAEtB,YACmB,OAAoB,EACpB,IAAY,EACZ,GAAW;QAFX,YAAO,GAAP,OAAO,CAAa;QACpB,SAAI,GAAJ,IAAI,CAAQ;QACZ,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEJ,GAAG;QACD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,yEAAyE;IACzE,iBAAiB,CACf,IAAc,EACd,QAAgB,EAChB,QAA6B,EAC7B,eAA0C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QAE1D,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAY,CAAC;gBAClC,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,IAAI,WAAW,EAAE,CAAC;oBAChB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,UAAU,CAAC,IAAc,EAAE,KAA0B;QACnD,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACxC,wEAAwE;QACxE,sCAAsC;QACtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,eAA4B,EAC5B,cAA2B;IAE3B,yDAAyD;IACzD,MAAM,KAAK,GAA2E,EAAE,CAAC;IACzF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxD,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1D,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC5C,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;SAC5C,CAAC,CAAC;QACH,gDAAgD;QAChD,IAAI,CAAC,eAAe,IAAI,CAAC,cAAc;YAAE,SAAS;QAElD,MAAM,cAAc,GAAG,YAAY,CAAC,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxE,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE/E,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,aAAa;gBAAE,SAAS;YAC7B,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,YAAY,CAAC;gBAAE,SAAS;YAChF,gEAAgE;YAChE,uEAAuE;YACvE,qEAAqE;YACrE,oEAAoE;YACpE,iEAAiE;YACjE,uCAAuC;YACvC,IAAI,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/F,SAAS;YACX,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,6CAA6C;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAC;IACvD,MAAM,YAAY,GAAG;QACnB,mBAAmB;QACnB,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxF,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;KAC1C,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,GAAG;YAAE,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC;IAE7E,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,KAAK,EAAE,CAAC;QACjD,oEAAoE;QACpE,+DAA+D;QAC/D,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAE,CAAC;QAC3D,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,SAAS,GAAG,iBAAiB,CAAE,aAAa,CAAC,CAAC,CAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/F,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9D,SAAS,GAAG,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/F,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,SAAS,GAAG,iBAAiB,CAAE,IAAI,CAAC,CAAC,CAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,uEAAuE;QACvE,oEAAoE;QACpE,8DAA8D;QAC9D,WAAW,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAEvD,OAAO,UAAU,CAAC;AACpB,CAAC;AAOD,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAkB;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC;IAExB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAY,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAI,UAAU,CAAC,CAAC,CAAa,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YAC5C,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAC9B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAkB,EAAE,GAAW,EAAE,SAAmB;IAClF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC;IAExB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAY,CAAC;QAClC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAkB,EAAE,IAAiB;IAC/D,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,iBAAiB,GACrB,4FAA4F,CAAC;IAC/F,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,eAA4B,EAC5B,cAA2B;IAE3B,MAAM,CACJ,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACtB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC5C,cAAc,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC3C,cAAc,CAAC,OAAO,CAAC,2BAA2B,CAAC;QACnD,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC;KAC/C,CAAC,CAAC;IAEH,IAAI,CAAC,mBAAmB;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,cAAc,GAAG,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;IACvE,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,aAAa,GAAG,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,KAAK,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,aAAa,EAAE,CAAC;QAC1D,MAAM,oBAAoB,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,oBAAoB;YAAE,SAAS;QAEpC,IACE,oBAAoB,CAAC,MAAM,KAAK,CAAC;YACjC,mBAAmB,CAAC,MAAM,KAAK,CAAC;YAChC,UAAU,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAE,CAAC;gBACpD,UAAU,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,CAAE,CAAC,EACvD,CAAC;YACD,SAAS;QACX,CAAC;QAED,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,sBAAsB,CACxC,0BAA0B,EAC1B,eAAe,EACf,CAAC,YAAY,EAAE,kBAAkB,CAAC,CACnC,EAAE,CAAC;QACF,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,sBAAsB,CACxC,qBAAqB,EACrB,kBAAkB,EAClB,CAAC,eAAe,CAAC,CAClB,EAAE,CAAC;QACF,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;QAC7C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,mBAAmB,GAAG;QAC1B,mBAAmB;QACnB,2BAA2B;QAC3B,sBAAsB;QACtB,mBAAmB;KACpB,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,CAAC,GAAG,CACf,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACrC,kBAAkB,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;QAC/D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,UAAU,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACtD,IAAI,QAAgB,CAAC;QACrB,GAAG,CAAC;YACF,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5D,IAAI,EAAE,CAAC;QACT,CAAC,QAAQ,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC/D,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,sBAAsB,CAAC,EAAE,CAAC;QAC9F,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,GAAG;YAAE,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,YAAY;SACT,GAAG,CAAC,mBAAmB,CAAC;QACzB,EAAE,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IACxE,YAAY;SACT,GAAG,CAAC,2BAA2B,CAAC;QACjC,EAAE,iBAAiB,CAAC,CAAC,eAAe,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAClF,YAAY;SACT,GAAG,CAAC,2BAA2B,CAAC;QACjC,EAAE,iBAAiB,CAAC,CAAC,eAAe,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IACxF,YAAY;SACT,GAAG,CAAC,sBAAsB,CAAC;QAC5B,EAAE,iBAAiB,CAAC,CAAC,kBAAkB,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAExF,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAEvD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC"}
|
|
@@ -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;
|
|
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"}
|