@docx-editor.dev/core 2.14.1 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +42 -0
  2. package/dist/automation.cjs +1 -1
  3. package/dist/automation.d.ts +6 -5
  4. package/dist/automation.js +1 -1
  5. package/dist/binding.cjs +1 -1
  6. package/dist/binding.d.ts +16 -10
  7. package/dist/binding.js +1 -1
  8. package/dist/chunk-24APKZAN.cjs +11 -0
  9. package/dist/chunk-2YH4MSHX.cjs +2 -0
  10. package/dist/chunk-5Y7AADI6.js +1 -0
  11. package/dist/chunk-AREFLNUP.js +11 -0
  12. package/dist/chunk-AS7YZNQE.cjs +2 -0
  13. package/dist/chunk-AVGCKH6A.cjs +20 -0
  14. package/dist/chunk-CDYVDQRI.cjs +5 -0
  15. package/dist/chunk-FGBADUSK.cjs +1 -0
  16. package/dist/chunk-HOEWFH5U.cjs +1 -0
  17. package/dist/chunk-KFELX7CN.js +2 -0
  18. package/dist/{chunk-OKEDGR65.js → chunk-KXPVOPR5.js} +1 -1
  19. package/dist/chunk-LGFKIF4M.cjs +1 -0
  20. package/dist/chunk-M52QXFKI.js +1 -0
  21. package/dist/chunk-MNUKSXRO.js +1 -0
  22. package/dist/chunk-PBOIGBDO.js +2 -0
  23. package/dist/chunk-PMHGONET.cjs +1 -0
  24. package/dist/chunk-PXKZUTHX.cjs +2 -0
  25. package/dist/chunk-Q4AB7E4O.cjs +1 -0
  26. package/dist/chunk-QJYH6AYD.js +1 -0
  27. package/dist/chunk-QRC37MWG.cjs +20 -0
  28. package/dist/chunk-RJSB6RJ7.js +20 -0
  29. package/dist/chunk-SB54HLFJ.js +20 -0
  30. package/dist/chunk-VP7SDFCM.js +1 -0
  31. package/dist/chunk-XCESLTJL.js +2 -0
  32. package/dist/{chunk-KIAP7PFQ.cjs → chunk-YL4Q5LZP.cjs} +1 -1
  33. package/dist/chunk-Z4527AXR.js +5 -0
  34. package/dist/collaboration/replication.cjs +1 -1
  35. package/dist/collaboration/replication.d.ts +4 -3
  36. package/dist/collaboration/replication.js +1 -1
  37. package/dist/collaboration.d.ts +4 -3
  38. package/dist/contracts/editor.d.ts +7 -7
  39. package/dist/contracts/interaction.d.ts +7 -7
  40. package/dist/contracts/modules.d.ts +8 -7
  41. package/dist/{custom-node-writes-DntmaAVW.d.ts → custom-node-writes-C9ArIlJh.d.ts} +2 -2
  42. package/dist/{editor-a6VvsfYU.d.ts → editor-sRxrFJd8.d.ts} +29 -21
  43. package/dist/editor.cjs +1 -1
  44. package/dist/editor.d.ts +27 -58
  45. package/dist/editor.js +1 -1
  46. package/dist/export.cjs +2 -0
  47. package/dist/export.d.ts +337 -0
  48. package/dist/export.js +2 -0
  49. package/dist/font-resolver-BYEHQGTw.d.ts +251 -0
  50. package/dist/headless-document-view-DELC4E5v.d.ts +134 -0
  51. package/dist/hf-references-DTrHkktY.d.ts +70 -0
  52. package/dist/{index-C5ZnSRkF.d.ts → index-C3Gvq4jN.d.ts} +55 -246
  53. package/dist/index.cjs +1 -1
  54. package/dist/index.d.ts +18 -16
  55. package/dist/index.js +1 -1
  56. package/dist/{shaped-measurer-CFPnXFs9.d.cts → layout-shaping-DoGR5cf8.d.ts} +86 -12
  57. package/dist/layout.cjs +1 -1
  58. package/dist/layout.d.ts +1106 -729
  59. package/dist/layout.js +1 -1
  60. package/dist/{note-properties-CDFiNXcD.d.ts → note-properties-DSe8igrz.d.ts} +2 -2
  61. package/dist/{omml-equation-BY49UOIF.d.ts → omml-equation-BpRmfDAf.d.ts} +1 -1
  62. package/dist/output.cjs +1 -1
  63. package/dist/output.d.ts +6 -6
  64. package/dist/output.js +1 -1
  65. package/dist/{protocol-gOY5GA8K.d.cts → protocol-DZzKxH5r.d.ts} +18 -12
  66. package/dist/{review-items-CCS1h93f.d.ts → review-items-DYRx187i.d.ts} +2 -2
  67. package/dist/{review-reads-BjZYeMd4.d.ts → review-reads-LbGUdNzn.d.ts} +22 -25
  68. package/dist/{revision-projection-BeXVrSSV.d.ts → revision-projection-DHRJH48u.d.ts} +1 -1
  69. package/dist/{semantic-cell-selection-BK91NCCG.d.ts → semantic-cell-selection-BXVWCBYm.d.ts} +4 -4
  70. package/dist/{semantic-interaction-BmQ7h2cq.d.ts → semantic-interaction-DZsDmPg5.d.ts} +1 -1
  71. package/dist/{semantic-paint-WJD2KeG1.d.ts → semantic-paint-f7SqN4oW.d.ts} +2 -2
  72. package/dist/{semantic-records-BpozY7-j.d.cts → semantic-records-EIdwId-a.d.ts} +301 -205
  73. package/dist/store.cjs +1 -1
  74. package/dist/store.d.ts +15 -65
  75. package/dist/store.js +1 -1
  76. package/dist/{tree-op-types-D6HzlPR4.d.ts → tree-op-types-egdarvH_.d.ts} +7 -3
  77. package/dist/{tree-package-fragment-CWFjgH6a.d.ts → tree-package-fragment-DjkH4ESI.d.ts} +4 -70
  78. package/dist/{tree-session-contract-B2HfGt79.d.ts → tree-session-contract-CGOOgPjW.d.ts} +29 -23
  79. package/dist/{tree-store-APgWx6qn.d.ts → tree-store-DKJB0IcA.d.ts} +2 -2
  80. package/package.json +7 -2
  81. package/dist/automation.d.cts +0 -82
  82. package/dist/binding.d.cts +0 -153
  83. package/dist/chunk-2PIHW2QM.cjs +0 -1
  84. package/dist/chunk-2QTY5S6T.js +0 -1
  85. package/dist/chunk-4Z5MODAE.cjs +0 -2
  86. package/dist/chunk-5TKAPFZT.cjs +0 -2
  87. package/dist/chunk-DRQHIQ4R.cjs +0 -1
  88. package/dist/chunk-F2K6SDHA.cjs +0 -20
  89. package/dist/chunk-FBA57EUJ.js +0 -2
  90. package/dist/chunk-KTAQ7BRQ.js +0 -20
  91. package/dist/chunk-LBAHXZCU.cjs +0 -5
  92. package/dist/chunk-MCDUQYWP.js +0 -5
  93. package/dist/chunk-MQP26KCF.js +0 -1
  94. package/dist/chunk-NDJGSR6M.cjs +0 -19
  95. package/dist/chunk-NJNFJPGB.cjs +0 -11
  96. package/dist/chunk-O5M4CR4P.cjs +0 -2
  97. package/dist/chunk-UKUOZXUD.js +0 -19
  98. package/dist/chunk-VQ4R5LTU.js +0 -2
  99. package/dist/chunk-ZBEJHJN2.js +0 -11
  100. package/dist/chunk-ZVTW7RGD.js +0 -2
  101. package/dist/collaboration/replication.d.cts +0 -216
  102. package/dist/collaboration.d.cts +0 -176
  103. package/dist/contracts/document.d.cts +0 -273
  104. package/dist/contracts/editor.d.cts +0 -10
  105. package/dist/contracts/interaction.d.cts +0 -10
  106. package/dist/contracts/modules.d.cts +0 -130
  107. package/dist/contracts/types.d.cts +0 -562
  108. package/dist/custom-node-writes-C46r3_5O.d.cts +0 -310
  109. package/dist/document-properties-D6Ahr8D6.d.cts +0 -28
  110. package/dist/document-properties-D6Ahr8D6.d.ts +0 -28
  111. package/dist/editor-AJ06hyyg.d.cts +0 -1994
  112. package/dist/editor.d.cts +0 -393
  113. package/dist/failure-BnGjoXf0.d.cts +0 -64
  114. package/dist/index-Cbw4lkOt.d.cts +0 -3391
  115. package/dist/index.d.cts +0 -23
  116. package/dist/layout.d.cts +0 -2486
  117. package/dist/note-properties-Y6qYh2Hv.d.cts +0 -67
  118. package/dist/omml-equation-DB8d-jCq.d.cts +0 -84
  119. package/dist/output.d.cts +0 -74
  120. package/dist/protocol-BsmQgblT.d.ts +0 -1358
  121. package/dist/review-items-CaAkgi5s.d.cts +0 -360
  122. package/dist/review-reads-DEsV0OOW.d.cts +0 -163
  123. package/dist/revision-projection-DXbrfNGD.d.cts +0 -156
  124. package/dist/semantic-cell-selection-BMhku3B1.d.cts +0 -451
  125. package/dist/semantic-interaction-DUAnxbgf.d.cts +0 -160
  126. package/dist/semantic-paint-DufNL1Zr.d.cts +0 -247
  127. package/dist/semantic-records-92UnKeU_.d.ts +0 -2821
  128. package/dist/shaped-measurer-BWbindlI.d.ts +0 -168
  129. package/dist/store.d.cts +0 -2500
  130. package/dist/tree-op-types-BUulYD5y.d.cts +0 -3099
  131. package/dist/tree-package-fragment-Dhyw7oPm.d.cts +0 -732
  132. package/dist/tree-session-contract-BY9xd7s_.d.cts +0 -613
  133. package/dist/tree-store-DEEQ9wz_.d.cts +0 -416
