@stll/folio-core 0.47.7 → 0.49.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/dist/ai-edits/apply.js +565 -121
- package/dist/ai-edits/minimal-replacement.d.ts +64 -0
- package/dist/ai-edits/minimal-replacement.js +282 -0
- package/dist/controller/fontReadiness.js +3 -3
- package/dist/controller/hyphenationReadiness.d.ts +19 -0
- package/dist/controller/hyphenationReadiness.js +47 -0
- package/dist/controller/layoutPipeline.d.ts +3 -0
- package/dist/controller/layoutPipeline.js +70 -18
- package/dist/display-list/build/buildDisplayList.js +39 -12
- package/dist/display-list/build/pageFurniture.d.ts +7 -1
- package/dist/display-list/build/pageFurniture.js +21 -8
- package/dist/display-list/build/paragraphPrimitives.js +68 -11
- package/dist/display-list/build/tablePrimitives.js +10 -6
- package/dist/display-list/build/textBoxPrimitives.js +1 -1
- package/dist/display-list/build/unsupported.d.ts +2 -2
- package/dist/display-list/build/unsupported.js +0 -0
- package/dist/display-list/dom/renderDisplayListToDom.js +0 -1
- package/dist/docx/attributeRemainder.js +10 -2
- package/dist/docx/blockContentParser.d.ts +2 -0
- package/dist/docx/blockContentParser.js +79 -64
- package/dist/docx/bulletMarkers.d.ts +18 -2
- package/dist/docx/bulletMarkers.js +27 -2
- package/dist/docx/commentParser.d.ts +2 -1
- package/dist/docx/commentParser.js +57 -45
- package/dist/docx/containerChildren.d.ts +21 -8
- package/dist/docx/containerChildren.js +39 -9
- package/dist/docx/documentParser.d.ts +5 -1
- package/dist/docx/documentParser.js +8 -5
- package/dist/docx/documentSectionFacts.d.ts +22 -0
- package/dist/docx/documentSectionFacts.js +43 -0
- package/dist/docx/drawingGroupChildren.d.ts +60 -0
- package/dist/docx/drawingGroupChildren.js +176 -0
- package/dist/docx/drawingUtils.js +3 -0
- package/dist/docx/fieldParser.d.ts +8 -1
- package/dist/docx/fieldParser.js +47 -3
- package/dist/docx/fontTableParser.js +34 -27
- package/dist/docx/footnoteParser.d.ts +3 -2
- package/dist/docx/footnoteParser.js +15 -12
- package/dist/docx/groupDrawingParser.d.ts +9 -2
- package/dist/docx/groupDrawingParser.js +125 -37
- package/dist/docx/headerFooterParser.d.ts +7 -2
- package/dist/docx/headerFooterParser.js +15 -5
- package/dist/docx/hyperlinkParser.d.ts +48 -36
- package/dist/docx/hyperlinkParser.js +97 -82
- package/dist/docx/numberingParser.js +108 -84
- package/dist/docx/packageParts.d.ts +45 -1
- package/dist/docx/packageParts.js +93 -2
- package/dist/docx/paraIdAttribute.d.ts +3 -2
- package/dist/docx/paragraphParser.d.ts +5 -1
- package/dist/docx/paragraphParser.js +468 -365
- package/dist/docx/paragraphProperties.js +123 -109
- package/dist/docx/paragraphPropertySource.d.ts +6 -1
- package/dist/docx/paragraphPropertySource.js +9 -1
- package/dist/docx/paragraphTextBoxEnrichment.d.ts +2 -1
- package/dist/docx/paragraphTextBoxEnrichment.js +143 -10
- package/dist/docx/parser.d.ts +7 -1
- package/dist/docx/parser.js +33 -16
- package/dist/docx/previewBudget.d.ts +55 -33
- package/dist/docx/previewBudget.js +59 -65
- package/dist/docx/rezip.js +41 -58
- package/dist/docx/runParser.d.ts +4 -1
- package/dist/docx/runParser.js +182 -184
- package/dist/docx/sdtProperties.js +87 -84
- package/dist/docx/sectionParser.js +169 -160
- package/dist/docx/selectiveSaveFlags.d.ts +10 -3
- package/dist/docx/selectiveSaveFlags.js +1 -1
- package/dist/docx/selectiveXmlPatch.d.ts +56 -34
- package/dist/docx/selectiveXmlPatch.js +222 -115
- package/dist/docx/serializer/groupTextBoxWriteBack.d.ts +12 -0
- package/dist/docx/serializer/groupTextBoxWriteBack.js +101 -0
- package/dist/docx/serializer/paragraphSerializer.js +47 -42
- package/dist/docx/serializer/runSerializer.d.ts +5 -1
- package/dist/docx/serializer/runSerializer.js +4 -3
- package/dist/docx/serializer/settingsSerializer.js +19 -1
- package/dist/docx/settingsParser.js +8 -0
- package/dist/docx/shapeAlternateContent.d.ts +25 -0
- package/dist/docx/shapeAlternateContent.js +52 -0
- package/dist/docx/streamingXmlParser.d.ts +6 -2
- package/dist/docx/streamingXmlParser.js +12 -7
- package/dist/docx/styleParser.js +34 -8
- package/dist/docx/tableParser.d.ts +21 -12
- package/dist/docx/tableParser.js +518 -441
- package/dist/docx/textBoxParser.d.ts +18 -5
- package/dist/docx/textBoxParser.js +12 -6
- package/dist/docx/verbatimCapture.d.ts +10 -8
- package/dist/docx/verbatimCapture.js +45 -2
- package/dist/docx/vmlImageParser.d.ts +15 -13
- package/dist/docx/vmlImageParser.js +75 -60
- package/dist/docx/vmlPreview.d.ts +3 -3
- package/dist/docx/vmlPreview.js +3 -4
- package/dist/docx/xmlNamespaceContext.d.ts +9 -0
- package/dist/docx/xmlNamespaceContext.js +54 -0
- package/dist/docx/xmlParser.d.ts +6 -3
- package/dist/docx/xmlParser.js +11 -41
- package/dist/docx/xmlResourceLimits.d.ts +2 -1
- package/dist/docx/xmlResourceLimits.js +4 -1
- package/dist/fonts/headlessMeasure.js +0 -0
- package/dist/headless-layout.d.ts +11 -2
- package/dist/headless-layout.js +153 -107
- package/dist/internal/headlessRevisionResolution.js +50 -13
- package/dist/internal/paragraphFormattingSerialization.js +3 -3
- package/dist/layout-bridge/convert/endnoteLayout.d.ts +65 -0
- package/dist/layout-bridge/convert/endnoteLayout.js +227 -0
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +19 -3
- package/dist/layout-bridge/convert/footnoteLayout.js +40 -31
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -7
- package/dist/layout-bridge/convert/headerFooterLayout.js +5 -20
- package/dist/layout-bridge/convert/paragraphMarkFormatting.d.ts +10 -0
- package/dist/layout-bridge/convert/paragraphMarkFormatting.js +59 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +29 -1
- package/dist/layout-bridge/convert/toFlowBlocks.js +284 -39
- package/dist/layout-bridge/engine/hitTest.js +5 -3
- package/dist/layout-bridge/engine/selectionRects.js +5 -3
- package/dist/layout-engine/anchorLayoutInCellCompatibility.d.ts +10 -0
- package/dist/layout-engine/anchorLayoutInCellCompatibility.js +22 -0
- package/dist/layout-engine/index.d.ts +2 -2
- package/dist/layout-engine/index.js +102 -14
- package/dist/layout-engine/justificationCompatibility.d.ts +1 -1
- package/dist/layout-engine/justificationCompatibility.js +9 -5
- package/dist/layout-engine/keep-together.d.ts +15 -6
- package/dist/layout-engine/keep-together.js +43 -16
- package/dist/layout-engine/layoutInstrumentation.d.ts +8 -2
- package/dist/layout-engine/layoutInstrumentation.js +8 -1
- package/dist/layout-engine/measure/advanceComposition.js +50 -7
- package/dist/layout-engine/measure/hyphenationDictionaries.d.ts +74 -0
- package/dist/layout-engine/measure/hyphenationDictionaries.js +138 -0
- package/dist/layout-engine/measure/hyphenationPreload.d.ts +11 -0
- package/dist/layout-engine/measure/hyphenationPreload.js +24 -0
- package/dist/layout-engine/measure/lineBreakProvider.d.ts +12 -2
- package/dist/layout-engine/measure/lineBreakProvider.js +30 -30
- package/dist/layout-engine/measure/lineBreaks.d.ts +6 -1
- package/dist/layout-engine/measure/lineBreaks.js +10 -3
- package/dist/layout-engine/measure/listMarkerWidth.d.ts +9 -6
- package/dist/layout-engine/measure/listMarkerWidth.js +20 -22
- package/dist/layout-engine/measure/measureBlocks.js +46 -10
- package/dist/layout-engine/measure/measureContainer.js +51 -8
- package/dist/layout-engine/measure/measureHelpers.d.ts +15 -3
- package/dist/layout-engine/measure/measureHelpers.js +34 -8
- package/dist/layout-engine/measure/measureParagraph.js +143 -101
- package/dist/layout-engine/measure/measureTypes.d.ts +5 -0
- package/dist/layout-engine/measure/smallCapsCasing.d.ts +56 -0
- package/dist/layout-engine/measure/smallCapsCasing.js +88 -0
- package/dist/layout-engine/measure/tabCalculator.d.ts +2 -0
- package/dist/layout-engine/measure/tabCalculator.js +2 -1
- package/dist/layout-engine/measure/tableCellFloating.d.ts +2 -0
- package/dist/layout-engine/measure/tableCellFloating.js +51 -19
- package/dist/layout-engine/measure/tableCellGrid.d.ts +28 -3
- package/dist/layout-engine/measure/tableCellGrid.js +45 -5
- package/dist/layout-engine/measure/tableFragmentBorderGeometry.js +2 -1
- package/dist/layout-engine/noteAreaFlow.d.ts +19 -0
- package/dist/layout-engine/noteAreaFlow.js +83 -0
- package/dist/layout-engine/paginator.d.ts +12 -1
- package/dist/layout-engine/paginator.js +18 -2
- package/dist/layout-engine/paragraphSpacing.d.ts +4 -2
- package/dist/layout-engine/paragraphSpacing.js +2 -1
- package/dist/layout-engine/tableRowBreak.d.ts +8 -1
- package/dist/layout-engine/tableRowBreak.js +25 -2
- package/dist/layout-engine/types.d.ts +108 -3
- package/dist/layout-engine/types.js +96 -1
- package/dist/layout-painter/index.d.ts +3 -0
- package/dist/layout-painter/renderPage.js +32 -83
- package/dist/layout-painter/renderParagraph.d.ts +6 -1
- package/dist/layout-painter/renderParagraph.js +75 -26
- package/dist/layout-painter/renderTable.js +26 -13
- package/dist/layout-painter/renderTextBox.d.ts +12 -2
- package/dist/layout-painter/renderTextBox.js +26 -2
- package/dist/prosemirror/alternateContentAttrs.d.ts +9 -0
- package/dist/prosemirror/alternateContentAttrs.js +35 -0
- package/dist/prosemirror/attrs/index.d.ts +9 -9
- package/dist/prosemirror/attrs/index.js +133 -11
- package/dist/prosemirror/commands/comments.js +51 -41
- package/dist/prosemirror/contentControlRevisions.d.ts +43 -0
- package/dist/prosemirror/contentControlRevisions.js +84 -0
- package/dist/prosemirror/conversion/fromProseDoc.js +54 -23
- package/dist/prosemirror/conversion/markInterner.d.ts +21 -0
- package/dist/prosemirror/conversion/markInterner.js +90 -0
- package/dist/prosemirror/conversion/toProseDoc.js +117 -58
- package/dist/prosemirror/extensions/core/DocExtension.js +2 -1
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +1 -0
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +7 -7
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +7 -7
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +6 -2
- package/dist/prosemirror/extensions/marks/markUtils.js +39 -51
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +6 -3
- package/dist/prosemirror/extensions/nodes/SdtExtension.js +9 -2
- package/dist/prosemirror/extensions/nodes/ShapeExtension.js +1 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +5 -1
- package/dist/prosemirror/listMarker.d.ts +1 -0
- package/dist/prosemirror/listMarker.js +4 -2
- package/dist/prosemirror/listRenderingAttrs.d.ts +1 -0
- package/dist/prosemirror/listRenderingAttrs.js +3 -0
- package/dist/prosemirror/paragraphDirection.d.ts +29 -2
- package/dist/prosemirror/paragraphDirection.js +21 -2
- package/dist/prosemirror/plugins/suggestionMode.js +37 -8
- package/dist/prosemirror/rejoinRunCarriers.d.ts +27 -0
- package/dist/prosemirror/rejoinRunCarriers.js +66 -0
- package/dist/prosemirror/runIdentityAcrossRevisions.d.ts +10 -0
- package/dist/prosemirror/runIdentityAcrossRevisions.js +90 -0
- package/dist/prosemirror/schema/nodes.d.ts +50 -6
- package/dist/prosemirror/textBoxHostParagraph.d.ts +13 -0
- package/dist/prosemirror/textBoxHostParagraph.js +21 -0
- package/dist/prosemirror/validation.js +91 -80
- package/dist/types/content.d.ts +2 -2
- package/dist/utils/createDocument.js +10 -1
- package/dist/utils/scriptSegments.d.ts +33 -4
- package/dist/utils/scriptSegments.js +39 -6
- package/dist/utils/textFormattingMerge.d.ts +17 -3
- package/dist/utils/textFormattingMerge.js +18 -12
- package/dist/utils/trailingText.d.ts +22 -0
- package/dist/utils/trailingText.js +32 -0
- package/package.json +2 -2
- package/dist/layout-engine/justifiedLineFit.d.ts +0 -7
- package/dist/layout-engine/justifiedLineFit.js +0 -6
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { sanitizeExternalUrl } from "../utils/urlSecurity.js";
|
|
2
|
-
import { CAPTURE,
|
|
2
|
+
import { CAPTURE, dispatchChildrenWithContext, ownedElsewhere, withPreservedChildren } from "./containerChildren.js";
|
|
3
3
|
import { inlineWrapperOf } from "./inlineWrapperParser.js";
|
|
4
4
|
import { preserveInlineChild, preservedInlineCapture } from "./preservedRunContent.js";
|
|
5
|
+
import { standalonePreviewLedger } from "./previewBudget.js";
|
|
5
6
|
import { RELATIONSHIP_TYPES, resolveRelationshipIdOfType } from "./relsParser.js";
|
|
6
7
|
import { parseRun } from "./runParser.js";
|
|
7
8
|
import { runHoldsPayload } from "./runPayload.js";
|
|
@@ -44,9 +45,40 @@ function parseBookmarkEnd(node) {
|
|
|
44
45
|
* @param styles - Style map for resolving run styles
|
|
45
46
|
* @param theme - Theme for resolving colors/fonts
|
|
46
47
|
* @param media - Media files map for image data
|
|
48
|
+
* @param previews - The ledger of the package this link belongs to; a link
|
|
49
|
+
* read on its own charges its previews to no package
|
|
47
50
|
* @returns Parsed Hyperlink object
|
|
48
51
|
*/
|
|
49
|
-
function parseHyperlink(node, rels, styles = null, theme = null, media = null, rootXmlns = {}) {
|
|
52
|
+
function parseHyperlink(node, rels, styles = null, theme = null, media = null, rootXmlns = {}, previews = standalonePreviewLedger()) {
|
|
53
|
+
const hyperlink = parseHyperlinkShell(node, rels);
|
|
54
|
+
const inScopeXmlns = mergeXmlnsDeclarations(rootXmlns, node);
|
|
55
|
+
const children = [];
|
|
56
|
+
hyperlink.children = withPreservedChildren(children, dispatchChildrenWithContext({
|
|
57
|
+
element: node,
|
|
58
|
+
container: "w:hyperlink",
|
|
59
|
+
capturePosition: () => children.length,
|
|
60
|
+
handlers: HYPERLINK_CHILD_HANDLERS,
|
|
61
|
+
context: {
|
|
62
|
+
push: (child) => {
|
|
63
|
+
children.push(child);
|
|
64
|
+
},
|
|
65
|
+
styles,
|
|
66
|
+
theme,
|
|
67
|
+
rels,
|
|
68
|
+
media,
|
|
69
|
+
previews,
|
|
70
|
+
inScopeXmlns
|
|
71
|
+
}
|
|
72
|
+
}), preservedInlineCapture);
|
|
73
|
+
return hyperlink;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A `w:hyperlink`'s own attributes as a link with no children yet.
|
|
77
|
+
*
|
|
78
|
+
* The paragraph parser's revision-segmenting walk reads the children itself,
|
|
79
|
+
* so it takes the shell rather than a link whose children it would discard.
|
|
80
|
+
*/
|
|
81
|
+
function parseHyperlinkShell(node, rels) {
|
|
50
82
|
const hyperlink = {
|
|
51
83
|
type: "hyperlink",
|
|
52
84
|
children: []
|
|
@@ -72,25 +104,12 @@ function parseHyperlink(node, rels, styles = null, theme = null, media = null, r
|
|
|
72
104
|
if (history !== void 0) hyperlink.history = history;
|
|
73
105
|
const docLocation = getAttribute(node, "w", "docLocation");
|
|
74
106
|
if (docLocation) hyperlink.docLocation = docLocation;
|
|
75
|
-
const inScopeXmlns = mergeXmlnsDeclarations(rootXmlns, node);
|
|
76
|
-
const children = [];
|
|
77
|
-
hyperlink.children = withPreservedChildren(children, dispatchChildren({
|
|
78
|
-
element: node,
|
|
79
|
-
container: "w:hyperlink",
|
|
80
|
-
capturePosition: () => children.length,
|
|
81
|
-
handlers: hyperlinkChildHandlers({
|
|
82
|
-
push: (child) => {
|
|
83
|
-
children.push(child);
|
|
84
|
-
},
|
|
85
|
-
styles,
|
|
86
|
-
theme,
|
|
87
|
-
rels,
|
|
88
|
-
media,
|
|
89
|
-
inScopeXmlns
|
|
90
|
-
})
|
|
91
|
-
}), preservedInlineCapture);
|
|
92
107
|
return hyperlink;
|
|
93
108
|
}
|
|
109
|
+
/** A transparent wrapper the link holds, read as the wrapper it is. */
|
|
110
|
+
const linkedInlineWrapper = (element) => (child, context) => {
|
|
111
|
+
context.push(parseLinkedInlineWrapper(element, child, context));
|
|
112
|
+
};
|
|
94
113
|
/**
|
|
95
114
|
* What a `w:hyperlink` does with every child its content model declares.
|
|
96
115
|
*
|
|
@@ -108,56 +127,50 @@ function parseHyperlink(node, rels, styles = null, theme = null, media = null, r
|
|
|
108
127
|
* recognising is recognised by all of them rather than by whichever list
|
|
109
128
|
* somebody remembered to update.
|
|
110
129
|
*/
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
permEnd: CAPTURE,
|
|
156
|
-
permStart: CAPTURE,
|
|
157
|
-
proofErr: CAPTURE,
|
|
158
|
-
sdt: CAPTURE,
|
|
159
|
-
subDoc: CAPTURE
|
|
160
|
-
};
|
|
130
|
+
const HYPERLINK_CHILD_HANDLERS = {
|
|
131
|
+
r: (child, { push, styles, theme, rels, media, previews, inScopeXmlns }) => {
|
|
132
|
+
const run = parseRun(child, styles, theme, rels, media, inScopeXmlns, previews);
|
|
133
|
+
if (runHoldsPayload(run)) push(run);
|
|
134
|
+
},
|
|
135
|
+
bookmarkStart: (child, { push }) => {
|
|
136
|
+
push(parseBookmarkStart(child));
|
|
137
|
+
},
|
|
138
|
+
bookmarkEnd: (child, { push }) => {
|
|
139
|
+
push(parseBookmarkEnd(child));
|
|
140
|
+
},
|
|
141
|
+
bdo: linkedInlineWrapper("bdo"),
|
|
142
|
+
dir: linkedInlineWrapper("dir"),
|
|
143
|
+
customXml: linkedInlineWrapper("customXml"),
|
|
144
|
+
smartTag: linkedInlineWrapper("smartTag"),
|
|
145
|
+
del: CAPTURE,
|
|
146
|
+
ins: CAPTURE,
|
|
147
|
+
moveFrom: CAPTURE,
|
|
148
|
+
moveTo: CAPTURE,
|
|
149
|
+
commentRangeEnd: CAPTURE,
|
|
150
|
+
commentRangeStart: CAPTURE,
|
|
151
|
+
customXmlDelRangeEnd: CAPTURE,
|
|
152
|
+
customXmlDelRangeStart: CAPTURE,
|
|
153
|
+
customXmlInsRangeEnd: CAPTURE,
|
|
154
|
+
customXmlInsRangeStart: CAPTURE,
|
|
155
|
+
customXmlMoveFromRangeEnd: CAPTURE,
|
|
156
|
+
customXmlMoveFromRangeStart: CAPTURE,
|
|
157
|
+
customXmlMoveToRangeEnd: CAPTURE,
|
|
158
|
+
customXmlMoveToRangeStart: CAPTURE,
|
|
159
|
+
fldSimple: (child, { push }) => {
|
|
160
|
+
push(preserveInlineChild(child));
|
|
161
|
+
},
|
|
162
|
+
hyperlink: (child, { push }) => {
|
|
163
|
+
push(preserveInlineChild(child));
|
|
164
|
+
},
|
|
165
|
+
moveFromRangeEnd: CAPTURE,
|
|
166
|
+
moveFromRangeStart: CAPTURE,
|
|
167
|
+
moveToRangeEnd: CAPTURE,
|
|
168
|
+
moveToRangeStart: CAPTURE,
|
|
169
|
+
permEnd: CAPTURE,
|
|
170
|
+
permStart: CAPTURE,
|
|
171
|
+
proofErr: CAPTURE,
|
|
172
|
+
sdt: CAPTURE,
|
|
173
|
+
subDoc: CAPTURE
|
|
161
174
|
};
|
|
162
175
|
const LINKED_SMART_TAG_PROPERTIES_OWNER = ownedElsewhere({
|
|
163
176
|
container: "run-level-content",
|
|
@@ -169,6 +182,12 @@ const LINKED_CUSTOM_XML_PROPERTIES_OWNER = ownedElsewhere({
|
|
|
169
182
|
child: "customXmlPr",
|
|
170
183
|
reader: "inlineWrapperParser#inlineWrapperOf"
|
|
171
184
|
});
|
|
185
|
+
const LINKED_INLINE_WRAPPER_HANDLERS = {
|
|
186
|
+
...HYPERLINK_CHILD_HANDLERS,
|
|
187
|
+
customXmlPr: LINKED_CUSTOM_XML_PROPERTIES_OWNER,
|
|
188
|
+
smartTagPr: LINKED_SMART_TAG_PROPERTIES_OWNER,
|
|
189
|
+
pPr: CAPTURE
|
|
190
|
+
};
|
|
172
191
|
/**
|
|
173
192
|
* A transparent wrapper a link holds, with the content the link would hold.
|
|
174
193
|
*
|
|
@@ -185,21 +204,17 @@ const LINKED_CUSTOM_XML_PROPERTIES_OWNER = ownedElsewhere({
|
|
|
185
204
|
const parseLinkedInlineWrapper = (element, node, context) => {
|
|
186
205
|
const inScopeXmlns = mergeXmlnsDeclarations(context.inScopeXmlns, node);
|
|
187
206
|
const content = [];
|
|
188
|
-
return inlineWrapperOf(element, node, withPreservedChildren(content,
|
|
207
|
+
return inlineWrapperOf(element, node, withPreservedChildren(content, dispatchChildrenWithContext({
|
|
189
208
|
element: node,
|
|
190
209
|
container: "run-level-content",
|
|
191
210
|
capturePosition: () => content.length,
|
|
192
|
-
handlers:
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}),
|
|
200
|
-
customXmlPr: LINKED_CUSTOM_XML_PROPERTIES_OWNER,
|
|
201
|
-
smartTagPr: LINKED_SMART_TAG_PROPERTIES_OWNER,
|
|
202
|
-
pPr: CAPTURE
|
|
211
|
+
handlers: LINKED_INLINE_WRAPPER_HANDLERS,
|
|
212
|
+
context: {
|
|
213
|
+
...context,
|
|
214
|
+
inScopeXmlns,
|
|
215
|
+
push: (child) => {
|
|
216
|
+
content.push(child);
|
|
217
|
+
}
|
|
203
218
|
}
|
|
204
219
|
}), preservedInlineCapture));
|
|
205
220
|
};
|
|
@@ -346,4 +361,4 @@ function createExternalHyperlink(url, children, options) {
|
|
|
346
361
|
};
|
|
347
362
|
}
|
|
348
363
|
//#endregion
|
|
349
|
-
export { createExternalHyperlink, createInternalHyperlink, getHyperlinkRuns, getHyperlinkText, getHyperlinkUrl, hasContent,
|
|
364
|
+
export { HYPERLINK_CHILD_HANDLERS, createExternalHyperlink, createInternalHyperlink, getHyperlinkRuns, getHyperlinkText, getHyperlinkUrl, hasContent, isExternalLink, isInternalLink, parseHyperlink, parseHyperlinkShell, resolveHyperlinkUrl };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DERIVED_PART_ROOT_ATTRIBUTES, attributeRemainder } from "./attributeRemainder.js";
|
|
2
|
-
import { CAPTURE,
|
|
2
|
+
import { CAPTURE, dispatchChildrenWithContext, sequencePositions } from "./containerChildren.js";
|
|
3
3
|
import { isNumberingReference } from "./numberingReference.js";
|
|
4
4
|
import { formatOoxmlCounter, padDecimal } from "./ooxmlCounterFormatter.js";
|
|
5
5
|
import { parseParagraphProperties } from "./paragraphProperties.js";
|
|
@@ -25,6 +25,29 @@ const integerValue = (element) => {
|
|
|
25
25
|
return parsed === void 0 || !Number.isFinite(parsed) ? void 0 : parsed;
|
|
26
26
|
};
|
|
27
27
|
/**
|
|
28
|
+
* A field read off a sequence child, when the child stated one.
|
|
29
|
+
*
|
|
30
|
+
* `CT_AbstractNum` and `CT_Lvl` are sequences and the serializer writes these
|
|
31
|
+
* fields back in that order, so the sink's index is a count of what has been
|
|
32
|
+
* read and a capture lands between the same two neighbours it sat between.
|
|
33
|
+
*/
|
|
34
|
+
const assignDefined = (target, key, carried) => {
|
|
35
|
+
if (carried === void 0) return;
|
|
36
|
+
target[key] = carried;
|
|
37
|
+
};
|
|
38
|
+
const NUMBERING_HANDLERS = {
|
|
39
|
+
abstractNum: (child, definitions) => {
|
|
40
|
+
const parsed = parseAbstractNumbering(child);
|
|
41
|
+
if (parsed) definitions.abstractNums.push(parsed);
|
|
42
|
+
},
|
|
43
|
+
num: (child, definitions) => {
|
|
44
|
+
const parsed = parseNumberingInstance(child);
|
|
45
|
+
if (parsed) definitions.nums.push(parsed);
|
|
46
|
+
},
|
|
47
|
+
numPicBullet: CAPTURE,
|
|
48
|
+
numIdMacAtCleanup: CAPTURE
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
28
51
|
* Parse numbering.xml into NumberingDefinitions
|
|
29
52
|
*
|
|
30
53
|
* @param numberingXml - Raw XML string from word/numbering.xml (or null if not present)
|
|
@@ -38,22 +61,12 @@ function parseNumbering(numberingXml) {
|
|
|
38
61
|
if (!numberingXml) return createNumberingMap(definitions);
|
|
39
62
|
const root = parseXmlDocument(numberingXml);
|
|
40
63
|
if (!root) return createNumberingMap(definitions);
|
|
41
|
-
const preserved =
|
|
64
|
+
const preserved = dispatchChildrenWithContext({
|
|
42
65
|
element: root,
|
|
43
66
|
container: "w:numbering",
|
|
44
67
|
capturePosition: sequencePositions("w:numbering", root),
|
|
45
|
-
handlers:
|
|
46
|
-
|
|
47
|
-
const parsed = parseAbstractNumbering(child);
|
|
48
|
-
if (parsed) definitions.abstractNums.push(parsed);
|
|
49
|
-
},
|
|
50
|
-
num: (child) => {
|
|
51
|
-
const parsed = parseNumberingInstance(child);
|
|
52
|
-
if (parsed) definitions.nums.push(parsed);
|
|
53
|
-
},
|
|
54
|
-
numPicBullet: CAPTURE,
|
|
55
|
-
numIdMacAtCleanup: CAPTURE
|
|
56
|
-
}
|
|
68
|
+
handlers: NUMBERING_HANDLERS,
|
|
69
|
+
context: definitions
|
|
57
70
|
});
|
|
58
71
|
if (preserved !== void 0) definitions.preserved = preserved;
|
|
59
72
|
const preservedAttributes = attributeRemainder({
|
|
@@ -63,6 +76,18 @@ function parseNumbering(numberingXml) {
|
|
|
63
76
|
if (preservedAttributes !== void 0) definitions.preservedAttributes = preservedAttributes;
|
|
64
77
|
return createNumberingMap(definitions);
|
|
65
78
|
}
|
|
79
|
+
const ABSTRACT_NUM_HANDLERS = {
|
|
80
|
+
nsid: (child, abstractNum) => assignDefined(abstractNum, "nsid", attributeValue(child)),
|
|
81
|
+
multiLevelType: (child, abstractNum) => assignDefined(abstractNum, "multiLevelType", narrow(attributeValue(child), MULTI_LEVEL_TYPES)),
|
|
82
|
+
tmpl: (child, abstractNum) => assignDefined(abstractNum, "tmpl", attributeValue(child)),
|
|
83
|
+
name: (child, abstractNum) => assignDefined(abstractNum, "name", attributeValue(child)),
|
|
84
|
+
styleLink: (child, abstractNum) => assignDefined(abstractNum, "styleLink", attributeValue(child)),
|
|
85
|
+
numStyleLink: (child, abstractNum) => assignDefined(abstractNum, "numStyleLink", attributeValue(child)),
|
|
86
|
+
lvl: (child, abstractNum) => {
|
|
87
|
+
const level = parseListLevel(child);
|
|
88
|
+
if (level) abstractNum.levels.push(level);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
66
91
|
/**
|
|
67
92
|
* Parse a single w:abstractNum element
|
|
68
93
|
*/
|
|
@@ -75,26 +100,12 @@ function parseAbstractNumbering(element) {
|
|
|
75
100
|
abstractNumId,
|
|
76
101
|
levels: []
|
|
77
102
|
};
|
|
78
|
-
const
|
|
79
|
-
if (value === void 0) return;
|
|
80
|
-
abstractNum[key] = value;
|
|
81
|
-
};
|
|
82
|
-
const preserved = dispatchChildren({
|
|
103
|
+
const preserved = dispatchChildrenWithContext({
|
|
83
104
|
element,
|
|
84
105
|
container: "w:abstractNum",
|
|
85
106
|
capturePosition: sequencePositions("w:abstractNum", element),
|
|
86
|
-
handlers:
|
|
87
|
-
|
|
88
|
-
multiLevelType: (child) => read("multiLevelType", narrow(attributeValue(child), MULTI_LEVEL_TYPES)),
|
|
89
|
-
tmpl: (child) => read("tmpl", attributeValue(child)),
|
|
90
|
-
name: (child) => read("name", attributeValue(child)),
|
|
91
|
-
styleLink: (child) => read("styleLink", attributeValue(child)),
|
|
92
|
-
numStyleLink: (child) => read("numStyleLink", attributeValue(child)),
|
|
93
|
-
lvl: (child) => {
|
|
94
|
-
const level = parseListLevel(child);
|
|
95
|
-
if (level) abstractNum.levels.push(level);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
107
|
+
handlers: ABSTRACT_NUM_HANDLERS,
|
|
108
|
+
context: abstractNum
|
|
98
109
|
});
|
|
99
110
|
if (preserved !== void 0) abstractNum.preserved = preserved;
|
|
100
111
|
const preservedAttributes = attributeRemainder({
|
|
@@ -113,6 +124,16 @@ const MULTI_LEVEL_TYPES = [
|
|
|
113
124
|
"singleLevel"
|
|
114
125
|
];
|
|
115
126
|
const narrow = (carried, members) => members.find((member) => member === carried);
|
|
127
|
+
const NUMBERING_INSTANCE_HANDLERS = {
|
|
128
|
+
abstractNumId: (child, walk) => {
|
|
129
|
+
if (walk.abstractNumId !== void 0) return;
|
|
130
|
+
walk.abstractNumId = integerValue(child);
|
|
131
|
+
},
|
|
132
|
+
lvlOverride: (child, { levelOverrides }) => {
|
|
133
|
+
const override = parseLevelOverride(child);
|
|
134
|
+
if (override) levelOverrides.push(override);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
116
137
|
/**
|
|
117
138
|
* Parse a single w:num element (numbering instance)
|
|
118
139
|
*/
|
|
@@ -121,23 +142,18 @@ function parseNumberingInstance(element) {
|
|
|
121
142
|
if (numIdStr === null) return null;
|
|
122
143
|
const numId = Number.parseInt(numIdStr, 10);
|
|
123
144
|
if (Number.isNaN(numId)) return null;
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
145
|
+
const walk = {
|
|
146
|
+
abstractNumId: void 0,
|
|
147
|
+
levelOverrides: []
|
|
148
|
+
};
|
|
149
|
+
const preserved = dispatchChildrenWithContext({
|
|
127
150
|
element,
|
|
128
151
|
container: "w:num",
|
|
129
152
|
capturePosition: sequencePositions("w:num", element),
|
|
130
|
-
handlers:
|
|
131
|
-
|
|
132
|
-
if (abstractNumId !== void 0) return;
|
|
133
|
-
abstractNumId = integerValue(child);
|
|
134
|
-
},
|
|
135
|
-
lvlOverride: (child) => {
|
|
136
|
-
const override = parseLevelOverride(child);
|
|
137
|
-
if (override) levelOverrides.push(override);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
153
|
+
handlers: NUMBERING_INSTANCE_HANDLERS,
|
|
154
|
+
context: walk
|
|
140
155
|
});
|
|
156
|
+
const { abstractNumId, levelOverrides } = walk;
|
|
141
157
|
if (abstractNumId === void 0) return null;
|
|
142
158
|
const instance = {
|
|
143
159
|
numId,
|
|
@@ -152,6 +168,16 @@ function parseNumberingInstance(element) {
|
|
|
152
168
|
if (preservedAttributes !== void 0) instance.preservedAttributes = preservedAttributes;
|
|
153
169
|
return instance;
|
|
154
170
|
}
|
|
171
|
+
const LEVEL_OVERRIDE_HANDLERS = {
|
|
172
|
+
startOverride: (child, override) => {
|
|
173
|
+
const start = integerValue(child);
|
|
174
|
+
if (start !== void 0 && override.startOverride === void 0) override.startOverride = start;
|
|
175
|
+
},
|
|
176
|
+
lvl: (child, override) => {
|
|
177
|
+
const level = parseListLevel(child);
|
|
178
|
+
if (level && override.lvl === void 0) override.lvl = level;
|
|
179
|
+
}
|
|
180
|
+
};
|
|
155
181
|
/**
|
|
156
182
|
* Parse a single w:lvlOverride element (one level of one numbering instance)
|
|
157
183
|
*/
|
|
@@ -159,20 +185,12 @@ function parseLevelOverride(element) {
|
|
|
159
185
|
const ilvl = parseNumericAttribute(element, "w", "ilvl");
|
|
160
186
|
if (ilvl === void 0) return null;
|
|
161
187
|
const override = { ilvl };
|
|
162
|
-
const preserved =
|
|
188
|
+
const preserved = dispatchChildrenWithContext({
|
|
163
189
|
element,
|
|
164
190
|
container: "w:lvlOverride",
|
|
165
191
|
capturePosition: sequencePositions("w:lvlOverride", element),
|
|
166
|
-
handlers:
|
|
167
|
-
|
|
168
|
-
const start = integerValue(child);
|
|
169
|
-
if (start !== void 0 && override.startOverride === void 0) override.startOverride = start;
|
|
170
|
-
},
|
|
171
|
-
lvl: (child) => {
|
|
172
|
-
const level = parseListLevel(child);
|
|
173
|
-
if (level && override.lvl === void 0) override.lvl = level;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
192
|
+
handlers: LEVEL_OVERRIDE_HANDLERS,
|
|
193
|
+
context: override
|
|
176
194
|
});
|
|
177
195
|
if (preserved !== void 0) override.preserved = preserved;
|
|
178
196
|
const preservedAttributes = attributeRemainder({
|
|
@@ -182,6 +200,34 @@ function parseLevelOverride(element) {
|
|
|
182
200
|
if (preservedAttributes !== void 0) override.preservedAttributes = preservedAttributes;
|
|
183
201
|
return override;
|
|
184
202
|
}
|
|
203
|
+
const LIST_LEVEL_HANDLERS = {
|
|
204
|
+
start: (child, level) => assignDefined(level, "start", integerValue(child)),
|
|
205
|
+
numFmt: (child, level) => {
|
|
206
|
+
const resolved = resolveNumFmt(child);
|
|
207
|
+
if (resolved === null) return CAPTURE;
|
|
208
|
+
Object.assign(level, resolved);
|
|
209
|
+
},
|
|
210
|
+
lvlRestart: (child, level) => assignDefined(level, "lvlRestart", integerValue(child)),
|
|
211
|
+
pStyle: (child, level) => assignDefined(level, "pStyle", attributeValue(child)),
|
|
212
|
+
isLgl: (child, level) => assignDefined(level, "isLgl", parseBooleanElement(child)),
|
|
213
|
+
suff: (child, level) => assignDefined(level, "suffix", narrowEnum(attributeValue(child), LevelSuffixSchema)),
|
|
214
|
+
lvlText: (child, level) => {
|
|
215
|
+
assignDefined(level, "lvlText", attributeValue(child) ?? "");
|
|
216
|
+
const isNull = parseOnOffAttribute(child, "w", "null");
|
|
217
|
+
if (isNull !== void 0) level.lvlTextNull = isNull;
|
|
218
|
+
},
|
|
219
|
+
lvlPicBulletId: (child, level) => assignDefined(level, "lvlPicBulletId", integerValue(child)),
|
|
220
|
+
legacy: (child, level) => assignDefined(level, "legacy", legacyOf(child)),
|
|
221
|
+
lvlJc: (child, level) => assignDefined(level, "lvlJc", narrowEnum(attributeValue(child), ParagraphAlignmentSchema)),
|
|
222
|
+
pPr: (child, level) => assignDefined(level, "pPr", parseParagraphProperties(child, null) ?? {}),
|
|
223
|
+
rPr: (child, level) => assignDefined(level, "rPr", parseRunProperties(child, null, RUN_PROPERTY_OWNERS.standalone) ?? {})
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* `mc:AlternateContent` around a custom `w:numFmt` is read for its format by
|
|
227
|
+
* {@link parseListLevel}, and the writer re-emits that format as the level's
|
|
228
|
+
* own `w:numFmt`, so the walk takes it without a capture.
|
|
229
|
+
*/
|
|
230
|
+
const LIST_LEVEL_UNDECLARED = { AlternateContent: () => void 0 };
|
|
185
231
|
/**
|
|
186
232
|
* Parse a single w:lvl element (list level definition)
|
|
187
233
|
*/
|
|
@@ -194,37 +240,13 @@ function parseListLevel(element) {
|
|
|
194
240
|
lvlText: ""
|
|
195
241
|
};
|
|
196
242
|
const alternateEl = findChild(element, "mc", "AlternateContent");
|
|
197
|
-
const
|
|
198
|
-
if (value === void 0) return;
|
|
199
|
-
level[key] = value;
|
|
200
|
-
};
|
|
201
|
-
const preserved = dispatchChildren({
|
|
243
|
+
const preserved = dispatchChildrenWithContext({
|
|
202
244
|
element,
|
|
203
245
|
container: "w:lvl",
|
|
204
246
|
capturePosition: sequencePositions("w:lvl", element),
|
|
205
|
-
handlers:
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
const resolved = resolveNumFmt(child);
|
|
209
|
-
if (resolved === null) return CAPTURE;
|
|
210
|
-
Object.assign(level, resolved);
|
|
211
|
-
},
|
|
212
|
-
lvlRestart: (child) => read("lvlRestart", integerValue(child)),
|
|
213
|
-
pStyle: (child) => read("pStyle", attributeValue(child)),
|
|
214
|
-
isLgl: (child) => read("isLgl", parseBooleanElement(child)),
|
|
215
|
-
suff: (child) => read("suffix", narrowEnum(attributeValue(child), LevelSuffixSchema)),
|
|
216
|
-
lvlText: (child) => {
|
|
217
|
-
read("lvlText", attributeValue(child) ?? "");
|
|
218
|
-
const isNull = parseOnOffAttribute(child, "w", "null");
|
|
219
|
-
if (isNull !== void 0) level.lvlTextNull = isNull;
|
|
220
|
-
},
|
|
221
|
-
lvlPicBulletId: (child) => read("lvlPicBulletId", integerValue(child)),
|
|
222
|
-
legacy: (child) => read("legacy", legacyOf(child)),
|
|
223
|
-
lvlJc: (child) => read("lvlJc", narrowEnum(attributeValue(child), ParagraphAlignmentSchema)),
|
|
224
|
-
pPr: (child) => read("pPr", parseParagraphProperties(child, null) ?? {}),
|
|
225
|
-
rPr: (child) => read("rPr", parseRunProperties(child, null, RUN_PROPERTY_OWNERS.standalone) ?? {})
|
|
226
|
-
},
|
|
227
|
-
undeclared: { AlternateContent: () => void 0 }
|
|
247
|
+
handlers: LIST_LEVEL_HANDLERS,
|
|
248
|
+
undeclared: LIST_LEVEL_UNDECLARED,
|
|
249
|
+
context: level
|
|
228
250
|
});
|
|
229
251
|
if (preserved !== void 0) level.preserved = preserved;
|
|
230
252
|
const preservedAttributes = attributeRemainder({
|
|
@@ -340,7 +362,8 @@ const markerFormattingFromLevel = (formatting) => {
|
|
|
340
362
|
...formatting.italic !== void 0 ? { italic: formatting.italic } : {},
|
|
341
363
|
...formatting.italicCs !== void 0 ? { italicCs: formatting.italicCs } : {},
|
|
342
364
|
...formatting.rtl !== void 0 ? { rtl: formatting.rtl } : {},
|
|
343
|
-
...formatting.cs !== void 0 ? { cs: formatting.cs } : {}
|
|
365
|
+
...formatting.cs !== void 0 ? { cs: formatting.cs } : {},
|
|
366
|
+
...formatting.color !== void 0 ? { color: formatting.color } : {}
|
|
344
367
|
};
|
|
345
368
|
return Object.keys(markerFormatting).length > 0 ? markerFormatting : void 0;
|
|
346
369
|
};
|
|
@@ -450,6 +473,7 @@ function computeListRendering(numPr, numbering) {
|
|
|
450
473
|
if (level.rPr?.hidden) rendering.markerHidden = true;
|
|
451
474
|
const markerFormatting = markerFormattingFromLevel(level.rPr);
|
|
452
475
|
if (markerFormatting) rendering.markerFormatting = markerFormatting;
|
|
476
|
+
if (level.pPr?.tabs?.length) rendering.levelTabs = level.pPr.tabs;
|
|
453
477
|
if (level.rPr?.allCaps) rendering.markerAllCaps = true;
|
|
454
478
|
const markerAlignment = markerAlignmentForLevel(level.lvlJc);
|
|
455
479
|
if (markerAlignment !== void 0) rendering.markerAlignment = markerAlignment;
|
|
@@ -19,6 +19,16 @@ type PackageReferenceRepair = {
|
|
|
19
19
|
danglingRelationships: string[];
|
|
20
20
|
/** Parts a content-type override named that the package does not hold. */
|
|
21
21
|
danglingOverrides: string[];
|
|
22
|
+
/**
|
|
23
|
+
* `<part>|<id>` pairs: an `r:*`-style attribute in `part` named a
|
|
24
|
+
* relationship id that reconciliation just removed from `part`'s own
|
|
25
|
+
* `.rels` (because that relationship's target was itself a dangling
|
|
26
|
+
* reference). Dropping the relationship without also dropping the
|
|
27
|
+
* attribute that names it would trade one dangling reference for another —
|
|
28
|
+
* a `.rels` entry pointing nowhere becomes a content attribute pointing at
|
|
29
|
+
* nothing in its own `.rels`, which is no more valid.
|
|
30
|
+
*/
|
|
31
|
+
orphanedIdReferences: string[];
|
|
22
32
|
};
|
|
23
33
|
/**
|
|
24
34
|
* Make the package internally consistent before it is written: every internal
|
|
@@ -31,5 +41,39 @@ type PackageReferenceRepair = {
|
|
|
31
41
|
* which is what the repack tests assert about their own output.
|
|
32
42
|
*/
|
|
33
43
|
declare const reconcilePackageReferences: (zip: JSZip, compressionLevel: number) => Promise<PackageReferenceRepair>;
|
|
44
|
+
/**
|
|
45
|
+
* What {@link checkPackageIntegrity} found wrong with a package. Both fields
|
|
46
|
+
* are empty for a package where every internal relationship resolves and
|
|
47
|
+
* every reference to one does too — the state {@link reconcilePackageReferences}
|
|
48
|
+
* is meant to leave behind, and the state a save must never regress from.
|
|
49
|
+
*/
|
|
50
|
+
type PackageIntegrityReport = {
|
|
51
|
+
/**
|
|
52
|
+
* `<part>|<id>` pairs: an `r:*`-style attribute in `part` names a
|
|
53
|
+
* relationship id absent from `part`'s own `.rels` — the id was never
|
|
54
|
+
* declared, or a repair (this module's or any other) dropped it without
|
|
55
|
+
* also dropping the attribute that names it.
|
|
56
|
+
*/
|
|
57
|
+
unresolvedReferences: string[];
|
|
58
|
+
/**
|
|
59
|
+
* `<relsPart>|<target>` pairs: an internal (non-external) relationship in
|
|
60
|
+
* `relsPart` names a target the package does not hold.
|
|
61
|
+
*/
|
|
62
|
+
danglingRelationshipTargets: string[];
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Verify the two invariants an OPC package must hold for a conforming
|
|
66
|
+
* consumer to accept it: every `r:*` reference in an XML part resolves in
|
|
67
|
+
* that part's own `.rels`, and every internal relationship target names a
|
|
68
|
+
* part the package actually holds.
|
|
69
|
+
*
|
|
70
|
+
* A read-only counterpart to {@link reconcilePackageReferences} — that
|
|
71
|
+
* function repairs a package by removing what does not resolve; this one
|
|
72
|
+
* only reports what still does not, so a test can assert a save produced
|
|
73
|
+
* nothing for it to find. Cheap enough to run after every repack in a test
|
|
74
|
+
* or a corpus-gate invariant: one pass over the `.rels` parts building an id
|
|
75
|
+
* census, one pass over the XML parts checking references against it.
|
|
76
|
+
*/
|
|
77
|
+
declare const checkPackageIntegrity: (zip: JSZip) => Promise<PackageIntegrityReport>;
|
|
34
78
|
//#endregion
|
|
35
|
-
export { PackageReferenceRepair, isUnsafePackagePath, reconcilePackageReferences, removeUnsafeEntries };
|
|
79
|
+
export { PackageIntegrityReport, PackageReferenceRepair, checkPackageIntegrity, isUnsafePackagePath, reconcilePackageReferences, removeUnsafeEntries };
|