@usejunior/docx-core 0.15.0 → 0.17.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/README.md +18 -83
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/conformance-adapter.d.ts +14 -0
- package/dist/cli/conformance-adapter.d.ts.map +1 -1
- package/dist/cli/conformance-adapter.js +104 -12
- package/dist/cli/conformance-adapter.js.map +1 -1
- package/dist/footnotes.d.ts +7 -5
- package/dist/footnotes.d.ts.map +1 -1
- package/dist/footnotes.js +7 -5
- package/dist/footnotes.js.map +1 -1
- package/dist/generated/ecma-376-vocabulary.d.ts +93 -0
- package/dist/generated/ecma-376-vocabulary.d.ts.map +1 -0
- package/dist/generated/ecma-376-vocabulary.js +87 -0
- package/dist/generated/ecma-376-vocabulary.js.map +1 -0
- package/dist/generation/compile.js +2 -2
- package/dist/generation/compile.js.map +1 -1
- package/dist/generation/emit/comments-part.d.ts +2 -0
- package/dist/generation/emit/comments-part.d.ts.map +1 -1
- package/dist/generation/emit/comments-part.js +2 -0
- package/dist/generation/emit/comments-part.js.map +1 -1
- package/dist/generation/emit/paragraph.d.ts +3 -0
- package/dist/generation/emit/paragraph.d.ts.map +1 -1
- package/dist/generation/emit/paragraph.js +3 -0
- package/dist/generation/emit/paragraph.js.map +1 -1
- package/dist/generation/emit/run.d.ts.map +1 -1
- package/dist/generation/emit/run.js +6 -1
- package/dist/generation/emit/run.js.map +1 -1
- package/dist/generation/emit/settings-part.d.ts +12 -3
- package/dist/generation/emit/settings-part.d.ts.map +1 -1
- package/dist/generation/emit/settings-part.js +23 -5
- package/dist/generation/emit/settings-part.js.map +1 -1
- package/dist/generation/ordering.d.ts +3 -1
- package/dist/generation/ordering.d.ts.map +1 -1
- package/dist/generation/ordering.js +3 -1
- package/dist/generation/ordering.js.map +1 -1
- package/dist/generation/schema-enum-domains.d.ts +27 -0
- package/dist/generation/schema-enum-domains.d.ts.map +1 -0
- package/dist/generation/schema-enum-domains.js +69 -0
- package/dist/generation/schema-enum-domains.js.map +1 -0
- package/dist/generation/structural-checks.js +7 -1
- package/dist/generation/structural-checks.js.map +1 -1
- package/dist/generation/validate-spec.d.ts.map +1 -1
- package/dist/generation/validate-spec.js +149 -31
- package/dist/generation/validate-spec.js.map +1 -1
- package/dist/index.d.ts +7 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -46
- package/dist/index.js.map +1 -1
- package/dist/primitives/accept_ai_edits.d.ts +87 -0
- package/dist/primitives/accept_ai_edits.d.ts.map +1 -0
- package/dist/primitives/accept_ai_edits.js +253 -0
- package/dist/primitives/accept_ai_edits.js.map +1 -0
- package/dist/primitives/accept_changes.d.ts +36 -3
- package/dist/primitives/accept_changes.d.ts.map +1 -1
- package/dist/primitives/accept_changes.js +67 -31
- package/dist/primitives/accept_changes.js.map +1 -1
- package/dist/primitives/bookmarks.d.ts +44 -0
- package/dist/primitives/bookmarks.d.ts.map +1 -1
- package/dist/primitives/bookmarks.js +149 -11
- package/dist/primitives/bookmarks.js.map +1 -1
- package/dist/primitives/document.d.ts +53 -1
- package/dist/primitives/document.d.ts.map +1 -1
- package/dist/primitives/document.js +146 -2
- package/dist/primitives/document.js.map +1 -1
- package/dist/primitives/dom-helpers.d.ts.map +1 -1
- package/dist/primitives/dom-helpers.js +7 -2
- package/dist/primitives/dom-helpers.js.map +1 -1
- package/dist/primitives/index.d.ts +2 -1
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +2 -1
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/layout.d.ts.map +1 -1
- package/dist/primitives/layout.js +41 -1
- package/dist/primitives/layout.js.map +1 -1
- package/dist/primitives/namespaces.d.ts +2 -0
- package/dist/primitives/namespaces.d.ts.map +1 -1
- package/dist/primitives/namespaces.js +2 -0
- package/dist/primitives/namespaces.js.map +1 -1
- package/dist/primitives/reject_changes.d.ts +21 -2
- package/dist/primitives/reject_changes.d.ts.map +1 -1
- package/dist/primitives/reject_changes.js +71 -31
- package/dist/primitives/reject_changes.js.map +1 -1
- package/dist/primitives/relationships.d.ts +33 -0
- package/dist/primitives/relationships.d.ts.map +1 -1
- package/dist/primitives/relationships.js +84 -1
- package/dist/primitives/relationships.js.map +1 -1
- package/dist/primitives/sectPrAudit.d.ts +11 -2
- package/dist/primitives/sectPrAudit.d.ts.map +1 -1
- package/dist/primitives/sectPrAudit.js +148 -23
- package/dist/primitives/sectPrAudit.js.map +1 -1
- package/dist/primitives/track-changes-emitter.d.ts +4 -0
- package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
- package/dist/primitives/track-changes-emitter.js +5 -2
- package/dist/primitives/track-changes-emitter.js.map +1 -1
- package/dist/primitives/validate_ai_revisions.d.ts.map +1 -1
- package/dist/primitives/validate_ai_revisions.js +13 -5
- package/dist/primitives/validate_ai_revisions.js.map +1 -1
- package/dist/primitives/zip.d.ts.map +1 -1
- package/dist/primitives/zip.js +6 -2
- package/dist/primitives/zip.js.map +1 -1
- package/dist/shared/field-structure.d.ts +6 -0
- package/dist/shared/field-structure.d.ts.map +1 -1
- package/dist/shared/field-structure.js +6 -0
- package/dist/shared/field-structure.js.map +1 -1
- package/package.json +4 -8
- package/dist/atomizer.d.ts +0 -273
- package/dist/atomizer.d.ts.map +0 -1
- package/dist/atomizer.js +0 -1002
- package/dist/atomizer.js.map +0 -1
- package/dist/baselines/atomizer/atomLcs.d.ts +0 -82
- package/dist/baselines/atomizer/atomLcs.d.ts.map +0 -1
- package/dist/baselines/atomizer/atomLcs.js +0 -376
- package/dist/baselines/atomizer/atomLcs.js.map +0 -1
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +0 -99
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +0 -1
- package/dist/baselines/atomizer/auxiliaryIdCollision.js +0 -415
- package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +0 -1
- package/dist/baselines/atomizer/consumerCompatibility.d.ts +0 -2
- package/dist/baselines/atomizer/consumerCompatibility.d.ts.map +0 -1
- package/dist/baselines/atomizer/consumerCompatibility.js +0 -188
- package/dist/baselines/atomizer/consumerCompatibility.js.map +0 -1
- package/dist/baselines/atomizer/debug.d.ts +0 -41
- package/dist/baselines/atomizer/debug.d.ts.map +0 -1
- package/dist/baselines/atomizer/debug.js +0 -85
- package/dist/baselines/atomizer/debug.js.map +0 -1
- package/dist/baselines/atomizer/documentReconstructor.d.ts +0 -75
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +0 -1
- package/dist/baselines/atomizer/documentReconstructor.js +0 -1449
- package/dist/baselines/atomizer/documentReconstructor.js.map +0 -1
- package/dist/baselines/atomizer/formattingFidelity.d.ts +0 -99
- package/dist/baselines/atomizer/formattingFidelity.d.ts.map +0 -1
- package/dist/baselines/atomizer/formattingFidelity.js +0 -449
- package/dist/baselines/atomizer/formattingFidelity.js.map +0 -1
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts +0 -121
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +0 -1
- package/dist/baselines/atomizer/hierarchicalLcs.js +0 -753
- package/dist/baselines/atomizer/hierarchicalLcs.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts +0 -37
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js +0 -189
- package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts +0 -74
- package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-containers.js +0 -171
- package/dist/baselines/atomizer/inPlaceModifier-containers.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts +0 -88
- package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-deletion.js +0 -326
- package/dist/baselines/atomizer/inPlaceModifier-deletion.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts +0 -85
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.js +0 -402
- package/dist/baselines/atomizer/inPlaceModifier-postprocess.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts +0 -39
- package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-presplit.js +0 -265
- package/dist/baselines/atomizer/inPlaceModifier-presplit.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts +0 -62
- package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-shared.js +0 -139
- package/dist/baselines/atomizer/inPlaceModifier-shared.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +0 -198
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +0 -475
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier.d.ts +0 -27
- package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +0 -1
- package/dist/baselines/atomizer/inPlaceModifier.js +0 -648
- package/dist/baselines/atomizer/inPlaceModifier.js.map +0 -1
- package/dist/baselines/atomizer/numberingIntegration.d.ts +0 -59
- package/dist/baselines/atomizer/numberingIntegration.d.ts.map +0 -1
- package/dist/baselines/atomizer/numberingIntegration.js +0 -209
- package/dist/baselines/atomizer/numberingIntegration.js.map +0 -1
- package/dist/baselines/atomizer/pipeline.d.ts +0 -103
- package/dist/baselines/atomizer/pipeline.d.ts.map +0 -1
- package/dist/baselines/atomizer/pipeline.js +0 -1160
- package/dist/baselines/atomizer/pipeline.js.map +0 -1
- package/dist/baselines/atomizer/premergeRuns.d.ts +0 -26
- package/dist/baselines/atomizer/premergeRuns.d.ts.map +0 -1
- package/dist/baselines/atomizer/premergeRuns.js +0 -153
- package/dist/baselines/atomizer/premergeRuns.js.map +0 -1
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts +0 -63
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +0 -1
- package/dist/baselines/atomizer/trackChangesAcceptor.js +0 -254
- package/dist/baselines/atomizer/trackChangesAcceptor.js.map +0 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +0 -64
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +0 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +0 -642
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +0 -1
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts +0 -65
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +0 -1
- package/dist/baselines/atomizer/xmlToWmlElement.js +0 -96
- package/dist/baselines/atomizer/xmlToWmlElement.js.map +0 -1
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +0 -51
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +0 -1
- package/dist/baselines/wmlcomparer/DocxodusWasm.js +0 -83
- package/dist/baselines/wmlcomparer/DocxodusWasm.js.map +0 -1
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts +0 -40
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +0 -1
- package/dist/baselines/wmlcomparer/DotnetCli.js +0 -142
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +0 -1
- package/dist/cli/compare-two.d.ts +0 -28
- package/dist/cli/compare-two.d.ts.map +0 -1
- package/dist/cli/compare-two.js +0 -112
- package/dist/cli/compare-two.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -25
- package/dist/cli/index.js.map +0 -1
- package/dist/compare-types.d.ts +0 -197
- package/dist/compare-types.d.ts.map +0 -1
- package/dist/compare-types.js +0 -2
- package/dist/compare-types.js.map +0 -1
- package/dist/format-detection.d.ts +0 -120
- package/dist/format-detection.d.ts.map +0 -1
- package/dist/format-detection.js +0 -339
- package/dist/format-detection.js.map +0 -1
- package/dist/move-detection.d.ts +0 -211
- package/dist/move-detection.d.ts.map +0 -1
- package/dist/move-detection.js +0 -390
- package/dist/move-detection.js.map +0 -1
|
@@ -102,13 +102,109 @@ function isBookmarkEnd(el) {
|
|
|
102
102
|
function isParagraph(el) {
|
|
103
103
|
return el.namespaceURI === OOXML.W_NS && el.localName === W.p;
|
|
104
104
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Document-order [enter, exit] span for every node, by pre-order walk.
|
|
107
|
+
*
|
|
108
|
+
* Lets us ask whether a bookmark's start..end range intersects a paragraph's
|
|
109
|
+
* subtree without relying on `compareDocumentPosition` (not dependable across
|
|
110
|
+
* the DOM implementations this package runs on).
|
|
111
|
+
*/
|
|
112
|
+
function buildDocumentOrderSpans(doc) {
|
|
113
|
+
const spans = new Map();
|
|
114
|
+
let counter = 0;
|
|
115
|
+
const walk = (node) => {
|
|
116
|
+
const enter = counter++;
|
|
117
|
+
const children = node.childNodes;
|
|
118
|
+
for (let i = 0; i < children.length; i++) {
|
|
119
|
+
const child = children.item(i);
|
|
120
|
+
if (child)
|
|
121
|
+
walk(child);
|
|
122
|
+
}
|
|
123
|
+
spans.set(node, [enter, counter - 1]);
|
|
124
|
+
};
|
|
125
|
+
if (doc.documentElement)
|
|
126
|
+
walk(doc.documentElement);
|
|
127
|
+
return spans;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Paragraphs covered by the `w:id`-paired bookmark range named `name`.
|
|
131
|
+
*
|
|
132
|
+
* ECMA-376 Part 1 §17.13.6.2: a bookmark is a `w:bookmarkStart`/`w:bookmarkEnd`
|
|
133
|
+
* pair correlated by `w:id` — NOT by adjacency. Pairing by position is what lets
|
|
134
|
+
* a zero-length "point" bookmark sitting just before a paragraph, or a heading
|
|
135
|
+
* bookmark spanning several paragraphs, masquerade as that paragraph's anchor.
|
|
136
|
+
* We resolve the real range and report exactly which paragraphs it intersects.
|
|
137
|
+
*
|
|
138
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.13.6.2
|
|
139
|
+
*/
|
|
140
|
+
function paragraphsCoveredByBookmarkName(doc, name) {
|
|
141
|
+
const starts = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.bookmarkStart)).filter((el) => getAttr(el, 'name') === name);
|
|
142
|
+
// A well-formed document names a bookmark once. Two starts sharing a name is
|
|
143
|
+
// ambiguous; refuse to guess which one the caller meant.
|
|
144
|
+
const start = starts.length === 1 ? starts[0] : undefined;
|
|
145
|
+
if (!start)
|
|
146
|
+
return [];
|
|
147
|
+
const id = getAttr(start, 'id');
|
|
148
|
+
if (!id)
|
|
149
|
+
return [];
|
|
150
|
+
// The same w:id must not be opened twice — pairing would be ambiguous.
|
|
151
|
+
const startsWithId = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.bookmarkStart)).filter((el) => getAttr(el, 'id') === id);
|
|
152
|
+
if (startsWithId.length !== 1)
|
|
153
|
+
return [];
|
|
154
|
+
const ends = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.bookmarkEnd)).filter((el) => getAttr(el, 'id') === id);
|
|
155
|
+
const end = ends.length === 1 ? ends[0] : undefined;
|
|
156
|
+
if (!end)
|
|
157
|
+
return [];
|
|
158
|
+
const spans = buildDocumentOrderSpans(doc);
|
|
159
|
+
const startSpan = spans.get(start);
|
|
160
|
+
const endSpan = spans.get(end);
|
|
161
|
+
if (!startSpan || !endSpan)
|
|
162
|
+
return [];
|
|
163
|
+
// Measure the CONTENT strictly between the markers, not the markers themselves.
|
|
164
|
+
// Using marker positions would let a zero-length "point" bookmark — whose start
|
|
165
|
+
// and end are adjacent — intersect whatever paragraph encloses or follows it,
|
|
166
|
+
// and that paragraph is not marked by the bookmark at all.
|
|
167
|
+
const contentFirst = startSpan[1] + 1;
|
|
168
|
+
const contentLast = endSpan[0] - 1;
|
|
169
|
+
// Empty interval => a point bookmark (marks no content). Also rejects an end
|
|
170
|
+
// that precedes its start, which is malformed rather than a covering range.
|
|
171
|
+
if (contentFirst > contentLast)
|
|
172
|
+
return [];
|
|
173
|
+
const covered = [];
|
|
174
|
+
const paragraphs = doc.getElementsByTagNameNS(OOXML.W_NS, W.p);
|
|
175
|
+
for (let i = 0; i < paragraphs.length; i++) {
|
|
176
|
+
const p = paragraphs.item(i);
|
|
177
|
+
if (!p || !isParagraph(p))
|
|
178
|
+
continue;
|
|
179
|
+
const pSpan = spans.get(p);
|
|
180
|
+
if (!pSpan)
|
|
181
|
+
continue;
|
|
182
|
+
// Intersect against the paragraph's CHILDREN (pSpan[0] + 1 …), not its own
|
|
183
|
+
// element position. A bookmark that closes at the very start of a paragraph
|
|
184
|
+
// (start before it, end as its first child) otherwise covers only the `w:p`
|
|
185
|
+
// boundary itself — no content — and would still claim the paragraph.
|
|
186
|
+
if (contentFirst <= pSpan[1] && contentLast >= pSpan[0] + 1)
|
|
187
|
+
covered.push(p);
|
|
188
|
+
}
|
|
189
|
+
return covered;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Collect every bookmark name attached to a paragraph, in discovery order.
|
|
193
|
+
*
|
|
194
|
+
* Supports both attachment styles:
|
|
195
|
+
* 1) sibling: `<w:bookmarkStart/> <w:p/> <w:bookmarkEnd/>`
|
|
196
|
+
* 2) inside: `<w:p><w:bookmarkStart/> ... </w:p>`
|
|
197
|
+
*
|
|
198
|
+
* NOTE: this is a *reporting* helper — it answers "what names sit around/inside
|
|
199
|
+
* this paragraph", by adjacency. It deliberately does NOT pair start/end by
|
|
200
|
+
* `w:id`, so it can include a neighbouring point bookmark or one end of a
|
|
201
|
+
* multi-paragraph range. Do not use it to resolve a caller-supplied anchor;
|
|
202
|
+
* `findParagraphByBookmarkId` does the id-paired, exactly-one-paragraph check.
|
|
203
|
+
*/
|
|
204
|
+
export function getParagraphBookmarkNames(p) {
|
|
205
|
+
const names = [];
|
|
206
|
+
// 1) Sibling style. Scan backward across adjacent bookmark nodes until we hit
|
|
207
|
+
// another paragraph, so stacked bookmarks around one paragraph are all seen.
|
|
112
208
|
const prev = prevElementSibling(p);
|
|
113
209
|
const next = nextElementSibling(p);
|
|
114
210
|
if (prev && next && isBookmarkEnd(next)) {
|
|
@@ -118,8 +214,8 @@ export function getParagraphBookmarkId(p) {
|
|
|
118
214
|
break;
|
|
119
215
|
if (isBookmarkStart(cur)) {
|
|
120
216
|
const name = getAttr(cur, 'name');
|
|
121
|
-
if (name
|
|
122
|
-
|
|
217
|
+
if (name)
|
|
218
|
+
names.push(name);
|
|
123
219
|
}
|
|
124
220
|
cur = prevElementSibling(cur);
|
|
125
221
|
}
|
|
@@ -129,7 +225,21 @@ export function getParagraphBookmarkId(p) {
|
|
|
129
225
|
for (let i = 0; i < starts.length; i++) {
|
|
130
226
|
const el = starts.item(i);
|
|
131
227
|
const name = el ? getAttr(el, 'name') : null;
|
|
132
|
-
if (name
|
|
228
|
+
if (name)
|
|
229
|
+
names.push(name);
|
|
230
|
+
}
|
|
231
|
+
return names;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* The paragraph's canonical safe-docx id (`_bk_*`), or null when it has none.
|
|
235
|
+
*
|
|
236
|
+
* This intentionally stays `_bk_`-only: it is the id we *report* for a paragraph.
|
|
237
|
+
* To *resolve* an anchor the caller supplied, use `findParagraphByBookmarkId`,
|
|
238
|
+
* which accepts any bookmark name on the paragraph.
|
|
239
|
+
*/
|
|
240
|
+
export function getParagraphBookmarkId(p) {
|
|
241
|
+
for (const name of getParagraphBookmarkNames(p)) {
|
|
242
|
+
if (name.startsWith('_bk_'))
|
|
133
243
|
return name;
|
|
134
244
|
}
|
|
135
245
|
return null;
|
|
@@ -235,14 +345,42 @@ export function insertSingleParagraphBookmark(doc, p) {
|
|
|
235
345
|
parent.insertBefore(end, p.nextSibling);
|
|
236
346
|
return name;
|
|
237
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* Resolve a caller-supplied anchor to its paragraph.
|
|
350
|
+
*
|
|
351
|
+
* Two strictly separated paths:
|
|
352
|
+
*
|
|
353
|
+
* 1. **Canonical `_bk_*`** — unchanged from before foreign anchors existed:
|
|
354
|
+
* the first paragraph whose reported id equals `bookmarkId`. A `_bk_*` anchor
|
|
355
|
+
* NEVER falls through to the foreign path, so widening cannot move an
|
|
356
|
+
* existing lookup (a paragraph can carry several `_bk_*` names; only the
|
|
357
|
+
* reported one may resolve it).
|
|
358
|
+
*
|
|
359
|
+
* 2. **Foreign name** (a host application's own stable paragraph bookmark, or a
|
|
360
|
+
* Word `_Toc*`/`_Ref*`) — accepted ONLY when the `w:id`-paired bookmark range
|
|
361
|
+
* covers exactly one paragraph. This rejects a zero-length point bookmark
|
|
362
|
+
* adjacent to a paragraph (covers none) and a heading/TOC bookmark spanning
|
|
363
|
+
* several (covers many). Both would otherwise resolve to a paragraph the
|
|
364
|
+
* bookmark does not actually mark — i.e. edit the wrong clause.
|
|
365
|
+
*
|
|
366
|
+
* Anything ambiguous returns null so the caller can fall back rather than guess.
|
|
367
|
+
* Matching is exact on the bookmark name.
|
|
368
|
+
*
|
|
369
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.13.6.2
|
|
370
|
+
*/
|
|
238
371
|
export function findParagraphByBookmarkId(doc, bookmarkId) {
|
|
239
372
|
const paragraphs = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.p));
|
|
373
|
+
// 1) Canonical path — byte-for-byte the pre-existing behavior.
|
|
240
374
|
for (const p of paragraphs) {
|
|
241
375
|
if (!isParagraph(p))
|
|
242
376
|
continue;
|
|
243
377
|
if (getParagraphBookmarkId(p) === bookmarkId)
|
|
244
378
|
return p;
|
|
245
379
|
}
|
|
246
|
-
|
|
380
|
+
if (bookmarkId.startsWith('_bk_'))
|
|
381
|
+
return null;
|
|
382
|
+
// 2) Foreign path — qualified by the real, id-paired range.
|
|
383
|
+
const covered = paragraphsCoveredByBookmarkName(doc, bookmarkId);
|
|
384
|
+
return covered.length === 1 ? (covered[0] ?? null) : null;
|
|
247
385
|
}
|
|
248
386
|
//# sourceMappingURL=bookmarks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookmarks.js","sourceRoot":"","sources":["../../src/primitives/bookmarks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bookmarks.js","sourceRoot":"","sources":["../../src/primitives/bookmarks.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { type ValidateDocumentResult } from './validate_document.js';
|
|
|
14
14
|
import { type AiRevisionValidationTouchedContext, type ValidateAiRevisionsResult } from './validate_ai_revisions.js';
|
|
15
15
|
import { type AcceptChangesResult } from './accept_changes.js';
|
|
16
16
|
import { type RejectChangesResult } from './reject_changes.js';
|
|
17
|
+
import { type AiEditSelector } from './accept_ai_edits.js';
|
|
17
18
|
import { type AddCommentResult, type AddCommentReplyResult, type Comment } from './comments.js';
|
|
18
19
|
import { type Footnote, type AddFootnoteResult } from './footnotes.js';
|
|
19
20
|
export type NormalizationResult = {
|
|
@@ -63,7 +64,8 @@ export declare class DocxDocument {
|
|
|
63
64
|
validateAiRevisions(aiAuthor: string, touched?: AiRevisionValidationTouchedContext): Promise<ValidateAiRevisionsResult>;
|
|
64
65
|
/**
|
|
65
66
|
* Accept all tracked changes in document.xml plus supported revisionable
|
|
66
|
-
* side-story parts,
|
|
67
|
+
* side-story parts, resolving the supported revision subset. Unsupported
|
|
68
|
+
* advanced records remain classified gaps or preservation-only markup.
|
|
67
69
|
*/
|
|
68
70
|
acceptChanges(): Promise<AcceptChangesResult>;
|
|
69
71
|
/**
|
|
@@ -71,6 +73,32 @@ export declare class DocxDocument {
|
|
|
71
73
|
* side-story parts, restoring their pre-edit state where possible.
|
|
72
74
|
*/
|
|
73
75
|
rejectChanges(): Promise<RejectChangesResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Read all revisionable stories (document.xml + supported side parts) as parsed
|
|
78
|
+
* Documents, resolve the selector's target revision-id set across every story
|
|
79
|
+
* (a revision id is package-wide), and hard-error on any ambiguous overlap
|
|
80
|
+
* unless the selector opts into `normalizeFirst`.
|
|
81
|
+
*/
|
|
82
|
+
private prepareSelectiveStories;
|
|
83
|
+
/**
|
|
84
|
+
* Accept only the revisions named by `selector` (by id or author) across
|
|
85
|
+
* document.xml and supported side-story parts, leaving every other revision
|
|
86
|
+
* byte-untouched (#123). Hard-errors on an ambiguous overlap unless
|
|
87
|
+
* `normalizeFirst` is set.
|
|
88
|
+
*/
|
|
89
|
+
acceptAIEdits(selector: AiEditSelector): Promise<{
|
|
90
|
+
result: AcceptChangesResult;
|
|
91
|
+
selectedIds: string[];
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Reject only the revisions named by `selector` across document.xml and
|
|
95
|
+
* supported side-story parts, leaving every other revision byte-untouched.
|
|
96
|
+
* Symmetric to {@link DocxDocument.acceptAIEdits}.
|
|
97
|
+
*/
|
|
98
|
+
rejectAIEdits(selector: AiEditSelector): Promise<{
|
|
99
|
+
result: RejectChangesResult;
|
|
100
|
+
selectedIds: string[];
|
|
101
|
+
}>;
|
|
74
102
|
removeJuniorBookmarks(): number;
|
|
75
103
|
readParagraphs(opts?: {
|
|
76
104
|
nodeIds?: string[];
|
|
@@ -261,5 +289,29 @@ export declare class DocxDocument {
|
|
|
261
289
|
bookmarksRemoved: number;
|
|
262
290
|
blocksRestored: number;
|
|
263
291
|
}>;
|
|
292
|
+
/**
|
|
293
|
+
* Produce the CLEAN artifact for a write-time editing session (#126): accept
|
|
294
|
+
* the AI actor's tracked edits on an *isolated copy* of this document — this
|
|
295
|
+
* instance is left unmutated, so a paired tracked artifact can still be
|
|
296
|
+
* serialized from it — then serialize with minimal reserialization against
|
|
297
|
+
* THIS document's original on-disk document.xml.
|
|
298
|
+
*
|
|
299
|
+
* The isolation matters for the #408 guarantee. Loading the isolated copy
|
|
300
|
+
* from a re-serialized buffer would reset its minimal-reserialization
|
|
301
|
+
* baseline to the already-normalized text, so body blocks the AI never
|
|
302
|
+
* touched would come back merely semantically equal (proofErr stripped, runs
|
|
303
|
+
* merged) rather than byte-identical to the source. Carrying THIS document's
|
|
304
|
+
* true baseline forward keeps untouched blocks pristine while accepted blocks
|
|
305
|
+
* emit as their final text.
|
|
306
|
+
*
|
|
307
|
+
* @see https://github.com/UseJunior/safe-docx/issues/408
|
|
308
|
+
*/
|
|
309
|
+
toAcceptedBuffer(selector: AiEditSelector, opts?: {
|
|
310
|
+
cleanBookmarks?: boolean;
|
|
311
|
+
}): Promise<{
|
|
312
|
+
buffer: Buffer;
|
|
313
|
+
bookmarksRemoved: number;
|
|
314
|
+
blocksRestored: number;
|
|
315
|
+
}>;
|
|
264
316
|
}
|
|
265
317
|
//# sourceMappingURL=document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/primitives/document.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAChH,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAoD,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClI,OAAO,EAAuB,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EAClC,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAa,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIzF,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAAsC,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAsC,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,OAAO,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAOL,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/primitives/document.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAChH,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAoD,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClI,OAAO,EAAuB,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EAClC,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAa,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIzF,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAAsC,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAsC,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAML,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,OAAO,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAOL,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAsGF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAoBF,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,iBAAiB,CAAsJ;IAC/K;;;;OAIG;IACH,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,OAAO;WAYM,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAsBxD,aAAa,IAAI,OAAO,EAAE;IAM1B,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAI3D,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMvD,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE;IAM1E;;;;OAIG;IACH,SAAS,IAAI,mBAAmB;IAyBhC;;;OAGG;IACH,QAAQ,IAAI,sBAAsB;IAI5B,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kCAAkC,GAC3C,OAAO,CAAC,yBAAyB,CAAC;IAgBrC;;;;OAIG;IACG,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwCnD;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwCnD;;;;;OAKG;YACW,uBAAuB;IAuBrC;;;;;OAKG;IACG,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiC9G;;;;OAIG;IACG,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiC9G,qBAAqB,IAAI,MAAM;IAM/B,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAC9E,UAAU,EAAE,YAAY,EAAE,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;KACzB;IA6BD;;;;;OAKG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;;;OAIG;IACH,cAAc,IAAI,WAAW;IAI7B,iBAAiB,CAAC,IAAI,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE;IA8B7K,WAAW,CAAC,MAAM,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;KAAE,GAAG,IAAI;IAmBnH;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;KAAE,GAAG,IAAI;IASpI,eAAe,CAAC,MAAM,EAAE;QACtB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,gBAAgB,EAAE,QAAQ,GAAG,OAAO,CAAC;QACrC,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE;IA4O/G,mBAAmB,CACjB,QAAQ,EAAE,wBAAwB,EAClC,GAAG,CAAC,EAAE,eAAe,GACpB,8BAA8B;IASjC,iBAAiB,CACf,QAAQ,EAAE,sBAAsB,EAChC,GAAG,CAAC,EAAE,eAAe,GACpB,4BAA4B;IAS/B,mBAAmB,CACjB,QAAQ,EAAE,wBAAwB,EAClC,GAAG,CAAC,EAAE,eAAe,GACpB,8BAA8B;IASjC;;;OAGG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,mBAAmB;IAIlE;;;;;OAKG;IACH,aAAa,CAAC,IAAI,GAAE,gBAAqB,GAAG,eAAe;IAS3D;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBpD;;;;;OAKG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAcnD,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIjC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAItD,aAAa,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ1E,mBAAmB;IAK3B,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIzC;;;;;;OAMG;IACG,UAAU,CAAC,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlE;;;;;;;OAOG;IACG,MAAM,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1D;;;;;;;;;;OAUG;IACG,WAAW,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI3D;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBrD;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3G;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtF;;;;OAIG;IACH,mBAAmB,IAAI,QAAQ;IAI/B;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAMrD;;;;;;;;;;;;OAYG;IACG,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAkCpK;;;;;;;;;;;;;;;;OAgBG;IACG,gBAAgB,CACpB,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAClC,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAOjF"}
|
|
@@ -25,6 +25,9 @@ import { validateAiRevisions as validateAiRevisionsImpl, } from './validate_ai_r
|
|
|
25
25
|
import { enumerateRevisionStoryPartPaths, REVISION_STORY_PART_PATHS, } from './revision-parts.js';
|
|
26
26
|
import { acceptChanges as acceptChangesImpl } from './accept_changes.js';
|
|
27
27
|
import { rejectChanges as rejectChangesImpl } from './reject_changes.js';
|
|
28
|
+
import { collectRevisionElements, resolveSelectedIds, detectAmbiguousOverlaps, selectedIdFilter, AmbiguousRevisionOverlapError, } from './accept_ai_edits.js';
|
|
29
|
+
import { revisionElementId } from './accept_changes.js';
|
|
30
|
+
import { TRACKED_CHANGE_ELEMENT_NAME_SET } from './revision-vocabulary.js';
|
|
28
31
|
import { bootstrapCommentParts, addComment as addCommentImpl, addCommentReply as addCommentReplyImpl, getComments as getCommentsImpl, getComment as getCommentImpl, deleteComment as deleteCommentImpl, } from './comments.js';
|
|
29
32
|
import { bootstrapFootnoteParts, getFootnotes as getFootnotesImpl, getFootnote as getFootnoteImpl, addFootnote as addFootnoteImpl, updateFootnoteText as updateFootnoteTextImpl, deleteFootnote as deleteFootnoteImpl, } from './footnotes.js';
|
|
30
33
|
function emptyAcceptChangesResult() {
|
|
@@ -79,7 +82,23 @@ function collectLiveFootnoteRefIds(doc) {
|
|
|
79
82
|
// The corresponding <w:footnote w:id=N> in footnotes.xml is then unreachable —
|
|
80
83
|
// remove it so the side part matches the post-sweep body. Reserved separator /
|
|
81
84
|
// continuationSeparator entries are preserved unconditionally.
|
|
82
|
-
|
|
85
|
+
/**
|
|
86
|
+
* True iff a footnote entry contains a tracked-change element whose id is not in
|
|
87
|
+
* `selectedIds` — a foreign revision that a selective sweep must not delete.
|
|
88
|
+
*/
|
|
89
|
+
function footnoteHasForeignRevision(fn, selectedIds) {
|
|
90
|
+
const els = fn.getElementsByTagNameNS(OOXML.W_NS, '*');
|
|
91
|
+
for (let i = 0; i < els.length; i++) {
|
|
92
|
+
const el = els.item(i);
|
|
93
|
+
if (!TRACKED_CHANGE_ELEMENT_NAME_SET.has(el.localName))
|
|
94
|
+
continue;
|
|
95
|
+
const id = revisionElementId(el);
|
|
96
|
+
if (id == null || !selectedIds.has(id))
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
function pruneOrphanedFootnotes(footnotesDoc, liveRefIds, protectForeign) {
|
|
83
102
|
const entries = Array.from(footnotesDoc.getElementsByTagNameNS(OOXML.W_NS, W.footnote));
|
|
84
103
|
let pruned = 0;
|
|
85
104
|
for (const fn of entries) {
|
|
@@ -91,6 +110,11 @@ function pruneOrphanedFootnotes(footnotesDoc, liveRefIds) {
|
|
|
91
110
|
continue;
|
|
92
111
|
if (liveRefIds.has(id))
|
|
93
112
|
continue;
|
|
113
|
+
// Selective mode: never delete a note that still carries a foreign revision
|
|
114
|
+
// (the mixed-author byte-identical invariant, #123/#125). Leaving an
|
|
115
|
+
// unreferenced note is package hygiene at worst, not data loss.
|
|
116
|
+
if (protectForeign && footnoteHasForeignRevision(fn, protectForeign))
|
|
117
|
+
continue;
|
|
94
118
|
fn.parentNode?.removeChild(fn);
|
|
95
119
|
pruned++;
|
|
96
120
|
}
|
|
@@ -229,7 +253,8 @@ export class DocxDocument {
|
|
|
229
253
|
}
|
|
230
254
|
/**
|
|
231
255
|
* Accept all tracked changes in document.xml plus supported revisionable
|
|
232
|
-
* side-story parts,
|
|
256
|
+
* side-story parts, resolving the supported revision subset. Unsupported
|
|
257
|
+
* advanced records remain classified gaps or preservation-only markup.
|
|
233
258
|
*/
|
|
234
259
|
async acceptChanges() {
|
|
235
260
|
const total = emptyAcceptChangesResult();
|
|
@@ -303,6 +328,101 @@ export class DocxDocument {
|
|
|
303
328
|
}
|
|
304
329
|
return total;
|
|
305
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Read all revisionable stories (document.xml + supported side parts) as parsed
|
|
333
|
+
* Documents, resolve the selector's target revision-id set across every story
|
|
334
|
+
* (a revision id is package-wide), and hard-error on any ambiguous overlap
|
|
335
|
+
* unless the selector opts into `normalizeFirst`.
|
|
336
|
+
*/
|
|
337
|
+
async prepareSelectiveStories(selector) {
|
|
338
|
+
const stories = [
|
|
339
|
+
{ path: null, doc: this.documentXml },
|
|
340
|
+
];
|
|
341
|
+
for (const partPath of REVISION_STORY_PART_PATHS) {
|
|
342
|
+
const xml = await this.zip.readTextOrNull(partPath);
|
|
343
|
+
if (xml)
|
|
344
|
+
stories.push({ path: partPath, doc: parseXml(xml) });
|
|
345
|
+
}
|
|
346
|
+
const allRevisionElements = stories.flatMap((s) => collectRevisionElements(s.doc));
|
|
347
|
+
const selectedIds = resolveSelectedIds(allRevisionElements, selector);
|
|
348
|
+
if (!selector.normalizeFirst) {
|
|
349
|
+
const overlaps = stories.flatMap((s) => detectAmbiguousOverlaps(s.doc, selectedIds));
|
|
350
|
+
if (overlaps.length > 0)
|
|
351
|
+
throw new AmbiguousRevisionOverlapError(overlaps);
|
|
352
|
+
}
|
|
353
|
+
return { stories, selectedIds };
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Accept only the revisions named by `selector` (by id or author) across
|
|
357
|
+
* document.xml and supported side-story parts, leaving every other revision
|
|
358
|
+
* byte-untouched (#123). Hard-errors on an ambiguous overlap unless
|
|
359
|
+
* `normalizeFirst` is set.
|
|
360
|
+
*/
|
|
361
|
+
async acceptAIEdits(selector) {
|
|
362
|
+
const { stories, selectedIds } = await this.prepareSelectiveStories(selector);
|
|
363
|
+
const filter = selectedIdFilter(selectedIds);
|
|
364
|
+
const total = emptyAcceptChangesResult();
|
|
365
|
+
const bodyResult = acceptChangesImpl(this.documentXml, { filter });
|
|
366
|
+
addAcceptChangesResult(total, bodyResult);
|
|
367
|
+
const liveFootnoteRefIds = bodyResult.deletionsAccepted > 0
|
|
368
|
+
? collectLiveFootnoteRefIds(this.documentXml)
|
|
369
|
+
: null;
|
|
370
|
+
for (const story of stories) {
|
|
371
|
+
if (story.path == null)
|
|
372
|
+
continue; // document.xml already swept above
|
|
373
|
+
const partResult = acceptChangesImpl(story.doc, { filter });
|
|
374
|
+
addAcceptChangesResult(total, partResult);
|
|
375
|
+
let footnotesPruned = 0;
|
|
376
|
+
if (story.path === 'word/footnotes.xml' && liveFootnoteRefIds) {
|
|
377
|
+
footnotesPruned = pruneOrphanedFootnotes(story.doc, liveFootnoteRefIds, selectedIds);
|
|
378
|
+
}
|
|
379
|
+
if (hasAcceptedChanges(partResult) || footnotesPruned > 0) {
|
|
380
|
+
this.zip.writeText(story.path, serializeXml(story.doc));
|
|
381
|
+
if (story.path === 'word/footnotes.xml')
|
|
382
|
+
this.footnotesXml = story.doc;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (hasAcceptedChanges(total)) {
|
|
386
|
+
this.dirty = true;
|
|
387
|
+
this.documentViewCache = null;
|
|
388
|
+
}
|
|
389
|
+
return { result: total, selectedIds: [...selectedIds] };
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Reject only the revisions named by `selector` across document.xml and
|
|
393
|
+
* supported side-story parts, leaving every other revision byte-untouched.
|
|
394
|
+
* Symmetric to {@link DocxDocument.acceptAIEdits}.
|
|
395
|
+
*/
|
|
396
|
+
async rejectAIEdits(selector) {
|
|
397
|
+
const { stories, selectedIds } = await this.prepareSelectiveStories(selector);
|
|
398
|
+
const filter = selectedIdFilter(selectedIds);
|
|
399
|
+
const total = emptyRejectChangesResult();
|
|
400
|
+
const bodyResult = rejectChangesImpl(this.documentXml, { filter });
|
|
401
|
+
addRejectChangesResult(total, bodyResult);
|
|
402
|
+
const liveFootnoteRefIds = bodyResult.insertionsRemoved > 0
|
|
403
|
+
? collectLiveFootnoteRefIds(this.documentXml)
|
|
404
|
+
: null;
|
|
405
|
+
for (const story of stories) {
|
|
406
|
+
if (story.path == null)
|
|
407
|
+
continue;
|
|
408
|
+
const partResult = rejectChangesImpl(story.doc, { filter });
|
|
409
|
+
addRejectChangesResult(total, partResult);
|
|
410
|
+
let footnotesPruned = 0;
|
|
411
|
+
if (story.path === 'word/footnotes.xml' && liveFootnoteRefIds) {
|
|
412
|
+
footnotesPruned = pruneOrphanedFootnotes(story.doc, liveFootnoteRefIds, selectedIds);
|
|
413
|
+
}
|
|
414
|
+
if (hasRejectedChanges(partResult) || footnotesPruned > 0) {
|
|
415
|
+
this.zip.writeText(story.path, serializeXml(story.doc));
|
|
416
|
+
if (story.path === 'word/footnotes.xml')
|
|
417
|
+
this.footnotesXml = story.doc;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
if (hasRejectedChanges(total)) {
|
|
421
|
+
this.dirty = true;
|
|
422
|
+
this.documentViewCache = null;
|
|
423
|
+
}
|
|
424
|
+
return { result: total, selectedIds: [...selectedIds] };
|
|
425
|
+
}
|
|
306
426
|
removeJuniorBookmarks() {
|
|
307
427
|
const removed = cleanupInternalBookmarks(this.documentXml);
|
|
308
428
|
if (removed > 0)
|
|
@@ -881,5 +1001,29 @@ export class DocxDocument {
|
|
|
881
1001
|
const buffer = await this.zip.toBuffer();
|
|
882
1002
|
return { buffer, bookmarksRemoved: 0, blocksRestored: 0 };
|
|
883
1003
|
}
|
|
1004
|
+
/**
|
|
1005
|
+
* Produce the CLEAN artifact for a write-time editing session (#126): accept
|
|
1006
|
+
* the AI actor's tracked edits on an *isolated copy* of this document — this
|
|
1007
|
+
* instance is left unmutated, so a paired tracked artifact can still be
|
|
1008
|
+
* serialized from it — then serialize with minimal reserialization against
|
|
1009
|
+
* THIS document's original on-disk document.xml.
|
|
1010
|
+
*
|
|
1011
|
+
* The isolation matters for the #408 guarantee. Loading the isolated copy
|
|
1012
|
+
* from a re-serialized buffer would reset its minimal-reserialization
|
|
1013
|
+
* baseline to the already-normalized text, so body blocks the AI never
|
|
1014
|
+
* touched would come back merely semantically equal (proofErr stripped, runs
|
|
1015
|
+
* merged) rather than byte-identical to the source. Carrying THIS document's
|
|
1016
|
+
* true baseline forward keeps untouched blocks pristine while accepted blocks
|
|
1017
|
+
* emit as their final text.
|
|
1018
|
+
*
|
|
1019
|
+
* @see https://github.com/UseJunior/safe-docx/issues/408
|
|
1020
|
+
*/
|
|
1021
|
+
async toAcceptedBuffer(selector, opts) {
|
|
1022
|
+
const cleanBookmarks = opts?.cleanBookmarks ?? true;
|
|
1023
|
+
const isolated = await DocxDocument.load((await this.toBuffer({ cleanBookmarks: false })).buffer);
|
|
1024
|
+
isolated.originalDocumentXmlText = this.originalDocumentXmlText;
|
|
1025
|
+
await isolated.acceptAIEdits(selector);
|
|
1026
|
+
return isolated.toBuffer({ cleanBookmarks, minimalReserialization: cleanBookmarks });
|
|
1027
|
+
}
|
|
884
1028
|
}
|
|
885
1029
|
//# sourceMappingURL=document.js.map
|