@opengeni/artifact-tool 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +104 -0
- package/dist/bounded-zip.d.ts +28 -0
- package/dist/chunk-4BSENMAE.js +39 -0
- package/dist/chunk-4BSENMAE.js.map +1 -0
- package/dist/chunk-4FRFNNBM.js +276 -0
- package/dist/chunk-4FRFNNBM.js.map +1 -0
- package/dist/chunk-5XIA6KHZ.js +49 -0
- package/dist/chunk-5XIA6KHZ.js.map +1 -0
- package/dist/chunk-66CT2ZRP.js +2229 -0
- package/dist/chunk-66CT2ZRP.js.map +1 -0
- package/dist/chunk-72SYDU4O.js +319 -0
- package/dist/chunk-72SYDU4O.js.map +1 -0
- package/dist/chunk-B2ZJRZDA.js +279 -0
- package/dist/chunk-B2ZJRZDA.js.map +1 -0
- package/dist/chunk-DCTLTNPW.js +2458 -0
- package/dist/chunk-DCTLTNPW.js.map +1 -0
- package/dist/chunk-FGZM4FQ6.js +473 -0
- package/dist/chunk-FGZM4FQ6.js.map +1 -0
- package/dist/chunk-HTJBLBDE.js +591 -0
- package/dist/chunk-HTJBLBDE.js.map +1 -0
- package/dist/chunk-IYFXZQ34.js +5306 -0
- package/dist/chunk-IYFXZQ34.js.map +1 -0
- package/dist/chunk-J6N7IR44.js +172 -0
- package/dist/chunk-J6N7IR44.js.map +1 -0
- package/dist/chunk-N2IHNWBS.js +1002 -0
- package/dist/chunk-N2IHNWBS.js.map +1 -0
- package/dist/chunk-NAG44K67.js +549 -0
- package/dist/chunk-NAG44K67.js.map +1 -0
- package/dist/chunk-O24KTEGP.js +33 -0
- package/dist/chunk-O24KTEGP.js.map +1 -0
- package/dist/chunk-PI2AZVGK.js +2074 -0
- package/dist/chunk-PI2AZVGK.js.map +1 -0
- package/dist/chunk-Q2FFHEY7.js +40 -0
- package/dist/chunk-Q2FFHEY7.js.map +1 -0
- package/dist/chunk-RBGQADXA.js +57 -0
- package/dist/chunk-RBGQADXA.js.map +1 -0
- package/dist/chunk-U5G2BKM2.js +613 -0
- package/dist/chunk-U5G2BKM2.js.map +1 -0
- package/dist/chunk-VOJHMSM3.js +39 -0
- package/dist/chunk-VOJHMSM3.js.map +1 -0
- package/dist/chunk-VUNV25KB.js +16 -0
- package/dist/chunk-VUNV25KB.js.map +1 -0
- package/dist/chunk-XIFUNVBO.js +101 -0
- package/dist/chunk-XIFUNVBO.js.map +1 -0
- package/dist/chunk-ZCJYRJGB.js +489 -0
- package/dist/chunk-ZCJYRJGB.js.map +1 -0
- package/dist/chunk-ZZXPEE4S.js +2260 -0
- package/dist/chunk-ZZXPEE4S.js.map +1 -0
- package/dist/document-docx-api.d.ts +49 -0
- package/dist/document-docx-codec.d.ts +9 -0
- package/dist/document-docx-codec.js +4765 -0
- package/dist/document-docx-codec.js.map +1 -0
- package/dist/document-docx-import.d.ts +261 -0
- package/dist/document-docx-packer.d.ts +18 -0
- package/dist/document-docx-state.d.ts +12 -0
- package/dist/document-render.d.ts +3 -0
- package/dist/document-render.js +492 -0
- package/dist/document-render.js.map +1 -0
- package/dist/document.d.ts +432 -0
- package/dist/document.js +37 -0
- package/dist/document.js.map +1 -0
- package/dist/errors.d.ts +23 -0
- package/dist/file-blob.d.ts +11 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +186 -0
- package/dist/index.js.map +1 -0
- package/dist/inspection.d.ts +12 -0
- package/dist/kernel.d.ts +101 -0
- package/dist/lib-GQLPACFK.js +9746 -0
- package/dist/lib-GQLPACFK.js.map +1 -0
- package/dist/materializer-cli-entry.d.ts +2 -0
- package/dist/materializer-cli-entry.js +29 -0
- package/dist/materializer-cli-entry.js.map +1 -0
- package/dist/materializer-cli.d.ts +24 -0
- package/dist/materializer-cli.js +24 -0
- package/dist/materializer-cli.js.map +1 -0
- package/dist/native-raster.d.ts +10 -0
- package/dist/native.d.ts +129 -0
- package/dist/native.js +31 -0
- package/dist/native.js.map +1 -0
- package/dist/office-import.d.ts +48 -0
- package/dist/office-import.js +154 -0
- package/dist/office-import.js.map +1 -0
- package/dist/presentation-pptx-api.d.ts +60 -0
- package/dist/presentation-pptx-import.d.ts +5 -0
- package/dist/presentation-pptx-state-digest-765CZZED.js +10 -0
- package/dist/presentation-pptx-state-digest-765CZZED.js.map +1 -0
- package/dist/presentation-pptx-state-digest.d.ts +3 -0
- package/dist/presentation-pptx-state.d.ts +4 -0
- package/dist/presentation-pptx-xml.d.ts +29 -0
- package/dist/presentation-pptx.d.ts +5 -0
- package/dist/presentation-pptx.js +2365 -0
- package/dist/presentation-pptx.js.map +1 -0
- package/dist/presentation-render.d.ts +29 -0
- package/dist/presentation-render.js +375 -0
- package/dist/presentation-render.js.map +1 -0
- package/dist/presentation.d.ts +565 -0
- package/dist/presentation.js +71 -0
- package/dist/presentation.js.map +1 -0
- package/dist/production-composite.d.ts +68 -0
- package/dist/production-document.d.ts +2 -0
- package/dist/production-document.js +176 -0
- package/dist/production-document.js.map +1 -0
- package/dist/production-native-codecs.d.ts +94 -0
- package/dist/production-presentation.d.ts +2 -0
- package/dist/production-presentation.js +176 -0
- package/dist/production-presentation.js.map +1 -0
- package/dist/production-sha256.d.ts +2 -0
- package/dist/production-spreadsheet-native.d.ts +12 -0
- package/dist/production-spreadsheet.d.ts +2 -0
- package/dist/production-spreadsheet.js +176 -0
- package/dist/production-spreadsheet.js.map +1 -0
- package/dist/production.d.ts +96 -0
- package/dist/raster-image.d.ts +34 -0
- package/dist/reference.d.ts +17 -0
- package/dist/reference.js +574 -0
- package/dist/reference.js.map +1 -0
- package/dist/runtime-cli-entry.d.ts +2 -0
- package/dist/runtime-cli-entry.js +21 -0
- package/dist/runtime-cli-entry.js.map +1 -0
- package/dist/runtime-cli.d.ts +76 -0
- package/dist/runtime-cli.js +26 -0
- package/dist/runtime-cli.js.map +1 -0
- package/dist/runtime-development.d.ts +73 -0
- package/dist/runtime-development.js +30 -0
- package/dist/runtime-development.js.map +1 -0
- package/dist/runtime-receipt.d.ts +19 -0
- package/dist/runtime.d.ts +355 -0
- package/dist/runtime.js +42 -0
- package/dist/runtime.js.map +1 -0
- package/dist/snapshot.d.ts +26 -0
- package/dist/snapshot.js +61 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/spreadsheet-address.d.ts +18 -0
- package/dist/spreadsheet-file.d.ts +17 -0
- package/dist/spreadsheet-formula.d.ts +67 -0
- package/dist/spreadsheet-image.d.ts +17 -0
- package/dist/spreadsheet-render.d.ts +5 -0
- package/dist/spreadsheet-render.js +752 -0
- package/dist/spreadsheet-render.js.map +1 -0
- package/dist/spreadsheet-types.d.ts +155 -0
- package/dist/spreadsheet-xlsx-api.d.ts +88 -0
- package/dist/spreadsheet-xlsx-codec.d.ts +16 -0
- package/dist/spreadsheet-xlsx-codec.js +16 -0
- package/dist/spreadsheet-xlsx-codec.js.map +1 -0
- package/dist/spreadsheet-xlsx-state.d.ts +16 -0
- package/dist/spreadsheet.d.ts +724 -0
- package/dist/spreadsheet.js +67 -0
- package/dist/spreadsheet.js.map +1 -0
- package/package.json +129 -0
- package/src/bounded-zip.ts +450 -0
- package/src/document-docx-api.ts +64 -0
- package/src/document-docx-codec.ts +2253 -0
- package/src/document-docx-import.ts +3814 -0
- package/src/document-docx-packer.ts +72 -0
- package/src/document-docx-state.ts +59 -0
- package/src/document-render.ts +615 -0
- package/src/document.ts +2800 -0
- package/src/errors.ts +45 -0
- package/src/file-blob.ts +43 -0
- package/src/index.ts +4 -0
- package/src/inspection.ts +50 -0
- package/src/kernel.ts +525 -0
- package/src/materializer-cli-entry.ts +11 -0
- package/src/materializer-cli.ts +743 -0
- package/src/native-raster.ts +141 -0
- package/src/native.ts +390 -0
- package/src/office-import.ts +243 -0
- package/src/presentation-pptx-api.ts +107 -0
- package/src/presentation-pptx-import.ts +2065 -0
- package/src/presentation-pptx-state-digest.ts +46 -0
- package/src/presentation-pptx-state.ts +18 -0
- package/src/presentation-pptx-xml.ts +473 -0
- package/src/presentation-pptx.ts +447 -0
- package/src/presentation-render.ts +532 -0
- package/src/presentation.ts +2599 -0
- package/src/production-composite.ts +805 -0
- package/src/production-document.ts +2 -0
- package/src/production-native-codecs.ts +1141 -0
- package/src/production-presentation.ts +2 -0
- package/src/production-sha256.ts +150 -0
- package/src/production-spreadsheet-native.ts +686 -0
- package/src/production-spreadsheet.ts +2 -0
- package/src/production.ts +1022 -0
- package/src/raster-image.ts +586 -0
- package/src/reference.ts +17 -0
- package/src/runtime-cli-entry.ts +13 -0
- package/src/runtime-cli.ts +670 -0
- package/src/runtime-development.ts +689 -0
- package/src/runtime-receipt.ts +169 -0
- package/src/runtime.ts +1463 -0
- package/src/snapshot.ts +88 -0
- package/src/spreadsheet-address.ts +90 -0
- package/src/spreadsheet-file.ts +71 -0
- package/src/spreadsheet-formula.ts +1212 -0
- package/src/spreadsheet-image.ts +242 -0
- package/src/spreadsheet-render.ts +985 -0
- package/src/spreadsheet-types.ts +171 -0
- package/src/spreadsheet-xlsx-api.ts +123 -0
- package/src/spreadsheet-xlsx-codec.ts +3063 -0
- package/src/spreadsheet-xlsx-state.ts +191 -0
- package/src/spreadsheet.ts +5195 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/document.ts"],"sourcesContent":["import { FileBlob } from \"./file-blob\";\nimport { boundInspectionRecords, defineHelpEntries, filterHelpEntries } from \"./inspection\";\nimport type { HelpOptions, InspectOptions, InspectResult } from \"./spreadsheet-types\";\n\nexport type DocumentPageGeometry = {\n readonly widthPt: number;\n readonly heightPt: number;\n readonly marginTopPt: number;\n readonly marginRightPt: number;\n readonly marginBottomPt: number;\n readonly marginLeftPt: number;\n /** Distance from the page edge to the header baseline area. Defaults to 36pt. */\n readonly headerPt?: number;\n /** Distance from the page edge to the footer baseline area. Defaults to 36pt. */\n readonly footerPt?: number;\n /** Extra binding gutter added by the word processor. Defaults to 0pt. */\n readonly gutterPt?: number;\n};\n\nexport type DocumentTextStyle = {\n readonly fontFamily?: string;\n readonly fontSizePt?: number;\n readonly color?: string;\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: boolean;\n readonly strike?: boolean;\n};\n\nexport type DocumentParagraphStyle = {\n readonly headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n readonly alignment?: \"left\" | \"center\" | \"right\" | \"justify\";\n readonly spaceBeforePt?: number;\n readonly spaceAfterPt?: number;\n readonly lineHeight?: number;\n readonly keepNext?: boolean;\n readonly pageBreakBefore?: boolean;\n readonly list?: {\n readonly kind: \"bullet\" | \"number\";\n readonly level?: number;\n readonly instanceId?: string;\n };\n};\n\nexport type DocumentTableStyle = {\n readonly widthPt?: number;\n readonly columnWidthsPt?: readonly number[];\n readonly headerRows?: number;\n readonly cellPaddingPt?: number;\n readonly borderColor?: string;\n readonly headerFill?: string;\n /** Defaults to false so a row is never split between pages unexpectedly. */\n readonly allowRowSplit?: boolean;\n};\n\nexport type DocumentRenderOptions = {\n format?: \"html\" | \"svg\" | \"png\";\n scale?: number;\n background?: string;\n};\n\nexport type DocumentParagraphEdit = {\n start: number;\n end: number;\n text: string;\n style?: DocumentTextStyle;\n};\n\nexport type DocumentTextStylePatch = {\n fontFamily?: string | null;\n fontSizePt?: number | null;\n color?: string | null;\n bold?: boolean | null;\n italic?: boolean | null;\n underline?: boolean | null;\n strike?: boolean | null;\n};\n\nexport type DocumentParagraphFormat = {\n start: number;\n end: number;\n style: DocumentTextStylePatch;\n};\n\nexport type DocumentCreateOptions = {\n page?: Partial<DocumentPageGeometry>;\n /** Preserve/enable distinct first-page header and footer stories, even when empty. */\n titlePage?: boolean;\n /** Preserve/enable distinct even-page header and footer stories, even when empty. */\n evenAndOddHeaders?: boolean;\n /** Keep Word's track-revisions mode enabled even when no pending changes exist. */\n trackRevisions?: boolean;\n /** Primarily useful for deterministic fixtures. Must be 64 bits of lowercase hex. */\n idNamespace?: string;\n /** Injectable clock for deterministic comments and tracked changes. */\n now?: () => Date;\n};\n\nexport type SerializedDocument = {\n version: 1;\n idNamespace: string;\n nextId: number;\n revision: number;\n evenAndOddHeaders?: boolean;\n trackRevisions?: boolean;\n page: DocumentPageGeometry;\n blocks: SerializedDocumentBlock[];\n sections: SerializedDocumentSection[];\n comments: SerializedDocumentComment[];\n changes: SerializedTrackedChange[];\n};\n\nexport type SerializedTextRun = { text: string; style: DocumentTextStyle };\nexport type SerializedParagraph = {\n kind: \"paragraph\";\n id: string;\n runs: SerializedTextRun[];\n style: DocumentParagraphStyle;\n};\nexport type SerializedTable = {\n kind: \"table\";\n id: string;\n rows: SerializedTextRun[][][];\n style: DocumentTableStyle;\n};\nexport type SerializedPageBreak = { kind: \"pageBreak\"; id: string };\nexport type SerializedDocumentBlock = SerializedParagraph | SerializedTable | SerializedPageBreak;\nexport type SerializedStory = {\n id: string;\n blocks: Array<SerializedParagraph | SerializedTable>;\n};\nexport type SerializedDocumentSection = {\n id: string;\n startBlockIndex: number;\n titlePage?: boolean;\n page: DocumentPageGeometry;\n headers: { default: SerializedStory; first: SerializedStory; even: SerializedStory };\n footers: { default: SerializedStory; first: SerializedStory; even: SerializedStory };\n};\nexport type SerializedDocumentComment = {\n id: string;\n blockId: string;\n start: number;\n end: number;\n resolved: boolean;\n replies: Array<{ author: string; text: string; createdAt: string }>;\n};\nexport type SerializedTrackedChange = {\n id: string;\n blockId: string;\n kind: \"insert\" | \"delete\";\n start: number;\n end: number;\n author: string;\n createdAt: string;\n};\n\nconst DEFAULT_PAGE: DocumentPageGeometry = {\n widthPt: 612,\n heightPt: 792,\n marginTopPt: 72,\n marginRightPt: 72,\n marginBottomPt: 72,\n marginLeftPt: 72,\n};\nconst MAX_DOCUMENT_BLOCKS = 100_000;\nconst MAX_TEXT_LENGTH = 10_000_000;\nconst MAX_TEXT_RUNS = 250_000;\nconst MAX_TABLE_CELLS = 1_000_000;\nconst MAX_STRUCTURAL_ID = Number.MAX_SAFE_INTEGER - 1;\nconst NAMESPACE_PATTERN = /^[0-9a-f]{16}$/;\nconst DOCUMENT_INTERNAL_ACCESS = Symbol(\"document-internal-access\");\ntype DocumentInternalAccess = typeof DOCUMENT_INTERNAL_ACCESS;\n\nfunction assertDocumentInternalAccess(access: DocumentInternalAccess): void {\n if (access !== DOCUMENT_INTERNAL_ACCESS) {\n throw new Error(\"Document internals are not part of the public mutation API\");\n }\n}\n\nconst DOCUMENT_HELP_ENTRIES = defineHelpEntries([\n [\n \"Document.create\",\n \"Create an editable document and initial section\",\n \"const document = Document.create()\",\n ],\n [\n \"document.blocks.addParagraph\",\n \"Add or edit styled paragraphs\",\n 'document.blocks.addParagraph(\"Body text\")',\n 'paragraph.edit({ start: 0, end: 4, text: \"Updated\" })',\n \"paragraph.format({ start: 0, end: 7, style: { bold: true } })\",\n ],\n [\n \"document.blocks.addHeading\",\n \"Add heading levels 1-6\",\n 'document.blocks.addHeading(\"Overview\", 1)',\n ],\n [\n \"document.blocks.addTable\",\n \"Add an editable table with point geometry\",\n 'document.blocks.addTable([[\"Name\", \"Value\"]], { widthPt: 360, columnWidthsPt: [240, 120], headerRows: 1 })',\n ],\n [\n \"document.sections.add\",\n \"Add sections, headers, and footers\",\n \"const section = document.sections.add({ page: { widthPt: 792, heightPt: 612 } })\",\n 'section.headers.default.addParagraph(\"Header\")',\n ],\n [\n \"document.comments.addThread\",\n \"Add a threaded range comment\",\n 'const thread = document.comments.addThread({ block: paragraph, start: 0, end: 5 }, \"Review\")',\n 'thread.addReply(\"Done\")',\n ],\n [\n \"document.changes.add\",\n \"Add a tracked insertion or deletion\",\n 'document.changes.add({ block: paragraph, start: 0, end: 5 }, \"insert\", \"Author\")',\n ],\n [\n \"document.inspect\",\n \"Inspect bounded document records\",\n 'await document.inspect({ kind: \"document,section,paragraph,table,comment,redline\" })',\n ],\n [\n \"document.render\",\n \"Render HTML, SVG, or PNG\",\n 'await document.render({ format: \"png\", scale: 1 })',\n ],\n [\n \"DocumentFile.exportDocx\",\n \"Export an editable DOCX\",\n \"const blob = await DocumentFile.exportDocx(document)\",\n ],\n [\n \"DocumentFile.importDocx\",\n \"Import a bounded editable DOCX\",\n \"const document = await DocumentFile.importDocx(blob)\",\n ],\n]);\n\n/**\n * Skill-compatible TypeScript reference document used by fixtures and codecs.\n * The package root projects this facade through the retained native document\n * session; production never selects this reference model as a fallback.\n */\nexport class Document {\n readonly blocks: DocumentBlockCollection;\n readonly comments: DocumentComments;\n readonly changes: TrackedChanges;\n readonly sections: DocumentSections;\n readonly idNamespace: string;\n private readonly objects = new Map<string, unknown>();\n private readonly nowProvider: () => Date;\n private nextIdValue = 1;\n private revisionValue = 0;\n private explicitEvenAndOddHeaders: boolean | undefined;\n private explicitTrackRevisions: boolean | undefined;\n private blockCountValue = 0;\n private cellCountValue = 0;\n private runCountValue = 0;\n private textLengthValue = 0;\n private replyCountValue = 0;\n\n private constructor(options: DocumentCreateOptions = {}, initializeDefaultSection = true) {\n this.idNamespace = options.idNamespace ?? createNamespace();\n if (!NAMESPACE_PATTERN.test(this.idNamespace)) {\n throw new Error(\"Document idNamespace must be 16 lowercase hexadecimal characters\");\n }\n this.nowProvider = options.now ?? (() => new Date());\n if (options.evenAndOddHeaders !== undefined && typeof options.evenAndOddHeaders !== \"boolean\") {\n throw new Error(\"evenAndOddHeaders must be boolean\");\n }\n if (options.titlePage !== undefined && typeof options.titlePage !== \"boolean\") {\n throw new Error(\"titlePage must be boolean\");\n }\n this.explicitEvenAndOddHeaders = options.evenAndOddHeaders;\n if (options.trackRevisions !== undefined && typeof options.trackRevisions !== \"boolean\") {\n throw new Error(\"trackRevisions must be boolean\");\n }\n this.explicitTrackRevisions = options.trackRevisions;\n this.blocks = new DocumentBlockCollection(this, DOCUMENT_INTERNAL_ACCESS);\n this.comments = new DocumentComments(this, DOCUMENT_INTERNAL_ACCESS);\n this.changes = new TrackedChanges(this, DOCUMENT_INTERNAL_ACCESS);\n this.sections = new DocumentSections(this, DOCUMENT_INTERNAL_ACCESS);\n if (initializeDefaultSection)\n this.sections.addRestored(\n 0,\n { ...DEFAULT_PAGE, ...options.page },\n options.titlePage,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n\n static create(options: DocumentCreateOptions = {}): Document {\n return new Document(options);\n }\n\n get page(): DocumentPageGeometry {\n const section = this.sections.items[0];\n if (!section) throw new Error(\"Document has no sections\");\n return section.page;\n }\n\n get revision(): number {\n return this.revisionValue;\n }\n\n get evenAndOddHeaders(): boolean {\n return (\n this.explicitEvenAndOddHeaders ??\n this.sections.items.some(\n (section) => section.headers.even.items.length > 0 || section.footers.even.items.length > 0,\n )\n );\n }\n\n setEvenAndOddHeaders(enabled: boolean): void {\n if (typeof enabled !== \"boolean\") throw new Error(\"evenAndOddHeaders must be boolean\");\n if (this.explicitEvenAndOddHeaders === enabled) return;\n this.assertCanChange();\n this.explicitEvenAndOddHeaders = enabled;\n this.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n\n get trackRevisions(): boolean {\n return this.explicitTrackRevisions ?? this.changes.items.length > 0;\n }\n\n setTrackRevisions(enabled: boolean): void {\n if (typeof enabled !== \"boolean\") throw new Error(\"trackRevisions must be boolean\");\n if (this.explicitTrackRevisions === enabled) return;\n this.assertCanChange();\n this.explicitTrackRevisions = enabled;\n this.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n\n resolve(id: string): unknown {\n const object = this.objects.get(id);\n if (!object) throw new Error(`Unknown document object id: ${id}`);\n return object;\n }\n\n ownsObject(id: string, object: unknown): boolean {\n return this.objects.get(id) === object;\n }\n\n async inspect(options: InspectOptions): Promise<InspectResult> {\n validateDocument(this);\n const kinds = new Set(options.kind.split(\",\").map((kind) => kind.trim()));\n const search = options.search?.toLowerCase();\n const records: Record<string, unknown>[] = [];\n if (kinds.has(\"document\")) {\n records.push({\n kind: \"document\",\n idNamespace: this.idNamespace,\n revision: this.revision,\n blockCount: this.blocks.items.length,\n sectionCount: this.sections.items.length,\n commentCount: this.comments.items.length,\n trackedChangeCount: this.changes.items.length,\n page: this.page,\n });\n }\n if (kinds.has(\"section\")) {\n for (const section of this.sections.items) records.push(section.inspectRecord());\n }\n for (const block of this.allStoryBlocks()) {\n const record = block.inspectRecord();\n if (search && !JSON.stringify(record).toLowerCase().includes(search)) continue;\n if (kinds.has(block.kind) || kinds.has(\"block\") || kinds.has(\"text\")) records.push(record);\n }\n if (kinds.has(\"thread\") || kinds.has(\"comment\")) {\n for (const thread of this.comments.items) records.push(thread.inspectRecord());\n }\n if (kinds.has(\"change\") || kinds.has(\"redline\")) {\n for (const change of this.changes.items) records.push(change.inspectRecord());\n }\n return boundInspectionRecords(records, inspectCharacterLimit(options.maxChars, 20_000));\n }\n\n help(query: string, options: HelpOptions = {}): InspectResult {\n const entries = filterHelpEntries(DOCUMENT_HELP_ENTRIES, query, options.search);\n return boundInspectionRecords(entries, inspectCharacterLimit(options.maxChars, 6_000));\n }\n\n async render(options: DocumentRenderOptions = {}): Promise<FileBlob> {\n validateDocument(this);\n const renderer = await import(\"@opengeni/artifact-tool/document/render\");\n return renderer.renderDocument(this, options);\n }\n\n toJSON(): SerializedDocument {\n validateDocument(this);\n return {\n version: 1,\n idNamespace: this.idNamespace,\n nextId: this.nextIdValue,\n revision: this.revision,\n ...(this.explicitEvenAndOddHeaders !== undefined\n ? { evenAndOddHeaders: this.explicitEvenAndOddHeaders }\n : {}),\n ...(this.explicitTrackRevisions !== undefined\n ? { trackRevisions: this.explicitTrackRevisions }\n : {}),\n page: { ...this.page },\n blocks: this.blocks.items.map((block) => block.serialize()),\n sections: this.sections.items.map((section) => section.serialize()),\n comments: this.comments.items.map((comment) => comment.serialize()),\n changes: this.changes.items.map((change) => change.serialize()),\n };\n }\n\n static fromJSON(value: unknown): Document {\n validateSerializedDocumentEnvelope(value);\n const snapshot = structuredClone(value) as SerializedDocument;\n const document = new Document(\n {\n idNamespace: snapshot.idNamespace,\n ...(snapshot.evenAndOddHeaders !== undefined\n ? { evenAndOddHeaders: snapshot.evenAndOddHeaders }\n : {}),\n ...(snapshot.trackRevisions !== undefined\n ? { trackRevisions: snapshot.trackRevisions }\n : {}),\n },\n false,\n );\n if (Array.isArray(snapshot.sections) && snapshot.sections.length > 0) {\n for (const section of snapshot.sections) {\n document.sections.restore(section, DOCUMENT_INTERNAL_ACCESS);\n }\n } else {\n document.sections.addRestored(\n 0,\n snapshot.page ?? DEFAULT_PAGE,\n undefined,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n for (const block of snapshot.blocks) {\n document.blocks.restore(block, DOCUMENT_INTERNAL_ACCESS);\n }\n for (const comment of snapshot.comments ?? []) {\n document.comments.restore(comment, DOCUMENT_INTERNAL_ACCESS);\n }\n for (const change of snapshot.changes ?? []) {\n document.changes.restore(change, DOCUMENT_INTERNAL_ACCESS);\n }\n if (snapshot.nextId < document.nextIdValue) {\n throw new Error(\"Serialized document nextId precedes an allocated structural id\");\n }\n document.nextIdValue = snapshot.nextId;\n document.revisionValue = snapshot.revision;\n validateDocument(document);\n return document;\n }\n\n allocateId(\n prefix: string,\n object: unknown,\n existingId: string | undefined,\n access: DocumentInternalAccess,\n ): string {\n assertDocumentInternalAccess(access);\n if (!/^[a-z]{1,8}$/.test(prefix)) throw new Error(`Invalid document id prefix: ${prefix}`);\n if (this.nextIdValue > MAX_STRUCTURAL_ID)\n throw new Error(\"Document structural id space exhausted\");\n const id =\n existingId ??\n `${prefix}/${this.idNamespace}${this.nextIdValue.toString(16).padStart(16, \"0\")}`;\n const expectedPattern = new RegExp(`^${prefix}/${this.idNamespace}[0-9a-f]{16}$`, \"u\");\n if (!expectedPattern.test(id)) {\n throw new Error(`Invalid document object id: ${id}`);\n }\n const counter = Number.parseInt(id.slice(-16), 16);\n if (!Number.isSafeInteger(counter) || counter < 1 || counter > MAX_STRUCTURAL_ID) {\n throw new Error(`Document object id counter is invalid: ${id}`);\n }\n if (this.objects.has(id)) throw new Error(`Duplicate document object id: ${id}`);\n this.objects.set(id, object);\n this.nextIdValue = Math.max(this.nextIdValue, counter + 1);\n return id;\n }\n\n assertTextLengthDelta(delta: number): void {\n const next = this.textLengthValue + delta;\n if (!Number.isSafeInteger(next) || next < 0 || next > MAX_TEXT_LENGTH) {\n throw new Error(`document text exceeds ${MAX_TEXT_LENGTH} UTF-16 code units`);\n }\n }\n\n commitTextLengthDelta(delta: number, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.textLengthValue += delta;\n }\n\n get trackedTextLength(): number {\n return this.textLengthValue;\n }\n\n assertBlockDelta(delta: number): void {\n const next = this.blockCountValue + delta;\n if (!Number.isSafeInteger(next) || next < 0 || next > MAX_DOCUMENT_BLOCKS) {\n throw new Error(`all document story blocks exceeds limit ${MAX_DOCUMENT_BLOCKS}`);\n }\n }\n\n commitBlockDelta(delta: number, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.blockCountValue += delta;\n }\n\n get trackedBlockCount(): number {\n return this.blockCountValue;\n }\n\n assertCellDelta(delta: number): void {\n const next = this.cellCountValue + delta;\n if (!Number.isSafeInteger(next) || next < 0 || next > MAX_TABLE_CELLS) {\n throw new Error(`document table cells exceeds limit ${MAX_TABLE_CELLS}`);\n }\n }\n\n commitCellDelta(delta: number, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.cellCountValue += delta;\n }\n\n get trackedCellCount(): number {\n return this.cellCountValue;\n }\n\n assertRunDelta(delta: number): void {\n const next = this.runCountValue + delta;\n if (!Number.isSafeInteger(next) || next < 0 || next > MAX_TEXT_RUNS) {\n throw new Error(`document text runs exceeds limit ${MAX_TEXT_RUNS}`);\n }\n }\n\n commitRunDelta(delta: number, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.runCountValue += delta;\n }\n\n get trackedRunCount(): number {\n return this.runCountValue;\n }\n\n assertReplyDelta(delta: number): void {\n const next = this.replyCountValue + delta;\n if (!Number.isSafeInteger(next) || next < 0 || next > 100_000) {\n throw new Error(\"document comment replies exceed 100000\");\n }\n }\n\n commitReplyDelta(delta: number, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.replyCountValue += delta;\n }\n\n get trackedReplyCount(): number {\n return this.replyCountValue;\n }\n\n now(): string {\n const value = this.nowProvider();\n if (!Number.isFinite(value.getTime()))\n throw new Error(\"Document clock returned an invalid date\");\n return value.toISOString();\n }\n\n changed(access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.assertCanChange();\n this.revisionValue += 1;\n }\n\n assertCanChange(): void {\n if (this.revisionValue >= Number.MAX_SAFE_INTEGER) {\n throw new Error(\"Document revision space exhausted\");\n }\n }\n\n rebaseParagraphAnchors(\n blockId: string,\n editStart: number,\n editEnd: number,\n insertedLength: number,\n access: DocumentInternalAccess,\n ): void {\n assertDocumentInternalAccess(access);\n const delta = insertedLength - (editEnd - editStart);\n const mapStart = (offset: number): number => {\n if (offset <= editStart) return offset;\n if (offset >= editEnd) return offset + delta;\n return editStart;\n };\n const mapEnd = (offset: number): number => {\n if (offset <= editStart) return offset;\n if (offset >= editEnd) return offset + delta;\n return editStart + insertedLength;\n };\n for (const comment of this.comments.forBlock(blockId, DOCUMENT_INTERNAL_ACCESS)) {\n const wasPoint = comment.start === comment.end;\n const start = mapStart(comment.start);\n comment.rebaseTo(\n start,\n wasPoint ? start : Math.max(start, mapEnd(comment.end)),\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n for (const change of [...this.changes.forBlock(blockId, DOCUMENT_INTERNAL_ACCESS)]) {\n const start = mapStart(change.start);\n const end = Math.max(start, mapEnd(change.end));\n change.rebaseTo(start, end, DOCUMENT_INTERNAL_ACCESS);\n if (start === end) this.changes.remove(change, DOCUMENT_INTERNAL_ACCESS);\n }\n }\n\n allStoryBlocks(): Array<DocumentParagraph | DocumentTable | DocumentPageBreak> {\n const result: Array<DocumentParagraph | DocumentTable | DocumentPageBreak> = [\n ...this.blocks.items,\n ];\n for (const section of this.sections.items) {\n for (const story of section.allStories()) result.push(...story.items);\n }\n return result;\n }\n}\n\nexport class DocumentBlockCollection {\n private readonly itemStorage: DocumentBlock[] = [];\n readonly items: readonly DocumentBlock[];\n constructor(\n private readonly document: Document,\n access: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access);\n this.items = readonlyArrayView(this.itemStorage, \"document blocks\");\n }\n\n addParagraph(\n text: string | readonly DocumentTextRun[] = \"\",\n style: DocumentParagraphStyle = {},\n ): DocumentParagraph {\n ensureCapacity(this.items.length + 1, MAX_DOCUMENT_BLOCKS, \"document blocks\");\n this.document.assertCanChange();\n const paragraph = new DocumentParagraph(\n this.document,\n text,\n style,\n undefined,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(paragraph);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return paragraph;\n }\n\n addHeading(text: string, level: 1 | 2 | 3 | 4 | 5 | 6 = 1): DocumentParagraph {\n return this.addParagraph(text, { headingLevel: level, keepNext: true });\n }\n\n addTable(\n rows: ReadonlyArray<ReadonlyArray<string | readonly DocumentTextRun[]>>,\n style: DocumentTableStyle = {},\n ): DocumentTable {\n ensureCapacity(this.items.length + 1, MAX_DOCUMENT_BLOCKS, \"document blocks\");\n this.document.assertCanChange();\n const table = new DocumentTable(\n this.document,\n rows,\n style,\n undefined,\n undefined,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(table);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return table;\n }\n\n addPageBreak(): DocumentPageBreak {\n ensureCapacity(this.items.length + 1, MAX_DOCUMENT_BLOCKS, \"document blocks\");\n this.document.assertCanChange();\n const pageBreak = new DocumentPageBreak(this.document, undefined, DOCUMENT_INTERNAL_ACCESS);\n this.itemStorage.push(pageBreak);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return pageBreak;\n }\n\n restore(block: SerializedDocumentBlock, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n ensureCapacity(this.items.length + 1, MAX_DOCUMENT_BLOCKS, \"document blocks\");\n let restored: DocumentBlock;\n if (block.kind === \"paragraph\") {\n restored = DocumentParagraph.restore(this.document, block, DOCUMENT_INTERNAL_ACCESS);\n } else if (block.kind === \"table\") {\n restored = DocumentTable.restore(this.document, block, undefined, DOCUMENT_INTERNAL_ACCESS);\n } else {\n restored = new DocumentPageBreak(this.document, block.id, DOCUMENT_INTERNAL_ACCESS);\n }\n this.itemStorage.push(restored);\n }\n}\n\nexport type DocumentBlock = DocumentParagraph | DocumentTable | DocumentPageBreak;\nexport type DocumentStoryBlock = DocumentParagraph | DocumentTable;\n\nexport class DocumentStory {\n readonly id: string;\n private readonly itemStorage: DocumentStoryBlock[] = [];\n readonly items: readonly DocumentStoryBlock[];\n\n constructor(\n private readonly document: Document,\n readonly kind: \"header\" | \"footer\",\n existingId?: string,\n private readonly pageForTables?: DocumentPageGeometry,\n access?: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n this.id = document.allocateId(\n kind === \"header\" ? \"hdr\" : \"ftr\",\n this,\n existingId,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.items = readonlyArrayView(this.itemStorage, `${kind} story blocks`);\n }\n\n addParagraph(\n text: string | readonly DocumentTextRun[] = \"\",\n style: DocumentParagraphStyle = {},\n ): DocumentParagraph {\n this.document.assertCanChange();\n const paragraph = new DocumentParagraph(\n this.document,\n text,\n style,\n undefined,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(paragraph);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return paragraph;\n }\n\n addTable(\n rows: ReadonlyArray<ReadonlyArray<string | readonly DocumentTextRun[]>>,\n style: DocumentTableStyle = {},\n ): DocumentTable {\n this.document.assertCanChange();\n const table = new DocumentTable(\n this.document,\n rows,\n style,\n undefined,\n this.pageForTables,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(table);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return table;\n }\n\n serialize(): SerializedStory {\n return { id: this.id, blocks: this.items.map((block) => block.serialize()) };\n }\n\n restore(block: SerializedParagraph | SerializedTable, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.itemStorage.push(\n block.kind === \"paragraph\"\n ? DocumentParagraph.restore(this.document, block, DOCUMENT_INTERNAL_ACCESS)\n : DocumentTable.restore(this.document, block, this.pageForTables, DOCUMENT_INTERNAL_ACCESS),\n );\n }\n}\n\nexport class DocumentSectionStories {\n readonly default: DocumentStory;\n readonly first: DocumentStory;\n readonly even: DocumentStory;\n\n constructor(\n document: Document,\n kind: \"header\" | \"footer\",\n restored?: { default: SerializedStory; first: SerializedStory; even: SerializedStory },\n pageForTables?: DocumentPageGeometry,\n access?: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n this.default = restoreStory(\n document,\n kind,\n restored?.default,\n pageForTables,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.first = restoreStory(\n document,\n kind,\n restored?.first,\n pageForTables,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.even = restoreStory(\n document,\n kind,\n restored?.even,\n pageForTables,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n\n all(): readonly DocumentStory[] {\n return [this.default, this.first, this.even];\n }\n\n serialize(): { default: SerializedStory; first: SerializedStory; even: SerializedStory } {\n return {\n default: this.default.serialize(),\n first: this.first.serialize(),\n even: this.even.serialize(),\n };\n }\n}\n\nexport class DocumentSection {\n readonly id: string;\n readonly page: DocumentPageGeometry;\n readonly headers: DocumentSectionStories;\n readonly footers: DocumentSectionStories;\n\n constructor(\n private readonly document: Document,\n readonly startBlockIndex: number,\n page: DocumentPageGeometry,\n restored?: SerializedDocumentSection,\n private explicitTitlePage: boolean | undefined = restored?.titlePage,\n access?: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n this.page = Object.freeze({ ...page });\n this.id = document.allocateId(\"sec\", this, restored?.id, DOCUMENT_INTERNAL_ACCESS);\n this.headers = new DocumentSectionStories(\n document,\n \"header\",\n restored?.headers,\n this.page,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.footers = new DocumentSectionStories(\n document,\n \"footer\",\n restored?.footers,\n this.page,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n\n get titlePage(): boolean {\n return (\n this.explicitTitlePage ??\n (this.headers.first.items.length > 0 || this.footers.first.items.length > 0)\n );\n }\n\n setTitlePage(enabled: boolean): void {\n if (typeof enabled !== \"boolean\") throw new Error(\"titlePage must be boolean\");\n if (this.explicitTitlePage === enabled) return;\n this.document.assertCanChange();\n this.explicitTitlePage = enabled;\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n\n allStories(): readonly DocumentStory[] {\n return [...this.headers.all(), ...this.footers.all()];\n }\n\n inspectRecord(): Record<string, unknown> {\n return {\n kind: \"section\",\n id: this.id,\n startBlockIndex: this.startBlockIndex,\n titlePage: this.titlePage,\n page: this.page,\n headers: storyCounts(this.headers),\n footers: storyCounts(this.footers),\n };\n }\n\n serialize(): SerializedDocumentSection {\n return {\n id: this.id,\n startBlockIndex: this.startBlockIndex,\n ...(this.explicitTitlePage !== undefined ? { titlePage: this.explicitTitlePage } : {}),\n page: { ...this.page },\n headers: this.headers.serialize(),\n footers: this.footers.serialize(),\n };\n }\n}\n\nexport class DocumentSections {\n private readonly itemStorage: DocumentSection[] = [];\n readonly items: readonly DocumentSection[];\n constructor(\n private readonly document: Document,\n access: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access);\n this.items = readonlyArrayView(this.itemStorage, \"document sections\");\n }\n\n add(\n options: { page?: Partial<DocumentPageGeometry>; titlePage?: boolean } = {},\n ): DocumentSection {\n ensureCapacity(this.items.length + 1, 10_000, \"document sections\");\n const startBlockIndex = this.document.blocks.items.length;\n if (this.items.at(-1)?.startBlockIndex === startBlockIndex) {\n throw new Error(\n \"A document section must contain at least one body block before another section starts\",\n );\n }\n const page = { ...(this.items.at(-1)?.page ?? DEFAULT_PAGE), ...options.page };\n validatePage(page);\n if (options.titlePage !== undefined && typeof options.titlePage !== \"boolean\") {\n throw new Error(\"titlePage must be boolean\");\n }\n this.document.assertCanChange();\n const section = new DocumentSection(\n this.document,\n startBlockIndex,\n page,\n undefined,\n options.titlePage,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(section);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return section;\n }\n\n addRestored(\n startBlockIndex: number,\n page: DocumentPageGeometry,\n titlePage?: boolean,\n access?: DocumentInternalAccess,\n ): DocumentSection {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n ensureCapacity(this.items.length + 1, 10_000, \"document sections\");\n const section = new DocumentSection(\n this.document,\n startBlockIndex,\n { ...page },\n undefined,\n titlePage,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(section);\n return section;\n }\n\n restore(value: SerializedDocumentSection, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n ensureCapacity(this.items.length + 1, 10_000, \"document sections\");\n const section = new DocumentSection(\n this.document,\n value.startBlockIndex,\n { ...value.page },\n value,\n value.titlePage,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(section);\n }\n}\n\nexport class DocumentTextRun {\n readonly text: string;\n readonly style: DocumentTextStyle;\n constructor(text: string, style: DocumentTextStyle = {}) {\n validateText(text, \"document text run\");\n validateTextStyle(style);\n this.text = text;\n this.style = Object.freeze({ ...style });\n Object.freeze(this);\n }\n serialize(): SerializedTextRun {\n return { text: this.text, style: { ...this.style } };\n }\n static restore(value: SerializedTextRun): DocumentTextRun {\n return new DocumentTextRun(value.text, { ...value.style });\n }\n}\n\nexport class DocumentParagraph {\n readonly kind = \"paragraph\" as const;\n readonly id: string;\n private readonly runStorage: DocumentTextRun[];\n readonly runs: readonly DocumentTextRun[];\n private styleValue: DocumentParagraphStyle;\n\n constructor(\n private readonly document: Document,\n text: string | readonly DocumentTextRun[],\n style: DocumentParagraphStyle = {},\n existingId?: string,\n access?: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n this.runStorage =\n typeof text === \"string\"\n ? [new DocumentTextRun(text)]\n : text.length > 0\n ? text.map((run) => new DocumentTextRun(run.text, { ...run.style }))\n : [new DocumentTextRun(\"\")];\n const runCount = this.runStorage.length;\n document.assertRunDelta(runCount);\n this.runs = readonlyArrayView(this.runStorage, \"document paragraph runs\");\n this.styleValue = freezeParagraphStyle(style);\n validateParagraphStyle(this.styleValue);\n const textLength = this.text.length;\n document.assertBlockDelta(1);\n document.assertTextLengthDelta(textLength);\n this.id = document.allocateId(\"p\", this, existingId, DOCUMENT_INTERNAL_ACCESS);\n document.commitBlockDelta(1, DOCUMENT_INTERNAL_ACCESS);\n document.commitRunDelta(runCount, DOCUMENT_INTERNAL_ACCESS);\n document.commitTextLengthDelta(textLength, DOCUMENT_INTERNAL_ACCESS);\n }\n\n get text(): string {\n return this.runs.map((run) => run.text).join(\"\");\n }\n get style(): DocumentParagraphStyle {\n return this.styleValue;\n }\n setStyle(style: DocumentParagraphStyle): void {\n const next = freezeParagraphStyle(style);\n validateParagraphStyle(next);\n this.document.assertCanChange();\n this.styleValue = next;\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n set text(value: string) {\n validateText(value, \"document paragraph\");\n const edit = minimalTextEdit(this.text, value);\n this.edit({ start: edit.start, end: edit.end, text: edit.replacement });\n }\n append(text: string, style: DocumentTextStyle = {}): DocumentTextRun {\n const run = this.edit({ start: this.text.length, end: this.text.length, text, style });\n if (!run) throw new Error(\"Appending empty text does not create a text run\");\n return run;\n }\n replace(search: string | RegExp, replacement: string): void {\n validateText(replacement, \"document replacement\");\n const current = this.text;\n const edits = collectReplacementEdits(current, search, replacement).filter(\n (edit) => current.slice(edit.start, edit.end) !== edit.text,\n );\n if (edits.length === 0) return;\n let textDelta = 0;\n for (const edit of edits) {\n if (!isUnicodeBoundary(current, edit.start) || !isUnicodeBoundary(current, edit.end)) {\n throw new Error(\"Paragraph replacements must not split a Unicode surrogate pair\");\n }\n textDelta += edit.text.length - (edit.end - edit.start);\n }\n const nextRuns = buildReplacementRuns(this.runs, current.length, edits);\n const runDelta = nextRuns.length - this.runs.length;\n this.document.assertTextLengthDelta(textDelta);\n this.document.assertRunDelta(runDelta);\n this.document.assertCanChange();\n this.runStorage.length = 0;\n this.runStorage.push(...nextRuns);\n this.document.commitTextLengthDelta(textDelta, DOCUMENT_INTERNAL_ACCESS);\n this.document.commitRunDelta(runDelta, DOCUMENT_INTERNAL_ACCESS);\n for (let index = edits.length - 1; index >= 0; index -= 1) {\n const edit = edits[index]!;\n this.document.rebaseParagraphAnchors(\n this.id,\n edit.start,\n edit.end,\n edit.text.length,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n edit(edit: DocumentParagraphEdit): DocumentTextRun | undefined;\n edit(\n start: number,\n end: number,\n replacement: string,\n style?: DocumentTextStyle,\n ): DocumentTextRun | undefined;\n edit(\n editOrStart: DocumentParagraphEdit | number,\n legacyEnd?: number,\n legacyReplacement?: string,\n legacyStyle?: DocumentTextStyle,\n ): DocumentTextRun | undefined {\n const {\n start,\n end,\n text: replacement,\n style,\n } = typeof editOrStart === \"number\"\n ? { start: editOrStart, end: legacyEnd, text: legacyReplacement, style: legacyStyle }\n : editOrStart;\n if (end === undefined || replacement === undefined)\n throw new Error(\"Paragraph edit requires start, end, and text\");\n return this.applyEdit(\n { start, end, text: replacement, ...(style !== undefined ? { style } : {}) },\n true,\n );\n }\n private applyEdit(\n edit: DocumentParagraphEdit,\n markChanged: boolean,\n ): DocumentTextRun | undefined {\n const { start, end, text: replacement, style } = edit;\n validateText(replacement, \"document replacement\");\n const current = this.text;\n if (\n !Number.isSafeInteger(start) ||\n !Number.isSafeInteger(end) ||\n start < 0 ||\n end < start ||\n end > current.length\n )\n throw new Error(\"Invalid paragraph edit range\");\n if (!isUnicodeBoundary(current, start) || !isUnicodeBoundary(current, end))\n throw new Error(\"Paragraph edits must not split a Unicode surrogate pair\");\n if (style !== undefined) validateTextStyle(style);\n if (start === end && replacement.length === 0) return undefined;\n const before = sliceTextRuns(this.runs, 0, start);\n const after = sliceTextRuns(this.runs, end, current.length);\n const inheritedStyle = style ?? textStyleAt(this.runs, start, current.length);\n const inserted =\n replacement.length > 0 ? new DocumentTextRun(replacement, { ...inheritedStyle }) : undefined;\n const nextRuns = mergeAdjacentTextRuns([...before, ...(inserted ? [inserted] : []), ...after]);\n if (nextRuns.length === 0) nextRuns.push(new DocumentTextRun(\"\"));\n const textDelta = replacement.length - (end - start);\n const runDelta = nextRuns.length - this.runs.length;\n this.document.assertTextLengthDelta(textDelta);\n this.document.assertRunDelta(runDelta);\n if (markChanged) this.document.assertCanChange();\n this.runStorage.length = 0;\n this.runStorage.push(...nextRuns);\n this.document.commitTextLengthDelta(textDelta, DOCUMENT_INTERNAL_ACCESS);\n this.document.commitRunDelta(runDelta, DOCUMENT_INTERNAL_ACCESS);\n this.document.rebaseParagraphAnchors(\n this.id,\n start,\n end,\n replacement.length,\n DOCUMENT_INTERNAL_ACCESS,\n );\n if (markChanged) this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return inserted;\n }\n format(format: DocumentParagraphFormat): void {\n const { start, end, style } = format;\n const current = this.text;\n if (\n !Number.isSafeInteger(start) ||\n !Number.isSafeInteger(end) ||\n start < 0 ||\n end < start ||\n end > current.length\n )\n throw new Error(\"Invalid paragraph format range\");\n if (!isUnicodeBoundary(current, start) || !isUnicodeBoundary(current, end))\n throw new Error(\"Paragraph formatting must not split a Unicode surrogate pair\");\n validateTextStylePatch(style);\n if (start === end || Object.keys(style).length === 0) return;\n const before = sliceTextRuns(this.runs, 0, start);\n const selected = sliceTextRuns(this.runs, start, end).map(\n (run) => new DocumentTextRun(run.text, applyTextStylePatch(run.style, style)),\n );\n const after = sliceTextRuns(this.runs, end, current.length);\n const nextRuns = mergeAdjacentTextRuns([...before, ...selected, ...after]);\n if (nextRuns.length === 0) nextRuns.push(new DocumentTextRun(\"\"));\n const runDelta = nextRuns.length - this.runs.length;\n this.document.assertRunDelta(runDelta);\n this.document.assertCanChange();\n this.runStorage.length = 0;\n this.runStorage.push(...nextRuns);\n this.document.commitRunDelta(runDelta, DOCUMENT_INTERNAL_ACCESS);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n inspectRecord(): Record<string, unknown> {\n return {\n kind: this.kind,\n id: this.id,\n text: this.text,\n runs: this.runs.map((run) => run.serialize()),\n style: this.style,\n };\n }\n serialize(): SerializedParagraph {\n return {\n kind: this.kind,\n id: this.id,\n runs: this.runs.map((run) => run.serialize()),\n style: cloneParagraphStyle(this.style),\n };\n }\n static restore(\n document: Document,\n value: SerializedParagraph,\n access: DocumentInternalAccess,\n ): DocumentParagraph {\n assertDocumentInternalAccess(access);\n return new DocumentParagraph(\n document,\n value.runs.map(DocumentTextRun.restore),\n value.style,\n value.id,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n}\n\nexport class DocumentTable {\n readonly kind = \"table\" as const;\n readonly id: string;\n readonly rows: readonly (readonly (readonly DocumentTextRun[])[])[];\n private styleValue: DocumentTableStyle;\n private readonly validationPage: DocumentPageGeometry;\n\n constructor(\n private readonly document: Document,\n rows: ReadonlyArray<ReadonlyArray<string | readonly DocumentTextRun[]>>,\n style: DocumentTableStyle = {},\n existingId?: string,\n pageForValidation?: DocumentPageGeometry,\n access?: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n const width = rows[0]?.length ?? 0;\n if (width === 0 || rows.some((row) => row.length !== width)) {\n throw new Error(\"Document table must be a non-empty rectangle\");\n }\n const cellCount = rows.length * width;\n ensureCapacity(cellCount, MAX_TABLE_CELLS, \"document table cells\");\n const runCount = rows.reduce(\n (tableTotal, row) =>\n tableTotal +\n row.reduce((rowTotal, cell) => rowTotal + (typeof cell === \"string\" ? 1 : cell.length), 0),\n 0,\n );\n document.assertRunDelta(runCount);\n const materializedRows = rows.map((row) =>\n row.map((cell) =>\n typeof cell === \"string\"\n ? [new DocumentTextRun(cell)]\n : cell.map((run) => new DocumentTextRun(run.text, { ...run.style })),\n ),\n );\n this.rows = freezeTableRows(materializedRows);\n this.validationPage = Object.freeze({\n ...(pageForValidation ?? document.sections.items.at(-1)?.page ?? DEFAULT_PAGE),\n });\n this.styleValue = freezeTableStyle(style);\n validateTableStyle(this.styleValue, width, rows.length, this.validationPage);\n const textLength = this.rows.reduce(\n (tableTotal, row) =>\n tableTotal +\n row.reduce(\n (rowTotal, cell) =>\n rowTotal + cell.reduce((cellTotal, run) => cellTotal + run.text.length, 0),\n 0,\n ),\n 0,\n );\n document.assertBlockDelta(1);\n document.assertCellDelta(cellCount);\n document.assertTextLengthDelta(textLength);\n this.id = document.allocateId(\"dt\", this, existingId, DOCUMENT_INTERNAL_ACCESS);\n document.commitBlockDelta(1, DOCUMENT_INTERNAL_ACCESS);\n document.commitCellDelta(cellCount, DOCUMENT_INTERNAL_ACCESS);\n document.commitRunDelta(runCount, DOCUMENT_INTERNAL_ACCESS);\n document.commitTextLengthDelta(textLength, DOCUMENT_INTERNAL_ACCESS);\n }\n\n get style(): DocumentTableStyle {\n return this.styleValue;\n }\n setStyle(style: DocumentTableStyle): void {\n const next = freezeTableStyle(style);\n validateTableStyle(next, this.rows[0]?.length ?? 0, this.rows.length, this.validationPage);\n this.document.assertCanChange();\n this.styleValue = next;\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n\n inspectRecord(): Record<string, unknown> {\n return {\n kind: this.kind,\n id: this.id,\n rowCount: this.rows.length,\n colCount: this.rows[0]?.length ?? 0,\n values: this.rows.map((row) => row.map((cell) => cell.map((run) => run.text).join(\"\"))),\n style: this.style,\n };\n }\n serialize(): SerializedTable {\n return {\n kind: this.kind,\n id: this.id,\n rows: this.rows.map((row) => row.map((cell) => cell.map((run) => run.serialize()))),\n style: cloneTableStyle(this.style),\n };\n }\n static restore(\n document: Document,\n value: SerializedTable,\n pageForValidation?: DocumentPageGeometry,\n access?: DocumentInternalAccess,\n ): DocumentTable {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n return new DocumentTable(\n document,\n value.rows.map((row) => row.map((cell) => cell.map(DocumentTextRun.restore))),\n value.style,\n value.id,\n pageForValidation,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n}\n\nexport class DocumentPageBreak {\n readonly kind = \"pageBreak\" as const;\n readonly id: string;\n constructor(document: Document, existingId?: string, access?: DocumentInternalAccess) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n document.assertBlockDelta(1);\n this.id = document.allocateId(\"pb\", this, existingId, DOCUMENT_INTERNAL_ACCESS);\n document.commitBlockDelta(1, DOCUMENT_INTERNAL_ACCESS);\n }\n inspectRecord(): Record<string, unknown> {\n return { kind: this.kind, id: this.id };\n }\n serialize(): SerializedPageBreak {\n return { kind: this.kind, id: this.id };\n }\n}\n\nexport class DocumentComments {\n private readonly itemStorage: DocumentCommentThread[] = [];\n private readonly byBlock = new Map<string, DocumentCommentThread[]>();\n readonly items: readonly DocumentCommentThread[];\n private author = \"User\";\n constructor(\n private readonly document: Document,\n access: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access);\n this.items = readonlyArrayView(this.itemStorage, \"document comments\");\n }\n setSelf(value: { displayName: string }): void {\n const author = value.displayName.trim();\n validateAuthor(author);\n this.author = author;\n }\n addThread(\n anchor: { block: DocumentParagraph; start: number; end: number },\n text: string,\n options: { author?: string; createdAt?: string; resolved?: boolean } = {},\n ): DocumentCommentThread {\n ensureCapacity(this.items.length + 1, 100_000, \"document comments\");\n if (!this.document.ownsObject(anchor.block.id, anchor.block)) {\n throw new Error(\"Comment anchor paragraph belongs to another document\");\n }\n validateAnchor(anchor.block, anchor.start, anchor.end, true);\n validateText(text, \"document comment\");\n assertNonCrossingCommentRanges([\n ...(this.byBlock.get(anchor.block.id) ?? []),\n { start: anchor.start, end: anchor.end },\n ]);\n this.document.assertCanChange();\n const author = options.author ?? this.author;\n validateAuthor(author);\n if (options.resolved !== undefined && typeof options.resolved !== \"boolean\") {\n throw new Error(\"Comment resolved state must be boolean\");\n }\n const thread = new DocumentCommentThread(\n this.document,\n anchor.block.id,\n anchor.start,\n anchor.end,\n author,\n text,\n undefined,\n options.createdAt,\n DOCUMENT_INTERNAL_ACCESS,\n );\n if (options.resolved) {\n thread.setImportedResolved(true, DOCUMENT_INTERNAL_ACCESS);\n }\n this.itemStorage.push(thread);\n appendRangeObject(this.byBlock, thread.blockId, thread);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return thread;\n }\n forBlock(blockId: string, access: DocumentInternalAccess): readonly DocumentCommentThread[] {\n assertDocumentInternalAccess(access);\n return this.byBlock.get(blockId) ?? [];\n }\n restore(value: SerializedDocumentComment, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n ensureCapacity(this.items.length + 1, 100_000, \"document comments\");\n const thread = DocumentCommentThread.restore(this.document, value, DOCUMENT_INTERNAL_ACCESS);\n this.itemStorage.push(thread);\n appendRangeObject(this.byBlock, thread.blockId, thread);\n }\n}\n\nexport class DocumentCommentThread {\n readonly id: string;\n private resolvedValue = false;\n private startValue: number;\n private endValue: number;\n private readonly replyStorage: Array<{ author: string; text: string; createdAt: string }> = [];\n readonly replies: ReadonlyArray<{\n readonly author: string;\n readonly text: string;\n readonly createdAt: string;\n }>;\n constructor(\n private readonly document: Document,\n readonly blockId: string,\n start: number,\n end: number,\n author: string,\n text: string,\n existingId?: string,\n createdAt?: string,\n access?: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n this.startValue = start;\n this.endValue = end;\n this.replies = readonlyArrayView(this.replyStorage, \"document comment replies\");\n validateAuthor(author);\n validateText(text, \"document comment\");\n document.assertTextLengthDelta(text.length);\n document.assertReplyDelta(1);\n const validatedCreatedAt = validateIsoDate(createdAt ?? document.now());\n this.id = document.allocateId(\"dc\", this, existingId, DOCUMENT_INTERNAL_ACCESS);\n this.replyStorage.push(Object.freeze({ author, text, createdAt: validatedCreatedAt }));\n document.commitTextLengthDelta(text.length, DOCUMENT_INTERNAL_ACCESS);\n document.commitReplyDelta(1, DOCUMENT_INTERNAL_ACCESS);\n }\n get start(): number {\n return this.startValue;\n }\n get end(): number {\n return this.endValue;\n }\n get resolved(): boolean {\n return this.resolvedValue;\n }\n rebaseTo(start: number, end: number, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.startValue = start;\n this.endValue = end;\n }\n setImportedResolved(resolved: boolean, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.resolvedValue = resolved;\n }\n addReply(text: string, author = \"User\", createdAt?: string): void {\n validateText(text, \"document comment reply\");\n validateAuthor(author);\n this.document.assertTextLengthDelta(text.length);\n this.document.assertReplyDelta(1);\n this.document.assertCanChange();\n this.replyStorage.push(\n Object.freeze({\n author,\n text,\n createdAt: validateIsoDate(createdAt ?? this.document.now()),\n }),\n );\n this.document.commitTextLengthDelta(text.length, DOCUMENT_INTERNAL_ACCESS);\n this.document.commitReplyDelta(1, DOCUMENT_INTERNAL_ACCESS);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n appendImportedReply(\n reply: { author: string; text: string; createdAt: string },\n access: DocumentInternalAccess,\n ): void {\n assertDocumentInternalAccess(access);\n validateAuthor(reply.author);\n validateText(reply.text, \"document comment reply\");\n validateIsoDate(reply.createdAt);\n this.document.assertTextLengthDelta(reply.text.length);\n this.document.assertReplyDelta(1);\n this.replyStorage.push(Object.freeze({ ...reply }));\n this.document.commitTextLengthDelta(reply.text.length, DOCUMENT_INTERNAL_ACCESS);\n this.document.commitReplyDelta(1, DOCUMENT_INTERNAL_ACCESS);\n }\n resolve(): void {\n if (this.resolvedValue) return;\n this.document.assertCanChange();\n this.resolvedValue = true;\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n reopen(): void {\n if (!this.resolvedValue) return;\n this.document.assertCanChange();\n this.resolvedValue = false;\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n }\n inspectRecord(): Record<string, unknown> {\n return {\n kind: \"comment\",\n id: this.id,\n blockId: this.blockId,\n start: this.start,\n end: this.end,\n resolved: this.resolved,\n replies: this.replies,\n };\n }\n serialize(): SerializedDocumentComment {\n return {\n id: this.id,\n blockId: this.blockId,\n start: this.start,\n end: this.end,\n resolved: this.resolved,\n replies: this.replies.map((reply) => ({ ...reply })),\n };\n }\n static restore(\n document: Document,\n value: SerializedDocumentComment,\n access: DocumentInternalAccess,\n ): DocumentCommentThread {\n assertDocumentInternalAccess(access);\n const first = value.replies[0] ?? {\n author: \"User\",\n text: \"\",\n createdAt: new Date(0).toISOString(),\n };\n const thread = new DocumentCommentThread(\n document,\n value.blockId,\n value.start,\n value.end,\n first.author,\n first.text,\n value.id,\n first.createdAt,\n DOCUMENT_INTERNAL_ACCESS,\n );\n thread.replyStorage.length = 0;\n thread.replyStorage.push(\n Object.freeze({\n author: validateAuthor(first.author),\n text: validateAndReturnText(first.text, \"document comment reply\"),\n createdAt: validateIsoDate(first.createdAt),\n }),\n );\n for (const reply of value.replies.slice(1)) {\n thread.appendImportedReply(\n {\n author: validateAuthor(reply.author),\n text: validateAndReturnText(reply.text, \"document comment reply\"),\n createdAt: validateIsoDate(reply.createdAt),\n },\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n thread.resolvedValue = value.resolved;\n return thread;\n }\n}\n\nexport class TrackedChanges {\n private readonly itemStorage: TrackedChange[] = [];\n private readonly byBlock = new Map<string, TrackedChange[]>();\n readonly items: readonly TrackedChange[];\n constructor(\n private readonly document: Document,\n access: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access);\n this.items = readonlyArrayView(this.itemStorage, \"document tracked changes\");\n }\n add(\n anchor: { block: DocumentParagraph; start: number; end: number },\n kind: \"insert\" | \"delete\",\n author = \"User\",\n createdAt?: string,\n ): TrackedChange {\n ensureCapacity(this.items.length + 1, 100_000, \"document tracked changes\");\n if (!this.document.ownsObject(anchor.block.id, anchor.block)) {\n throw new Error(\"Tracked-change anchor paragraph belongs to another document\");\n }\n validateAnchor(anchor.block, anchor.start, anchor.end, false);\n validateAuthor(author);\n assertNonOverlappingTrackedChangeRanges([\n ...(this.byBlock.get(anchor.block.id) ?? []),\n { start: anchor.start, end: anchor.end },\n ]);\n this.document.assertCanChange();\n const change = new TrackedChange(\n this.document,\n anchor.block.id,\n kind,\n anchor.start,\n anchor.end,\n author,\n undefined,\n createdAt,\n DOCUMENT_INTERNAL_ACCESS,\n );\n this.itemStorage.push(change);\n appendRangeObject(this.byBlock, change.blockId, change);\n this.document.changed(DOCUMENT_INTERNAL_ACCESS);\n return change;\n }\n forBlock(blockId: string, access: DocumentInternalAccess): readonly TrackedChange[] {\n assertDocumentInternalAccess(access);\n return this.byBlock.get(blockId) ?? [];\n }\n restore(value: SerializedTrackedChange, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n ensureCapacity(this.items.length + 1, 100_000, \"document tracked changes\");\n const change = TrackedChange.restore(this.document, value, DOCUMENT_INTERNAL_ACCESS);\n this.itemStorage.push(change);\n appendRangeObject(this.byBlock, change.blockId, change);\n }\n\n remove(change: TrackedChange, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n const index = this.itemStorage.indexOf(change);\n if (index < 0) throw new Error(`Unknown tracked change: ${change.id}`);\n this.itemStorage.splice(index, 1);\n const blockChanges = this.byBlock.get(change.blockId);\n const blockIndex = blockChanges?.indexOf(change) ?? -1;\n if (!blockChanges || blockIndex < 0) throw new Error(\"Tracked-change index is inconsistent\");\n blockChanges.splice(blockIndex, 1);\n if (blockChanges.length === 0) this.byBlock.delete(change.blockId);\n }\n}\n\nexport class TrackedChange {\n readonly id: string;\n readonly createdAt: string;\n private startValue: number;\n private endValue: number;\n constructor(\n private readonly document: Document,\n readonly blockId: string,\n readonly kind: \"insert\" | \"delete\",\n start: number,\n end: number,\n readonly author: string,\n existingId?: string,\n createdAt?: string,\n access?: DocumentInternalAccess,\n ) {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n this.startValue = start;\n this.endValue = end;\n validateAuthor(author);\n const validatedCreatedAt = validateIsoDate(createdAt ?? document.now());\n this.id = document.allocateId(\"chg\", this, existingId, DOCUMENT_INTERNAL_ACCESS);\n this.createdAt = validatedCreatedAt;\n }\n get start(): number {\n return this.startValue;\n }\n get end(): number {\n return this.endValue;\n }\n rebaseTo(start: number, end: number, access: DocumentInternalAccess): void {\n assertDocumentInternalAccess(access);\n this.startValue = start;\n this.endValue = end;\n }\n inspectRecord(): Record<string, unknown> {\n return {\n kind: \"change\",\n id: this.id,\n blockId: this.blockId,\n changeKind: this.kind,\n start: this.start,\n end: this.end,\n author: this.author,\n createdAt: this.createdAt,\n };\n }\n serialize(): SerializedTrackedChange {\n return {\n id: this.id,\n blockId: this.blockId,\n kind: this.kind,\n start: this.start,\n end: this.end,\n author: this.author,\n createdAt: this.createdAt,\n };\n }\n static restore(\n document: Document,\n value: SerializedTrackedChange,\n access: DocumentInternalAccess,\n ): TrackedChange {\n assertDocumentInternalAccess(access);\n return new TrackedChange(\n document,\n value.blockId,\n value.kind,\n value.start,\n value.end,\n value.author,\n value.id,\n value.createdAt,\n DOCUMENT_INTERNAL_ACCESS,\n );\n }\n}\n\n// oxlint-disable-next-line typescript/no-extraneous-class -- skill compatibility exposes this namespace-style class.\nexport class DocumentFile {\n static async exportDocx(document: Document): Promise<FileBlob> {\n const codec = await import(\"@opengeni/artifact-tool/document/docx\");\n return codec.exportDocx(document);\n }\n\n static async importDocx(input: FileBlob | Blob | ArrayBuffer): Promise<Document> {\n const codec = await import(\"@opengeni/artifact-tool/document/docx\");\n return codec.importDocx(input);\n }\n}\n\nfunction validateSerializedDocumentEnvelope(value: unknown): asserts value is SerializedDocument {\n if (!isRecord(value)) throw new Error(\"Serialized document must be an object\");\n assertOnlyKeys(\n value,\n [\n \"version\",\n \"idNamespace\",\n \"nextId\",\n \"revision\",\n \"evenAndOddHeaders\",\n \"trackRevisions\",\n \"page\",\n \"blocks\",\n \"sections\",\n \"comments\",\n \"changes\",\n ],\n \"serialized document\",\n );\n if (value.version !== 1)\n throw new Error(`Unsupported document model version: ${String(value.version)}`);\n if (typeof value.idNamespace !== \"string\" || !NAMESPACE_PATTERN.test(value.idNamespace)) {\n throw new Error(\"Serialized document idNamespace is invalid\");\n }\n if (\n !Number.isSafeInteger(value.nextId) ||\n (value.nextId as number) < 1 ||\n (value.nextId as number) > MAX_STRUCTURAL_ID + 1\n ) {\n throw new Error(\"Serialized document nextId is invalid\");\n }\n if (!Number.isSafeInteger(value.revision) || (value.revision as number) < 0)\n throw new Error(\"Serialized document revision is invalid\");\n if (value.evenAndOddHeaders !== undefined && typeof value.evenAndOddHeaders !== \"boolean\") {\n throw new Error(\"Serialized document evenAndOddHeaders is invalid\");\n }\n if (value.trackRevisions !== undefined && typeof value.trackRevisions !== \"boolean\") {\n throw new Error(\"Serialized document trackRevisions is invalid\");\n }\n if (!isRecord(value.page)) throw new Error(\"Serialized document page is invalid\");\n validatePage(value.page as DocumentPageGeometry);\n const body = boundedArray(value.blocks, MAX_DOCUMENT_BLOCKS, \"serialized document blocks\");\n const sections = boundedArray(value.sections, 10_000, \"serialized document sections\");\n const comments = boundedArray(value.comments, 100_000, \"serialized document comments\");\n const changes = boundedArray(value.changes, 100_000, \"serialized document changes\");\n let totalBlocks = body.length;\n let totalCells = 0;\n let totalText = 0;\n let totalRuns = 0;\n const inspectBlock = (candidate: unknown, allowPageBreak: boolean): void => {\n if (\n !isRecord(candidate) ||\n typeof candidate.kind !== \"string\" ||\n typeof candidate.id !== \"string\"\n )\n throw new Error(\"Serialized document block is invalid\");\n if (candidate.kind === \"pageBreak\") {\n if (!allowPageBreak) throw new Error(\"Headers and footers cannot contain page breaks\");\n assertOnlyKeys(candidate, [\"kind\", \"id\"], \"serialized page break\");\n return;\n }\n if (candidate.kind === \"paragraph\") {\n assertOnlyKeys(candidate, [\"kind\", \"id\", \"runs\", \"style\"], \"serialized paragraph\");\n const runs = boundedArray(candidate.runs, 1_000_000, \"serialized paragraph runs\");\n totalRuns += runs.length;\n ensureCapacity(totalRuns, MAX_TEXT_RUNS, \"serialized document text runs\");\n if (!isRecord(candidate.style)) throw new Error(\"Serialized paragraph style is invalid\");\n validateParagraphStyle(candidate.style as DocumentParagraphStyle);\n for (const run of runs) {\n if (!isRecord(run) || typeof run.text !== \"string\" || !isRecord(run.style))\n throw new Error(\"Serialized text run is invalid\");\n assertOnlyKeys(run, [\"text\", \"style\"], \"serialized text run\");\n validateText(run.text, \"serialized document text\");\n validateTextStyle(run.style as DocumentTextStyle);\n totalText += run.text.length;\n ensureCapacity(totalText, MAX_TEXT_LENGTH, \"serialized document text\");\n }\n return;\n }\n if (candidate.kind !== \"table\")\n throw new Error(`Unknown serialized document block kind: ${candidate.kind}`);\n assertOnlyKeys(candidate, [\"kind\", \"id\", \"rows\", \"style\"], \"serialized table\");\n const rows = boundedArray(candidate.rows, MAX_TABLE_CELLS, \"serialized table rows\");\n if (rows.length === 0 || !isRecord(candidate.style))\n throw new Error(\"Serialized table is invalid\");\n let columnCount: number | undefined;\n for (const row of rows) {\n const cells = boundedArray(row, MAX_TABLE_CELLS, \"serialized table cells\");\n if (columnCount === undefined) columnCount = cells.length;\n if (cells.length === 0 || cells.length !== columnCount)\n throw new Error(\"Serialized table must be a non-empty rectangle\");\n totalCells += cells.length;\n ensureCapacity(totalCells, MAX_TABLE_CELLS, \"serialized table cells\");\n for (const cell of cells) {\n const runs = boundedArray(cell, 1_000_000, \"serialized table cell runs\");\n totalRuns += runs.length;\n ensureCapacity(totalRuns, MAX_TEXT_RUNS, \"serialized document text runs\");\n for (const run of runs) {\n if (!isRecord(run) || typeof run.text !== \"string\" || !isRecord(run.style))\n throw new Error(\"Serialized table text run is invalid\");\n assertOnlyKeys(run, [\"text\", \"style\"], \"serialized table text run\");\n validateText(run.text, \"serialized table text\");\n validateTextStyle(run.style as DocumentTextStyle);\n totalText += run.text.length;\n ensureCapacity(totalText, MAX_TEXT_LENGTH, \"serialized document text\");\n }\n }\n }\n };\n for (const block of body) inspectBlock(block, true);\n for (const section of sections) {\n if (\n !isRecord(section) ||\n typeof section.id !== \"string\" ||\n !Number.isSafeInteger(section.startBlockIndex) ||\n !isRecord(section.page)\n ) {\n throw new Error(\"Serialized document section is invalid\");\n }\n assertOnlyKeys(\n section,\n [\"id\", \"startBlockIndex\", \"titlePage\", \"page\", \"headers\", \"footers\"],\n \"serialized section\",\n );\n if (section.titlePage !== undefined && typeof section.titlePage !== \"boolean\") {\n throw new Error(\"Serialized section titlePage is invalid\");\n }\n validatePage(section.page as DocumentPageGeometry);\n for (const groupName of [\"headers\", \"footers\"] as const) {\n const group = section[groupName];\n if (!isRecord(group)) throw new Error(`Serialized section ${groupName} are invalid`);\n assertOnlyKeys(group, [\"default\", \"first\", \"even\"], `serialized section ${groupName}`);\n for (const variant of [\"default\", \"first\", \"even\"] as const) {\n const story = group[variant];\n if (!isRecord(story) || typeof story.id !== \"string\")\n throw new Error(`Serialized section ${groupName}.${variant} is invalid`);\n assertOnlyKeys(story, [\"id\", \"blocks\"], `serialized section ${groupName}.${variant}`);\n const storyBlocks = boundedArray(\n story.blocks,\n MAX_DOCUMENT_BLOCKS,\n \"serialized header/footer blocks\",\n );\n totalBlocks += storyBlocks.length;\n ensureCapacity(totalBlocks, MAX_DOCUMENT_BLOCKS, \"all serialized document story blocks\");\n for (const block of storyBlocks) inspectBlock(block, false);\n }\n }\n }\n let replyCount = 0;\n for (const comment of comments) {\n if (\n !isRecord(comment) ||\n typeof comment.id !== \"string\" ||\n typeof comment.blockId !== \"string\" ||\n !Number.isSafeInteger(comment.start) ||\n !Number.isSafeInteger(comment.end) ||\n typeof comment.resolved !== \"boolean\"\n ) {\n throw new Error(\"Serialized document comment is invalid\");\n }\n assertOnlyKeys(\n comment,\n [\"id\", \"blockId\", \"start\", \"end\", \"resolved\", \"replies\"],\n \"serialized comment\",\n );\n const replies = boundedArray(comment.replies, 100_000, \"serialized comment replies\");\n if (replies.length === 0) throw new Error(\"Serialized comment must contain a root reply\");\n replyCount += replies.length;\n ensureCapacity(replyCount, 100_000, \"serialized comment replies\");\n for (const reply of replies) {\n if (\n !isRecord(reply) ||\n typeof reply.author !== \"string\" ||\n typeof reply.text !== \"string\" ||\n typeof reply.createdAt !== \"string\"\n )\n throw new Error(\"Serialized document comment reply is invalid\");\n assertOnlyKeys(reply, [\"author\", \"text\", \"createdAt\"], \"serialized comment reply\");\n validateAuthor(reply.author);\n validateText(reply.text, \"serialized comment reply\");\n validateIsoDate(reply.createdAt);\n totalText += reply.text.length;\n ensureCapacity(totalText, MAX_TEXT_LENGTH, \"serialized document text\");\n }\n }\n for (const change of changes) {\n if (\n !isRecord(change) ||\n typeof change.id !== \"string\" ||\n typeof change.blockId !== \"string\" ||\n (change.kind !== \"insert\" && change.kind !== \"delete\") ||\n !Number.isSafeInteger(change.start) ||\n !Number.isSafeInteger(change.end) ||\n typeof change.author !== \"string\" ||\n typeof change.createdAt !== \"string\"\n ) {\n throw new Error(\"Serialized tracked change is invalid\");\n }\n assertOnlyKeys(\n change,\n [\"id\", \"blockId\", \"kind\", \"start\", \"end\", \"author\", \"createdAt\"],\n \"serialized tracked change\",\n );\n }\n const firstPage = (sections[0] as { page?: unknown } | undefined)?.page;\n if (\n !isRecord(firstPage) ||\n !samePageGeometry(firstPage as DocumentPageGeometry, value.page as DocumentPageGeometry)\n ) {\n throw new Error(\"Serialized document page must equal its first section page\");\n }\n}\n\nfunction samePageGeometry(left: DocumentPageGeometry, right: DocumentPageGeometry): boolean {\n return (\n left.widthPt === right.widthPt &&\n left.heightPt === right.heightPt &&\n left.marginTopPt === right.marginTopPt &&\n left.marginRightPt === right.marginRightPt &&\n left.marginBottomPt === right.marginBottomPt &&\n left.marginLeftPt === right.marginLeftPt &&\n (left.headerPt ?? 36) === (right.headerPt ?? 36) &&\n (left.footerPt ?? 36) === (right.footerPt ?? 36) &&\n (left.gutterPt ?? 0) === (right.gutterPt ?? 0)\n );\n}\n\nfunction validateDocument(document: Document): void {\n if (typeof document.evenAndOddHeaders !== \"boolean\")\n throw new Error(\"Document evenAndOddHeaders is invalid\");\n if (typeof document.trackRevisions !== \"boolean\")\n throw new Error(\"Document trackRevisions is invalid\");\n ensureCapacity(document.sections.items.length, 10_000, \"document sections\");\n if (document.sections.items.length === 0)\n throw new Error(\"Document must have at least one section\");\n if (document.sections.items[0]?.startBlockIndex !== 0)\n throw new Error(\"The first document section must start at block 0\");\n let previousStart = -1;\n for (const section of document.sections.items) {\n if (\n !Number.isSafeInteger(section.startBlockIndex) ||\n section.startBlockIndex <= previousStart ||\n section.startBlockIndex > document.blocks.items.length\n ) {\n throw new Error(`Invalid section boundary at body block ${section.startBlockIndex}`);\n }\n previousStart = section.startBlockIndex;\n if (typeof section.titlePage !== \"boolean\") throw new Error(\"Section titlePage is invalid\");\n validatePage(section.page);\n }\n const allStoryBlocks = document.allStoryBlocks();\n ensureCapacity(document.blocks.items.length, MAX_DOCUMENT_BLOCKS, \"document blocks\");\n ensureCapacity(allStoryBlocks.length, MAX_DOCUMENT_BLOCKS, \"all document story blocks\");\n let cells = 0;\n let textLength = 0;\n let runCount = 0;\n let replyCount = 0;\n for (const block of allStoryBlocks) {\n if (block instanceof DocumentParagraph) {\n validateParagraphStyle(block.style);\n validateText(block.text, \"document paragraph\");\n for (const run of block.runs) {\n runCount += 1;\n ensureCapacity(runCount, MAX_TEXT_RUNS, \"document text runs\");\n validateTextStyle(run.style);\n textLength += run.text.length;\n ensureCapacity(textLength, MAX_TEXT_LENGTH, \"document text\");\n }\n } else if (block instanceof DocumentTable) {\n const width = block.rows[0]?.length ?? 0;\n if (width === 0 || block.rows.some((row) => row.length !== width))\n throw new Error(`Document table ${block.id} is not rectangular`);\n cells += block.rows.length * width;\n ensureCapacity(cells, MAX_TABLE_CELLS, \"document table cells\");\n for (const row of block.rows)\n for (const cell of row)\n for (const run of cell) {\n runCount += 1;\n ensureCapacity(runCount, MAX_TEXT_RUNS, \"document text runs\");\n validateText(run.text, \"document table text\");\n validateTextStyle(run.style);\n textLength += run.text.length;\n ensureCapacity(textLength, MAX_TEXT_LENGTH, \"document text\");\n }\n }\n }\n const blockCount = allStoryBlocks.length;\n if (blockCount !== document.trackedBlockCount) {\n throw new Error(\"Document blocks were mutated outside the authoritative edit API\");\n }\n if (cells !== document.trackedCellCount) {\n throw new Error(\"Document table cells were mutated outside the authoritative edit API\");\n }\n if (runCount !== document.trackedRunCount) {\n throw new Error(\"Document text runs were mutated outside the authoritative edit API\");\n }\n for (let sectionIndex = 0; sectionIndex < document.sections.items.length; sectionIndex++) {\n const section = document.sections.items[sectionIndex]!;\n const end =\n document.sections.items[sectionIndex + 1]?.startBlockIndex ?? document.blocks.items.length;\n for (const block of document.blocks.items.slice(section.startBlockIndex, end)) {\n if (block instanceof DocumentTable)\n validateTableStyle(\n block.style,\n block.rows[0]?.length ?? 0,\n block.rows.length,\n section.page,\n );\n }\n for (const story of section.allStories()) {\n for (const block of story.items) {\n if (block instanceof DocumentTable)\n validateTableStyle(\n block.style,\n block.rows[0]?.length ?? 0,\n block.rows.length,\n section.page,\n );\n }\n }\n }\n const paragraphIds = new Map(\n allStoryBlocks\n .filter((block): block is DocumentParagraph => block instanceof DocumentParagraph)\n .map((block) => [block.id, block]),\n );\n ensureCapacity(document.comments.items.length, 100_000, \"document comments\");\n ensureCapacity(document.changes.items.length, 100_000, \"document tracked changes\");\n const commentRangesByBlock = new Map<string, Array<{ start: number; end: number }>>();\n const changeRangesByBlock = new Map<string, Array<{ start: number; end: number }>>();\n for (const comment of document.comments.items) {\n const block = paragraphIds.get(comment.blockId);\n if (!block) throw new Error(`Comment ${comment.id} references a missing paragraph`);\n validateAnchor(block, comment.start, comment.end, true);\n if (comment.replies.length === 0)\n throw new Error(`Comment ${comment.id} must contain a root reply`);\n appendRange(commentRangesByBlock, comment.blockId, comment);\n for (const reply of comment.replies) {\n validateAuthor(reply.author);\n validateText(reply.text, \"document comment reply\");\n validateIsoDate(reply.createdAt);\n textLength += reply.text.length;\n ensureCapacity(textLength, MAX_TEXT_LENGTH, \"document text\");\n replyCount += 1;\n ensureCapacity(replyCount, 100_000, \"document comment replies\");\n }\n }\n if (replyCount !== document.trackedReplyCount) {\n throw new Error(\"Document comment replies were mutated outside the authoritative edit API\");\n }\n if (textLength !== document.trackedTextLength) {\n throw new Error(\"Document text was mutated outside the authoritative edit API\");\n }\n for (const change of document.changes.items) {\n const block = paragraphIds.get(change.blockId);\n if (!block) throw new Error(`Tracked change ${change.id} references a missing paragraph`);\n validateAnchor(block, change.start, change.end, false);\n validateAuthor(change.author);\n validateIsoDate(change.createdAt);\n appendRange(changeRangesByBlock, change.blockId, change);\n }\n for (const ranges of commentRangesByBlock.values()) assertNonCrossingCommentRanges(ranges);\n for (const ranges of changeRangesByBlock.values())\n assertNonOverlappingTrackedChangeRanges(ranges);\n}\n\nfunction appendRange(\n map: Map<string, Array<{ start: number; end: number }>>,\n blockId: string,\n range: { start: number; end: number },\n): void {\n const ranges = map.get(blockId);\n if (ranges) ranges.push(range);\n else map.set(blockId, [range]);\n}\n\nfunction appendRangeObject<T>(map: Map<string, T[]>, blockId: string, value: T): void {\n const values = map.get(blockId);\n if (values) values.push(value);\n else map.set(blockId, [value]);\n}\n\nfunction assertNonOverlappingTrackedChangeRanges(\n ranges: readonly { start: number; end: number }[],\n): void {\n const sorted = [...ranges].sort(\n (left, right) => left.start - right.start || left.end - right.end,\n );\n for (let index = 1; index < sorted.length; index += 1) {\n if (sorted[index]!.start < sorted[index - 1]!.end) {\n throw new Error(\"Tracked changes must not overlap\");\n }\n }\n}\n\nfunction assertNonCrossingCommentRanges(ranges: readonly { start: number; end: number }[]): void {\n const sorted = [...ranges].sort(\n (left, right) => left.start - right.start || right.end - left.end,\n );\n const activeEnds: number[] = [];\n for (const range of sorted) {\n while (activeEnds.length > 0 && range.start >= activeEnds[activeEnds.length - 1]!) {\n activeEnds.pop();\n }\n const enclosingEnd = activeEnds[activeEnds.length - 1];\n if (enclosingEnd !== undefined && range.end > enclosingEnd) {\n throw new Error(\"Comment ranges must be nested or disjoint, not crossing\");\n }\n if (range.end > range.start) activeEnds.push(range.end);\n }\n}\n\nfunction validatePage(page: DocumentPageGeometry): void {\n if (!isRecord(page)) throw new Error(\"Document page geometry must be an object\");\n assertOnlyKeys(\n page,\n [\n \"widthPt\",\n \"heightPt\",\n \"marginTopPt\",\n \"marginRightPt\",\n \"marginBottomPt\",\n \"marginLeftPt\",\n \"headerPt\",\n \"footerPt\",\n \"gutterPt\",\n ],\n \"document page geometry\",\n );\n finiteInRange(page.widthPt, 72, 14_400, \"page width\");\n finiteInRange(page.heightPt, 72, 14_400, \"page height\");\n for (const [name, value] of Object.entries({\n top: page.marginTopPt,\n right: page.marginRightPt,\n bottom: page.marginBottomPt,\n left: page.marginLeftPt,\n })) {\n finiteInRange(value, 0, 2_880, `${name} page margin`);\n }\n finiteInRange(page.headerPt ?? 36, 0, 2_880, \"header page margin\");\n finiteInRange(page.footerPt ?? 36, 0, 2_880, \"footer page margin\");\n finiteInRange(page.gutterPt ?? 0, 0, 2_880, \"page gutter\");\n if (page.marginLeftPt + page.marginRightPt >= page.widthPt)\n throw new Error(\"Horizontal page margins consume the full page width\");\n if (page.marginTopPt + page.marginBottomPt >= page.heightPt)\n throw new Error(\"Vertical page margins consume the full page height\");\n}\n\nfunction validateTextStyle(style: DocumentTextStyle): void {\n if (!isRecord(style)) throw new Error(\"Document text style must be an object\");\n assertOnlyKeys(\n style,\n [\"fontFamily\", \"fontSizePt\", \"color\", \"bold\", \"italic\", \"underline\", \"strike\"],\n \"document text style\",\n );\n if (style.fontFamily !== undefined && !/^[\\p{L}\\p{N} .,_'-]{1,128}$/u.test(style.fontFamily)) {\n throw new Error(`Unsafe or invalid document font family: ${style.fontFamily}`);\n }\n if (style.fontSizePt !== undefined) finiteInRange(style.fontSizePt, 1, 1_000, \"font size\");\n if (style.color !== undefined) normalizeHex(style.color);\n for (const key of [\"bold\", \"italic\", \"underline\", \"strike\"] as const) {\n if (style[key] !== undefined && typeof style[key] !== \"boolean\")\n throw new Error(`Document text style ${key} must be boolean`);\n }\n}\n\nfunction validateTextStylePatch(style: DocumentTextStylePatch): void {\n if (!isRecord(style)) throw new Error(\"Document text style patch must be an object\");\n const allowed = new Set([\n \"fontFamily\",\n \"fontSizePt\",\n \"color\",\n \"bold\",\n \"italic\",\n \"underline\",\n \"strike\",\n ]);\n for (const key of Object.keys(style))\n if (!allowed.has(key)) throw new Error(`Unknown document text style property: ${key}`);\n const materialized: {\n -readonly [Key in keyof DocumentTextStyle]: DocumentTextStyle[Key];\n } = {};\n if (style.fontFamily !== undefined && style.fontFamily !== null)\n materialized.fontFamily = style.fontFamily;\n if (style.fontSizePt !== undefined && style.fontSizePt !== null)\n materialized.fontSizePt = style.fontSizePt;\n if (style.color !== undefined && style.color !== null) materialized.color = style.color;\n for (const key of [\"bold\", \"italic\", \"underline\", \"strike\"] as const) {\n const value = style[key];\n if (value !== undefined && value !== null) materialized[key] = value;\n }\n validateTextStyle(materialized);\n}\n\nfunction validateParagraphStyle(style: DocumentParagraphStyle): void {\n if (!isRecord(style)) throw new Error(\"Document paragraph style must be an object\");\n assertOnlyKeys(\n style,\n [\n \"headingLevel\",\n \"alignment\",\n \"spaceBeforePt\",\n \"spaceAfterPt\",\n \"lineHeight\",\n \"keepNext\",\n \"pageBreakBefore\",\n \"list\",\n ],\n \"document paragraph style\",\n );\n if (\n style.headingLevel !== undefined &&\n (!Number.isInteger(style.headingLevel) || style.headingLevel < 1 || style.headingLevel > 6)\n )\n throw new Error(\"Heading level must be 1-6\");\n if (\n style.alignment !== undefined &&\n ![\"left\", \"center\", \"right\", \"justify\"].includes(style.alignment)\n )\n throw new Error(`Invalid paragraph alignment: ${String(style.alignment)}`);\n if (style.spaceBeforePt !== undefined)\n finiteInRange(style.spaceBeforePt, 0, 2_880, \"paragraph space before\");\n if (style.spaceAfterPt !== undefined)\n finiteInRange(style.spaceAfterPt, 0, 2_880, \"paragraph space after\");\n if (style.lineHeight !== undefined)\n finiteInRange(style.lineHeight, 0.5, 10, \"paragraph line height\");\n for (const key of [\"keepNext\", \"pageBreakBefore\"] as const) {\n if (style[key] !== undefined && typeof style[key] !== \"boolean\")\n throw new Error(`Document paragraph style ${key} must be boolean`);\n }\n if (style.list !== undefined) {\n if (!isRecord(style.list) || (style.list.kind !== \"bullet\" && style.list.kind !== \"number\"))\n throw new Error(\"Document list kind must be bullet or number\");\n assertOnlyKeys(style.list, [\"kind\", \"level\", \"instanceId\"], \"document list style\");\n if (\n style.list.level !== undefined &&\n (!Number.isInteger(style.list.level) || style.list.level < 0 || style.list.level > 8)\n )\n throw new Error(\"List level must be 0-8\");\n if (\n style.list.instanceId !== undefined &&\n !/^[A-Za-z0-9:_-]{1,128}$/u.test(style.list.instanceId)\n ) {\n throw new Error(\"List instanceId must contain 1-128 safe identifier characters\");\n }\n }\n}\n\nfunction validateTableStyle(\n style: DocumentTableStyle,\n columnCount: number,\n rowCount: number,\n page: DocumentPageGeometry,\n): void {\n if (!isRecord(style)) throw new Error(\"Document table style must be an object\");\n assertOnlyKeys(\n style,\n [\n \"widthPt\",\n \"columnWidthsPt\",\n \"headerRows\",\n \"cellPaddingPt\",\n \"borderColor\",\n \"headerFill\",\n \"allowRowSplit\",\n ],\n \"document table style\",\n );\n const usableWidth = page.widthPt - page.marginLeftPt - page.marginRightPt;\n if (style.widthPt !== undefined) finiteInRange(style.widthPt, 1, usableWidth, \"table width\");\n if (style.columnWidthsPt !== undefined) {\n if (style.columnWidthsPt.length !== columnCount)\n throw new Error(\"Table columnWidthsPt must match the table column count\");\n for (const width of style.columnWidthsPt)\n finiteInRange(width, 1, usableWidth, \"table column width\");\n const sum = style.columnWidthsPt.reduce((total, width) => total + width, 0);\n if (sum > usableWidth + 0.01)\n throw new Error(\"Table column widths exceed the usable page width\");\n if (style.widthPt !== undefined && Math.abs(sum - style.widthPt) > 0.01) {\n throw new Error(\"Table widthPt must exactly equal the sum of columnWidthsPt\");\n }\n }\n if (\n style.headerRows !== undefined &&\n (!Number.isInteger(style.headerRows) || style.headerRows < 0 || style.headerRows > rowCount)\n )\n throw new Error(\"Table headerRows must fit within the table row count\");\n if (style.cellPaddingPt !== undefined)\n finiteInRange(style.cellPaddingPt, 0, 144, \"table cell padding\");\n if (style.borderColor !== undefined) normalizeHex(style.borderColor);\n if (style.headerFill !== undefined) normalizeHex(style.headerFill);\n if (style.allowRowSplit !== undefined && typeof style.allowRowSplit !== \"boolean\") {\n throw new Error(\"Table allowRowSplit must be boolean\");\n }\n}\n\nfunction validateAnchor(\n block: DocumentParagraph,\n start: number,\n end: number,\n allowPoint: boolean,\n): void {\n if (\n !Number.isSafeInteger(start) ||\n !Number.isSafeInteger(end) ||\n start < 0 ||\n end < start ||\n end > block.text.length ||\n (!allowPoint && start === end)\n ) {\n throw new Error(\"Invalid document text anchor\");\n }\n if (!isUnicodeBoundary(block.text, start) || !isUnicodeBoundary(block.text, end)) {\n throw new Error(\"Document text anchors must not split a Unicode surrogate pair\");\n }\n}\n\nfunction sameTextStyle(left: DocumentTextStyle, right: DocumentTextStyle): boolean {\n return (\n left.fontFamily === right.fontFamily &&\n left.fontSizePt === right.fontSizePt &&\n left.color === right.color &&\n left.bold === right.bold &&\n left.italic === right.italic &&\n left.underline === right.underline &&\n left.strike === right.strike\n );\n}\n\nfunction validateAuthor(value: string): string {\n validateText(value, \"document author\");\n if (value.trim().length === 0 || value.length > 255)\n throw new Error(\"Document author must contain 1-255 characters\");\n return value;\n}\n\nfunction validateText(value: string, label: string): void {\n if (value.length > MAX_TEXT_LENGTH)\n throw new Error(`${label} exceeds ${MAX_TEXT_LENGTH} UTF-16 code units`);\n if (/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\uFFFE\\uFFFF]/u.test(value))\n throw new Error(`${label} contains XML-forbidden control characters`);\n if (value.includes(\"\\r\")) throw new Error(`${label} must use LF rather than CR line breaks`);\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(++index);\n if (!(next >= 0xdc00 && next <= 0xdfff))\n throw new Error(`${label} contains an unpaired surrogate`);\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n throw new Error(`${label} contains an unpaired surrogate`);\n }\n }\n}\n\nfunction validateAndReturnText(value: string, label: string): string {\n validateText(value, label);\n return value;\n}\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction assertOnlyKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: readonly string[],\n label: string,\n): void {\n const allowedKeys = new Set(allowed);\n for (const key of Object.keys(value)) {\n if (!allowedKeys.has(key)) throw new Error(`Unknown ${label} property: ${key}`);\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor)) {\n throw new Error(`${label} must contain plain data properties`);\n }\n }\n}\nfunction boundedArray(value: unknown, maximum: number, label: string): unknown[] {\n if (!Array.isArray(value)) throw new Error(`${label} must be an array`);\n ensureCapacity(value.length, maximum, label);\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (!descriptor || !(\"value\" in descriptor)) {\n throw new Error(`${label} must be a dense plain-data array`);\n }\n }\n return value;\n}\nfunction isUnicodeBoundary(value: string, offset: number): boolean {\n if (offset <= 0 || offset >= value.length) return true;\n const previous = value.charCodeAt(offset - 1);\n const next = value.charCodeAt(offset);\n return !(previous >= 0xd800 && previous <= 0xdbff && next >= 0xdc00 && next <= 0xdfff);\n}\nfunction validateIsoDate(value: string): string {\n const timestamp = Date.parse(value);\n if (!Number.isFinite(timestamp) || new Date(timestamp).toISOString() !== value)\n throw new Error(`Invalid ISO timestamp: ${value}`);\n return value;\n}\nfunction normalizeHex(value: string): string {\n if (!/^#?[0-9A-Fa-f]{6}$/.test(value)) throw new Error(`Invalid or unsafe color: ${value}`);\n return `#${value.replace(/^#/, \"\").toUpperCase()}`;\n}\nfunction finiteInRange(value: number, min: number, max: number, label: string): void {\n if (!Number.isFinite(value) || value < min || value > max)\n throw new Error(`${label} must be between ${min} and ${max}`);\n}\nfunction ensureCapacity(value: number, max: number, label: string): void {\n if (!Number.isSafeInteger(value) || value > max) throw new Error(`${label} exceeds limit ${max}`);\n}\nfunction readonlyArrayView<T>(storage: T[], label: string): readonly T[] {\n return new Proxy(storage, {\n set(): boolean {\n throw new Error(`${label} are read-only; use the authoritative mutation API`);\n },\n deleteProperty(): boolean {\n throw new Error(`${label} are read-only; use the authoritative mutation API`);\n },\n defineProperty(): boolean {\n throw new Error(`${label} are read-only; use the authoritative mutation API`);\n },\n preventExtensions(): boolean {\n throw new Error(`${label} are read-only; use the authoritative mutation API`);\n },\n setPrototypeOf(): boolean {\n throw new Error(`${label} are read-only; use the authoritative mutation API`);\n },\n });\n}\nfunction cloneParagraphStyle(style: DocumentParagraphStyle): DocumentParagraphStyle {\n return { ...style, ...(style.list ? { list: { ...style.list } } : {}) };\n}\nfunction freezeParagraphStyle(style: DocumentParagraphStyle): DocumentParagraphStyle {\n const clone = cloneParagraphStyle(style);\n if (clone.list) Object.freeze(clone.list);\n return Object.freeze(clone);\n}\nfunction cloneTableStyle(style: DocumentTableStyle): DocumentTableStyle {\n return {\n ...style,\n ...(style.columnWidthsPt ? { columnWidthsPt: [...style.columnWidthsPt] } : {}),\n };\n}\nfunction freezeTableStyle(style: DocumentTableStyle): DocumentTableStyle {\n const clone = cloneTableStyle(style);\n if (clone.columnWidthsPt) Object.freeze(clone.columnWidthsPt);\n return Object.freeze(clone);\n}\nfunction freezeTableRows(\n rows: DocumentTextRun[][][],\n): readonly (readonly (readonly DocumentTextRun[])[])[] {\n for (const row of rows) {\n for (const cell of row) Object.freeze(cell);\n Object.freeze(row);\n }\n return Object.freeze(rows) as readonly (readonly (readonly DocumentTextRun[])[])[];\n}\nfunction applyTextStylePatch(\n style: DocumentTextStyle,\n patch: DocumentTextStylePatch,\n): DocumentTextStyle {\n const result: DocumentTextStyle = { ...style };\n for (const key of [\n \"fontFamily\",\n \"fontSizePt\",\n \"color\",\n \"bold\",\n \"italic\",\n \"underline\",\n \"strike\",\n ] as const) {\n if (!Object.hasOwn(patch, key)) continue;\n const value = patch[key];\n if (value === null || value === undefined) delete result[key];\n else Object.assign(result, { [key]: value });\n }\n return result;\n}\nfunction mergeAdjacentTextRuns(runs: readonly DocumentTextRun[]): DocumentTextRun[] {\n const result: DocumentTextRun[] = [];\n for (const run of runs) {\n const previous = result.at(-1);\n if (previous && sameTextStyle(previous.style, run.style)) {\n result[result.length - 1] = new DocumentTextRun(previous.text + run.text, previous.style);\n } else result.push(run);\n }\n return result;\n}\nfunction minimalTextEdit(\n previous: string,\n next: string,\n): { start: number; end: number; replacement: string } {\n let start = 0;\n const maximumPrefix = Math.min(previous.length, next.length);\n while (start < maximumPrefix && previous.charCodeAt(start) === next.charCodeAt(start)) start += 1;\n while (start > 0 && (!isUnicodeBoundary(previous, start) || !isUnicodeBoundary(next, start)))\n start -= 1;\n let previousEnd = previous.length;\n let nextEnd = next.length;\n while (\n previousEnd > start &&\n nextEnd > start &&\n previous.charCodeAt(previousEnd - 1) === next.charCodeAt(nextEnd - 1)\n ) {\n previousEnd -= 1;\n nextEnd -= 1;\n }\n while (\n previousEnd < previous.length &&\n (!isUnicodeBoundary(previous, previousEnd) || !isUnicodeBoundary(next, nextEnd))\n ) {\n previousEnd += 1;\n nextEnd += 1;\n }\n return { start, end: previousEnd, replacement: next.slice(start, nextEnd) };\n}\nfunction collectReplacementEdits(\n value: string,\n search: string | RegExp,\n replacement: string,\n): DocumentParagraphEdit[] {\n const edits: DocumentParagraphEdit[] = [];\n if (typeof search === \"string\") {\n const start = value.indexOf(search);\n if (start < 0) return edits;\n edits.push({\n start,\n end: start + search.length,\n text: expandReplacement(replacement, search, [], start, value),\n });\n return edits;\n }\n const expression = new RegExp(search.source, search.flags);\n let projectedLength = value.length;\n while (true) {\n const result = expression.exec(value);\n if (!result) break;\n const match = result[0];\n const offset = result.index;\n const captures = result\n .slice(1)\n .map((capture) => (capture === undefined ? undefined : String(capture)));\n const expanded = expandReplacement(replacement, match, captures, offset, value, result.groups);\n projectedLength += expanded.length - match.length;\n ensureCapacity(projectedLength, MAX_TEXT_LENGTH, \"document replacement result\");\n edits.push({\n start: offset,\n end: offset + match.length,\n text: expanded,\n });\n if (!expression.global) break;\n if (match.length === 0) {\n const unicodeSets = (expression as RegExp & { readonly unicodeSets?: boolean }).unicodeSets;\n expression.lastIndex = advanceStringIndex(\n value,\n expression.lastIndex,\n expression.unicode || unicodeSets === true,\n );\n }\n }\n return edits;\n}\n\nfunction advanceStringIndex(value: string, index: number, unicode: boolean): number {\n if (!unicode || index >= value.length) return index + 1;\n const first = value.charCodeAt(index);\n if (first < 0xd800 || first > 0xdbff || index + 1 >= value.length) return index + 1;\n const second = value.charCodeAt(index + 1);\n return second >= 0xdc00 && second <= 0xdfff ? index + 2 : index + 1;\n}\nfunction expandReplacement(\n replacement: string,\n match: string,\n captures: readonly (string | undefined)[],\n offset: number,\n source: string,\n groups?: Readonly<Record<string, string | undefined>>,\n): string {\n let result = \"\";\n for (let index = 0; index < replacement.length; index += 1) {\n const character = replacement[index]!;\n if (character !== \"$\" || index + 1 >= replacement.length) {\n result += character;\n continue;\n }\n const next = replacement[index + 1]!;\n if (next === \"$\") {\n result += \"$\";\n index += 1;\n } else if (next === \"&\") {\n result += match;\n index += 1;\n } else if (next === \"`\") {\n result += source.slice(0, offset);\n index += 1;\n } else if (next === \"'\") {\n result += source.slice(offset + match.length);\n index += 1;\n } else if (next === \"<\" && groups) {\n const close = replacement.indexOf(\">\", index + 2);\n if (close < 0) {\n result += \"$\";\n } else {\n result += groups[replacement.slice(index + 2, close)] ?? \"\";\n index = close;\n }\n } else if (next >= \"1\" && next <= \"9\") {\n const first = Number(next);\n const secondCharacter = replacement[index + 2];\n const twoDigit =\n secondCharacter !== undefined && secondCharacter >= \"0\" && secondCharacter <= \"9\"\n ? first * 10 + Number(secondCharacter)\n : 0;\n const captureNumber =\n twoDigit > 0 && twoDigit <= captures.length\n ? twoDigit\n : first <= captures.length\n ? first\n : 0;\n if (captureNumber === 0) {\n result += \"$\";\n } else {\n result += captures[captureNumber - 1] ?? \"\";\n index += captureNumber === twoDigit ? 2 : 1;\n }\n } else {\n result += \"$\";\n }\n }\n return result;\n}\nfunction sliceTextRuns(\n runs: readonly DocumentTextRun[],\n start: number,\n end: number,\n): DocumentTextRun[] {\n const result: DocumentTextRun[] = [];\n let offset = 0;\n for (const run of runs) {\n const runStart = offset;\n const runEnd = offset + run.text.length;\n offset = runEnd;\n const sliceStart = Math.max(start, runStart);\n const sliceEnd = Math.min(end, runEnd);\n if (sliceEnd <= sliceStart) continue;\n result.push(\n new DocumentTextRun(run.text.slice(sliceStart - runStart, sliceEnd - runStart), {\n ...run.style,\n }),\n );\n }\n return result;\n}\n\nfunction buildReplacementRuns(\n runs: readonly DocumentTextRun[],\n textLength: number,\n edits: readonly DocumentParagraphEdit[],\n): DocumentTextRun[] {\n const result: DocumentTextRun[] = [];\n let runIndex = 0;\n let runStart = 0;\n let sourceOffset = 0;\n let lastStyle: DocumentTextStyle | undefined;\n const append = (text: string, style: DocumentTextStyle): void => {\n if (text.length === 0) return;\n const previous = result.at(-1);\n if (previous && sameTextStyle(previous.style, style)) {\n result[result.length - 1] = new DocumentTextRun(previous.text + text, previous.style);\n } else result.push(new DocumentTextRun(text, { ...style }));\n };\n const consumeUntil = (target: number, emit: boolean): void => {\n while (sourceOffset < target) {\n const run = runs[runIndex];\n if (!run) throw new Error(\"Paragraph replacement encountered a discontinuous run map\");\n const runEnd = runStart + run.text.length;\n if (runEnd <= sourceOffset) {\n runStart = runEnd;\n runIndex += 1;\n continue;\n }\n const end = Math.min(target, runEnd);\n if (emit) append(run.text.slice(sourceOffset - runStart, end - runStart), run.style);\n if (end > sourceOffset) lastStyle = run.style;\n sourceOffset = end;\n if (sourceOffset === runEnd) {\n runStart = runEnd;\n runIndex += 1;\n }\n }\n };\n for (const edit of edits) {\n consumeUntil(edit.start, true);\n const insertionStyle = lastStyle ?? runs[runIndex]?.style ?? runs.at(-1)?.style ?? {};\n consumeUntil(edit.end, false);\n append(edit.text, insertionStyle);\n }\n consumeUntil(textLength, true);\n if (result.length === 0) result.push(new DocumentTextRun(\"\"));\n return result;\n}\nfunction textStyleAt(\n runs: readonly DocumentTextRun[],\n offset: number,\n textLength: number,\n): DocumentTextStyle {\n let cursor = 0;\n for (const run of runs) {\n const end = cursor + run.text.length;\n if (offset < end || (offset === end && offset < textLength)) return { ...run.style };\n cursor = end;\n }\n return { ...(runs.at(-1)?.style ?? {}) };\n}\nfunction createNamespace(): string {\n const bytes = new Uint8Array(8);\n globalThis.crypto.getRandomValues(bytes);\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\nfunction restoreStory(\n document: Document,\n kind: \"header\" | \"footer\",\n value?: SerializedStory,\n pageForTables?: DocumentPageGeometry,\n access?: DocumentInternalAccess,\n): DocumentStory {\n assertDocumentInternalAccess(access as DocumentInternalAccess);\n const story = new DocumentStory(\n document,\n kind,\n value?.id,\n pageForTables,\n DOCUMENT_INTERNAL_ACCESS,\n );\n for (const block of value?.blocks ?? []) {\n story.restore(block, DOCUMENT_INTERNAL_ACCESS);\n }\n return story;\n}\nfunction storyCounts(stories: DocumentSectionStories): Record<string, number> {\n return {\n default: stories.default.items.length,\n first: stories.first.items.length,\n even: stories.even.items.length,\n };\n}\nfunction inspectCharacterLimit(value: number | undefined, fallback: number): number {\n const limit = value ?? fallback;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 1_000_000) {\n throw new Error(\"Document inspection maxChars must be an integer between 1 and 1000000\");\n }\n return limit;\n}\n"],"mappings":"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","names":[]}
|