@@ -0,0 +1,337 @@
1
+ import { P as PreservedImageMime, G as ImageResourceLimits, y as SupportedImageMime, E as ImageDecodePort } from './tree-op-types-egdarvH_.js';
2
+ import { D as DocumentProperties, H as HeadlessDocumentView, a as HeadlessDocumentRejection } from './headless-document-view-DELC4E5v.js';
3
+ import { S as SemanticLayout, i as SemanticReviewArtifactRecord, I as InlineDrawingRecord, A as AnchoredDrawingRecord, T as TextMeasurer, h as FontRequest, j as FontSubstitution, k as ShapedRun, a as StyleSpanRecord } from './semantic-records-EIdwId-a.js';
4
+ import { R as RevisionDisplayMode } from './revision-projection-DHRJH48u.js';
5
+ import { P as PreparedLayoutFontConfiguration, L as LayoutShapingInstrumentation } from './layout-shaping-DoGR5cf8.js';
6
+ import { F as FontOriginFailure, a as FontOrigin } from './font-resolver-BYEHQGTw.js';
7
+ import './contracts/types.js';
8
+ import './hf-references-DTrHkktY.js';
9
+ import './omml-equation-BpRmfDAf.js';
10
+ import './editor-sRxrFJd8.js';
11
+ import './contracts/document.js';
12
+ import './review-items-DYRx187i.js';
13
+ import './semantic-interaction-DZsDmPg5.js';
14
+ import './failure-BnGjoXf0.js';
15
+
16
+ /** Bounded package metadata for exporter output dictionaries. @public */
17
+ type ExportDocumentMetadata = Readonly<DocumentProperties>;
18
+ /** Model address shared by bookmarks and internal hyperlinks. @public */
19
+ interface ExportDestinationAnchor {
20
+ readonly name: string;
21
+ readonly paragraphId: string;
22
+ readonly offset: number;
23
+ }
24
+ /** Laid-out jump target in the coordinate spaces export traversal uses. @public */
25
+ interface ExportDestinationGeometry {
26
+ readonly anchor: ExportDestinationAnchor;
27
+ readonly pageIndex: number;
28
+ /** Caret geometry in page-content coordinates (same space as line boxes). */
29
+ readonly pageContent: Readonly<{
30
+ readonly x: number;
31
+ readonly y: number;
32
+ readonly height: number;
33
+ }>;
34
+ /** Top-left of the caret in stacked page coordinates. */
35
+ readonly pageStack: Readonly<{
36
+ readonly x: number;
37
+ readonly y: number;
38
+ }>;
39
+ }
40
+ /**
41
+ * Resolve one internal destination name from a Core-produced export layout.
42
+ * @public
43
+ */
44
+ declare function exportDestinationNamed(layout: {
45
+ readonly destinations?: readonly ExportDestinationGeometry[];
46
+ }, name: string): ExportDestinationGeometry | undefined;
47
+
48
+ /** Optional caller conversion for preserved formats such as EMF/WMF/TIFF. @public */
49
+ type PreservedImageConverter = (bytes: Uint8Array, mime: PreservedImageMime, limits: ImageResourceLimits,
50
+ /** Aborted when the owning export session is disposed. */
51
+ signal?: AbortSignal) => Promise<Readonly<{
52
+ bytes: Uint8Array;
53
+ mime: SupportedImageMime;
54
+ }> | null>;
55
+ /**
56
+ * Decode raster dimensions from validated headers, with no native image dependency or DOM.
57
+ * SVG sizing is handled by the resource registry; preserved formats stay placeholders unless
58
+ * the caller supplies `convertPreserved`.
59
+ * @public
60
+ */
61
+ declare function createNodeImageDecodePort(options?: {
62
+ readonly convertPreserved?: PreservedImageConverter;
63
+ }): ImageDecodePort;
64
+
65
+ /** Source accepted by every exporter: untrusted bytes or an already-open live view. @public */
66
+ type ExportDocumentSource = Uint8Array | HeadlessDocumentView;
67
+ /** Shared session options; translators add their own format-specific options. @public */
68
+ interface OpenDocumentForExportOptions {
69
+ /**
70
+ * Revision projection applied before records reach an exporter. Default: `all-markup`.
71
+ *
72
+ * The safe reader default keeps every pending insertion and deletion visible. Choose
73
+ * `proposed` or `original` explicitly only when a resolved view is intended.
74
+ */
75
+ readonly displayMode?: RevisionDisplayMode;
76
+ /**
77
+ * Text measurement used for line wrapping and pagination. Omit only when deterministic
78
+ * approximate pagination is acceptable. Core then uses a fixed-width fallback that neither
79
+ * resolves nor shapes the document's fonts, so line and page breaks can differ from Word.
80
+ * Exporters promising physical-page fidelity must supply a font-backed measurer. For immutable
81
+ * DOCX bytes with document-aware font origins, use {@link openFontBackedDocumentForExport};
82
+ * {@link acquireSharedExportShaping} is for process-static prepared configurations or a live
83
+ * host that already owns revision-stable shaping.
84
+ */
85
+ readonly measurer?: TextMeasurer;
86
+ /**
87
+ * Stable measurement implementation identity used by layout caches and diagnostics. Pair it
88
+ * with the exact shaping policy behind `measurer`; it is not a substitute for matching metrics.
89
+ */
90
+ readonly producer?: string;
91
+ /** Host image metadata decoder; omit for the bounded DOM-free Node decoder. */
92
+ readonly imageDecodePort?: ImageDecodePort;
93
+ /** Optional converter for preserved image formats the default decoder cannot inspect. */
94
+ readonly convertPreservedImage?: PreservedImageConverter;
95
+ /** Cancels resource waits and subsequent layouts. */
96
+ readonly signal?: AbortSignal;
97
+ /** Maximum time spent waiting for image resources in one layout call. Default: 60 seconds. */
98
+ readonly resourceTimeoutMs?: number;
99
+ /** Retain incremental state for a live view. Defaults to true for views and false for bytes. */
100
+ readonly reuseAcrossRevisions?: boolean;
101
+ }
102
+ /**
103
+ * Export-ready semantic snapshot. Core guarantees normalized review artifacts for every session,
104
+ * including an empty immutable array when the source has none. A resolved snapshot is recursively
105
+ * immutable and remains traversable after its producer session is disposed; disposal only revokes
106
+ * session-owned work and capabilities such as {@link ExportSession.validatedImageBytes}.
107
+ * @public
108
+ */
109
+ interface ExportSemanticLayout extends SemanticLayout {
110
+ readonly reviewArtifacts: readonly SemanticReviewArtifactRecord[];
111
+ readonly documentMetadata?: ExportDocumentMetadata;
112
+ readonly destinations?: readonly ExportDestinationGeometry[];
113
+ }
114
+ /** Bounded failure from a headless export session. @public */
115
+ declare class ExportResourceError extends Error {
116
+ readonly code: 'aborted' | 'timedOut' | 'nonConvergent' | 'disposed' | 'layoutInvariant' | 'layoutFailed';
117
+ constructor(code: 'aborted' | 'timedOut' | 'nonConvergent' | 'disposed' | 'layoutInvariant' | 'layoutFailed', message: string, options?: ErrorOptions);
118
+ }
119
+ /**
120
+ * A single semantic-layout substrate reusable by Markdown and later exporters. Pagination
121
+ * fidelity is determined by the session's measurer; core's default is deterministic, not
122
+ * font-accurate.
123
+ * @public
124
+ */
125
+ interface ExportSession {
126
+ /** Settle resources and return the default revision projection. */
127
+ layout(): Promise<ExportSemanticLayout>;
128
+ /** Settle resources and cache one explicit revision projection. */
129
+ layoutFor(displayMode: RevisionDisplayMode): Promise<ExportSemanticLayout>;
130
+ /** Mint a defensive copy only for a ready drawing from this session. */
131
+ validatedImageBytes(drawing: InlineDrawingRecord | AnchoredDrawingRecord): Uint8Array | null;
132
+ /**
133
+ * Release per-document caches, pending resource work, and image-byte capabilities. Idempotent.
134
+ * Previously resolved layout snapshots remain immutable and traversable after disposal.
135
+ */
136
+ dispose(): void;
137
+ }
138
+ /** Typed refusal for bytes that cannot become a document view, or an already-aborted open. @public */
139
+ type OpenDocumentForExportResult = {
140
+ readonly ok: true;
141
+ readonly session: ExportSession;
142
+ } | {
143
+ readonly ok: false;
144
+ readonly reason: HeadlessDocumentRejection | 'aborted';
145
+ readonly detail?: string;
146
+ };
147
+ /** Open bytes or a live neutral view into one reusable layout session. @public */
148
+ declare function openDocumentForExport(source: ExportDocumentSource, options?: OpenDocumentForExportOptions): OpenDocumentForExportResult;
149
+
150
+ /** One paintable face in an export font-resolution report. @public */
151
+ interface ExportFontFaceResolution {
152
+ readonly weight: 400 | 700;
153
+ readonly style: 'normal' | 'italic';
154
+ readonly sourceFamily: string;
155
+ readonly via: 'direct' | 'substitution';
156
+ /** Admitted face identity (`hash#faceIndex`); remains after session disposal. */
157
+ readonly identity?: string;
158
+ readonly id?: string;
159
+ readonly hash?: string;
160
+ readonly faceIndex?: number;
161
+ /** Full substitution evidence; `null` when the admitted face answers the request directly. */
162
+ readonly substitution?: FontSubstitution | null;
163
+ }
164
+ /** Coverage of one family Core layout may request. @public */
165
+ interface ExportFontFamilyResolution {
166
+ readonly family: string;
167
+ readonly coverage: 'complete' | 'partial' | 'none';
168
+ readonly faces: readonly ExportFontFaceResolution[];
169
+ }
170
+ /** One document-embedded face the export mapper refused before composition. @public */
171
+ interface ExportDroppedEmbeddedFont {
172
+ readonly request: FontRequest;
173
+ readonly partName: string;
174
+ readonly reason: 'overLimit' | 'malformed';
175
+ }
176
+ /** Exporter-neutral evidence for the font policy behind one layout session. @public */
177
+ interface ExportFontResolutionReport {
178
+ readonly requestedFamilies: readonly string[];
179
+ readonly defaultFamily: string;
180
+ readonly families: readonly ExportFontFamilyResolution[];
181
+ readonly originFailures: readonly FontOriginFailure[];
182
+ /** Bounded drop evidence from the document-embedded font origin; omitted on legacy mocks. */
183
+ readonly droppedEmbeddedFonts?: readonly ExportDroppedEmbeddedFont[];
184
+ }
185
+ /** Byte-free admitted face identity for laid-out text and evidence. @public */
186
+ interface ExportAdmittedFontIdentity {
187
+ readonly id: string;
188
+ readonly identity: string;
189
+ readonly family: string;
190
+ readonly request: FontRequest;
191
+ readonly byteLength: number;
192
+ readonly hash: string;
193
+ readonly faceIndex: number;
194
+ readonly substitution: FontSubstitution | null;
195
+ }
196
+ /**
197
+ * Session-visible admitted face whose bytes are shared with the session shaper and
198
+ * content-hashed shaping cache. Treat {@link ExportAdmittedFontFace.bytes} as
199
+ * strictly read-only; in-place mutation can corrupt later shaping after cache
200
+ * eviction or before the first shape for that face.
201
+ * @public
202
+ */
203
+ interface ExportAdmittedFontFace extends ExportAdmittedFontIdentity {
204
+ /**
205
+ * Shared font bytes owned by the session shaper and shaping cache. Not a copy.
206
+ * Must be treated as read-only.
207
+ */
208
+ readonly bytes: Uint8Array;
209
+ }
210
+ /** Session capability that yields admitted face bytes on demand. @public */
211
+ interface ExportAdmittedFontApi {
212
+ /**
213
+ * Exact admitted face bytes and identity used by this session's measurer.
214
+ * Stops after disposal or abort; resolution evidence on `fontResolution` remains.
215
+ */
216
+ admittedFontFace(request: FontRequest): ExportAdmittedFontFace | null;
217
+ }
218
+ /** Whether a value publishes {@link ExportAdmittedFontApi}. @public */
219
+ declare function hasExportAdmittedFont<T extends object>(value: T): value is T & ExportAdmittedFontApi;
220
+
221
+ /**
222
+ * Exact shaped glyph run and admitted font identity for one published span.
223
+ *
224
+ * The run is shaped at the base size measurement uses. Callers apply the span's drawn-size
225
+ * factor, horizontal scale, and character spacing from {@link StyleSpanRecord.style}.
226
+ * `font` is a frozen byte-free descriptor; obtain bytes from the session font capability.
227
+ * @public
228
+ */
229
+ interface ExportLaidOutText {
230
+ readonly run: ShapedRun;
231
+ readonly font: ExportAdmittedFontIdentity;
232
+ readonly fixedPointScale: number;
233
+ }
234
+ /** Additive laid-out text shaping for font-backed export sessions and shared shaping. @public */
235
+ interface ExportLaidOutTextApi {
236
+ /**
237
+ * Shape one published span with the same configuration and policy as measurement.
238
+ * Returns null when measurement used the bounded fallback.
239
+ */
240
+ shapeLaidOutText(span: StyleSpanRecord): ExportLaidOutText | null;
241
+ }
242
+ /** Whether a value publishes {@link ExportLaidOutTextApi}. @public */
243
+ declare function hasExportLaidOutText<T extends object>(value: T): value is T & ExportLaidOutTextApi;
244
+
245
+ /** Immutable handle over process-wide measurement state reusable by every exporter. @public */
246
+ interface SharedExportShaping {
247
+ /** Create one document-scoped measurement cache over the process-wide immutable substrate. */
248
+ createMeasurer(): TextMeasurer;
249
+ /** Stable cache/diagnostic producer identity for export layout sessions. */
250
+ readonly producer: string;
251
+ /** Font and substitution identity shared with browser layout caches. */
252
+ readonly extensionFingerprint: string;
253
+ }
254
+ /** Core-produced shared shaping with exact laid-out text. @public */
255
+ type SharedExportShapingCapabilities = SharedExportShaping & ExportLaidOutTextApi;
256
+ /** Process-wide ceiling preventing host-derived cache keys from retaining unbounded font sets. @public */
257
+ declare const MAX_SHARED_EXPORT_SHAPING_CONFIGURATIONS = 32;
258
+ /**
259
+ * Acquire one process-wide shaped measurement substrate for a host configuration.
260
+ *
261
+ * Failed initialization is evicted so a corrected transient resource can retry. Successful
262
+ * native shaping and admitted font bytes intentionally live for the process lifetime; export
263
+ * sessions retain only their own layout caches and remain independently disposable.
264
+ * @public
265
+ */
266
+ declare function acquireSharedExportShaping(prepared: PreparedLayoutFontConfiguration, instrumentation?: LayoutShapingInstrumentation): Promise<SharedExportShapingCapabilities>;
267
+
268
+ /** Export session retaining the exact font evidence used to construct its measurer. @public */
269
+ interface FontBackedExportSession extends ExportSession {
270
+ /** Immutable font-resolution evidence; remains readable after session disposal. */
271
+ readonly fontResolution: ExportFontResolutionReport;
272
+ }
273
+ /** Core-produced font-backed session with admitted-face and laid-out-text capabilities. @public */
274
+ interface FontBackedExportCapabilities extends FontBackedExportSession, ExportAdmittedFontApi, ExportLaidOutTextApi {
275
+ }
276
+ /** Whether a value publishes both font-backed session capabilities. @public */
277
+ declare function hasFontBackedExportCapabilities<T extends object>(value: T): value is T & ExportAdmittedFontApi & ExportLaidOutTextApi;
278
+ /** Result of opening immutable bytes through Core's document-aware font composition root. @public */
279
+ type OpenFontBackedDocumentForExportResult = {
280
+ readonly ok: true;
281
+ readonly session: FontBackedExportCapabilities;
282
+ } | Exclude<OpenDocumentForExportResult, {
283
+ readonly ok: true;
284
+ }>;
285
+ /** Font-backed one-shot session options shared by Markdown and future exporters. @public */
286
+ interface OpenFontBackedDocumentForExportOptions extends Omit<OpenDocumentForExportOptions, 'measurer' | 'reuseAcrossRevisions'> {
287
+ /** Immutable font-backed byte sessions reject incremental revision reuse. */
288
+ readonly reuseAcrossRevisions?: false;
289
+ /** Ordered first-wins font origins resolved against this immutable DOCX. */
290
+ readonly fonts: FontOrigin | readonly FontOrigin[];
291
+ /** Font provisioning deadline; defaults to `resourceTimeoutMs`, then 60 seconds. */
292
+ readonly fontResolutionTimeoutMs?: number;
293
+ /** `strict` refuses incomplete face coverage or any failed origin. Default: `best-effort`. */
294
+ readonly fontPolicy?: 'best-effort' | 'strict';
295
+ /** Fire-and-forget diagnostics; returned promises are observed but do not delay export. */
296
+ readonly onFontResolution?: (report: ExportFontResolutionReport) => void;
297
+ }
298
+ /**
299
+ * Open immutable DOCX bytes with document-aware, session-owned font shaping.
300
+ *
301
+ * This is the composition root exporters should use. It parses before requesting fonts, applies
302
+ * cancellation/deadlines to provisioning, atomically binds the resulting measurer to that parsed
303
+ * view, and releases the document-specific font lease with the returned session. When best-effort
304
+ * resolution admits no source, the session retains Core's deterministic fixed measurer; strict
305
+ * policy already refuses that incomplete coverage. Mutable views are intentionally excluded: a
306
+ * live editor host must supply its own revision-stable measurer.
307
+ *
308
+ * @public
309
+ */
310
+ declare function openFontBackedDocumentForExport(source: Uint8Array, options: OpenFontBackedDocumentForExportOptions): Promise<OpenFontBackedDocumentForExportResult>;
311
+
312
+ /** Read packaged bytes from a confined local `file:` URL. Kept injectable for tests. @public */
313
+ type PackagedFileRead = (path: string | URL, options: {
314
+ readonly signal?: AbortSignal;
315
+ readonly maxBytes: number;
316
+ }) => Promise<Uint8Array>;
317
+ /**
318
+ * Bounds for {@link createPackagedFileFetch}. `trustedRoot` is one directory or a short
319
+ * host-chosen list of directories of allowed `file:` URLs. `maxBytes` is the per-file
320
+ * allocation ceiling and cannot exceed the engine font-byte ceiling.
321
+ * @public
322
+ */
323
+ interface PackagedFileFetchOptions {
324
+ readonly trustedRoot: string | URL | readonly (string | URL)[];
325
+ readonly maxBytes: number;
326
+ readonly read?: PackagedFileRead;
327
+ readonly networkFetch?: typeof fetch;
328
+ }
329
+ /**
330
+ * Build the packaged-asset fetch adapter shared by headless exporters.
331
+ * File reads stay inside the host-chosen `trustedRoot` list and never allocate more than `maxBytes`.
332
+ * Kept injectable for lifecycle and host-fetch tests.
333
+ * @public
334
+ */
335
+ declare function createPackagedFileFetch(options: PackagedFileFetchOptions): typeof fetch;
336
+
337
+ export { type ExportAdmittedFontApi, type ExportAdmittedFontFace, type ExportAdmittedFontIdentity, type ExportDestinationAnchor, type ExportDestinationGeometry, type ExportDocumentMetadata, type ExportDocumentSource, type ExportDroppedEmbeddedFont, type ExportFontFaceResolution, type ExportFontFamilyResolution, type ExportFontResolutionReport, type ExportLaidOutText, type ExportLaidOutTextApi, ExportResourceError, type ExportSemanticLayout, type ExportSession, type FontBackedExportCapabilities, type FontBackedExportSession, FontOrigin, FontOriginFailure, FontRequest, FontSubstitution, MAX_SHARED_EXPORT_SHAPING_CONFIGURATIONS, type OpenDocumentForExportOptions, type OpenDocumentForExportResult, type OpenFontBackedDocumentForExportOptions, type OpenFontBackedDocumentForExportResult, type PackagedFileFetchOptions, type PackagedFileRead, type PreservedImageConverter, type SharedExportShaping, type SharedExportShapingCapabilities, acquireSharedExportShaping, createNodeImageDecodePort, createPackagedFileFetch, exportDestinationNamed, hasExportAdmittedFont, hasExportLaidOutText, hasFontBackedExportCapabilities, openDocumentForExport, openFontBackedDocumentForExport };
package/dist/export.js ADDED
@@ -0,0 +1,2 @@
1
+ import {b,k,c as c$1,d,h,o,l}from'./chunk-MNUKSXRO.js';import {mb,y,Vc,Dd,ae,Cd,B,D,C,c,I as I$1,z,x,F,Rc,ge as ge$1,r,w as w$1,X,R,Te,Se,Ve as Ve$1,g,a,d as d$1,be,Ee,Zd,zd,uc,ad,Xd,Wd,sd,b as b$1,Fa,Vd,h as h$1,Va,ud,Ya,_a,Xa,td,$a,Za,ab,Wa,Da,Ga,Ca,xa,Na,Ye as Ye$2,jf,af,cf,bf,nc}from'./chunk-RJSB6RJ7.js';import'./chunk-RIYSCEFQ.js';import {c as c$2,a as a$1}from'./chunk-M52QXFKI.js';import'./chunk-VP7SDFCM.js';import {I}from'./chunk-PBOIGBDO.js';import {P,Q,Aa,Ga as Ga$1,Ha,La,va}from'./chunk-KFELX7CN.js';import {qb,Xe as Xe$1,Ye as Ye$1,de,ce,ca,sc,E,Dc,Xc,Ac,Ig,md,vf,Kg}from'./chunk-AREFLNUP.js';var Qn=Object.freeze({}),Zn=Object.freeze([]);function Jn(e){let t=Object.keys(e);if(t.length===0)return Qn;let n={};for(let r of t){let o=e[r];o!==void 0&&(n[r]=o);}return Object.freeze(n)}function er(e){let t=new Map(md(e.part())),n=new Set([e.part()]);for(let o of e.headerFooterPartsBySection())for(let a of [o.headers,o.footers])for(let i of a.values())if(!n.has(i)){n.add(i);for(let[s,u]of md(i))t.has(s)||t.set(s,u);}let r=e.currentPackage();for(let o of ["footnote","endnote"]){let a=Xe$1(r,o);if(!(!a||n.has(a))){n.add(a);for(let[i,s]of md(a))t.has(i)||t.set(i,s);}}return t}function tr(e,t){let n=jf(e,t);if(!n)return null;let r=e.pages[n.pageIndex];if(!r)return null;let o=af(r),a=cf(e,t.paragraphId,n.pageIndex),i=Object.freeze({x:n.x+a.x,y:n.y+a.y,height:n.height});return Object.freeze({anchor:Object.freeze({...t}),pageIndex:n.pageIndex,pageContent:i,pageStack:Object.freeze({x:o.x+i.x,y:o.y+i.y})})}function nr(e,t){let n=[];for(let r of t.values()){let o=tr(e,r);o&&n.push(o);}return n.length===0?Zn:Object.freeze(n)}function cn(e,t){return {documentMetadata:Jn(e.documentProperties()),destinations:nr(t,er(e))}}function rr(e,t){let n=e.destinations;if(n){for(let r of n)if(r.anchor.name===t)return r}}function Me(e={}){return Object.freeze({async decode(t,n,r){let o=qb(t,n);if(!o)throw new Error(`Unsupported or malformed ${n} image`);if(o.pixelWidth>r.maxDimension||o.pixelHeight>r.maxDimension||o.pixelWidth>r.maxPixels/o.pixelHeight)throw new Error("Image dimensions exceed resource limits");return Object.freeze({pixelWidth:o.pixelWidth,pixelHeight:o.pixelHeight,dpiX:o.dpiX??96,dpiY:o.dpiY??96})},...e.convertPreserved?{convertPreserved:e.convertPreserved}:{}})}var or=65536;function un(e,t){return {x:t.x-e.contentBox.x,y:t.y-e.contentBox.y}}function ar(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function ir(e,t,n){return e.rootStory!==t?false:t==="footnote"||t==="endnote"?e.noteScopeId===n:true}function sr(e,t){if(t.story!=="textbox"||t.textboxPath.length===0)return null;let n=null;return Ca(e,r=>{if(n||!ir(t,r.story,r.noteScopeId))return;let o=r.story==="header"||r.story==="footer"?a=>xa(a,r.origin,{x:e.box.x,y:e.box.y}):void 0;Ga(r.host,(a,i)=>{if(n||i.textboxDepth===0)return;let s=i.textboxPath.map(u=>u.drawingNodeId);ar(s,t.textboxPath)&&(n=un(e,i.storyOrigin));},r.origin,o);}),n}function cr(e,t){if(t.story==="textbox")return sr(e,t)??{x:0,y:0};switch(t.rootStory){case "body":return {x:0,y:0};case "header":return e.header?bf(e,e.header.box):{x:0,y:0};case "footer":return e.footer?bf(e,e.footer.box):{x:0,y:0};case "footnote":case "endnote":{let r=(t.rootStory==="footnote"?e.footnotes:e.endnotes)?.notes.find(o=>o.scopeId===t.noteScopeId);return r?bf(e,r.box):{x:0,y:0}}case "note-separator":{let n=t.noteAreaKind==="endnotes"?e.endnotes:e.footnotes;return n?.separator?bf(e,n.separator.box):{x:0,y:0}}default:return {x:0,y:0}}}function pn(e){return Object.freeze({x:e.x,y:e.y,width:e.width,height:e.height})}function fn(e,t){let n=af(e);return Object.freeze({x:n.x+t.x,y:n.y+t.y,width:t.width,height:t.height})}function dr(e,t){let n=jf(e,{paragraphId:t.source.start.paragraphId,offset:t.source.start.offset},{preferredPageIndex:t.pageIndex});if(!n||n.pageIndex!==t.pageIndex)return;let r=e.pages[n.pageIndex];if(!r)return;let o=cr(r,t),a=Object.freeze([pn({x:n.x+o.x,y:n.y+o.y,width:0,height:n.height})]);return Object.freeze({pageContent:a,pageStack:Object.freeze(a.map(i=>fn(r,i)))})}function lr(e,t,n){let r=n.filter(i=>i.pageIndex===t.pageIndex);if(r.length===0)return mn(t)?dr(e,t):void 0;let o=e.pages[t.pageIndex];if(!o)return;let a=Object.freeze(r.map(i=>pn(i)));return Object.freeze({pageContent:a,pageStack:Object.freeze(a.map(i=>fn(o,i)))})}function mn(e){return e.source.start.paragraphId===e.source.end.paragraphId&&e.source.start.offset===e.source.end.offset}function ln(e,t){return `${e}\0${t}`}function ur(e,t,n){let r=Math.max(e.start,t.offset),o=Math.min(e.end,n.offset);return o>r?{start:r,end:o}:null}function pr(e,t){let n=new Map,r=new Map,o=new Set,a=0;let i=(s,u)=>{if(a>=or)return false;a+=1;let m=ln(s.pageIndex,u),l=r.get(m);return l?l.push(s):r.set(m,[s]),true};for(let[s,u]of t.entries())for(let[m,l]of u.occurrences.entries()){if(mn(l)||l.source.start.paragraphId!==l.source.end.paragraphId)continue;o.add(l.pageIndex);let c=`${s}\0${m}`,d={paragraphId:l.source.start.paragraphId,offset:l.source.start.offset},f={paragraphId:l.source.end.paragraphId,offset:l.source.end.offset},y=d.offset<=f.offset?{from:d,to:f}:{from:f,to:d};i({key:c,from:y.from,to:y.to,pageIndex:l.pageIndex},y.from.paragraphId);}if(r.size===0)return n;for(let s of e.pages)o.has(s.index)&&Ca(s,u=>{let m=u.story==="header"||u.story==="footer"?l=>xa(l,u.origin,{x:s.box.x,y:s.box.y}):void 0;Ga(u.host,(l,c)=>{let d=un(s,c.storyOrigin);for(let f of l.lines)for(let y of Na(f)){let p=r.get(ln(s.index,y.paragraphId));if(p)for(let g of p){let b=ur(y,g.from,g.to);if(!b)continue;let h=Ye$2(f,b.start,void 0,y),E=Ye$2(f,b.end,void 0,y),P=n.get(g.key)??[];P.push({pageIndex:s.index,x:Math.min(h,E)+d.x,y:f.box.y+d.y,width:Math.abs(E-h),height:f.box.height}),n.set(g.key,P);}}},u.origin,m);});return n}function yn(e,t){let n=false;for(let o of t)if(o.occurrences.length!==0){n=true;break}if(!n)return t;let r=pr(e,t);return t.map((o,a)=>{if(o.occurrences.length===0)return o;let i=o.occurrences.map((s,u)=>{let m=`${a}\0${u}`,l=lr(e,s,r.get(m)??[]);return l?{...s,geometry:l}:s});return {...o,occurrences:Object.freeze(i)}})}function fr(e){let t=new Map,n=[{node:e.root,depth:0}];for(;n.length>0;){let{node:r,depth:o}=n.pop();if(!(r.kind==="textValue"||o>64)){r.kind==="paragraph"&&!t.has(r.id)&&t.set(r.id,t.size);for(let a=r.children.length-1;a>=0;a-=1)n.push({node:r.children[a],depth:o+1});}}return t}function gn(){let e=new Map,t=r=>{let o=e.get(r.root);if(o)return o;let a=fr(r);return e.set(r.root,a),a},n={retainRevisionItems:false,revisionSites:Kg,locations:va,commentAnchors:vf,deepOrder:t};return Object.freeze({collectReviewItems:r=>La(r,n),deepParagraphOrderOfPart:t})}function mr(e,t){if(t)return true;let n=e.map(r=>r.root);for(;n.length>0;){let r=n.pop();if(Ig(r))return true;if(r.kind!=="textValue")for(let o of r.children)n.push(o);}return false}function yr(e,t){let n=[],r=new Set([t.name]),o=a=>{!a||r.has(a.name)||(r.add(a.name),n.push(a));};for(let a of Ac(e)){for(let i of a.headers.values())o(i);for(let i of a.footers.values())o(i);}return o(Xe$1(e,"footnote")),o(Xe$1(e,"endnote")),n}function gr(e,t){switch(t.story){case "body":return e.mainDocumentPart;case "header":case "footer":return t.host.partName;case "footnote":return Xe$1(e,"footnote")?.name??null;case "endnote":return Xe$1(e,"endnote")?.name??null;case "note-separator":return Xe$1(e,t.noteAreaKind==="footnotes"?"footnote":"endnote")?.name??null;default:return t}}function hr(e,t){let n=new Map;for(let r of e){let o=t.get(r.partName),a=o?.get(r.start.paragraphId),i=o?.get(r.end.paragraphId);if(a===void 0||i===void 0)continue;let s=Math.min(a,i),u=Math.max(a,i),m=n.get(r.partName);n.set(r.partName,{lower:Math.min(m?.lower??s,s),upper:Math.max(m?.upper??u,u)});}return n}function xr(e,t,n,r,o){let a=new Map(n.map(c=>[c.name,o(c)])),i=hr(r,a),s=new Map,u=new Map,m=(c,d,f,y,p,g,b)=>{let h=a.get(c)?.get(p),E=i.get(c);if(h===void 0||!E||h<E.lower||h>E.upper)return;let P=s.get(c)??new Map;s.set(c,P);let q=u.get(c)??new Map;u.set(c,q);let z=JSON.stringify([d.story,d.noteScopeId,d.noteAreaKind]),re=f==="textbox"?JSON.stringify([z,"textbox",y]):z,$=P.get(p)??[],G=`${p}\0${d.page.index}\0${re}`,B=q.get(G);B||(B={pageIndex:d.page.index,story:f,rootStory:d.story,textboxPath:y,noteScopeId:d.noteScopeId,noteAreaKind:d.noteAreaKind,laneKey:re,intervals:[],intervalKeys:new Set},q.set(G,B),$.push(B),P.set(p,$));let R=`${g}\0${b}`;B.intervalKeys?.has(R)||(B.intervalKeys?.add(R),B.intervals.push({start:g,end:b}));};Da(e,c=>{let d=gr(t,c);!d||!i.has(d)||Ga(c.host,(f,y)=>{let p=y.textboxDepth>0?"textbox":c.story,g=y.textboxPath.map(h=>h.drawingNodeId),b=[];for(let h of f.lines){for(let E of h.spans)b.push(E.range);for(let E of h.drawings??[])b.push({paragraphId:E.paragraphId,start:E.start,end:E.start+1});}b.length===0&&b.push({paragraphId:f.range.paragraphId,start:f.range.start,end:f.range.end});for(let{paragraphId:h,start:E,end:P}of b)m(d,c,p,g,h,E,P);});}),Fa(e,c=>{let d=c.drawing.ownerPartName;i.has(d)&&m(d,c.root,c.story,c.textboxPath.map(f=>f.drawingNodeId),c.drawing.paragraphId,c.drawing.start,c.drawing.start+1);});for(let c of s.values())for(let d of c.values())for(let f of d){f.intervals.sort((p,g)=>p.start-g.start||p.end-g.end);let y=[];for(let p of f.intervals){let g=y.at(-1);g&&p.start<=g.end?g.end=Math.max(g.end,p.end):y.push({...p});}f.intervals.splice(0,f.intervals.length,...y),f.intervalKeys=void 0;}let l=new Map;for(let[c,d]of s){let f=a.get(c);if(!f)continue;let y=[];for(let[p,g]of d){let b=f.get(p);b!==void 0&&y.push({paragraphId:p,position:b,laneKeys:new Set(g.map(({laneKey:h})=>h))});}y.sort((p,g)=>p.position-g.position),l.set(c,y);}return {byPart:s,orderByPart:a,visibleByPart:l}}function hn(e,t){let n=0,r=e.length;for(;n<r;){let o=n+r>>>1;e[o].position<t?n=o+1:r=o;}return n}function br(e,t){if(e.start.paragraphId===e.end.paragraphId)return [e.start.paragraphId];let n=t.orderByPart.get(e.partName),r=t.visibleByPart.get(e.partName),o=n?.get(e.start.paragraphId),a=n?.get(e.end.paragraphId);if(!n||!r||o===void 0||a===void 0)return [e.start.paragraphId,e.end.paragraphId];let i=Math.min(o,a),s=Math.max(o,a),u=new Set(t.byPart.get(e.partName)?.get(e.start.paragraphId)?.map(({laneKey:c})=>c)??[]),m=new Set(t.byPart.get(e.partName)?.get(e.end.paragraphId)?.map(({laneKey:c})=>c)??[]),l=new Set([...u].filter(c=>m.has(c)));return l.size===0?[e.start.paragraphId,e.end.paragraphId]:r.slice(hn(r,i),hn(r,s+1)).filter(c=>[...c.laneKeys].some(d=>l.has(d))).map(c=>c.paragraphId)}function Rr(e,t,n,r){return r?e.intervals.filter(a=>a.start<=t&&t<a.end).length>0?[{start:t,end:t}]:[]:e.intervals.flatMap(o=>{if(o.start===o.end)return [];let a={start:Math.max(o.start,t),end:Math.min(o.end,n)};return a.end>a.start?[a]:[]})}function Er(e,t){let n=Number.NEGATIVE_INFINITY;for(let r of e)for(let o of r.intervals)n=Math.max(n,o.end);return t!==n?new Set:new Set(e.filter(r=>r.intervals.some(o=>o.end===n)))}function xn(e,t,n){let r=[],o=new Set;for(let[a,i]of e.entries()){let s=n===void 0?void 0:n===null?"neutral":a<n?"replaced":"replacement";for(let u of br(i,t)){let m=t.byPart.get(i.partName)?.get(u)??[],c=i.start.paragraphId===i.end.paragraphId&&i.start.offset===i.end.offset,d=u===i.start.paragraphId?i.start.offset:0,f=u===i.end.paragraphId?i.end.offset:Number.POSITIVE_INFINITY,y=c?Er(m,d):new Set;for(let p of m){let g=Rr(p,d,f,c);c&&g.length===0&&y.has(p)&&(g=[{start:d,end:d}]);for(let b of g){let h=`${p.pageIndex}\0${p.story}\0${p.noteScopeId??""}\0${p.noteAreaKind??""}\0${p.textboxPath.join("\0")}\0${i.partName}\0${u}\0${b.start}\0${b.end}\0${s??""}`;o.has(h)||(o.add(h),r.push({pageIndex:p.pageIndex,physicalPageNumber:p.pageIndex+1,story:p.story,rootStory:p.rootStory,textboxPath:p.textboxPath,noteScopeId:p.noteScopeId,noteAreaKind:p.noteAreaKind,...s?{revisionRole:s}:{},source:{partName:i.partName,start:{paragraphId:u,offset:b.start},end:{paragraphId:u,offset:b.end}}}));}}}}return r}function Rn(e,t){let n=2166136261,r=2654435769;for(let o=0;o<t.length;o+=1){let a=t.charCodeAt(o);n=Math.imul(n^a,16777619)>>>0,r=Math.imul(r^a+o,2246822507)>>>0,r^=r>>>13;}return `${e}_${t.length.toString(36)}_${n.toString(36)}_${r.toString(36)}`}function bn(e,t,n=Rn){let r=new Map;for(let a of t){let i=n(e,a),s=r.get(i)??new Set;s.add(a),r.set(i,s);}let o=new Map;for(let[a,i]of r){let s=[...i].sort();for(let[u,m]of s.entries())o.set(m,s.length===1?a:`${a}_${u.toString(36)}`);}return o}function wr(e){let t=new Set,n=new Set;for(let r of e){if(r.kind==="comment"){t.add(r.id),r.parentId!==void 0&&t.add(r.parentId),r.parentRevisionId!==void 0&&n.add(r.parentRevisionId);for(let o of r.replyIds)t.add(o);}if(r.kind==="revision"){n.add(r.id),r.pairedWith!==void 0&&n.add(r.pairedWith);for(let o of r.replyIds)t.add(o);}}return {comment:bn("comment",t),revision:bn("change",n)}}function V(e,t,n){return e.get(n)??Rn(t,n)}function Fr(e,t,n){return e.kind==="revision"?{kind:"tracked-change",id:V(n.revision,"change",e.id),change:e.revisionKind,...e.markDirection?{markDirection:e.markDirection}:{},author:e.author,...e.date!==void 0?{date:e.date}:{},text:e.text,replacedText:e.replacedText,nesting:e.nesting,...e.replacedRangeCount!==void 0?{replacedRangeCount:e.replacedRangeCount}:{},readOnly:e.readOnly,...e.pairedWith!==void 0?{pairedWith:V(n.revision,"change",e.pairedWith)}:{},replyIds:e.replyIds.map(r=>V(n.comment,"comment",r)),occurrences:t?xn(e.ranges,t,e.revisionKind==="replace"?e.replacedRangeCount??null:void 0):[]}:e.kind!=="comment"?null:{kind:"comment",id:V(n.comment,"comment",e.id),author:e.comment.author,initials:Ha(e.comment),...e.comment.date!==void 0?{date:e.comment.date}:{},text:Ga$1(e.comment),resolved:e.resolved,...e.parentId!==void 0?{parentId:V(n.comment,"comment",e.parentId)}:{},...e.parentRevisionId!==void 0?{parentRevisionId:V(n.revision,"change",e.parentRevisionId)}:{},replyIds:e.replyIds.map(r=>V(n.comment,"comment",r)),orphaned:e.orphaned,occurrences:t&&e.range?xn([e.range],t):[]}}function En(e,t){let n=t.parts.get(t.mainDocumentPart);if(!n)return [];let r=yr(t,n),o=[n,...r],a=t.parts.get(P(t,n.name));if(!mr(o,a))return [];let i=gn(),s=i.collectReviewItems({storyPart:n,furnitureParts:r,commentsPart:a,commentsExtendedPart:t.parts.get(Q(t,n.name))});if(s.length===0)return [];let u=s.flatMap(c=>Aa(c)),m=u.length>0?xr(e,t,o,u,i.deepParagraphOrderOfPart):null,l=wr(s);return s.map(c=>Fr(c,m,l)).filter(c=>c!==null)}var Sr=new Set(["part","validatedHandle"]);function wn(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function J(e,t,n,r,o){if(!(r!==void 0&&Sr.has(r))){if(typeof e=="function")throw new TypeError("Semantic layout publication encountered a function value");if(!(e===null||typeof e!="object")&&!o?.has(e)){if(n.has(e))throw new TypeError("Semantic layout publication encountered a cyclic record graph");if(!t.has(e)){t.add(e),n.add(e);try{if(Array.isArray(e)){for(let a of e)J(a,t,n,void 0,o);Object.freeze(e);return}if(!wn(e))throw new TypeError("Semantic layout publication encountered a non-record value");for(let a of Reflect.ownKeys(e)){let i=Object.getOwnPropertyDescriptor(e,a);if(i){if(!("value"in i))throw new TypeError("Semantic layout publication encountered an accessor property");J(i.value,t,n,a,o);}}Object.freeze(e);}finally{n.delete(e);}}}}}function Fn(e){if(!wn(e))throw new TypeError("Semantic layout publication encountered a non-record value");let t=new Set;for(let r of e.pages)if(!(r===null||typeof r!="object"))for(let o of ["header","footer"]){let a=Object.getOwnPropertyDescriptor(r,o);if(!a||!("value"in a))continue;let i=a.value;if(i===null||typeof i!="object"||t.has(i))continue;let s=new Set;s.add(e),J(i,new Set,s,o),t.add(i);}let n=(r,o)=>{let a=new Set;for(let i of r){let s=new Set;s.add(e),J(i,a,s,void 0,o);}Object.freeze(r);};for(let r of Reflect.ownKeys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(!o)continue;if(!("value"in o))throw new TypeError("Semantic layout publication encountered an accessor property");if(r==="pages"&&Array.isArray(o.value)){n(o.value,t);continue}if(r==="reviewArtifacts"&&Array.isArray(o.value)){n(o.value);continue}let a=new Set;a.add(e),J(o.value,new Set,a,r);}return Object.freeze(e),e}var Or=Object.freeze([]),w=class extends Error{constructor(n,r,o){super(r,o);this.code=n;this.name="ExportResourceError";}code};function vr(e){try{return e instanceof w}catch{return false}}function Pr(e){try{return e instanceof Vd}catch{return false}}function Ir(e){try{return e instanceof Error&&typeof e.message=="string"&&e.message.length>0?e.message:null}catch{return null}}function Ar(e){if(vr(e))return e;let t=Pr(e),n=Ir(e),r=n?`: ${n}`:"",o=new w(t?"layoutInvariant":"layoutFailed",t?`Authored geometry could not be represented within the bounded page model${r}`:`Export layout failed${r}`);return Object.defineProperty(o,"cause",{configurable:true,value:e}),o}function Dr(e){if(e===void 0)return 6e4;if(!Number.isFinite(e)||e<=0)throw new RangeError("resourceTimeoutMs must be a positive finite number");return Math.max(1,e)}function Sn(e){if(e==="all-markup"||e==="proposed"||e==="original")return e;throw new RangeError("displayMode must be all-markup, proposed, or original")}var Lr=50,Ne=64;function Tr(e){switch(e.kind){case "pending":return true;case "ready":case "unrenderable":case "external":case "missing":return false;default:return e}}function kr(e){let t=false;return Fa(e,({drawing:n})=>{Tr(n.resource)&&(t=true);}),t}function On(e){return !ArrayBuffer.isView(e)}function Be(e,t={}){if(t.signal?.aborted)return {ok:false,reason:"aborted"};let n=Sn(t.displayMode??mb),r=On(e),o=On(e)?{ok:true,view:e}:I(e);if(!o.ok)return o;let a=o.view,i=t.reuseAcrossRevisions??r,s=Dr(t.resourceTimeoutMs),u=t.measurer??y(),m=t.producer??(t.measurer?"host-export-measurer":"export-fixed-measurer"),l$1=Vc({retainAcrossPasses:i}),c=0,d=new Set,f=()=>{c+=1;for(let R of d)R();d.clear();},y$1=Dd({session:a,decodePort:t.imageDecodePort??Me(t.convertPreservedImage?{convertPreserved:t.convertPreservedImage}:void 0),onResourcesChanged:f}),p={view:a,measurer:u,paragraphCache:l$1,sessions:new Map,completed:new Map,inFlight:new Map,styles:Cd(a),fieldLinks:new Map,links:ae(a),drawingBundle:y$1,furniture:new Map},g=new AbortController,b=t.signal,h=false,E=()=>h?new w("aborted","Export resource settlement was aborted"):new w("disposed","Export session has been disposed"),P=()=>{h=true,q();};function q(){let R=p;if(R){p=null,b?.removeEventListener("abort",P),g.abort(b?.reason),R.drawingBundle.dispose(),R.paragraphCache.clear();for(let F of R.completed.values())Rc(F.internal),ge$1(F.internal);for(let F of R.fieldLinks.values())F.registry.clear();R.fieldLinks.clear(),R.completed.clear(),R.inFlight.clear(),R.furniture.clear(),R.sessions.clear(),f();}}b?.addEventListener("abort",P,{once:true}),b?.aborted&&P();let z=()=>{if(!p)throw E();if(g.signal.aborted)throw new w("aborted","Export resource settlement was aborted")},re=(R,F,A,x)=>c!==R||p?.view.packageRevision()!==F||p?.view.currentPackage()!==A?Promise.resolve():(z(),new Promise((U,I)=>{let D=false,C,L=k=>{D||(D=true,C!==void 0&&clearTimeout(C),d.delete(T),g.signal.removeEventListener("abort",K),k?I(k):U());},T=()=>L(),K=()=>L(new w("aborted","Export resource settlement was aborted")),W=()=>{if(p?.view.packageRevision()!==F||p?.view.currentPackage()!==A){L();return}let k=x-Date.now();if(k<=0){L(new w("timedOut",`Image resources did not settle within ${s}ms`));return}C=setTimeout(W,Math.min(Lr,k));};if(d.add(T),g.signal.addEventListener("abort",K,{once:true}),c!==R||p?.view.packageRevision()!==F||p?.view.currentPackage()!==A){L();return}W();})),$=async(R,F=0,A=Date.now()+s)=>{if(z(),Date.now()>=A)throw new w("timedOut",`Export layout did not stabilize within ${s}ms`);let x=p,U=A,I=x.view.packageRevision(),D=x.view.currentPackage(),C=x.completed.get(R);if(C&&C.revision===I&&C.pkg===D)return C.published;let L=()=>{if(x.view.packageRevision()===I&&x.view.currentPackage()===D)return null;if(F>=Ne-1)throw new w("nonConvergent","Document revision did not stabilize during export layout");return $(R,F+1,U)},T=x.fieldLinks.get(R);if(!T||T.revision!==I||T.pkg!==D){let v=T?.registry??be();v.clear(),T={revision:I,pkg:D,registry:v},x.fieldLinks.set(R,T),x.furniture.delete(R);}let K=T.registry,W=x.sessions.get(R)??Ee();x.sessions.set(R,W);let k=x.furniture.get(R);k||(k=Zd({view:x.view,measurer:x.measurer,producer:m,cache:x.paragraphCache,styleCascade:x.styles.styleCascade,numberingIndex:x.styles.numberingIndex,defaultTabStopPt:x.styles.defaultTabStopPt,displayMode:R,revisionAuthorFilter:void 0,inlineDrawingLayoutForPart:v=>x.drawingBundle.contextForPart(v),drawingLayoutTokenForPart:v=>x.drawingBundle.cacheTokenForPart(v),drawingTokenForParagraphForPart:(v,xe)=>x.drawingBundle.drawingTokenForParagraph(xe,v),linkProjectors:x.links,projectFieldLink:v=>K.project(v)}),x.furniture.set(R,k));for(let v=0;v<Ne;v+=1){let xe=c;x.drawingBundle.sync(x.view);let Qe=L();if(Qe)return Qe;let _=l({view:x.view,revision:x.view.packageRevision(),measurer:x.measurer,cache:x.paragraphCache,session:W,producer:m,styleCascade:x.styles.styleCascade,defaultTabStopPt:x.styles.defaultTabStopPt,numberingIndex:x.styles.numberingIndex,furniture:k,linkProjectors:x.links,projectFieldLink:O=>K.project(O),inlineDrawingLayout:x.drawingBundle.bodyContext,inlineDrawingLayoutForPart:O=>x.drawingBundle.contextForPart(O),drawingTokenForParagraph:O=>x.drawingBundle.drawingTokenForParagraph(O,x.view.part().name),drawingTokenForParagraphForPart:(O,oe)=>x.drawingBundle.drawingTokenForParagraph(oe,O),drawingLayoutEpoch:x.drawingBundle.cacheTokenForPart(x.view.part().name),drawingLayoutEpochForPart:O=>x.drawingBundle.cacheTokenForPart(O),displayMode:R,revisionAuthorFilter:void 0});if(!kr(_)){let O=L();if(O)return O;i||(Rc(_),ge$1(_),x.paragraphCache.clear(),x.sessions.delete(R),x.furniture.delete(R));let oe=En(_,D),Wn=oe.length===0?Or:Object.freeze(yn(_,oe)),Xn=cn(x.view,_),Yn={..._,...Xn,reviewArtifacts:Wn},et=Fn(Yn);return x.completed.set(R,{revision:I,pkg:D,internal:_,published:et}),et}let Ze=xe;for(;x.drawingBundle.pendingResourceCount()>0;){await re(Ze,I,D,U),Ze=c,z();let O=L();if(O)return O}z();let Je=L();if(Je)return Je}throw new w("nonConvergent",`Image resources did not reach quiescence after ${Ne} layout passes`)},G=R=>{let F;try{F=Sn(R);}catch(I){return Promise.reject(I)}if(!p)return Promise.reject(E());let A=p,x=A.inFlight.get(F);if(x)return x;let U=$(F).catch(I=>{throw Ar(I)}).finally(()=>A.inFlight.delete(F));return A.inFlight.set(F,U),U};return {ok:true,session:{layout:()=>G(n),layoutFor:G,validatedImageBytes(R){let F=p;return !F||R.resource.kind!=="ready"?null:F.drawingBundle.mintValidatedBytes(R.resource.validatedHandle,R.resource.contentId)?.slice()??null},dispose:q}}}var Ce=b$1;function _e(e){return typeof e.admittedFontFace=="function"}var Mr=Object.freeze([{weight:400,style:"normal"},{weight:700,style:"normal"},{weight:400,style:"italic"},{weight:700,style:"italic"}]);function ye(e){return Object.freeze({family:e.family,weight:e.weight,style:e.style})}function je(e){let t=e.substitution;return Object.freeze({id:e.id,identity:e.identity,family:e.family,request:ye(e.request),byteLength:e.byteLength,hash:e.hash,faceIndex:e.faceIndex,substitution:t?Object.freeze({requested:ye(t.requested),resolved:ye(t.resolved),...t.lineMetrics?{lineMetrics:Object.freeze({...t.lineMetrics})}:{}}):null})}function Nr(e){return Object.freeze({...je(e),bytes:h$1(e)})}function Br(e,t){if(!e)return null;try{let n=e(t);return !n||n instanceof d$1?null:Nr(n)}catch{return null}}function vn(e){return t=>{if(e.status()!=="active")throw e.unavailable();return Br(e.resolve(),t)}}function Cr(e){return Object.freeze(e.slice(0,Ce).map(t=>Object.freeze({request:ye(t.request),partName:t.partName,reason:t.reason})))}function ze(e,t,n,r,o=[]){let a=new Map;for(let s of [...e,t]){let u=s.toLowerCase();a.has(u)||a.set(u,s);}let i=[...a.values()].map(s=>{let u=[];for(let m of Mr){let l=r?.({family:s,...m});!l||l instanceof d$1||u.push(Object.freeze({...m,sourceFamily:l.family,via:l.substitution?"substitution":"direct",identity:l.identity,id:l.id,hash:l.hash,faceIndex:l.faceIndex,substitution:l.substitution}));}return Object.freeze({family:s,coverage:u.length===4?"complete":u.length>0?"partial":"none",faces:Object.freeze(u)})});return Object.freeze({requestedFamilies:Object.freeze([...e]),defaultFamily:t,families:Object.freeze(i),originFailures:Object.freeze([...n]),droppedEmbeddedFonts:Cr(o)})}function Ue(e,t){if(t.onFontResolution){try{let n=t.onFontResolution(e);Promise.resolve(n).catch(r=>{console.warn("[fonts] font-resolution diagnostics callback failed",r);});}catch(n){console.warn("[fonts] font-resolution diagnostics callback failed",n);}return}for(let n of e.originFailures)console.warn("[fonts] a document export font origin failed and was skipped",n);for(let n of e.droppedEmbeddedFonts??[])console.warn("[fonts] a document embedded font face was dropped during export",n);}function Ve(e,t){if(t.fontPolicy!=="strict"||e.originFailures.length===0&&e.families.every(r=>r.coverage==="complete"))return;let n=e.families.filter(r=>r.coverage!=="complete").map(r=>r.family).join(", ");throw new w("layoutFailed",`Strict font policy refused export${n?`; incomplete families: ${n}`:"; a font origin failed"}`)}function ge(){return new Map}function He(e,t,n,r){if(n.trim().length===0)return null;let o={family:n,weight:r.bold?700:400,style:r.italic?"italic":"normal"},a=g(o),i=t.get(a);if(!i){try{i=e.fonts.resolve(o);}catch{return null}t.set(a,i);}return i instanceof d$1?null:i}function Pn(e,t,n){let r=n.fontFamily??e.defaultFont.family;return He(e,t,r,n)}function qe(e){return typeof e.shapeLaidOutText=="function"}function $e(e){let t=ge(),n=new WeakMap;return r=>{let o=X(r.style,r.fontSlot),a=R(r.text,o);if(a.length===0)return null;let i=o.fontFamily??e.defaultFont.family,s=He(e,t,i,o);if(!s)return null;try{if(o.smallCaps&&!Te(e.shaper,e.environment,s,o,n))return null;let u=Se(e.shaper,e.environment,s,o,a);return Object.freeze({run:u,font:je(s),fixedPointScale:e.environment.fixedPointScale})}catch{return null}}}function In(e){return t=>{if(e.status()!=="active")throw e.unavailable();return e.shaping()?.shapeLaidOutText(t)??null}}var ee=new Map,he=new WeakMap,Ge=0,te,Ke=32,An=c;function Dn(){if(te)return te;let e=(async()=>(await r(),w$1(z)))();return te=e,e.catch(()=>{te===e&&(te=void 0);}),e}function Ln(e){let t=ge();return Ve$1(e,{resolveFont(n){return Pn(e,t,n)},fallback:y()})}async function Tn(e,t){if(!B(e))throw new TypeError("Session exporter shaping requires a prepared font handle");let n=await Dn(),r=await I$1(e,n,z,t);return Object.freeze({createMeasurer:()=>Ln(r),resolveFont:o=>r.fonts.resolve(o),shapeLaidOutText:$e(r),producer:["node-export-session",e.fingerprint,r.operation.shapingHash,`producer:${r.operation.producerVersion}`,`fallback:${x}`].join("|"),extensionFingerprint:e.fingerprint})}function _r(e,t){if(!B(e))return Promise.reject(new TypeError("Shared exporter shaping requires a prepared font handle"));let n=he.get(e);if(n)return n;let r=D(e),o=ee.get(r);if(!o){if(ee.size>=Ke)return Promise.reject(new RangeError(`Shared exporter shaping is limited to ${Ke} process-wide configurations`));o=(async()=>{let u=C(e).sources.reduce((l,c)=>l+(c.availability==="forbidden"?0:c.bytes.byteLength),0);if(Ge+u>An)throw new RangeError(`Shared exporter shaping font bytes are limited to ${An} process-wide`);Ge+=u;let m;try{let l=await Dn();m=await I$1(e,l,z,t);}catch(l){throw Ge-=u,l}return Object.freeze({createMeasurer:()=>Ln(m),shapeLaidOutText:$e(m),shapingHash:m.operation.shapingHash,producerVersion:m.operation.producerVersion})})(),ee.set(r,o),o.catch(()=>{ee.get(r)===o&&ee.delete(r);});}let a=e.fingerprint,i=o.then(s=>Object.freeze({createMeasurer:s.createMeasurer,shapeLaidOutText:s.shapeLaidOutText,producer:["node-export",a,s.shapingHash,`producer:${s.producerVersion}`,`fallback:${x}`].join("|"),extensionFingerprint:a}));return he.set(e,i),i.catch(()=>{he.get(e)===i&&he.delete(e);}),i}var jr="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable";function zr(e){let t=e.currentPackage(),n=(t.relationships.get(t.mainDocumentPart)??[]).find(o=>o.type===jr),r;if(n){let o=E(n);o.mode==="Internal"&&o.target.ok&&(r=t.parts.get(o.target.partName));}return r??=t.parts.get("/word/fontTable.xml"),Dc(t,r)}function kn(e,t){let n=zr(e);if(n.length!==0)return h(r=>{let o$1=new Set((r.resolvedFaces??[]).map(i=>g(i))),a$1=o(n,{maxFontBytes:a,aggregateBudget:Ur(r),shadowedRequests:o$1});if(t)for(let i of a$1.dropped){if(t.dropped.length>=Ce)break;t.dropped.push(i);}return {sources:a$1.sources}})}function Ur(e){let t=e.committedSourceBytes;return t===void 0||!Number.isSafeInteger(t)||t<=0?c:Math.max(0,c-t)}function Vr(e){return _e(e)&&qe(e)}var N=0,Nn=Symbol("font-resolution-timeout");function Hr(e){let t=0,n=false;return e?.(N),{reserve:o=>{if(n)throw new Error("Document font-byte lease is already released");if(N+o>c)throw new w("layoutFailed",`Active document export font bytes are limited to ${c}; requested ${o} bytes with ${N} bytes already active`);N+=o,t+=o,e?.(N);let a=false;return ()=>{a||n||(a=true,N-=o,t-=o,e?.(N));}},release:()=>{n||(n=true,N-=t,t=0,e?.(N));}}}function ne(e,t){return e.attributes.find(n=>n.localName===t)?.value}async function qr(e,t){if(t.reuseAcrossRevisions===true)throw new TypeError("reuseAcrossRevisions requires a live view or caller-supplied measurer; document-aware byte sessions are immutable");if(t.signal?.aborted)return {ok:false,reason:"aborted"};let n=I(e);if(!n.ok)return n;let{fonts:r,fontResolutionTimeoutMs:o,fontPolicy:a,onFontResolution:i,...s}=t,u=Array.isArray(r)?r:[r],m,l;try{l=await $r(n.view,u,{signal:t.signal,timeoutMs:o??t.resourceTimeoutMs,fontPolicy:a,onFontResolution:h=>(m=h,i?.(h))});}catch(h){if(h instanceof w&&h.code==="aborted")return {ok:false,reason:"aborted"};throw h}if(!m)throw l?.dispose(),new w("layoutFailed","Document font resolution completed without publishing its evidence");let c;try{c=Be(n.view,{...s,reuseAcrossRevisions:!1,...l?{measurer:l.createMeasurer(),producer:t.producer??l.producer}:t.producer?{producer:t.producer}:{}});}catch(h){throw l?.dispose(),h}if(!c.ok)return l?.dispose(),c;let d=c.session,f=l,y="active",p=()=>y==="aborted"?new w("aborted","Export resource settlement was aborted"):new w("disposed","Export session has been disposed"),g=h=>{if(y==="active"){y=h,t.signal?.removeEventListener("abort",b);try{d.dispose();}finally{f?.dispose(),f=void 0;}}},b=()=>g("aborted");return t.signal?.addEventListener("abort",b,{once:true}),t.signal?.aborted&&b(),{ok:true,session:Object.freeze({fontResolution:m,layout:()=>y==="active"?d.layout():Promise.reject(p()),layoutFor:h=>y==="active"?d.layoutFor(h):Promise.reject(p()),validatedImageBytes:h=>y==="active"?d.validatedImageBytes(h):null,admittedFontFace:vn({status:()=>y,unavailable:p,resolve:()=>f?.resolveFont}),shapeLaidOutText:In({status:()=>y,unavailable:p,shaping:()=>f}),dispose:()=>g("disposed")})}}async function $r(e,t,n={}){let r=Gr(n.timeoutMs),o=new AbortController,a=()=>o.abort(n.signal?.reason);n.signal?.addEventListener("abort",a,{once:true}),n.signal?.aborted&&a();let i=setTimeout(()=>o.abort(Nn),r);try{We(o.signal);let s=(async()=>{let u=Hr(n.onActiveFontBytesChange),m=!1;try{let l=Wr(e).slice(0,b),c=[],d$1={dropped:[]},f=kn(e,d$1),y=f?[...t,f]:t,p=await k(y,{families:l,defaultFamily:c$1.family,signal:o.signal},{onOriginFailure:E=>c.push(E),reserveOwnedBytes:u.reserve});We(o.signal);let g=d(p??{});if(g.sources.length===0){let E=ze(l,g.defaultFont.family,c,void 0,d$1.dropped);Ue(E,n),Ve(E,n);return}let b$1=await Tn(F(g));We(o.signal);let h=ze(l,g.defaultFont.family,c,b$1.resolveFont,d$1.dropped);return Ue(h,n),Ve(h,n),m=!0,Object.freeze({...b$1,dispose:u.release})}finally{m||u.release();}})();return await Promise.race([s,Kr(o.signal)])}finally{clearTimeout(i),n.signal?.removeEventListener("abort",a);}}function Gr(e){if(e===void 0)return 6e4;if(!Number.isFinite(e)||e<=0)throw new RangeError("timeoutMs must be a positive finite number");return Math.max(1,e)}function Kr(e){return new Promise((t,n)=>{let r=()=>{n(Bn(e));};e.aborted?r():e.addEventListener("abort",r,{once:true});})}function Bn(e){let t=e.reason===Nn;return new w(t?"timedOut":"aborted",t?"Font resolution timed out":"Font resolution was aborted",t?void 0:{cause:e.reason})}function We(e){if(e.aborted)throw Bn(e)}function Wr(e){let t=[e.part().root],n=[],r=[],o=new Set([e.part().name]),a=(l,c)=>{!c||o.has(c.name)||(o.add(c.name),l.push(c.root));};for(let l of e.headerFooterPartsBySection()){for(let c of l.headers.values())a(n,c);for(let c of l.footers.values())a(n,c);}for(let l of ["footnote","endnote"])r.push(...Xr(e,l));let i=e.documentThemeFonts(),s={major:i.major,minor:i.minor,majorEastAsia:i.majorEastAsia??null,minorEastAsia:i.minorEastAsia??null},u=new Map,m=(l,c)=>{let d=c$2(l,e.stylesRoot(),s,Qr(l,c)),f=no(l,e.numberingRoot(),e.stylesRoot(),s);for(let y of [...d.direct,...eo(l),...f,...d.inherited]){let p=y.toLowerCase();u.has(p)||u.set(p,y);}};return m(t,"body"),m(n,"furniture"),m(r,"note"),[...u.values()]}function Xr(e,t){let n=Xe$1(e.currentPackage(),t);if(!n)return [];let r=new Set(Ye$1(e.part()).filter(a=>a.noteKind===t).map(a=>a.noteId)),o=[];for(let a of n.root.children){if(a.kind==="textValue")continue;let i=de(a),s=ce(a);(i==="separator"||i==="continuationSeparator"||s!==null&&r.has(s))&&o.push(a);}return o}var Yr="http://schemas.openxmlformats.org/officeDocument/2006/math";function Qr(e,t){let n=new Set;for(let r of e){let o=[],a=[{node:r,context:t}];for(;a.length>0;){let{node:i,context:s}=a.pop();i.namespaceUri===ca&&i.localName==="p"&&o.push({paragraph:i,context:s});let u=i.namespaceUri===ca&&i.localName==="txbxContent"&&(s==="body"||s==="note")?"detached":s;for(let m=i.children.length-1;m>=0;m-=1){let l=i.children[m];l.kind!=="textValue"&&a.push({node:l,context:u});}}for(let i of o)Zr(i.paragraph,n,i.context);}return n}function Zr(e,t,n){let r=Va(),o=null,a=null,i="",s=false,u=false,m=false,l=0,c=[];for(let d=e.children.length-1;d>=0;d-=1){let f=e.children[d];f.kind!=="textValue"&&c.push({node:f,runId:null,visibility:H});}for(;c.length>0;){let{node:d,runId:f,visibility:y}=c.pop();if(d.namespaceUri===ca&&d.localName==="p")continue;let p=d.namespaceUri===ca&&d.localName==="r"?d.id:f;if(d.namespaceUri===ca&&d.localName==="fldSimple"){let g=ne(d,"instr")??"";ud(g,{allowPageFields:n==="body"||n==="furniture",allowRefFields:n==="body"||n==="note",allowPageRef:n==="body",allowAutonum:n==="body"||n==="note"})&&Jr(d)!==H&&t.add(d.id);}if(d.namespaceUri===ca&&d.localName==="fldChar"){let g=ne(d,"fldCharType");if(g==="begin")Ya(r),r.nesting===1&&(o=p,a=null,i="",s=false,u=false,m=Xc(d),l=0);else if(g==="separate"){let b=r.nesting===1;if(_a(r),b){let h=Xa(r);i=h.instruction,s=h.overflow||r.nestingOverflow,a=p,u=true;}}else if(g==="end"){if(r.nesting===1){if(r.phase==="instruction"){let h=Xa(r);i=h.instruction,s=h.overflow||r.nestingOverflow;}if(!s&&td(i,{hasSeparate:u,hasLegacyFormData:m,allowPageFields:n==="body"||n==="furniture",allowRefFields:n==="body"||n==="note",allowPageRef:n==="body",allowAutonum:n==="body"||n==="note"})&&l!==H){let h=a??o;h&&t.add(h);}}$a(r);}continue}if(d.namespaceUri===ca&&(d.localName==="instrText"||d.localName==="delInstrText")){Za(r,Ye(d),d.localName==="delInstrText");continue}r.nesting>0&&ab(r)&&d.namespaceUri===ca&&Cn(d)&&(l|=y);for(let g=d.children.length-1;g>=0;g-=1){let b=d.children[g];b.kind!=="textValue"&&c.push({node:b,runId:p,visibility:y&zn(d)});}}Wa(r);}function Cn(e){return e.localName==="t"||e.localName==="delText"?Ye(e).length>0:e.localName==="sym"||e.localName==="tab"||e.localName==="br"}var Xe=1,_n=2,jn=4,H=Xe|_n|jn;function Jr(e){let t=[];for(let r of e.children)r.kind!=="textValue"&&t.push({node:r,visibility:H});let n=0;for(;t.length>0;){let{node:r,visibility:o}=t.pop();if(!(r.namespaceUri===ca&&r.localName==="p")){if(r.namespaceUri===ca&&Cn(r)&&(n|=o,n===H))return n;for(let a of r.children)a.kind!=="textValue"&&t.push({node:a,visibility:o&zn(r)});}}return n}function zn(e){return e.namespaceUri!==ca?H:e.localName==="ins"||e.localName==="moveTo"?Xe|_n:e.localName==="del"||e.localName==="moveFrom"?Xe|jn:H}function eo(e){let t=new Map,n=r=>{let o=a$1(r??void 0);if(o===null)return;let a=o.toLowerCase();t.has(a)||t.set(a,o);};for(let r of e){let o=[r];for(;o.length>0;){let a=o.pop();if(a.namespaceUri===Yr&&n(nc),a.namespaceUri===ca&&a.localName==="fldSimple"){let i=ne(a,"instr");n(sd(i??"")?.font??null);}if(a.namespaceUri===ca&&a.localName==="p")for(let i of to(a))n(i);for(let i=a.children.length-1;i>=0;i-=1){let s=a.children[i];s.kind!=="textValue"&&o.push(s);}}}return [...t.values()]}function to(e){let t=[],n=Va(),r=[];for(let o=e.children.length-1;o>=0;o-=1){let a=e.children[o];a.kind!=="textValue"&&r.push(a);}for(;r.length>0;){let o=r.pop();if(!(o.namespaceUri===ca&&o.localName==="p")){if(o.namespaceUri===ca&&o.localName==="fldChar"){let a=ne(o,"fldCharType");a==="begin"?Ya(n):a==="separate"?(n.nesting===1&&Mn(n,t),_a(n)):a==="end"&&(n.nesting===1&&Mn(n,t),$a(n));continue}if(o.namespaceUri===ca&&(o.localName==="instrText"||o.localName==="delInstrText")){Za(n,Ye(o),o.localName==="delInstrText");continue}if(o.namespaceUri===ca&&o.localName==="fldSimple"){let a=sd(ne(o,"instr")??"");a?.font&&t.push(a.font);}for(let a=o.children.length-1;a>=0;a-=1){let i=o.children[a];i.kind!=="textValue"&&r.push(i);}}}return Wa(n),t}function Mn(e,t){let n=Xa(e);if(n.overflow)return;let r=sd(n.instruction);r?.font&&t.push(r.font);}function Ye(e){let t="",n=[...e.children].reverse();for(;n.length>0&&t.length<=256;){let r=n.pop();if(r.kind==="textValue")t+=r.value;else for(let o=r.children.length-1;o>=0;o-=1)n.push(r.children[o]);}return t}function no(e,t,n,r){if(!t)return [];let o=zd(t),a=uc(n,r),i=new Map;for(let s of e)for(let u of ro(s)){let m=sc(u.children),l=c=>{if(c)for(let d of c.values())for(let f of [d.markerStyle.fontFamily,d.markerStyle.fontFamilyEastAsia]){let y=a$1(f??void 0);if(y===null)continue;let p=y.toLowerCase();i.has(p)||i.set(p,y);}};l(ad(m,o,a));for(let c of m){let d=Xd(c);for(let f of d.contents)l(Wd(f,o,a));}}return [...i.values()].sort((s,u)=>s.localeCompare(u))}function ro(e){if(e.localName==="document"){for(let t of e.children)if(t.kind!=="textValue"&&t.localName==="body")return [t];return []}if(e.localName==="footnotes"||e.localName==="endnotes"){let t=[];for(let n of e.children)n.kind!=="textValue"&&(n.localName==="footnote"||n.localName==="endnote")&&t.push(n);return t}return [e]}var Hn="FILE_TOO_LARGE",Un=8;function oo(e){return typeof e=="object"&&e!==null}function qn(e){if(!(!oo(e)||typeof e.code!="string"))return e.code}function $n(e){return e===""||e.toLowerCase()==="localhost"}function ao(e){try{let t=decodeURIComponent(e);return t.includes("\0")?null:t}catch{return null}}function Gn(e){let t=ao(e);if(t===null)return null;let n=[];for(let r of t.split(/[/\\]/))if(!(r===""||r===".")){if(r===".."){if(n.length===0)return null;n.pop();continue}n.push(r);}return `/${n.join("/")}`}function Kn(e){let t=Gn(e);return t===null?null:t.endsWith("/")?t:`${t}/`}function io(e){return e==="/"||/^\/[A-Za-z]:\/$/.test(e)}function so(e){let t;try{t=typeof e=="string"?new URL(e):new URL("href"in e?e.href:String(e));}catch{throw new TypeError("trustedRoot must be an absolute file: URL")}if(t.protocol!=="file:")throw new TypeError("trustedRoot must use the file: protocol");if(t.username!==""||t.password!=="")throw new TypeError("trustedRoot must not include credentials");if(!$n(t.host))throw new TypeError("trustedRoot must be a local file: URL");let n=Kn(t.pathname);if(n===null||io(n))throw new TypeError("trustedRoot must be a directory inside the filesystem");let r=new URL("file:///");return r.pathname=n,r}function co(e){if(typeof e=="string")return [e];if(typeof e=="object"&&e!==null&&"href"in e)return [e];if(Array.isArray(e))return e;throw new TypeError("trustedRoot must be an absolute file: URL")}function lo(e){let t=co(e);if(t.length===0)throw new TypeError("trustedRoot must name at least one directory");if(t.length>Un)throw new TypeError(`trustedRoot must not exceed ${Un} directories`);return t.map(so)}function uo(e){if(!Number.isSafeInteger(e)||e<=0)throw new TypeError("maxBytes must be a positive safe integer");if(e>a)throw new TypeError(`maxBytes must not exceed ${a}`);return e}function po(e,t){if(e.protocol!=="file:"||e.username!==""||e.password!==""||!$n(e.host))return null;let n=Gn(e.pathname);if(n===null)return null;for(let r of t){let o=Kn(r.pathname);if(o===null||!n.startsWith(o)||n.length<=o.length)continue;let a=new URL("file:///");return a.pathname=n,a}return null}function fo(e){return typeof e=="string"?new URL(e):"href"in e&&typeof e.href=="string"?new URL(e.href):new URL("url"in e?e.url:String(e))}function mo(e,t,n){let r=n.relative(n.resolve(e),n.resolve(t));return r!==""&&!r.startsWith("..")&&!n.isAbsolute(r)}function Vn(e,t,n){return e.some(r=>mo(r,t,n))}async function yo(e,t){let n=[];for(let r of e)try{n.push(await t(r));}catch(o){if(qn(o)==="ENOENT")continue;throw o}return n}function go(e){return async(t,{signal:n,maxBytes:r})=>{if(n?.aborted)throw n.reason;let[{open:o,realpath:a},{constants:i},{fileURLToPath:s},u]=await Promise.all([import('fs/promises'),import('fs'),import('url'),import('path')]),m=e.map(y=>u.resolve(s(y.href))),l=u.resolve(s(typeof t=="string"?t:t.href));if(!Vn(m,l,u))throw Object.assign(new Error("packaged file is outside trustedRoot"),{code:"ENOENT"});let c=typeof i.O_NOFOLLOW=="number"?i.O_RDONLY|i.O_NOFOLLOW:"r",d=await o(l,c),f=()=>{d.close();};n?.addEventListener("abort",f,{once:true});try{if(n?.aborted)throw n.reason;let y=await a(l);if(!Vn(await yo(m,a),y,u))throw Object.assign(new Error("packaged file is outside trustedRoot"),{code:"ENOENT"});let p=(await d.stat()).size;if(!Number.isSafeInteger(p)||p<0||p>r)throw Object.assign(new Error("packaged file exceeds maxBytes"),{code:Hn});let g=new Uint8Array(p),b=0;for(;b<g.byteLength;){if(n?.aborted)throw n.reason;let{bytesRead:h}=await d.read(g,b,g.byteLength-b,b);if(h===0)break;b+=h;}if(n?.aborted)throw n.reason;return b===g.byteLength?g:g.slice(0,b)}catch(y){throw n?.aborted?n.reason:y}finally{n?.removeEventListener("abort",f),await d.close().catch(()=>{});}}}function ho(e){if(e===null||typeof e!="object")throw new TypeError("createPackagedFileFetch requires trustedRoot and maxBytes");if(e.trustedRoot===void 0||e.maxBytes===void 0)throw new TypeError("createPackagedFileFetch requires trustedRoot and maxBytes");let t=lo(e.trustedRoot),n=uo(e.maxBytes),r=e.read??go(t),o=e.networkFetch??fetch;return(async(a,i)=>{let s=i?.signal;if(s?.aborted)throw s.reason;let u=fo(a);if(u.protocol!=="file:")return o(u,i);let m=po(u,t);if(!m)return new Response(null,{status:404});let l=s?new AbortController:void 0,c=()=>l?.abort(s?.reason);s?.addEventListener("abort",c,{once:true});let d;try{if(d=await r(m,{maxBytes:n,...l?{signal:l.signal}:{}}),s?.aborted)throw s.reason;if(d.byteLength>n)return new Response(null,{status:413})}catch(f){if(s?.aborted)throw s.reason;if(l?.signal.aborted)throw l.signal.reason??f;if(f instanceof DOMException&&f.name==="AbortError"||f instanceof Error&&f.name==="AbortError")throw f;let y=qn(f);if(y===Hn)return new Response(null,{status:413});if(y==="ENOENT"||y==="ENOTDIR"||y==="ELOOP")return new Response(null,{status:404});throw f}finally{s?.removeEventListener("abort",c);}return new Response(d,{status:200})})}
2
+ export{w as ExportResourceError,Ke as MAX_SHARED_EXPORT_SHAPING_CONFIGURATIONS,_r as acquireSharedExportShaping,Me as createNodeImageDecodePort,ho as createPackagedFileFetch,rr as exportDestinationNamed,_e as hasExportAdmittedFont,qe as hasExportLaidOutText,Vr as hasFontBackedExportCapabilities,Be as openDocumentForExport,qr as openFontBackedDocumentForExport};