@opengeni/artifact-tool 0.2.8 → 0.3.4-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/{chunk-ZCJYRJGB.js → chunk-4XJE7NRA.js} +2 -2
  2. package/dist/{chunk-N2IHNWBS.js → chunk-4YYYUZQH.js} +15 -6
  3. package/dist/chunk-4YYYUZQH.js.map +1 -0
  4. package/dist/{chunk-U5G2BKM2.js → chunk-LMLPFF3S.js} +12 -6
  5. package/dist/{chunk-U5G2BKM2.js.map → chunk-LMLPFF3S.js.map} +1 -1
  6. package/dist/{chunk-B2ZJRZDA.js → chunk-LVPFJH2Z.js} +7 -5
  7. package/dist/chunk-LVPFJH2Z.js.map +1 -0
  8. package/dist/{chunk-QZI5POCC.js → chunk-OVXX4G35.js} +2 -2
  9. package/dist/{chunk-6PBM7FKI.js → chunk-QA3NXBAG.js} +8 -7
  10. package/dist/chunk-QA3NXBAG.js.map +1 -0
  11. package/dist/{chunk-XT2EJFCU.js → chunk-SYFNJGH5.js} +30 -8
  12. package/dist/chunk-SYFNJGH5.js.map +1 -0
  13. package/dist/{chunk-RU5G3HNF.js → chunk-XAZTHG6W.js} +20 -9
  14. package/dist/chunk-XAZTHG6W.js.map +1 -0
  15. package/dist/index.js +4 -4
  16. package/dist/kernel.d.ts +0 -19
  17. package/dist/materializer-cli-entry.js +7 -7
  18. package/dist/materializer-cli.d.ts +4 -3
  19. package/dist/materializer-cli.js +7 -7
  20. package/dist/native.d.ts +1 -1
  21. package/dist/native.js +2 -2
  22. package/dist/office-import.d.ts +15 -5
  23. package/dist/office-import.js +25 -8
  24. package/dist/office-import.js.map +1 -1
  25. package/dist/production-document.js +4 -4
  26. package/dist/production-presentation.js +4 -4
  27. package/dist/production-spreadsheet.js +4 -4
  28. package/dist/reference.js +1 -365
  29. package/dist/reference.js.map +1 -1
  30. package/dist/runtime-cli-entry.js +3 -3
  31. package/dist/runtime-cli.js +2 -2
  32. package/dist/runtime-development.js +3 -3
  33. package/dist/runtime-receipt.d.ts +3 -2
  34. package/dist/runtime.d.ts +8 -6
  35. package/dist/runtime.js +1 -1
  36. package/dist/snapshot.d.ts +13 -6
  37. package/dist/snapshot.js +23 -11
  38. package/dist/snapshot.js.map +1 -1
  39. package/dist/spreadsheet-xlsx-codec.js +2 -2
  40. package/dist/spreadsheet.js +1 -1
  41. package/package.json +5 -5
  42. package/src/kernel.ts +1 -397
  43. package/src/materializer-cli.ts +20 -9
  44. package/src/native.ts +7 -5
  45. package/src/office-import.ts +47 -18
  46. package/src/production-spreadsheet-native.ts +4 -3
  47. package/src/runtime-receipt.ts +16 -5
  48. package/src/runtime.ts +22 -10
  49. package/src/snapshot.ts +39 -17
  50. package/src/spreadsheet-formula.ts +35 -7
  51. package/dist/chunk-6PBM7FKI.js.map +0 -1
  52. package/dist/chunk-B2ZJRZDA.js.map +0 -1
  53. package/dist/chunk-N2IHNWBS.js.map +0 -1
  54. package/dist/chunk-RU5G3HNF.js.map +0 -1
  55. package/dist/chunk-XT2EJFCU.js.map +0 -1
  56. /package/dist/{chunk-ZCJYRJGB.js.map → chunk-4XJE7NRA.js.map} +0 -0
  57. /package/dist/{chunk-QZI5POCC.js.map → chunk-OVXX4G35.js.map} +0 -0
@@ -12,7 +12,7 @@ import {
12
12
  import {
13
13
  Workbook,
14
14
  validateSupportedFormula
15
- } from "./chunk-XT2EJFCU.js";
15
+ } from "./chunk-SYFNJGH5.js";
16
16
  import {
17
17
  formatCellAddress,
18
18
  formatRangeAddress,
@@ -2455,4 +2455,4 @@ function safeExportImage(image) {
2455
2455
  export {
2456
2456
  SpreadsheetXlsxCodec
2457
2457
  };
2458
- //# sourceMappingURL=chunk-QZI5POCC.js.map
2458
+ //# sourceMappingURL=chunk-OVXX4G35.js.map
@@ -45,13 +45,13 @@ import {
45
45
  NativeDocumentSession,
46
46
  NativePresentationSession,
47
47
  NativeSpreadsheetSession
48
- } from "./chunk-B2ZJRZDA.js";
48
+ } from "./chunk-LVPFJH2Z.js";
49
49
  import {
50
50
  LOSS_PRESERVATION
51
51
  } from "./chunk-J6N7IR44.js";
52
52
  import {
53
53
  Workbook
54
- } from "./chunk-XT2EJFCU.js";
54
+ } from "./chunk-SYFNJGH5.js";
55
55
  import {
56
56
  decodeRasterBase64,
57
57
  inspectRasterImage
@@ -61,7 +61,7 @@ import {
61
61
  } from "./chunk-O24KTEGP.js";
62
62
  import {
63
63
  ArtifactRuntimeError
64
- } from "./chunk-N2IHNWBS.js";
64
+ } from "./chunk-4YYYUZQH.js";
65
65
 
66
66
  // src/production-sha256.ts
67
67
  var ROUND_CONSTANTS = Uint32Array.of(
@@ -1150,6 +1150,7 @@ function fnv1a64(bytes) {
1150
1150
 
1151
1151
  // src/production-spreadsheet-native.ts
1152
1152
  import {
1153
+ SPREADSHEET_ARTIFACT_COMMAND_VERSION,
1153
1154
  SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,
1154
1155
  SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,
1155
1156
  decodeSpreadsheetMetadataKernelProjection,
@@ -1364,7 +1365,7 @@ function nativeFormula(value) {
1364
1365
  throw new TypeError("Spreadsheet formulas must be strings or null");
1365
1366
  const trimmed = value.trim();
1366
1367
  if (trimmed.length === 0) return null;
1367
- return { formula: trimmed.startsWith("=") ? trimmed : `=${trimmed}`, cached: null };
1368
+ return { formula: trimmed.startsWith("=") ? trimmed : `=${trimmed}` };
1368
1369
  }
1369
1370
  function normalizedSheetName(value) {
1370
1371
  if (typeof value !== "string") throw new TypeError("Worksheet name must be a string");
@@ -1523,7 +1524,7 @@ var SpreadsheetProjectionAuthor = class {
1523
1524
  causalBase: this.#transactionCounter === 0 ? [] : [{ replicaId: this.#replicaId, counter: this.#transactionCounter }],
1524
1525
  selectiveUndoOperationIds: []
1525
1526
  },
1526
- commands: { version: 1, commands },
1527
+ commands: { version: SPREADSHEET_ARTIFACT_COMMAND_VERSION, commands },
1527
1528
  resolvedBaseBytes: this.#session.frontier()
1528
1529
  });
1529
1530
  this.#transactionCounter = counter;
@@ -1595,7 +1596,7 @@ function* cellCommands(worksheet, generation) {
1595
1596
  }
1596
1597
  }
1597
1598
  function nativeCell(cell) {
1598
- if (cell.formula !== null) return { formula: cell.formula, cached: null };
1599
+ if (cell.formula !== null) return { formula: cell.formula };
1599
1600
  const value = cell.value;
1600
1601
  if (typeof value === "object" && value !== null) {
1601
1602
  if ("type" in value && value.type === "date") {
@@ -2257,4 +2258,4 @@ export {
2257
2258
  getArtifactCompositeDiagnostics,
2258
2259
  disposeArtifact
2259
2260
  };
2260
- //# sourceMappingURL=chunk-6PBM7FKI.js.map
2261
+ //# sourceMappingURL=chunk-QA3NXBAG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/production-sha256.ts","../src/production-native-codecs.ts","../src/production-spreadsheet-native.ts","../src/production.ts"],"sourcesContent":["const ROUND_CONSTANTS = Uint32Array.of(\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2,\n);\n\nconst INITIAL_STATE = Uint32Array.of(\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19,\n);\n\n/** Browser-safe synchronous SHA-256 for bounded native projection payloads. */\nexport function sha256Bytes(input: Uint8Array): Uint8Array {\n const paddedLength = Math.ceil((input.byteLength + 9) / 64) * 64;\n const padded = new Uint8Array(paddedLength);\n padded.set(input);\n padded[input.byteLength] = 0x80;\n const bitLength = input.byteLength * 8;\n const paddedView = new DataView(padded.buffer);\n paddedView.setUint32(paddedLength - 8, Math.floor(bitLength / 0x1_0000_0000), false);\n paddedView.setUint32(paddedLength - 4, bitLength >>> 0, false);\n\n const state = Uint32Array.from(INITIAL_STATE);\n const schedule = new Uint32Array(64);\n for (let offset = 0; offset < paddedLength; offset += 64) {\n for (let index = 0; index < 16; index += 1) {\n schedule[index] = paddedView.getUint32(offset + index * 4, false);\n }\n for (let index = 16; index < 64; index += 1) {\n const previous15 = schedule[index - 15]!;\n const previous2 = schedule[index - 2]!;\n const sigma0 =\n (rotateRight(previous15, 7) ^ rotateRight(previous15, 18) ^ (previous15 >>> 3)) >>> 0;\n const sigma1 =\n (rotateRight(previous2, 17) ^ rotateRight(previous2, 19) ^ (previous2 >>> 10)) >>> 0;\n schedule[index] = (schedule[index - 16]! + sigma0 + schedule[index - 7]! + sigma1) >>> 0;\n }\n\n let a = state[0]!;\n let b = state[1]!;\n let c = state[2]!;\n let d = state[3]!;\n let e = state[4]!;\n let f = state[5]!;\n let g = state[6]!;\n let h = state[7]!;\n for (let index = 0; index < 64; index += 1) {\n const sum1 = (rotateRight(e, 6) ^ rotateRight(e, 11) ^ rotateRight(e, 25)) >>> 0;\n const choose = ((e & f) ^ (~e & g)) >>> 0;\n const temporary1 = (h + sum1 + choose + ROUND_CONSTANTS[index]! + schedule[index]!) >>> 0;\n const sum0 = (rotateRight(a, 2) ^ rotateRight(a, 13) ^ rotateRight(a, 22)) >>> 0;\n const majority = ((a & b) ^ (a & c) ^ (b & c)) >>> 0;\n const temporary2 = (sum0 + majority) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + temporary1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temporary1 + temporary2) >>> 0;\n }\n state[0] = (state[0]! + a) >>> 0;\n state[1] = (state[1]! + b) >>> 0;\n state[2] = (state[2]! + c) >>> 0;\n state[3] = (state[3]! + d) >>> 0;\n state[4] = (state[4]! + e) >>> 0;\n state[5] = (state[5]! + f) >>> 0;\n state[6] = (state[6]! + g) >>> 0;\n state[7] = (state[7]! + h) >>> 0;\n }\n\n const output = new Uint8Array(32);\n const outputView = new DataView(output.buffer);\n for (let index = 0; index < state.length; index += 1) {\n outputView.setUint32(index * 4, state[index]!, false);\n }\n return output;\n}\n\nfunction rotateRight(value: number, bits: number): number {\n return ((value >>> bits) | (value << (32 - bits))) >>> 0;\n}\n","import type {\n DocumentPageGeometry,\n DocumentParagraphFormat,\n DocumentParagraphStyle,\n DocumentTableStyle,\n DocumentTextStyle,\n SerializedDocument,\n SerializedDocumentBlock,\n SerializedDocumentComment,\n SerializedDocumentSection,\n SerializedParagraph,\n SerializedStory,\n SerializedTable,\n SerializedTextRun,\n SerializedTrackedChange,\n} from \"./document\";\nimport {\n Presentation,\n PresentationChart,\n PresentationGroup,\n PresentationImage,\n PresentationShape,\n PresentationTable,\n presentationColorValue,\n type PresentationElement,\n type PresentationFill,\n type PresentationLine,\n type PresentationPosition,\n type PresentationTemplateElement,\n type PresentationText,\n type PresentationTextStyle,\n} from \"./presentation\";\nimport { UnsupportedArtifactFeatureError } from \"./errors\";\nimport { decodeRasterBase64, inspectRasterImage } from \"./raster-image\";\nimport { sha256Bytes } from \"./production-sha256\";\n\nconst textEncoder = new TextEncoder();\nconst DOCUMENT_COMMAND_MAX_BYTES = 64 * 1024 * 1024;\nconst DOCUMENT_COMMAND_MAX_COUNT = 4_096;\nconst PRESENTATION_COMMAND_MAX_BYTES = 4 * 1024 * 1024;\nconst PRESENTATION_COMMAND_MAX_COUNT = 10_000;\nconst HEADER_BYTES = 24;\nconst CHECKSUM_BYTES = 8;\nconst EMU_PER_CSS_PIXEL = 9_525;\nconst PRESENTATION_MAX_COORDINATE_EMU = 9_525_000_000_000;\n\nexport function encodeDocumentProjectionCommands(snapshot: SerializedDocument): Uint8Array {\n const payload = new ByteWriter(DOCUMENT_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES);\n let commandCount = 0;\n const command = (write: () => void): void => {\n commandCount += 1;\n if (commandCount > DOCUMENT_COMMAND_MAX_COUNT) {\n throw new RangeError(\"Document projection exceeds the native command-count limit\");\n }\n write();\n };\n\n const firstSection = snapshot.sections[0];\n if (!firstSection || firstSection.startBlockIndex !== 0) {\n throw new Error(\"Document projection requires one initial section at body offset zero\");\n }\n assertInitialDocumentSectionIds(firstSection, snapshot.idNamespace);\n\n if (snapshot.evenAndOddHeaders !== undefined || snapshot.trackRevisions !== undefined) {\n command(() => {\n payload.u8(0);\n payload.u8(optionalOptionalBool(snapshot.evenAndOddHeaders));\n payload.u8(optionalOptionalBool(snapshot.trackRevisions));\n });\n }\n if (firstSection.titlePage !== undefined) {\n command(() => {\n payload.u8(9);\n payload.documentId(firstSection.id, \"sec\");\n payload.u8(optionalBool(firstSection.titlePage));\n });\n }\n if (!isDefaultNativeDocumentPage(firstSection.page)) {\n command(() => {\n payload.u8(14);\n payload.documentId(firstSection.id, \"sec\");\n payload.pageWithExtras(firstSection.page);\n });\n }\n\n const laterSections = new Map<number, SerializedDocumentSection>();\n for (const section of snapshot.sections.slice(1)) {\n if (laterSections.has(section.startBlockIndex)) {\n throw new Error(\"Document projection contains adjacent sections without a body block\");\n }\n laterSections.set(section.startBlockIndex, section);\n }\n for (let index = 0; index <= snapshot.blocks.length; index += 1) {\n const section = laterSections.get(index);\n if (section) {\n command(() => writeAddSection(payload, section));\n if (hasNonDefaultDocumentPageExtras(section.page)) {\n command(() => {\n payload.u8(14);\n payload.documentId(section.id, \"sec\");\n payload.pageWithExtras(section.page);\n });\n }\n }\n const block = snapshot.blocks[index];\n if (block) command(() => writeDocumentBlock(payload, block, { kind: \"body\" }));\n }\n if ([...laterSections.keys()].some((index) => index > snapshot.blocks.length)) {\n throw new Error(\"Document section starts beyond the body block list\");\n }\n\n for (const section of snapshot.sections) {\n writeDocumentStoryCommands(\n payload,\n command,\n section,\n \"header\",\n \"default\",\n section.headers.default,\n );\n writeDocumentStoryCommands(payload, command, section, \"header\", \"first\", section.headers.first);\n writeDocumentStoryCommands(payload, command, section, \"header\", \"even\", section.headers.even);\n writeDocumentStoryCommands(\n payload,\n command,\n section,\n \"footer\",\n \"default\",\n section.footers.default,\n );\n writeDocumentStoryCommands(payload, command, section, \"footer\", \"first\", section.footers.first);\n writeDocumentStoryCommands(payload, command, section, \"footer\", \"even\", section.footers.even);\n }\n\n for (const thread of snapshot.comments) {\n const root = thread.replies[0];\n if (!root) throw new Error(`Document comment ${thread.id} has no root reply`);\n command(() => {\n payload.u8(10);\n payload.documentId(thread.id, \"dc\");\n payload.documentId(thread.blockId, \"p\");\n payload.u32(thread.start);\n payload.u32(thread.end);\n payload.bool(thread.resolved);\n payload.commentReply(root);\n });\n for (const reply of thread.replies.slice(1)) {\n command(() => {\n payload.u8(11);\n payload.documentId(thread.id, \"dc\");\n payload.commentReply(reply);\n });\n }\n }\n for (const change of snapshot.changes) {\n command(() => {\n payload.u8(13);\n payload.documentId(change.id, \"chg\");\n payload.documentId(change.blockId, \"p\");\n payload.u32(change.start);\n payload.u32(change.end);\n payload.u8(change.kind === \"insert\" ? 1 : 2);\n payload.string(change.author);\n payload.string(change.createdAt);\n });\n }\n\n return envelope(\"OGADC001\", commandCount, payload.finish(), DOCUMENT_COMMAND_MAX_BYTES);\n}\n\nexport type DocumentProjectionTarget =\n | { kind: \"body\" }\n | {\n kind: \"story\";\n sectionId: string;\n storyKind: \"header\" | \"footer\";\n variant: \"default\" | \"first\" | \"even\";\n };\n\nexport type DocumentIncrementalCommand =\n | { kind: \"block.add\"; target: DocumentProjectionTarget; block: SerializedDocumentBlock }\n | {\n kind: \"paragraph.edit\";\n id: string;\n start: number;\n end: number;\n text: string;\n style?: DocumentTextStyle;\n }\n | { kind: \"paragraph.format\"; id: string; format: DocumentParagraphFormat }\n | { kind: \"paragraph.style\"; id: string; style: DocumentParagraphStyle }\n | { kind: \"table.style\"; id: string; style: DocumentTableStyle }\n | { kind: \"document.flags\"; evenAndOddHeaders?: boolean; trackRevisions?: boolean }\n | { kind: \"section.add\"; section: SerializedDocumentSection }\n | { kind: \"section.title\"; id: string; titlePage?: boolean }\n | { kind: \"comment.add\"; comment: SerializedDocumentComment }\n | { kind: \"comment.reply\"; id: string; reply: SerializedDocumentComment[\"replies\"][number] }\n | { kind: \"comment.resolved\"; id: string; resolved: boolean }\n | { kind: \"tracked.add\"; change: SerializedTrackedChange };\n\n/** Encodes only touched document nodes using the existing OGADC001 protocol. */\nexport function encodeDocumentIncrementalCommands(\n commands: readonly DocumentIncrementalCommand[],\n): Uint8Array {\n const payload = new ByteWriter(DOCUMENT_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES);\n if (commands.length === 0 || commands.length > DOCUMENT_COMMAND_MAX_COUNT) {\n throw new RangeError(\"Document incremental command count is outside its limit\");\n }\n for (const command of commands) {\n switch (command.kind) {\n case \"block.add\":\n writeDocumentBlock(payload, command.block, command.target);\n break;\n case \"paragraph.edit\":\n payload.u8(2);\n payload.documentId(command.id, \"p\");\n payload.u32(command.start);\n payload.u32(command.end);\n payload.string(command.text);\n payload.bool(command.style !== undefined);\n if (command.style) payload.textStyle(command.style);\n break;\n case \"paragraph.format\":\n payload.u8(3);\n payload.documentId(command.id, \"p\");\n payload.u32(command.format.start);\n payload.u32(command.format.end);\n payload.textStylePatch(command.format.style);\n break;\n case \"paragraph.style\":\n payload.u8(4);\n payload.documentId(command.id, \"p\");\n payload.paragraphStyle(command.style);\n break;\n case \"table.style\":\n payload.u8(6);\n payload.documentId(command.id, \"dt\");\n payload.tableStyle(command.style);\n break;\n case \"document.flags\":\n payload.u8(0);\n payload.u8(optionalOptionalBool(command.evenAndOddHeaders));\n payload.u8(optionalOptionalBool(command.trackRevisions));\n break;\n case \"section.add\":\n writeAddSection(payload, command.section);\n if (hasNonDefaultDocumentPageExtras(command.section.page)) {\n payload.u8(14);\n payload.documentId(command.section.id, \"sec\");\n payload.pageWithExtras(command.section.page);\n }\n break;\n case \"section.title\":\n payload.u8(9);\n payload.documentId(command.id, \"sec\");\n payload.u8(optionalBool(command.titlePage));\n break;\n case \"comment.add\": {\n const root = command.comment.replies[0];\n if (!root) throw new Error(`Document comment ${command.comment.id} has no root reply`);\n payload.u8(10);\n payload.documentId(command.comment.id, \"dc\");\n payload.documentId(command.comment.blockId, \"p\");\n payload.u32(command.comment.start);\n payload.u32(command.comment.end);\n payload.bool(command.comment.resolved);\n payload.commentReply(root);\n break;\n }\n case \"comment.reply\":\n payload.u8(11);\n payload.documentId(command.id, \"dc\");\n payload.commentReply(command.reply);\n break;\n case \"comment.resolved\":\n payload.u8(12);\n payload.documentId(command.id, \"dc\");\n payload.bool(command.resolved);\n break;\n case \"tracked.add\":\n payload.u8(13);\n payload.documentId(command.change.id, \"chg\");\n payload.documentId(command.change.blockId, \"p\");\n payload.u32(command.change.start);\n payload.u32(command.change.end);\n payload.u8(command.change.kind === \"insert\" ? 1 : 2);\n payload.string(command.change.author);\n payload.string(command.change.createdAt);\n break;\n }\n }\n // Section page extras are a second command in the same atomic batch.\n const commandCount =\n commands.length +\n commands.filter(\n (command) =>\n command.kind === \"section.add\" && hasNonDefaultDocumentPageExtras(command.section.page),\n ).length;\n return envelope(\"OGADC001\", commandCount, payload.finish(), DOCUMENT_COMMAND_MAX_BYTES);\n}\n\nexport function encodePresentationProjectionCommands(\n presentation: Presentation,\n namespace: bigint,\n): Uint8Array {\n const hasCustomSlideSize =\n presentation.slideSize.width !== 1_280 || presentation.slideSize.height !== 720;\n if (hasCustomSlideSize) {\n assertFinitePositive(presentation.slideSize.width, \"presentation slide width\");\n assertFinitePositive(presentation.slideSize.height, \"presentation slide height\");\n }\n const payload = new ByteWriter(PRESENTATION_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES);\n let commandCount = 0;\n const command = (write: () => void): void => {\n commandCount += 1;\n if (commandCount > PRESENTATION_COMMAND_MAX_COUNT) {\n throw new RangeError(\"Presentation projection exceeds the native command-count limit\");\n }\n write();\n };\n if (hasCustomSlideSize) {\n command(() => {\n payload.u8(15);\n payload.i64(presentationSizeEmu(presentation.slideSize.width, \"presentation slide width\"));\n payload.i64(presentationSizeEmu(presentation.slideSize.height, \"presentation slide height\"));\n });\n }\n let templateElementCounter = 0xffff_ffff_ffff_ffffn;\n const nextTemplateElementId = (): string => {\n if (templateElementCounter === 0n) {\n throw new RangeError(\"Presentation template element id space is exhausted\");\n }\n return `sh/${templateElementCounter--}`;\n };\n\n for (const master of presentation.masters.items) {\n command(() => {\n payload.u8(0);\n payload.presentationId(master.id, namespace);\n payload.string(master.name);\n payload.fill(master.background);\n });\n for (const [index, template] of master.elements.entries()) {\n const element = materializeTemplateElement(template);\n writePresentationElement(\n payload,\n command,\n element,\n namespace,\n { tag: 0, id: master.id },\n undefined,\n index,\n nextTemplateElementId(),\n );\n }\n }\n for (const layout of presentation.layouts.items) {\n command(() => {\n payload.u8(1);\n payload.presentationId(layout.id, namespace);\n payload.string(layout.name);\n payload.optionalPresentationId(layout.masterId, namespace);\n payload.fill(layout.background);\n });\n for (const [index, template] of layout.elements.entries()) {\n const element = materializeTemplateElement(template);\n writePresentationElement(\n payload,\n command,\n element,\n namespace,\n { tag: 1, id: layout.id },\n undefined,\n index,\n nextTemplateElementId(),\n );\n }\n }\n for (const [slideIndex, slide] of presentation.slides.items.entries()) {\n command(() => {\n payload.u8(2);\n payload.presentationId(slide.id, namespace);\n payload.u32(slideIndex);\n payload.string(slide.title);\n payload.optionalPresentationId(slide.layout?.id, namespace);\n payload.fill(slide.background.fill);\n });\n if (slide.notes.toString().length > 0) {\n command(() => {\n payload.u8(8);\n payload.presentationId(slide.id, namespace);\n payload.richText(slide.notes);\n });\n }\n for (const [index, element] of slide.elements.entries()) {\n writePresentationElement(\n payload,\n command,\n element,\n namespace,\n { tag: 2, id: slide.id },\n undefined,\n index,\n );\n }\n }\n return envelope(\"OGAPC001\", commandCount, payload.finish(), PRESENTATION_COMMAND_MAX_BYTES);\n}\n\nexport type PresentationIncrementalCommand =\n | { kind: \"slide.create\"; slide: Presentation[\"slides\"][\"items\"][number]; index: number }\n | { kind: \"slide.title\"; id: string; title: string }\n | { kind: \"slide.layout\"; id: string; layoutId?: string }\n | { kind: \"slide.notes\"; id: string; notes: PresentationText }\n | { kind: \"node.insert\"; slideId: string; index: number; element: PresentationElement }\n | { kind: \"node.update\"; element: PresentationElement }\n | { kind: \"presentation.size\"; width: number; height: number };\n\n/** Encodes touched presentation nodes using the existing OGAPC001 protocol. */\nexport function encodePresentationIncrementalCommands(\n commands: readonly PresentationIncrementalCommand[],\n namespace: bigint,\n): Uint8Array {\n const payload = new ByteWriter(PRESENTATION_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES);\n let commandCount = 0;\n const command = (write: () => void): void => {\n commandCount += 1;\n if (commandCount > PRESENTATION_COMMAND_MAX_COUNT) {\n throw new RangeError(\"Presentation incremental command count is outside its limit\");\n }\n write();\n };\n for (const entry of commands) {\n switch (entry.kind) {\n case \"slide.create\":\n command(() => {\n payload.u8(2);\n payload.presentationId(entry.slide.id, namespace);\n payload.u32(entry.index);\n payload.string(entry.slide.title);\n payload.optionalPresentationId(entry.slide.layout?.id, namespace);\n payload.fill(entry.slide.background.fill);\n });\n break;\n case \"slide.title\":\n command(() => {\n payload.u8(6);\n payload.presentationId(entry.id, namespace);\n payload.string(entry.title);\n });\n break;\n case \"slide.layout\":\n command(() => {\n payload.u8(7);\n payload.presentationId(entry.id, namespace);\n payload.optionalPresentationId(entry.layoutId, namespace);\n });\n break;\n case \"slide.notes\":\n command(() => {\n payload.u8(8);\n payload.presentationId(entry.id, namespace);\n payload.richText(entry.notes);\n });\n break;\n case \"node.insert\":\n writePresentationElement(\n payload,\n command,\n entry.element,\n namespace,\n { tag: 2, id: entry.slideId },\n undefined,\n entry.index,\n );\n break;\n case \"node.update\":\n command(() => {\n payload.u8(12);\n payload.presentationId(entry.element.id, namespace);\n payload.presentationRect(entry.element.position);\n });\n command(() => {\n payload.u8(13);\n payload.presentationId(entry.element.id, namespace);\n payload.presentationTransform(\n \"rotation\" in entry.element ? entry.element.rotation : 0,\n \"flipHorizontal\" in entry.element ? entry.element.flipHorizontal : false,\n \"flipVertical\" in entry.element ? entry.element.flipVertical : false,\n );\n });\n command(() => {\n payload.u8(14);\n payload.presentationId(entry.element.id, namespace);\n payload.presentationNode(entry.element);\n });\n break;\n case \"presentation.size\":\n command(() => {\n payload.u8(15);\n payload.i64(presentationSizeEmu(entry.width, \"presentation slide width\"));\n payload.i64(presentationSizeEmu(entry.height, \"presentation slide height\"));\n });\n break;\n }\n }\n if (commandCount === 0) throw new RangeError(\"Presentation incremental command batch is empty\");\n return envelope(\"OGAPC001\", commandCount, payload.finish(), PRESENTATION_COMMAND_MAX_BYTES);\n}\n\ntype NativePresentationSceneOwner = Readonly<{ tag: 0 | 1 | 2; id: string }>;\n\n/**\n * Template configs intentionally are not scene objects in the public model.\n * Materialize them through the same constructors used by ordinary slides so\n * native projection receives the exact same validation and normalization.\n */\nfunction materializeTemplateElement(template: PresentationTemplateElement): PresentationElement {\n const scratch = Presentation.create();\n const slide = scratch.slides.add();\n switch (template.kind) {\n case \"shape\":\n return slide.shapes.add(template.config);\n case \"chart\":\n return slide.charts.add(template.type, template.config);\n case \"image\":\n return slide.images.add(template.config);\n case \"table\":\n return slide.tables.add(template.config);\n }\n}\n\nfunction writeDocumentStoryCommands(\n writer: ByteWriter,\n command: (write: () => void) => void,\n section: SerializedDocumentSection,\n kind: \"header\" | \"footer\",\n variant: \"default\" | \"first\" | \"even\",\n story: SerializedStory,\n): void {\n const expectedPrefix = kind === \"header\" ? \"hdr\" : \"ftr\";\n writer.assertDocumentId(story.id, expectedPrefix);\n for (const block of story.blocks) {\n command(() =>\n writeDocumentBlock(writer, block, {\n kind: \"story\",\n sectionId: section.id,\n storyKind: kind,\n variant,\n }),\n );\n }\n}\n\ntype DocumentTarget = DocumentProjectionTarget;\n\nfunction writeDocumentBlock(\n writer: ByteWriter,\n block: SerializedDocumentBlock | SerializedParagraph | SerializedTable,\n target: DocumentTarget,\n): void {\n if (block.kind === \"paragraph\") {\n writer.u8(1);\n writer.documentTarget(target);\n writer.documentId(block.id, \"p\");\n writer.textRuns(block.runs);\n writer.paragraphStyle(block.style);\n return;\n }\n if (block.kind === \"table\") {\n writer.u8(5);\n writer.documentTarget(target);\n writer.documentId(block.id, \"dt\");\n writer.u32(block.rows.length);\n for (const row of block.rows) {\n writer.u32(row.length);\n for (const cell of row) writer.textRuns(cell);\n }\n writer.tableStyle(block.style);\n return;\n }\n if (target.kind !== \"body\") {\n throw new Error(\"Document story cannot contain a page break\");\n }\n writer.u8(7);\n writer.documentId(block.id, \"pb\");\n}\n\nfunction writeAddSection(writer: ByteWriter, section: SerializedDocumentSection): void {\n writer.u8(8);\n writer.documentId(section.id, \"sec\");\n writer.documentId(section.headers.default.id, \"hdr\");\n writer.documentId(section.headers.first.id, \"hdr\");\n writer.documentId(section.headers.even.id, \"hdr\");\n writer.documentId(section.footers.default.id, \"ftr\");\n writer.documentId(section.footers.first.id, \"ftr\");\n writer.documentId(section.footers.even.id, \"ftr\");\n writer.page(section.page);\n writer.u8(optionalBool(section.titlePage));\n}\n\nfunction assertInitialDocumentSectionIds(\n section: SerializedDocumentSection,\n namespace: string,\n): void {\n const expected = [\n [section.id, \"sec\", 1n],\n [section.headers.default.id, \"hdr\", 2n],\n [section.headers.first.id, \"hdr\", 3n],\n [section.headers.even.id, \"hdr\", 4n],\n [section.footers.default.id, \"ftr\", 5n],\n [section.footers.first.id, \"ftr\", 6n],\n [section.footers.even.id, \"ftr\", 7n],\n ] as const;\n for (const [id, prefix, counter] of expected) {\n const parsed = parseDocumentId(id, prefix);\n if (parsed.namespace !== BigInt(`0x${namespace}`) || parsed.counter !== counter) {\n throw new Error(\"Initial document structural ids do not match the native document allocator\");\n }\n }\n}\n\nfunction isDefaultNativeDocumentPage(page: DocumentPageGeometry): boolean {\n return (\n page.widthPt === 612 &&\n page.heightPt === 792 &&\n page.marginTopPt === 72 &&\n page.marginRightPt === 72 &&\n page.marginBottomPt === 72 &&\n page.marginLeftPt === 72 &&\n !hasNonDefaultDocumentPageExtras(page)\n );\n}\n\nfunction hasNonDefaultDocumentPageExtras(page: DocumentPageGeometry): boolean {\n return (page.headerPt ?? 36) !== 36 || (page.footerPt ?? 36) !== 36 || (page.gutterPt ?? 0) !== 0;\n}\n\nfunction writePresentationElement(\n writer: ByteWriter,\n command: (write: () => void) => void,\n element: PresentationElement,\n namespace: bigint,\n owner: NativePresentationSceneOwner,\n parentId: string | undefined,\n index: number,\n idOverride?: string,\n): void {\n const elementId = idOverride ?? element.id;\n command(() => {\n writer.u8(9);\n writer.u8(owner.tag);\n writer.presentationId(owner.id, namespace);\n writer.optionalPresentationId(parentId, namespace);\n writer.u32(index);\n writer.presentationId(elementId, namespace);\n writer.string(element.name);\n writer.presentationRect(element.position);\n writer.presentationTransform(\n \"rotation\" in element ? element.rotation : 0,\n \"flipHorizontal\" in element ? element.flipHorizontal : false,\n \"flipVertical\" in element ? element.flipVertical : false,\n );\n writer.presentationNode(element);\n });\n if (element instanceof PresentationGroup) {\n for (const [childIndex, child] of element.children.entries()) {\n writePresentationElement(writer, command, child, namespace, owner, elementId, childIndex);\n }\n }\n}\n\nfunction unsupportedPresentation(feature: string): never {\n throw new UnsupportedArtifactFeatureError(\"presentation\", feature, \"native Rust projection\");\n}\n\nclass ByteWriter {\n readonly #bytes: number[] = [];\n constructor(private readonly maximum: number) {}\n\n finish(): Uint8Array {\n return Uint8Array.from(this.#bytes);\n }\n bytes(value: Uint8Array): void {\n if (this.#bytes.length + value.byteLength > this.maximum) {\n throw new RangeError(\"Native projection command envelope exceeds its byte limit\");\n }\n this.#bytes.push(...value);\n }\n u8(value: number): void {\n this.bytes(Uint8Array.of(value));\n }\n bool(value: boolean): void {\n this.u8(value ? 1 : 0);\n }\n u16(value: number): void {\n const bytes = new Uint8Array(2);\n new DataView(bytes.buffer).setUint16(0, value, true);\n this.bytes(bytes);\n }\n u32(value: number): void {\n if (!Number.isSafeInteger(value) || value < 0 || value > 0xffff_ffff) {\n throw new RangeError(\"Native projection integer is outside u32\");\n }\n const bytes = new Uint8Array(4);\n new DataView(bytes.buffer).setUint32(0, value, true);\n this.bytes(bytes);\n }\n i32(value: number): void {\n if (!Number.isSafeInteger(value) || value < -0x8000_0000 || value > 0x7fff_ffff) {\n throw new RangeError(\"Native projection integer is outside i32\");\n }\n const bytes = new Uint8Array(4);\n new DataView(bytes.buffer).setInt32(0, value, true);\n this.bytes(bytes);\n }\n u64(value: bigint): void {\n if (value < 0n || value > 0xffff_ffff_ffff_ffffn) {\n throw new RangeError(\"Native projection integer is outside u64\");\n }\n const bytes = new Uint8Array(8);\n new DataView(bytes.buffer).setBigUint64(0, value, true);\n this.bytes(bytes);\n }\n i64(value: bigint): void {\n const bytes = new Uint8Array(8);\n new DataView(bytes.buffer).setBigInt64(0, value, true);\n this.bytes(bytes);\n }\n f64(value: number): void {\n if (!Number.isFinite(value) || Object.is(value, -0)) {\n throw new TypeError(\"Native projection numbers must be finite canonical doubles\");\n }\n const bytes = new Uint8Array(8);\n new DataView(bytes.buffer).setFloat64(0, value, true);\n this.bytes(bytes);\n }\n string(value: string): void {\n const encoded = textEncoder.encode(value);\n this.u32(encoded.byteLength);\n this.bytes(encoded);\n }\n optionalString(value: string | undefined): void {\n this.bool(value !== undefined);\n if (value !== undefined) this.string(value);\n }\n assertDocumentId(id: string, expectedPrefix: string): void {\n parseDocumentId(id, expectedPrefix);\n }\n documentId(id: string, expectedPrefix: string): void {\n const parsed = parseDocumentId(id, expectedPrefix);\n this.u8(documentKindTag(expectedPrefix));\n this.u64(parsed.namespace);\n this.u64(parsed.counter);\n }\n documentTarget(target: DocumentTarget): void {\n if (target.kind === \"body\") {\n this.u8(0);\n return;\n }\n this.u8(1);\n this.documentId(target.sectionId, \"sec\");\n this.u8(target.storyKind === \"header\" ? 1 : 2);\n this.u8(target.variant === \"default\" ? 1 : target.variant === \"first\" ? 2 : 3);\n }\n page(page: DocumentPageGeometry): void {\n this.f64(page.widthPt);\n this.f64(page.heightPt);\n this.f64(page.marginTopPt);\n this.f64(page.marginRightPt);\n this.f64(page.marginBottomPt);\n this.f64(page.marginLeftPt);\n }\n pageWithExtras(page: DocumentPageGeometry): void {\n this.page(page);\n this.f64(page.headerPt ?? 36);\n this.f64(page.footerPt ?? 36);\n this.f64(page.gutterPt ?? 0);\n }\n textRuns(runs: readonly SerializedTextRun[]): void {\n this.u32(runs.length);\n for (const run of runs) {\n this.string(run.text);\n this.textStyle(run.style);\n }\n }\n textStyle(style: DocumentTextStyle): void {\n const mask =\n Number(style.fontFamily !== undefined) |\n (Number(style.fontSizePt !== undefined) << 1) |\n (Number(style.color !== undefined) << 2) |\n (Number(style.bold !== undefined) << 3) |\n (Number(style.italic !== undefined) << 4) |\n (Number(style.underline !== undefined) << 5) |\n (Number(style.strike !== undefined) << 6);\n this.u8(mask);\n if (style.fontFamily !== undefined) this.string(style.fontFamily);\n if (style.fontSizePt !== undefined) this.f64(style.fontSizePt);\n if (style.color !== undefined) this.string(style.color);\n for (const value of [style.bold, style.italic, style.underline, style.strike]) {\n if (value !== undefined) this.bool(value);\n }\n }\n textStylePatch(style: DocumentParagraphFormat[\"style\"]): void {\n this.patchString(style.fontFamily);\n this.patchF64(style.fontSizePt);\n this.patchString(style.color);\n this.patchBool(style.bold);\n this.patchBool(style.italic);\n this.patchBool(style.underline);\n this.patchBool(style.strike);\n }\n private patchString(value: string | null | undefined): void {\n this.u8(value === undefined ? 0 : value === null ? 1 : 2);\n if (typeof value === \"string\") this.string(value);\n }\n private patchF64(value: number | null | undefined): void {\n this.u8(value === undefined ? 0 : value === null ? 1 : 2);\n if (typeof value === \"number\") this.f64(value);\n }\n private patchBool(value: boolean | null | undefined): void {\n this.u8(value === undefined ? 0 : value === null ? 1 : value ? 3 : 2);\n }\n paragraphStyle(style: DocumentParagraphStyle): void {\n const mask =\n Number(style.headingLevel !== undefined) |\n (Number(style.alignment !== undefined) << 1) |\n (Number(style.spaceBeforePt !== undefined) << 2) |\n (Number(style.spaceAfterPt !== undefined) << 3) |\n (Number(style.lineHeight !== undefined) << 4) |\n (Number(style.keepNext !== undefined) << 5) |\n (Number(style.pageBreakBefore !== undefined) << 6) |\n (Number(style.list !== undefined) << 7);\n this.u16(mask);\n if (style.headingLevel !== undefined) this.u8(style.headingLevel);\n if (style.alignment !== undefined) {\n this.u8({ left: 1, center: 2, right: 3, justify: 4 }[style.alignment]);\n }\n for (const value of [style.spaceBeforePt, style.spaceAfterPt, style.lineHeight]) {\n if (value !== undefined) this.f64(value);\n }\n for (const value of [style.keepNext, style.pageBreakBefore]) {\n if (value !== undefined) this.bool(value);\n }\n if (style.list) {\n this.u8(style.list.kind === \"bullet\" ? 1 : 2);\n this.bool(style.list.level !== undefined);\n if (style.list.level !== undefined) this.u8(style.list.level);\n this.optionalString(style.list.instanceId);\n }\n }\n tableStyle(style: DocumentTableStyle): void {\n const mask =\n Number(style.widthPt !== undefined) |\n (Number(style.columnWidthsPt !== undefined) << 1) |\n (Number(style.headerRows !== undefined) << 2) |\n (Number(style.cellPaddingPt !== undefined) << 3) |\n (Number(style.borderColor !== undefined) << 4) |\n (Number(style.headerFill !== undefined) << 5) |\n (Number(style.allowRowSplit !== undefined) << 6);\n this.u8(mask);\n if (style.widthPt !== undefined) this.f64(style.widthPt);\n if (style.columnWidthsPt !== undefined) {\n this.u32(style.columnWidthsPt.length);\n for (const width of style.columnWidthsPt) this.f64(width);\n }\n if (style.headerRows !== undefined) this.u32(style.headerRows);\n if (style.cellPaddingPt !== undefined) this.f64(style.cellPaddingPt);\n if (style.borderColor !== undefined) this.string(style.borderColor);\n if (style.headerFill !== undefined) this.string(style.headerFill);\n if (style.allowRowSplit !== undefined) this.bool(style.allowRowSplit);\n }\n commentReply(reply: { author: string; text: string; createdAt: string }): void {\n this.string(reply.author);\n this.string(reply.text);\n this.string(reply.createdAt);\n }\n presentationId(id: string, namespace: bigint): void {\n const counter = presentationCounter(id);\n this.u64(counter);\n this.u64(namespace);\n }\n optionalPresentationId(id: string | undefined, namespace: bigint): void {\n this.bool(id !== undefined);\n if (id !== undefined) this.presentationId(id, namespace);\n }\n fill(fill: PresentationFill): void {\n const value = presentationColorValue(fill);\n if (value === \"none\") {\n this.u8(0);\n return;\n }\n this.u8(1);\n const rgb = Number.parseInt(value.slice(1), 16);\n this.u32((rgb * 256 + 0xff) >>> 0);\n }\n line(line: PresentationLine): void {\n this.fill(line.fill ?? \"black\");\n this.i64(cssPixels(line.width ?? 1));\n this.u8(line.style === \"dash\" ? 1 : line.style === \"dot\" ? 2 : 0);\n }\n presentationRect(position: PresentationPosition): void {\n this.i64(cssPixels(position.left));\n this.i64(cssPixels(position.top));\n this.i64(cssPixels(position.width));\n this.i64(cssPixels(position.height));\n }\n presentationTransform(rotation: number, flipHorizontal: boolean, flipVertical: boolean): void {\n this.i32(Math.round(rotation * 60_000));\n this.bool(flipHorizontal);\n this.bool(flipVertical);\n }\n richText(text: PresentationText, fallbackStyle: PresentationTextStyle = {}): void {\n const style = { ...fallbackStyle, ...text.style };\n this.u8(\n style.verticalAlignment === \"middle\" ? 1 : style.verticalAlignment === \"bottom\" ? 2 : 0,\n );\n this.u32(1);\n this.u8(\n style.alignment === \"center\"\n ? 1\n : style.alignment === \"right\"\n ? 2\n : style.alignment === \"justify\"\n ? 3\n : 0,\n );\n this.u32(1);\n this.string(text.toString());\n this.presentationTextStyle(style);\n }\n plainRichText(value: string, style: PresentationTextStyle = {}): void {\n this.u8(\n style.verticalAlignment === \"middle\" ? 1 : style.verticalAlignment === \"bottom\" ? 2 : 0,\n );\n this.u32(1);\n this.u8(\n style.alignment === \"center\"\n ? 1\n : style.alignment === \"right\"\n ? 2\n : style.alignment === \"justify\"\n ? 3\n : 0,\n );\n this.u32(1);\n this.string(value);\n this.presentationTextStyle(style);\n }\n presentationTextStyle(style: PresentationTextStyle): void {\n this.string(style.fontFamily ?? \"Arial\");\n this.u32(Math.round((style.fontSize ?? 18) * 100));\n const color = presentationColorValue(style.color ?? \"black\");\n const rgb = color === \"none\" ? 0 : Number.parseInt(color.slice(1), 16);\n this.u32((rgb * 256 + (color === \"none\" ? 0 : 0xff)) >>> 0);\n this.bool(style.bold ?? false);\n this.bool(style.italic ?? false);\n this.bool(style.underline ?? false);\n this.bool(false);\n }\n presentationNode(element: PresentationElement): void {\n if (element instanceof PresentationShape) {\n this.u8(0);\n this.u8(\n { textbox: 0, rect: 1, roundRect: 2, ellipse: 3, triangle: 4, rightArrow: 5, line: 6 }[\n element.geometry\n ],\n );\n this.fill(element.fill);\n this.line(element.line);\n const hasText = element.text.toString().length > 0;\n this.bool(hasText);\n if (hasText) this.richText(element.text);\n this.bool(element.placeholder !== undefined);\n if (element.placeholder) {\n this.string(element.placeholder.type);\n this.bool(element.placeholder.index !== undefined);\n if (element.placeholder.index !== undefined) this.u32(element.placeholder.index);\n }\n return;\n }\n if (element instanceof PresentationGroup) {\n this.u8(1);\n this.i64(cssPixels(element.childOffset.left));\n this.i64(cssPixels(element.childOffset.top));\n this.i64(cssPixels(element.childExtent.width));\n this.i64(cssPixels(element.childExtent.height));\n this.u32(0);\n return;\n }\n if (element instanceof PresentationChart) {\n this.u8(3);\n this.u8(\n { bar: 0, line: 1, area: 2, pie: 3, doughnut: 4, scatter: 5, bubble: 6, radar: 7 }[\n element.type\n ],\n );\n this.plainRichText(element.title);\n this.u32(element.series.items.length);\n for (const series of element.series.items) {\n this.string(series.name);\n this.stringVector(series.categories.length > 0 ? series.categories : element.categories);\n this.numberVector(series.values);\n this.numberVector(series.xValues);\n this.numberVector(series.bubbleSizes);\n }\n this.bool(element.hasLegend);\n return;\n }\n if (element instanceof PresentationTable) {\n this.u8(4);\n this.u32(element.rows.length);\n this.u32(element.rows[0]?.length ?? 0);\n for (const row of element.rows) {\n for (const cell of row) {\n this.bool(cell !== null);\n if (cell) {\n this.richText(cell.text, element.textStyle);\n this.fill(cell.fill);\n this.u16(cell.rowSpan);\n this.u16(cell.colSpan);\n }\n }\n }\n this.u32(element.columnWidths.length);\n for (const width of element.columnWidths) this.i64(cssPixels(width));\n this.u32(element.rowHeights.length);\n for (const height of element.rowHeights) this.i64(cssPixels(height));\n this.line(element.line);\n return;\n }\n if (element instanceof PresentationImage) {\n const source = element.sourceForSvg();\n if (!source) {\n unsupportedPresentation(\"prompt-only raster image scene nodes\");\n }\n const match = /^data:([^;,]+);base64,([A-Za-z0-9+/]*={0,2})$/u.exec(source);\n if (!match) throw new Error(`Presentation image ${element.id} has a non-canonical source`);\n const bytes = decodeRasterBase64(match[2]!);\n const metadata = inspectRasterImage(bytes);\n if (metadata.contentType !== match[1] || metadata.contentType !== element.contentType) {\n throw new Error(`Presentation image ${element.id} MIME metadata diverged`);\n }\n this.u8(5);\n this.bytes(sha256Bytes(bytes));\n this.string(metadata.contentType);\n this.string(element.alt);\n this.u8(element.fit === \"contain\" ? 0 : 1);\n this.u32(metadata.width);\n this.u32(metadata.height);\n return;\n }\n unsupportedPresentation(\"unknown scene node\");\n }\n stringVector(values: readonly string[]): void {\n this.u32(values.length);\n for (const value of values) this.string(value);\n }\n numberVector(values: readonly number[]): void {\n this.u32(values.length);\n for (const value of values) this.f64(value);\n }\n}\n\nfunction envelope(magic: string, count: number, payload: Uint8Array, maximum: number): Uint8Array {\n const output = new Uint8Array(HEADER_BYTES + payload.byteLength + CHECKSUM_BYTES);\n if (output.byteLength > maximum) throw new RangeError(`${magic} envelope exceeds its byte limit`);\n output.set(textEncoder.encode(magic), 0);\n const view = new DataView(output.buffer);\n view.setUint16(8, 1, true);\n view.setUint32(12, count, true);\n view.setBigUint64(16, BigInt(payload.byteLength), true);\n output.set(payload, HEADER_BYTES);\n view.setBigUint64(HEADER_BYTES + payload.byteLength, fnv1a64(output.subarray(0, -8)), true);\n return output;\n}\n\nfunction parseDocumentId(\n id: string,\n expectedPrefix: string,\n): { namespace: bigint; counter: bigint } {\n const match = /^([a-z]{1,8})\\/([0-9a-f]{16})([0-9a-f]{16})$/u.exec(id);\n if (!match || match[1] !== expectedPrefix) {\n throw new Error(`Document id ${id} is not a canonical ${expectedPrefix} id`);\n }\n const counter = BigInt(`0x${match[3]}`);\n if (counter === 0n) throw new Error(`Document id ${id} uses the reserved zero counter`);\n return { namespace: BigInt(`0x${match[2]}`), counter };\n}\n\nfunction documentKindTag(prefix: string): number {\n const tag = { p: 1, dt: 2, pb: 3, sec: 4, hdr: 5, ftr: 6, dc: 7, chg: 8 }[prefix];\n if (!tag) throw new Error(`Unknown document id prefix: ${prefix}`);\n return tag;\n}\n\nfunction presentationCounter(id: string): bigint {\n const match = /^[a-z]{2}\\/([1-9][0-9]*)$/u.exec(id);\n if (!match) throw new Error(`Presentation object id is not canonical: ${id}`);\n const counter = BigInt(match[1]!);\n if (counter > 0xffff_ffff_ffff_ffffn) throw new RangeError(\"Presentation object id is exhausted\");\n return counter;\n}\n\nfunction optionalBool(value: boolean | undefined): number {\n return value === undefined ? 0 : value ? 2 : 1;\n}\n\nfunction optionalOptionalBool(value: boolean | undefined): number {\n return value === undefined ? 0 : value ? 3 : 2;\n}\n\nfunction cssPixels(value: number): bigint {\n if (!Number.isFinite(value) || Object.is(value, -0)) {\n throw new TypeError(\"Presentation geometry must contain finite canonical numbers\");\n }\n return BigInt(Math.round(value * EMU_PER_CSS_PIXEL));\n}\n\nfunction assertFinitePositive(value: number, label: string): void {\n if (!Number.isFinite(value) || value <= 0)\n throw new TypeError(`${label} must be positive and finite`);\n}\n\nfunction presentationSizeEmu(value: number, label: string): bigint {\n assertFinitePositive(value, label);\n const rounded = Math.round(value * EMU_PER_CSS_PIXEL);\n if (!Number.isSafeInteger(rounded) || rounded <= 0 || rounded > PRESENTATION_MAX_COORDINATE_EMU) {\n throw new RangeError(`${label} exceeds the native presentation-coordinate bound`);\n }\n return BigInt(rounded);\n}\n\nfunction fnv1a64(bytes: Uint8Array): bigint {\n let hash = 0xcbf29ce484222325n;\n for (const byte of bytes) {\n hash ^= BigInt(byte);\n hash = BigInt.asUintN(64, hash * 0x100000001b3n);\n }\n return hash;\n}\n","import {\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,\n decodeSpreadsheetMetadataKernelProjection,\n decodeSpreadsheetViewportKernelProjection,\n editableArtifactStableId,\n encodeSpreadsheetMetadataKernelQuery,\n encodeSpreadsheetViewportKernelQuery,\n spreadsheetSheetId,\n type SpreadsheetArtifactCommand,\n type SpreadsheetArtifactProjectedCellValue,\n type SpreadsheetArtifactSheetMetadata,\n type SpreadsheetCellInput,\n type SpreadsheetSheetGeneration,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { NativeSpreadsheetSession } from \"./native\";\nimport type {\n CompositeMutationPreparer,\n CompositeArtifactState,\n CompositePropertyRead,\n CompositeReconciliation,\n PreparedCompositeMutation,\n} from \"./production-composite\";\nimport type { ArtifactKernelRuntime } from \"./runtime\";\nimport {\n Workbook as ReferenceWorkbook,\n type SerializedWorkbook,\n type Workbook,\n} from \"./spreadsheet\";\nimport type { FormulaResult } from \"./spreadsheet-types\";\n\ntype SerializedWorksheet = SerializedWorkbook[\"worksheets\"][number];\ntype SerializedCell = SerializedWorksheet[\"cells\"][number];\n\ntype SpreadsheetNativeData = {\n readonly sheetIds: Map<string, ReturnType<typeof spreadsheetSheetId>>;\n readonly generations: Map<string, SpreadsheetSheetGeneration>;\n readonly author: SpreadsheetProjectionAuthor;\n metadata: ReadonlyMap<string, SpreadsheetArtifactSheetMetadata> | null;\n};\n\ntype RangeLike = Readonly<{\n worksheet: Readonly<{ id: string }>;\n address: Readonly<{ row: number; col: number; rowCount: number; colCount: number }>;\n}>;\n\nconst textEncoder = new TextEncoder();\n\nexport function reconcileSpreadsheetProjection(\n workbook: Workbook,\n runtime: ArtifactKernelRuntime,\n namespace: bigint,\n): CompositeReconciliation {\n const snapshot = workbook.toJSON();\n const session = NativeSpreadsheetSession.create(runtime, namespace);\n const sheetIds = new Map<string, ReturnType<typeof spreadsheetSheetId>>();\n const generations = new Map<string, SpreadsheetSheetGeneration>();\n const author = new SpreadsheetProjectionAuthor(session, namespace);\n\n try {\n let previous: SpreadsheetSheetGeneration | null = null;\n let offset = 0;\n const maximumCommands = Math.max(1, Math.min(session.capabilities.maxCommands, 1_024));\n while (offset < snapshot.worksheets.length) {\n const chunk = snapshot.worksheets.slice(offset, offset + maximumCommands);\n const commands: SpreadsheetArtifactCommand[] = [];\n for (let relativeIndex = 0; relativeIndex < chunk.length; relativeIndex += 1) {\n const worksheet = chunk[relativeIndex]!;\n const sheetId = nativeSheetId(namespace, worksheet.id);\n sheetIds.set(worksheet.id, sheetId);\n const after =\n relativeIndex === 0\n ? previous\n : {\n kind: \"created-in-batch\" as const,\n sheetId: sheetIds.get(chunk[relativeIndex - 1]!.id)!,\n createCommandIndex: relativeIndex - 1,\n };\n commands.push({ kind: \"sheet.create\", sheetId, name: worksheet.name, after });\n }\n author.author(commands);\n const metadata = querySpreadsheetMetadata(session, sheetIds.size);\n const metadataById = new Map(metadata.map((sheet) => [sheet.sheetId, sheet]));\n for (let index = 0; index < chunk.length; index += 1) {\n const worksheet = chunk[index]!;\n const sheetId = sheetIds.get(worksheet.id)!;\n const operationId = metadataById.get(sheetId)?.generationId;\n if (!operationId) throw new Error(\"Native kernel omitted a sheet generation id\");\n const generation: SpreadsheetSheetGeneration = Object.freeze({\n kind: \"generation\",\n sheetId,\n creationOperationId: editableArtifactStableId(operationId),\n });\n generations.set(worksheet.id, generation);\n previous = generation;\n }\n offset += chunk.length;\n }\n\n const batch = new SpreadsheetCommandBatcher(author, session);\n for (const worksheet of snapshot.worksheets) {\n const generation = generations.get(worksheet.id);\n if (!generation) throw new Error(`Missing native generation for worksheet ${worksheet.id}`);\n for (const command of cellCommands(worksheet, generation)) batch.add(command);\n }\n batch.finish();\n return {\n session,\n data: {\n sheetIds,\n generations,\n author,\n metadata: null,\n } satisfies SpreadsheetNativeData,\n };\n } catch (cause) {\n session.dispose();\n throw cause;\n }\n}\n\n/**\n * Converts the public hot spreadsheet mutations directly into the existing\n * OGASC/OGATX protocol. The retained native session stays authoritative; rare\n * non-cell features continue through the complete reconciliation path.\n */\nexport const prepareSpreadsheetMutation: CompositeMutationPreparer<Workbook> = (\n mutation,\n state,\n): PreparedCompositeMutation | null => {\n const data = spreadsheetData(state);\n const root = state.rawRoot();\n if (mutation.owner === root.worksheets && mutation.member === \"add\") {\n const previousHostId = root.worksheets.items.at(-1)?.id;\n const after = previousHostId ? (data.generations.get(previousHostId) ?? null) : null;\n return {\n commit(result) {\n if (!isWorksheet(result)) throw new Error(\"Worksheet add did not return a worksheet\");\n const sheetId = nativeSheetId(state.namespace, result.id);\n data.author.author([{ kind: \"sheet.create\", sheetId, name: result.name, after }]);\n const operationId = querySpreadsheetMetadata(\n state.native as NativeSpreadsheetSession,\n data.sheetIds.size + 1,\n ).find((sheet) => sheet.sheetId === sheetId)?.generationId;\n if (!operationId) throw new Error(\"Native kernel omitted a sheet generation id\");\n data.sheetIds.set(result.id, sheetId);\n data.generations.set(\n result.id,\n Object.freeze({\n kind: \"generation\",\n sheetId,\n creationOperationId: editableArtifactStableId(operationId),\n }),\n );\n data.metadata = null;\n return true;\n },\n };\n }\n\n if (isWorksheet(mutation.owner) && mutation.member === \"name\") {\n const generation = requiredGeneration(data, mutation.owner.id);\n const name = normalizedSheetName(mutation.arguments?.[0]);\n return commitSpreadsheetCommands(data, [{ kind: \"sheet.rename\", sheet: generation, name }]);\n }\n\n if (!isRange(mutation.owner)) return null;\n const range = mutation.owner;\n const generation = requiredGeneration(data, range.worksheet.id);\n if (mutation.member === \"values\" || mutation.member === \"formulas\") {\n return commitSpreadsheetCommands(data, [\n rectangularWriteCommand(generation, range.address, mutation.arguments?.[0], mutation.member),\n ]);\n }\n if (mutation.member === \"writeValues\") {\n const matrix = rectangularMatrix(mutation.arguments?.[0], \"spreadsheet values\");\n if (matrix.rows === 0 || matrix.columns === 0) return { commit: () => false };\n return commitSpreadsheetCommands(data, [\n rectangularWriteCommand(\n generation,\n { ...range.address, rowCount: matrix.rows, colCount: matrix.columns },\n matrix.values,\n \"values\",\n ),\n ]);\n }\n if (mutation.member === \"clear\") {\n const options = mutation.arguments?.[0] as { applyTo?: unknown } | undefined;\n if (options?.applyTo === \"formats\") {\n // The canonical Rust spreadsheet model intentionally has no formatting\n // state. Preserve the facade revision without fabricating a kernel edit.\n return { commit: () => true };\n }\n return commitSpreadsheetCommands(data, [\n {\n kind: \"range.clear\",\n sheet: generation,\n range: {\n start: { row: range.address.row, column: range.address.col },\n end: {\n row: range.address.row + range.address.rowCount - 1,\n column: range.address.col + range.address.colCount - 1,\n },\n },\n },\n ]);\n }\n return null;\n};\n\nfunction commitSpreadsheetCommands(\n data: SpreadsheetNativeData,\n commands: readonly SpreadsheetArtifactCommand[],\n): PreparedCompositeMutation {\n return {\n commit() {\n data.author.author(commands);\n data.metadata = null;\n return true;\n },\n };\n}\n\nfunction requiredGeneration(\n data: SpreadsheetNativeData,\n hostSheetId: string,\n): SpreadsheetSheetGeneration {\n const generation = data.generations.get(hostSheetId);\n if (!generation) throw new Error(`Spreadsheet native generation is missing: ${hostSheetId}`);\n return generation;\n}\n\nfunction rectangularWriteCommand(\n sheet: SpreadsheetSheetGeneration,\n address: RangeLike[\"address\"],\n input: unknown,\n kind: \"values\" | \"formulas\",\n): SpreadsheetArtifactCommand {\n const matrix = rectangularMatrix(input, `spreadsheet ${kind}`);\n if (matrix.rows !== address.rowCount || matrix.columns !== address.colCount) {\n throw new Error(\n `Matrix shape ${matrix.rows}x${matrix.columns} does not match range ${address.rowCount}x${address.colCount}`,\n );\n }\n const cells: SpreadsheetCellInput[] = [];\n for (const row of matrix.values) {\n for (const value of row) {\n cells.push(kind === \"values\" ? nativeInputValue(value) : nativeFormula(value));\n }\n }\n return {\n kind: \"cells.set\",\n sheet,\n anchor: { row: address.row, column: address.col },\n rows: address.rowCount,\n columns: address.colCount,\n cells,\n };\n}\n\nfunction rectangularMatrix(\n input: unknown,\n label: string,\n): { values: readonly (readonly unknown[])[]; rows: number; columns: number } {\n if (!Array.isArray(input)) throw new TypeError(`${label} must be a matrix`);\n const columns = input[0]?.length ?? 0;\n if (!input.every((row) => Array.isArray(row) && row.length === columns)) {\n throw new Error(`${label} must be rectangular`);\n }\n return { values: input, rows: input.length, columns };\n}\n\nfunction nativeInputValue(value: unknown): SpreadsheetCellInput {\n if (value instanceof Date) {\n const milliseconds = Date.prototype.getTime.call(value);\n if (!Number.isSafeInteger(milliseconds)) {\n throw new TypeError(\"Spreadsheet cell dates must be valid ECMAScript instants\");\n }\n return { date: new Date(milliseconds).toISOString() };\n }\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new TypeError(\"Spreadsheet cell numbers must be finite\");\n return value;\n }\n throw new TypeError(\"Spreadsheet cell value is not supported by the native kernel\");\n}\n\nfunction nativeFormula(value: unknown): SpreadsheetCellInput {\n if (value === null) return null;\n if (typeof value !== \"string\")\n throw new TypeError(\"Spreadsheet formulas must be strings or null\");\n const trimmed = value.trim();\n if (trimmed.length === 0) return null;\n return { formula: trimmed.startsWith(\"=\") ? trimmed : `=${trimmed}` };\n}\n\nfunction normalizedSheetName(value: unknown): string {\n if (typeof value !== \"string\") throw new TypeError(\"Worksheet name must be a string\");\n const name = value.trim();\n if (!name || name.length > 31 || /[\\\\/?*[\\]:]/u.test(name)) {\n throw new Error(`Invalid worksheet name: ${value}`);\n }\n return name;\n}\n\nexport function installSpreadsheetProjection(\n workbook: Workbook,\n state: CompositeArtifactState<Workbook>,\n): void {\n Object.defineProperty(workbook, \"valueAt\", {\n configurable: true,\n writable: true,\n value: (\n sheet: Parameters<Workbook[\"valueAt\"]>[0],\n address: Parameters<Workbook[\"valueAt\"]>[1],\n ): FormulaResult => {\n if (state.inMutation) {\n return ReferenceWorkbook.prototype.valueAt.call(workbook, sheet, address);\n }\n return readSpreadsheetMatrix(state, sheet.id, {\n row: address.row,\n col: address.col,\n rowCount: 1,\n colCount: 1,\n }).values[0]![0]!;\n },\n });\n}\n\nexport function readSpreadsheetProperty(\n owner: unknown,\n member: PropertyKey,\n state: CompositeArtifactState<Workbook>,\n): CompositePropertyRead {\n if (state.inMutation) return { handled: false };\n if (member === \"values\" && isRange(owner)) {\n return {\n handled: true,\n value: readSpreadsheetMatrix(state, owner.worksheet.id, owner.address).values,\n };\n }\n if (member === \"formulas\" && isRange(owner)) {\n return {\n handled: true,\n value: readSpreadsheetMatrix(state, owner.worksheet.id, owner.address).formulas,\n };\n }\n if (member === \"name\" && isWorksheet(owner)) {\n const metadata = spreadsheetMetadata(state).get(owner.id);\n if (!metadata) throw new Error(`Native worksheet is missing: ${owner.id}`);\n return { handled: true, value: metadata.name };\n }\n return { handled: false };\n}\n\nfunction readSpreadsheetMatrix(\n state: CompositeArtifactState<Workbook>,\n hostSheetId: string,\n address: RangeLike[\"address\"],\n): { values: FormulaResult[][]; formulas: Array<Array<string | null>> } {\n const data = spreadsheetData(state);\n const nativeSheetIdValue = data.sheetIds.get(hostSheetId);\n if (!nativeSheetIdValue) throw new Error(`Native worksheet mapping is missing: ${hostSheetId}`);\n const cells = address.rowCount * address.colCount;\n if (!Number.isSafeInteger(cells) || cells > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) {\n throw new RangeError(\n `Spreadsheet read exceeds the native viewport limit (${SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS} cells)`,\n );\n }\n const maxBytes = Math.min(\n state.native.capabilities.maxQueryResponseBytes,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n );\n const query = {\n sheetId: nativeSheetIdValue,\n startRow: address.row,\n startColumn: address.col,\n rowCount: address.rowCount,\n columnCount: address.colCount,\n maxCells: cells,\n maxBytes,\n } as const;\n const projection = decodeSpreadsheetViewportKernelProjection(\n (state.native as NativeSpreadsheetSession).query(encodeSpreadsheetViewportKernelQuery(query)),\n query,\n );\n const values: FormulaResult[][] = Array.from({ length: address.rowCount }, () =>\n Array<FormulaResult>(address.colCount).fill(null),\n );\n const formulas: Array<Array<string | null>> = Array.from({ length: address.rowCount }, () =>\n Array<string | null>(address.colCount).fill(null),\n );\n for (const cell of projection.cells) {\n const row = cell.row - address.row;\n const column = cell.column - address.col;\n values[row]![column] = projectedCellValue(cell.value);\n formulas[row]![column] = cell.formula;\n }\n return { values, formulas };\n}\n\nfunction spreadsheetMetadata(\n state: CompositeArtifactState<Workbook>,\n): ReadonlyMap<string, SpreadsheetArtifactSheetMetadata> {\n const data = spreadsheetData(state);\n if (data.metadata) return data.metadata;\n const sheets = querySpreadsheetMetadata(\n state.native as NativeSpreadsheetSession,\n data.sheetIds.size,\n );\n const hostByNative = new Map([...data.sheetIds].map(([host, native]) => [native, host]));\n const metadata = new Map<string, SpreadsheetArtifactSheetMetadata>();\n for (const sheet of sheets) {\n const host = hostByNative.get(sheet.sheetId);\n if (host) metadata.set(host, sheet);\n }\n data.metadata = metadata;\n return metadata;\n}\n\nfunction querySpreadsheetMetadata(\n session: NativeSpreadsheetSession,\n maxSheets: number,\n): readonly SpreadsheetArtifactSheetMetadata[] {\n const query = {\n maxSheets: Math.max(1, maxSheets),\n maxBytes: Math.min(\n session.capabilities.maxQueryResponseBytes,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n ),\n } as const;\n return decodeSpreadsheetMetadataKernelProjection(\n session.query(encodeSpreadsheetMetadataKernelQuery(query)),\n query,\n ).sheets;\n}\n\nfunction spreadsheetData(state: CompositeArtifactState<Workbook>): SpreadsheetNativeData {\n if (state.native.modality !== \"spreadsheet\")\n throw new TypeError(\"Expected native spreadsheet session\");\n const data = state.nativeData as Partial<SpreadsheetNativeData> | undefined;\n if (\n !(data?.sheetIds instanceof Map) ||\n !(data.generations instanceof Map) ||\n !(data.author instanceof SpreadsheetProjectionAuthor)\n ) {\n throw new Error(\"Spreadsheet native mapping is unavailable\");\n }\n return data as SpreadsheetNativeData;\n}\n\nclass SpreadsheetProjectionAuthor {\n readonly #session: NativeSpreadsheetSession;\n readonly #replicaId: string;\n readonly #artifactId: string;\n #transactionCounter = 0;\n #previousTransactionId: string | null = null;\n\n constructor(session: NativeSpreadsheetSession, namespace: bigint) {\n this.#session = session;\n this.#replicaId = u64Hex(namespace);\n this.#artifactId = `${this.#replicaId}ffffffffffffffff`;\n }\n\n author(commands: readonly SpreadsheetArtifactCommand[]): void {\n if (commands.length === 0) return;\n const counter = this.#transactionCounter + 1;\n const clientTransactionId = `projection.${this.#replicaId}.${counter}`;\n const revision = this.#session.revision();\n if (revision > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new RangeError(\"Native spreadsheet revision exceeds the JavaScript safe-integer range\");\n }\n this.#session.authorCommands({\n intent: {\n artifactId: this.#artifactId,\n clientTransactionId,\n replicaId: this.#replicaId,\n replicaCounter: counter,\n previousLocalTransactionId: this.#previousTransactionId,\n observedHeadSequence: Number(revision),\n causalBase:\n this.#transactionCounter === 0\n ? []\n : [{ replicaId: this.#replicaId, counter: this.#transactionCounter }],\n selectiveUndoOperationIds: [],\n },\n commands: { version: SPREADSHEET_ARTIFACT_COMMAND_VERSION, commands },\n resolvedBaseBytes: this.#session.frontier(),\n });\n this.#transactionCounter = counter;\n this.#previousTransactionId = clientTransactionId;\n }\n}\n\nclass SpreadsheetCommandBatcher {\n readonly #author: SpreadsheetProjectionAuthor;\n readonly #maxCommands: number;\n readonly #maxCells: number;\n readonly #maxEstimatedBytes: number;\n #commands: SpreadsheetArtifactCommand[] = [];\n #cells = 0;\n #estimatedBytes = 0;\n\n constructor(author: SpreadsheetProjectionAuthor, session: NativeSpreadsheetSession) {\n this.#author = author;\n this.#maxCommands = Math.max(1, Math.min(session.capabilities.maxCommands, 1_000));\n this.#maxCells = Math.max(1, Math.min(session.capabilities.maxCellsPerBatch, 100_000));\n this.#maxEstimatedBytes = Math.max(\n 16_384,\n Math.min(session.capabilities.maxSpreadsheetCommandBytes - 4_096, 2 * 1024 * 1024),\n );\n }\n\n add(command: SpreadsheetArtifactCommand): void {\n const cells = command.kind === \"cells.set\" ? command.cells.length : 0;\n const estimatedBytes = estimateCommandBytes(command);\n if (\n this.#commands.length > 0 &&\n (this.#commands.length + 1 > this.#maxCommands ||\n this.#cells + cells > this.#maxCells ||\n this.#estimatedBytes + estimatedBytes > this.#maxEstimatedBytes)\n ) {\n this.flush();\n }\n this.#commands.push(command);\n this.#cells += cells;\n this.#estimatedBytes += estimatedBytes;\n if (estimatedBytes > this.#maxEstimatedBytes) this.flush();\n }\n\n finish(): void {\n this.flush();\n }\n\n private flush(): void {\n if (this.#commands.length === 0) return;\n this.#author.author(this.#commands);\n this.#commands = [];\n this.#cells = 0;\n this.#estimatedBytes = 0;\n }\n}\n\nfunction* cellCommands(\n worksheet: SerializedWorksheet,\n generation: SpreadsheetSheetGeneration,\n): Iterable<SpreadsheetArtifactCommand> {\n const cells = [...worksheet.cells].sort(\n (left, right) => left.row - right.row || left.col - right.col,\n );\n let index = 0;\n while (index < cells.length) {\n const first = cells[index]!;\n const rowCells: SpreadsheetCellInput[] = [nativeCell(first)];\n let nextColumn = first.col + 1;\n index += 1;\n while (\n index < cells.length &&\n cells[index]!.row === first.row &&\n cells[index]!.col === nextColumn &&\n rowCells.length < 4_096 &&\n estimateCellsBytes(rowCells) < 512 * 1024\n ) {\n rowCells.push(nativeCell(cells[index]!));\n nextColumn += 1;\n index += 1;\n }\n yield {\n kind: \"cells.set\",\n sheet: generation,\n anchor: { row: first.row, column: first.col },\n rows: 1,\n columns: rowCells.length,\n cells: rowCells,\n };\n }\n}\n\nfunction nativeCell(cell: SerializedCell): SpreadsheetCellInput {\n if (cell.formula !== null) return { formula: cell.formula };\n const value = cell.value;\n if (typeof value === \"object\" && value !== null) {\n if (\"type\" in value && value.type === \"date\") {\n return { date: value.value };\n }\n throw new TypeError(\"Serialized spreadsheet cell value is not supported by the native kernel\");\n }\n if (typeof value === \"number\" && !Number.isFinite(value)) {\n throw new TypeError(\"Spreadsheet cell numbers must be finite\");\n }\n return value;\n}\n\nfunction nativeSheetId(namespace: bigint, hostId: string): ReturnType<typeof spreadsheetSheetId> {\n const match = /^ws\\/(\\d+)$/u.exec(hostId);\n if (!match) throw new Error(`Worksheet id cannot be mapped to the native kernel: ${hostId}`);\n // Counter 1 is the native workbook object itself. Reference worksheet ids\n // begin at ws/1, so their exact collision-free native mapping is N + 1.\n const counter = BigInt(match[1]!) + 1n;\n if (counter <= 1n || counter > 0xffff_ffff_ffff_ffffn) {\n throw new RangeError(`Worksheet id counter is outside the native range: ${hostId}`);\n }\n return spreadsheetSheetId(`${u64Hex(namespace)}${u64Hex(counter)}`);\n}\n\nfunction projectedCellValue(value: SpreadsheetArtifactProjectedCellValue): FormulaResult {\n switch (value.kind) {\n case \"empty\":\n return null;\n case \"boolean\":\n case \"number\":\n case \"text\":\n return value.value;\n case \"date\":\n return new Date(value.value);\n case \"error\": {\n if (typeof value.value === \"object\") return value.value.custom;\n const errors: Readonly<Record<string, string>> = {\n null: \"#NULL!\",\n divide_by_zero: \"#DIV/0!\",\n value: \"#VALUE!\",\n reference: \"#REF!\",\n name: \"#NAME?\",\n number: \"#NUM!\",\n not_available: \"#N/A\",\n spill: \"#SPILL!\",\n calculation: \"#CALC!\",\n };\n const projected = errors[value.value];\n if (!projected) throw new Error(`Unknown native formula error: ${value.value}`);\n return projected;\n }\n }\n throw new Error(\"Unknown native spreadsheet cell value\");\n}\n\nfunction estimateCommandBytes(command: SpreadsheetArtifactCommand): number {\n if (command.kind !== \"cells.set\") return 256;\n return 256 + estimateCellsBytes(command.cells);\n}\n\nfunction estimateCellsBytes(cells: readonly SpreadsheetCellInput[]): number {\n let bytes = cells.length * 16;\n for (const cell of cells) {\n if (typeof cell === \"string\") bytes += textEncoder.encode(cell).byteLength;\n else if (typeof cell === \"object\" && cell !== null) {\n if (\"formula\" in cell) bytes += textEncoder.encode(cell.formula).byteLength;\n else if (\"error\" in cell) bytes += textEncoder.encode(cell.error).byteLength;\n }\n }\n return bytes;\n}\n\nfunction isRange(value: unknown): value is RangeLike {\n if (typeof value !== \"object\" || value === null) return false;\n const worksheet = Reflect.get(value, \"worksheet\");\n const address = Reflect.get(value, \"address\");\n return (\n typeof worksheet === \"object\" &&\n worksheet !== null &&\n typeof Reflect.get(worksheet, \"id\") === \"string\" &&\n typeof address === \"object\" &&\n address !== null &&\n Number.isInteger(Reflect.get(address, \"row\")) &&\n Number.isInteger(Reflect.get(address, \"col\"))\n );\n}\n\nfunction isWorksheet(value: unknown): value is { id: string; name: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof Reflect.get(value, \"id\") === \"string\" &&\n typeof Reflect.get(value, \"name\") === \"string\" &&\n String(Reflect.get(value, \"id\")).startsWith(\"ws/\") &&\n typeof Reflect.get(value, \"getRangeByIndexes\") === \"function\"\n );\n}\n\nfunction u64Hex(value: bigint): string {\n if (value <= 0n || value > 0xffff_ffff_ffff_ffffn) {\n throw new RangeError(\"Artifact namespace must be a nonzero u64\");\n }\n return value.toString(16).padStart(16, \"0\");\n}\n","import type { FileBlob } from \"./file-blob\";\nimport {\n Document as ReferenceDocument,\n DocumentBlockCollection,\n DocumentCommentThread,\n DocumentComments,\n DocumentFile as ReferenceDocumentFile,\n DocumentParagraph,\n DocumentSection,\n DocumentSections,\n DocumentStory,\n DocumentTable,\n TrackedChanges,\n type DocumentCreateOptions,\n type SerializedDocument,\n type SerializedDocumentBlock,\n type DocumentTextStyle,\n} from \"./document\";\nimport { DOCUMENT_LOSS_PRESERVATION } from \"./document-docx-state\";\nimport { NativeDocumentSession, NativePresentationSession } from \"./native\";\nimport {\n Presentation as ReferencePresentation,\n PresentationChart,\n PresentationChartCollection,\n PresentationFile as ReferencePresentationFile,\n PresentationGroup,\n PresentationGroupCollection,\n PresentationImage,\n PresentationImageCollection,\n PresentationShape,\n PresentationShapeCollection,\n PresentationTable,\n PresentationTableCollection,\n PresentationText,\n Slide,\n SlideCollection,\n type PresentationCreateOptions,\n type PresentationElement,\n} from \"./presentation\";\nimport { presentationLossState, setPresentationLossState } from \"./presentation-pptx-state\";\nimport {\n CompositeArtifactState,\n requireCompositeState,\n type CompositeMutation,\n type CompositeReconciliation,\n type PreparedCompositeMutation,\n} from \"./production-composite\";\nimport {\n encodeDocumentIncrementalCommands,\n encodeDocumentProjectionCommands,\n encodePresentationIncrementalCommands,\n encodePresentationProjectionCommands,\n type DocumentProjectionTarget,\n} from \"./production-native-codecs\";\nimport {\n installSpreadsheetProjection,\n prepareSpreadsheetMutation,\n readSpreadsheetProperty,\n reconcileSpreadsheetProjection,\n} from \"./production-spreadsheet-native\";\nimport { ArtifactKernelRuntime, ArtifactRuntimeError } from \"./runtime\";\nimport {\n Workbook as ReferenceWorkbook,\n type SerializedWorkbook,\n type WorkbookOptions,\n} from \"./spreadsheet\";\nimport { SpreadsheetFile as ReferenceSpreadsheetFile } from \"./spreadsheet-file\";\nimport { LOSS_PRESERVATION } from \"./spreadsheet-xlsx-state\";\n\nexport {\n SPREADSHEET_RECALCULATION_LIMITS,\n SPREADSHEET_SNAPSHOT_LIMITS,\n ChartSeriesCollection,\n CommentThread,\n ConditionalFormattingCollection,\n DataValidationCollection,\n FreezePanes,\n ImageCollection,\n Range,\n RangeConditionalFormats,\n RangeFormat,\n RangeSparklines,\n ShapeCollection,\n SparklineGroup,\n SparklineGroupCollection,\n SpreadsheetChart,\n SpreadsheetChartSeries,\n SpreadsheetImage,\n SpreadsheetShape,\n Table,\n TableCollection,\n WorkbookComments,\n Worksheet,\n WorksheetCollection,\n validateSerializedWorkbook,\n} from \"./spreadsheet\";\nexport type {\n RangeSparklineConfig,\n RangeWritePayload,\n SerializedWorkbook,\n SparklineConfig,\n SpreadsheetRecalculationLimits,\n WorkbookChange,\n WorkbookOptions,\n} from \"./spreadsheet\";\nexport {\n DocumentBlockCollection,\n DocumentCommentThread,\n DocumentComments,\n DocumentPageBreak,\n DocumentParagraph,\n DocumentSection,\n DocumentSectionStories,\n DocumentSections,\n DocumentStory,\n DocumentTable,\n DocumentTextRun,\n TrackedChange,\n TrackedChanges,\n} from \"./document\";\nexport type {\n DocumentBlock,\n DocumentCreateOptions,\n DocumentPageGeometry,\n DocumentParagraphEdit,\n DocumentParagraphFormat,\n DocumentParagraphStyle,\n DocumentRenderOptions,\n DocumentStoryBlock,\n DocumentTableStyle,\n DocumentTextStyle,\n DocumentTextStylePatch,\n SerializedDocument,\n SerializedDocumentBlock,\n SerializedDocumentComment,\n SerializedDocumentSection,\n SerializedPageBreak,\n SerializedParagraph,\n SerializedStory,\n SerializedTable,\n SerializedTextRun,\n SerializedTrackedChange,\n} from \"./document\";\nexport {\n InvalidPresentationInputError,\n PresentationChart,\n PresentationChartCollection,\n PresentationChartSeries,\n PresentationChartSeriesCollection,\n PresentationGroup,\n PresentationGroupCollection,\n PresentationImage,\n PresentationImageCollection,\n PresentationLayout,\n PresentationLayoutCollection,\n PresentationMaster,\n PresentationMasterCollection,\n PresentationShape,\n PresentationShapeCollection,\n PresentationTable,\n PresentationTableCell,\n PresentationTableCollection,\n PresentationText,\n Slide,\n SlideCollection,\n SlidePlaceholderCollection,\n UnsupportedPresentationFeatureError,\n assertPresentationRenderPixelBudget,\n presentationColorValue,\n truncatePresentationText,\n} from \"./presentation\";\nexport type {\n PresentationChartConfig,\n PresentationChartSeriesConfig,\n PresentationChartType,\n PresentationCreateOptions,\n PresentationElement,\n PresentationExportOptions,\n PresentationFill,\n PresentationGroupChild,\n PresentationGroupChildConfig,\n PresentationGroupConfig,\n PresentationImageConfig,\n PresentationImageResolution,\n PresentationImageResolver,\n PresentationInspectOptions,\n PresentationInspectResult,\n PresentationLayoutConfig,\n PresentationLine,\n PresentationMasterConfig,\n PresentationPosition,\n PresentationRasterImageContentType,\n PresentationResolvedObject,\n PresentationShapeConfig,\n PresentationShapeGeometry,\n PresentationTableCellConfig,\n PresentationTableCellInput,\n PresentationTableConfig,\n PresentationTemplateElement,\n PresentationTextStyle,\n} from \"./presentation\";\nexport { SpreadsheetFidelityError, SpreadsheetSecurityError } from \"./spreadsheet-file\";\nexport type {\n SpreadsheetFidelityIssue,\n SpreadsheetLossPreservationEnvelope,\n SpreadsheetXlsxExportOptions,\n SpreadsheetXlsxImportLimits,\n SpreadsheetXlsxImportOptions,\n} from \"./spreadsheet-file\";\n\nexport type ArtifactBatchControls<Root> = Readonly<{\n /** One atomic host/native transaction; nested edits reconcile exactly once. */\n batch<Result>(callback: (artifact: Root) => Result): Result;\n /** Idempotently releases the owned exact native session. */\n dispose(): void;\n}>;\n\nexport type Workbook = ReferenceWorkbook & ArtifactBatchControls<ReferenceWorkbook>;\nexport type Document = ReferenceDocument & ArtifactBatchControls<ReferenceDocument>;\nexport type Presentation = ReferencePresentation & ArtifactBatchControls<ReferencePresentation>;\n\nexport type WorkbookFactory = Readonly<{\n prototype: ReferenceWorkbook;\n [Symbol.hasInstance](value: unknown): boolean;\n create(options?: WorkbookOptions): Workbook;\n fromCSV(csvText: string, options?: { sheetName?: string; delimiter?: string }): Promise<Workbook>;\n fromJSON(input: unknown): Workbook;\n}>;\n\nexport type DocumentFactory = Readonly<{\n prototype: ReferenceDocument;\n [Symbol.hasInstance](value: unknown): boolean;\n create(options?: DocumentCreateOptions): Document;\n fromJSON(input: unknown): Document;\n}>;\n\nexport type PresentationFactory = Readonly<{\n prototype: ReferencePresentation;\n [Symbol.hasInstance](value: unknown): boolean;\n create(options?: PresentationCreateOptions): Presentation;\n}>;\n\nlet configuredRuntime: ArtifactKernelRuntime | null = null;\n\n/**\n * Installs the one exact native runtime selected by host bootstrap. Runtime\n * replacement is deliberately forbidden: a process that needs another target\n * must use an isolated worker/process and configure it once.\n */\nexport function configureArtifactRuntime(runtime: ArtifactKernelRuntime): void {\n if (runtime.kind !== \"native\" || runtime.target === \"wasm-web\") {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n \"The synchronous artifact facade requires an exact native N-API runtime\",\n );\n }\n if (configuredRuntime && configuredRuntime !== runtime) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_INCOMPATIBLE\",\n \"A different artifact runtime is already configured in this process\",\n );\n }\n configuredRuntime = runtime;\n}\n\n/** Exact configured runtime, or null before the host bootstrap runs. */\nexport function getConfiguredArtifactRuntime(): ArtifactKernelRuntime | null {\n return configuredRuntime;\n}\n\nconst WorkbookFacade = createStaticFacade(ReferenceWorkbook, \"Workbook\", {\n create(options: WorkbookOptions = {}): Workbook {\n return attachWorkbook(ReferenceWorkbook.create(options), randomNamespace());\n },\n async fromCSV(\n csvText: string,\n options: { sheetName?: string; delimiter?: string } = {},\n ): Promise<Workbook> {\n return attachWorkbook(await ReferenceWorkbook.fromCSV(csvText, options), randomNamespace());\n },\n fromJSON(input: unknown): Workbook {\n return attachWorkbook(ReferenceWorkbook.fromJSON(input), randomNamespace());\n },\n});\n\nconst DocumentFacade = createStaticFacade(ReferenceDocument, \"Document\", {\n create(options: DocumentCreateOptions = {}): Document {\n const document = ReferenceDocument.create(options);\n return attachDocument(document, BigInt(`0x${document.idNamespace}`));\n },\n fromJSON(input: unknown): Document {\n const document = ReferenceDocument.fromJSON(input);\n return attachDocument(document, BigInt(`0x${document.idNamespace}`));\n },\n});\n\nconst PresentationFacade = createStaticFacade(ReferencePresentation, \"Presentation\", {\n create(options: PresentationCreateOptions = {}): Presentation {\n return attachPresentation(ReferencePresentation.create(options), randomNamespace());\n },\n});\n\n/** Skill-compatible factory; returned objects are exact native composites. */\nexport const Workbook = WorkbookFacade as unknown as WorkbookFactory;\n/** Skill-compatible factory; returned objects are exact native composites. */\nexport const Document = DocumentFacade as unknown as DocumentFactory;\n/** Skill-compatible factory; returned objects are exact native composites. */\nexport const Presentation = PresentationFacade as unknown as PresentationFactory;\n\n// eslint-disable-next-line typescript/no-extraneous-class -- stable skill facade.\nexport class SpreadsheetFile {\n static async importXlsx(\n ...args: Parameters<typeof ReferenceSpreadsheetFile.importXlsx>\n ): Promise<Workbook> {\n requireConfiguredRuntime();\n const workbook = await ReferenceSpreadsheetFile.importXlsx(...args);\n return attachWorkbook(workbook, randomNamespace());\n }\n\n static async exportXlsx(\n workbook: ReferenceWorkbook,\n options: Parameters<typeof ReferenceSpreadsheetFile.exportXlsx>[1] = {},\n ): Promise<FileBlob> {\n const raw = rawArtifact<ReferenceWorkbook>(workbook, \"spreadsheet\");\n return await ReferenceSpreadsheetFile.exportXlsx(raw, options);\n }\n\n static fidelityReport(\n workbook: ReferenceWorkbook,\n ): ReturnType<typeof ReferenceSpreadsheetFile.fidelityReport> {\n return ReferenceSpreadsheetFile.fidelityReport(rawArtifact(workbook, \"spreadsheet\"));\n }\n\n static lossPreservationEnvelope(\n workbook: ReferenceWorkbook,\n ): ReturnType<typeof ReferenceSpreadsheetFile.lossPreservationEnvelope> {\n return ReferenceSpreadsheetFile.lossPreservationEnvelope(rawArtifact(workbook, \"spreadsheet\"));\n }\n\n static async attachLossPreservationEnvelope(\n workbook: ReferenceWorkbook,\n envelope: Parameters<typeof ReferenceSpreadsheetFile.attachLossPreservationEnvelope>[1],\n options: Parameters<typeof ReferenceSpreadsheetFile.attachLossPreservationEnvelope>[2] = {},\n ): Promise<void> {\n const state = requireCompositeState(workbook, \"spreadsheet\");\n await state.mutate(\n () =>\n ReferenceSpreadsheetFile.attachLossPreservationEnvelope(\n state.rawRoot() as ReferenceWorkbook,\n envelope,\n options,\n ),\n { member: \"attachLossPreservationEnvelope\", owner: state.rawRoot() },\n );\n }\n}\n\n// eslint-disable-next-line typescript/no-extraneous-class -- stable skill facade.\nexport class DocumentFile {\n static async importDocx(\n ...args: Parameters<typeof ReferenceDocumentFile.importDocx>\n ): Promise<Document> {\n requireConfiguredRuntime();\n const document = await ReferenceDocumentFile.importDocx(...args);\n return attachDocument(document, BigInt(`0x${document.idNamespace}`));\n }\n\n static async exportDocx(document: ReferenceDocument): Promise<FileBlob> {\n return await ReferenceDocumentFile.exportDocx(rawArtifact(document, \"document\"));\n }\n}\n\n// eslint-disable-next-line typescript/no-extraneous-class -- stable skill facade.\nexport class PresentationFile {\n static async importPptx(\n ...args: Parameters<typeof ReferencePresentationFile.importPptx>\n ): Promise<Presentation> {\n requireConfiguredRuntime();\n const presentation = await ReferencePresentationFile.importPptx(...args);\n return attachPresentation(presentation, randomNamespace());\n }\n\n static async exportPptx(\n presentation: ReferencePresentation,\n options: Parameters<typeof ReferencePresentationFile.exportPptx>[1] = {},\n ): Promise<FileBlob> {\n return await ReferencePresentationFile.exportPptx(\n rawArtifact(presentation, \"presentation\"),\n options,\n );\n }\n\n static fidelityReport(\n presentation: ReferencePresentation,\n ): ReturnType<typeof ReferencePresentationFile.fidelityReport> {\n return ReferencePresentationFile.fidelityReport(rawArtifact(presentation, \"presentation\"));\n }\n\n static lossPreservationEnvelope(\n presentation: ReferencePresentation,\n ): ReturnType<typeof ReferencePresentationFile.lossPreservationEnvelope> {\n return ReferencePresentationFile.lossPreservationEnvelope(\n rawArtifact(presentation, \"presentation\"),\n );\n }\n}\n\nexport type ArtifactCompositeDiagnostics = Readonly<{\n version: 1;\n modality: \"spreadsheet\" | \"document\" | \"presentation\";\n namespace: string;\n runtimeTarget: string;\n runtimeBuildIdentity: string;\n nativeRevision: bigint;\n nativeStateHash: string;\n nativeSnapshot: Uint8Array;\n hostProjection: SerializedWorkbook | SerializedDocument | Record<string, unknown>;\n}>;\n\n/**\n * Point-in-time diagnostics only. This is deliberately not a persistence,\n * restore, or provenance envelope: presentation layout snapshots omit media\n * bytes and host capabilities, and the two projections are not cryptographically\n * bound. Durable state uses canonical collaboration snapshots plus the owned\n * format-loss envelope instead of pretending this view is restorable.\n */\nexport function getArtifactCompositeDiagnostics(\n artifact: ReferenceWorkbook | ReferenceDocument | ReferencePresentation,\n): ArtifactCompositeDiagnostics {\n const state = requireCompositeState(artifact);\n const root = state.rawRoot() as ReferenceWorkbook | ReferenceDocument | ReferencePresentation;\n const hostProjection =\n state.modality === \"presentation\"\n ? (root as ReferencePresentation).layoutSnapshot()\n : (root as ReferenceWorkbook | ReferenceDocument).toJSON();\n return Object.freeze({\n version: 1,\n modality: state.modality,\n namespace: u64Hex(state.namespace),\n runtimeTarget: state.native.target,\n runtimeBuildIdentity: state.native.buildIdentity,\n nativeRevision: state.native.revision(),\n nativeStateHash: state.native.stateHash(),\n nativeSnapshot: state.native.snapshot().slice(),\n hostProjection: structuredClone(hostProjection),\n });\n}\n\n/** Idempotently closes the exact native session owned by a facade artifact. */\nexport function disposeArtifact(\n artifact: ReferenceWorkbook | ReferenceDocument | ReferencePresentation,\n): void {\n requireCompositeState(artifact).dispose();\n}\n\nfunction attachWorkbook(workbook: ReferenceWorkbook, namespace: bigint): Workbook {\n const runtime = requireConfiguredRuntime();\n const reconcile = (root: ReferenceWorkbook) =>\n reconcileSpreadsheetProjection(root, runtime, namespace);\n const reconciliation = reconcile(workbook);\n const state = new CompositeArtifactState({\n modality: \"spreadsheet\",\n namespace,\n root: workbook,\n reconciliation,\n reconcile,\n prepareMutation: prepareSpreadsheetMutation,\n installProjection: installSpreadsheetProjection,\n readProperty: readSpreadsheetProperty,\n captureAuxiliary: captureSpreadsheetAuxiliary,\n restoreAuxiliary: restoreSpreadsheetAuxiliary,\n });\n return state.proxy() as Workbook;\n}\n\nfunction attachDocument(document: ReferenceDocument, namespace: bigint): Document {\n const runtime = requireConfiguredRuntime();\n const reconcile = (root: ReferenceDocument) =>\n reconcileDocumentProjection(root, runtime, namespace);\n const reconciliation = reconcile(document);\n const state = new CompositeArtifactState({\n modality: \"document\",\n namespace,\n root: document,\n reconciliation,\n reconcile,\n prepareMutation: prepareDocumentMutation,\n captureAuxiliary: captureDocumentAuxiliary,\n restoreAuxiliary: restoreDocumentAuxiliary,\n });\n return state.proxy() as Document;\n}\n\nfunction attachPresentation(presentation: ReferencePresentation, namespace: bigint): Presentation {\n const runtime = requireConfiguredRuntime();\n const reconcile = (root: ReferencePresentation) =>\n reconcilePresentationProjection(root, runtime, namespace);\n const reconciliation = reconcile(presentation);\n const state = new CompositeArtifactState({\n modality: \"presentation\",\n namespace,\n root: presentation,\n reconciliation,\n reconcile,\n prepareMutation: preparePresentationMutation,\n captureAuxiliary: capturePresentationAuxiliary,\n restoreAuxiliary: restorePresentationAuxiliary,\n });\n return state.proxy() as Presentation;\n}\n\nfunction reconcileDocumentProjection(\n document: ReferenceDocument,\n runtime: ArtifactKernelRuntime,\n namespace: bigint,\n): CompositeReconciliation {\n const session = NativeDocumentSession.create(runtime, namespace);\n try {\n const commands = encodeDocumentProjectionCommands(document.toJSON());\n if (envelopeCommandCount(commands) > 0) session.applyCommands(commands);\n return { session };\n } catch (cause) {\n session.dispose();\n throw cause;\n }\n}\n\nfunction prepareDocumentMutation(\n mutation: CompositeMutation,\n state: CompositeArtifactState<ReferenceDocument>,\n): PreparedCompositeMutation | null {\n const root = state.rawRoot();\n const owner = mutation.owner;\n const member = mutation.member;\n\n if (owner instanceof DocumentBlockCollection || owner instanceof DocumentStory) {\n if (\n member === \"addParagraph\" ||\n member === \"addHeading\" ||\n member === \"addTable\" ||\n member === \"addPageBreak\"\n ) {\n const target =\n owner instanceof DocumentStory\n ? documentStoryTarget(root, owner)\n : { kind: \"body\" as const };\n return commitDocumentMutation(state, (result) => {\n if (!isSerializedDocumentBlock(result)) {\n throw new Error(`${String(member)} did not return a document block`);\n }\n return [{ kind: \"block.add\", target, block: result.serialize() }];\n });\n }\n }\n\n if (owner instanceof DocumentParagraph) {\n if (member === \"setStyle\") {\n const style = mutation.arguments?.[0] as Parameters<DocumentParagraph[\"setStyle\"]>[0];\n return commitDocumentMutation(state, () => [\n { kind: \"paragraph.style\", id: owner.id, style },\n ]);\n }\n if (member === \"format\") {\n const format = mutation.arguments?.[0] as Parameters<DocumentParagraph[\"format\"]>[0];\n return commitDocumentMutation(state, () => [\n { kind: \"paragraph.format\", id: owner.id, format },\n ]);\n }\n if (member === \"edit\") {\n const edit = documentParagraphEdit(mutation.arguments ?? []);\n if (!edit) return null;\n return commitDocumentMutation(state, () => [\n { kind: \"paragraph.edit\", id: owner.id, ...edit },\n ]);\n }\n if (member === \"append\") {\n const text = mutation.arguments?.[0];\n const style = mutation.arguments?.[1] ?? {};\n if (typeof text !== \"string\" || typeof style !== \"object\" || style === null) return null;\n const start = owner.text.length;\n return commitDocumentMutation(state, () => [\n {\n kind: \"paragraph.edit\",\n id: owner.id,\n start,\n end: start,\n text,\n style: style as DocumentTextStyle,\n },\n ]);\n }\n if (member === \"text\") {\n const before = owner.text;\n return commitDocumentMutation(state, () => {\n const edit = minimalDocumentTextEdit(before, owner.text);\n return edit ? [{ kind: \"paragraph.edit\", id: owner.id, ...edit }] : [];\n });\n }\n if (member === \"replace\") {\n const search = mutation.arguments?.[0];\n const before = owner.text;\n if (\n typeof search !== \"string\" ||\n search.length === 0 ||\n before.indexOf(search) !== before.lastIndexOf(search)\n ) {\n return null;\n }\n return commitDocumentMutation(state, () => {\n const edit = minimalDocumentTextEdit(before, owner.text);\n return edit ? [{ kind: \"paragraph.edit\", id: owner.id, ...edit }] : [];\n });\n }\n }\n\n if (owner instanceof DocumentTable && member === \"setStyle\") {\n const style = mutation.arguments?.[0] as Parameters<DocumentTable[\"setStyle\"]>[0];\n return commitDocumentMutation(state, () => [{ kind: \"table.style\", id: owner.id, style }]);\n }\n if (owner === root && (member === \"setEvenAndOddHeaders\" || member === \"setTrackRevisions\")) {\n const enabled = mutation.arguments?.[0];\n if (typeof enabled !== \"boolean\") return null;\n return commitDocumentMutation(state, () => [\n {\n kind: \"document.flags\",\n ...(member === \"setEvenAndOddHeaders\"\n ? { evenAndOddHeaders: enabled }\n : { trackRevisions: enabled }),\n },\n ]);\n }\n if (owner instanceof DocumentSections && member === \"add\") {\n return commitDocumentMutation(state, (result) => {\n if (!(result instanceof DocumentSection))\n throw new Error(\"Section add did not return a section\");\n return [{ kind: \"section.add\", section: result.serialize() }];\n });\n }\n if (owner instanceof DocumentSection && member === \"setTitlePage\") {\n const enabled = mutation.arguments?.[0];\n if (typeof enabled !== \"boolean\") return null;\n return commitDocumentMutation(state, () => [\n { kind: \"section.title\", id: owner.id, titlePage: enabled },\n ]);\n }\n if (owner instanceof DocumentComments) {\n if (member === \"setSelf\") return { commit: () => false };\n if (member === \"addThread\") {\n return commitDocumentMutation(state, (result) => {\n if (!(result instanceof DocumentCommentThread))\n throw new Error(\"Comment add did not return a thread\");\n return [{ kind: \"comment.add\", comment: result.serialize() }];\n });\n }\n }\n if (owner instanceof DocumentCommentThread) {\n if (member === \"addReply\") {\n const before = owner.replies.length;\n return commitDocumentMutation(state, () => {\n const reply = owner.serialize().replies[before];\n return reply ? [{ kind: \"comment.reply\", id: owner.id, reply }] : [];\n });\n }\n if (member === \"resolve\" || member === \"reopen\") {\n const before = owner.resolved;\n return commitDocumentMutation(state, () =>\n before === owner.resolved\n ? []\n : [{ kind: \"comment.resolved\", id: owner.id, resolved: owner.resolved }],\n );\n }\n }\n if (owner instanceof TrackedChanges && member === \"add\") {\n return commitDocumentMutation(state, (result) => {\n if (\n !result ||\n typeof result !== \"object\" ||\n typeof Reflect.get(result, \"serialize\") !== \"function\"\n ) {\n throw new Error(\"Tracked-change add did not return a change\");\n }\n return [\n {\n kind: \"tracked.add\",\n change: (\n Reflect.get(result, \"serialize\") as () => ReturnType<\n ReferenceDocument[\"toJSON\"]\n >[\"changes\"][number]\n ).call(result),\n },\n ];\n });\n }\n return null;\n}\n\nfunction commitDocumentMutation(\n state: CompositeArtifactState<ReferenceDocument>,\n commands: (result: unknown) => Parameters<typeof encodeDocumentIncrementalCommands>[0],\n): PreparedCompositeMutation {\n return {\n commit(result) {\n const batch = commands(result);\n if (batch.length === 0) return false;\n const session = state.native;\n if (!(session instanceof NativeDocumentSession))\n throw new TypeError(\"Expected native document session\");\n const before = session.revision();\n session.applyCommands(encodeDocumentIncrementalCommands(batch));\n return session.revision() > before;\n },\n };\n}\n\nfunction documentStoryTarget(\n document: ReferenceDocument,\n story: DocumentStory,\n): DocumentProjectionTarget {\n for (const section of document.sections.items) {\n for (const storyKind of [\"header\", \"footer\"] as const) {\n const collection = storyKind === \"header\" ? section.headers : section.footers;\n for (const variant of [\"default\", \"first\", \"even\"] as const) {\n if (collection[variant] === story)\n return { kind: \"story\", sectionId: section.id, storyKind, variant };\n }\n }\n }\n throw new Error(`Document story is not attached: ${story.id}`);\n}\n\nfunction isSerializedDocumentBlock(value: unknown): value is {\n serialize(): SerializedDocumentBlock;\n} {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof Reflect.get(value, \"serialize\") === \"function\"\n );\n}\n\nfunction documentParagraphEdit(\n args: readonly unknown[],\n): { start: number; end: number; text: string; style?: DocumentTextStyle } | null {\n if (typeof args[0] === \"number\") {\n if (typeof args[1] !== \"number\" || typeof args[2] !== \"string\") return null;\n return {\n start: args[0],\n end: args[1],\n text: args[2],\n ...(args[3] && typeof args[3] === \"object\" ? { style: args[3] as DocumentTextStyle } : {}),\n };\n }\n const edit = args[0] as\n | { start?: unknown; end?: unknown; text?: unknown; style?: unknown }\n | undefined;\n if (\n !edit ||\n typeof edit.start !== \"number\" ||\n typeof edit.end !== \"number\" ||\n typeof edit.text !== \"string\"\n ) {\n return null;\n }\n return {\n start: edit.start,\n end: edit.end,\n text: edit.text,\n ...(edit.style && typeof edit.style === \"object\"\n ? { style: edit.style as DocumentTextStyle }\n : {}),\n };\n}\n\nfunction minimalDocumentTextEdit(\n before: string,\n after: string,\n): { start: number; end: number; text: string } | null {\n if (before === after) return null;\n let start = 0;\n while (start < before.length && start < after.length && before[start] === after[start])\n start += 1;\n let beforeEnd = before.length;\n let afterEnd = after.length;\n while (beforeEnd > start && afterEnd > start && before[beforeEnd - 1] === after[afterEnd - 1]) {\n beforeEnd -= 1;\n afterEnd -= 1;\n }\n return { start, end: beforeEnd, text: after.slice(start, afterEnd) };\n}\n\nfunction reconcilePresentationProjection(\n presentation: ReferencePresentation,\n runtime: ArtifactKernelRuntime,\n namespace: bigint,\n): CompositeReconciliation {\n const session = NativePresentationSession.create(runtime, namespace);\n try {\n const commands = encodePresentationProjectionCommands(presentation, namespace);\n if (envelopeCommandCount(commands) > 0) session.applyCommands(commands);\n return { session };\n } catch (cause) {\n session.dispose();\n throw cause;\n }\n}\n\nfunction preparePresentationMutation(\n mutation: CompositeMutation,\n state: CompositeArtifactState<ReferencePresentation>,\n): PreparedCompositeMutation | null {\n const root = state.rawRoot();\n const owner = mutation.owner;\n const member = mutation.member;\n\n if (owner instanceof SlideCollection && member === \"add\") {\n const index = root.slides.items.length;\n return commitPresentationMutation(state, (result) => {\n if (!(result instanceof Slide)) throw new Error(\"Slide add did not return a slide\");\n return [{ kind: \"slide.create\", slide: result, index }];\n });\n }\n\n if (\n (owner instanceof PresentationShapeCollection ||\n owner instanceof PresentationChartCollection ||\n owner instanceof PresentationImageCollection ||\n owner instanceof PresentationTableCollection ||\n owner instanceof PresentationGroupCollection) &&\n member === \"add\"\n ) {\n return commitPresentationMutation(state, (result) => {\n if (!isPresentationElement(result))\n throw new Error(\"Presentation add did not return an element\");\n const index = result.slide.elements.indexOf(result);\n if (index < 0) throw new Error(\"Presentation element was not attached to its slide\");\n return [{ kind: \"node.insert\", slideId: result.slide.id, index, element: result }];\n });\n }\n\n if (owner instanceof Slide) {\n if (member === \"title\") {\n return commitPresentationMutation(state, () => [\n { kind: \"slide.title\", id: owner.id, title: owner.title },\n ]);\n }\n if (member === \"setLayout\") {\n return commitPresentationMutation(state, () => [\n {\n kind: \"slide.layout\",\n id: owner.id,\n ...(owner.layout ? { layoutId: owner.layout.id } : {}),\n },\n ]);\n }\n }\n\n if (owner === root.slideSize && (member === \"width\" || member === \"height\")) {\n return commitPresentationMutation(state, () => [\n {\n kind: \"presentation.size\",\n width: root.slideSize.width,\n height: root.slideSize.height,\n },\n ]);\n }\n\n if (owner instanceof PresentationText) {\n const target = findPresentationTextOwner(root, owner);\n if (!target) return null;\n return commitPresentationMutation(state, () =>\n target.kind === \"notes\"\n ? [{ kind: \"slide.notes\", id: target.slide.id, notes: owner }]\n : [{ kind: \"node.update\", element: target.element }],\n );\n }\n\n if (isPresentationElement(owner)) {\n return commitPresentationMutation(state, () => [{ kind: \"node.update\", element: owner }]);\n }\n return null;\n}\n\nfunction commitPresentationMutation(\n state: CompositeArtifactState<ReferencePresentation>,\n commands: (result: unknown) => Parameters<typeof encodePresentationIncrementalCommands>[0],\n): PreparedCompositeMutation {\n return {\n commit(result) {\n const batch = commands(result);\n if (batch.length === 0) return false;\n const session = state.native;\n if (!(session instanceof NativePresentationSession)) {\n throw new TypeError(\"Expected native presentation session\");\n }\n const before = session.revision();\n session.applyCommands(encodePresentationIncrementalCommands(batch, state.namespace));\n return session.revision() > before;\n },\n };\n}\n\nfunction isPresentationElement(value: unknown): value is PresentationElement {\n return (\n value instanceof PresentationShape ||\n value instanceof PresentationChart ||\n value instanceof PresentationImage ||\n value instanceof PresentationTable ||\n value instanceof PresentationGroup\n );\n}\n\nfunction findPresentationTextOwner(\n presentation: ReferencePresentation,\n text: PresentationText,\n): { kind: \"notes\"; slide: Slide } | { kind: \"node\"; element: PresentationElement } | null {\n const visit = (element: PresentationElement): PresentationElement | null => {\n if (element instanceof PresentationShape && element.text === text) return element;\n if (element instanceof PresentationGroup) {\n for (const child of element.children) {\n const match = visit(child);\n if (match) return match;\n }\n }\n if (element instanceof PresentationTable) {\n if (element.rows.some((row) => row.some((cell) => cell?.text === text))) return element;\n }\n return null;\n };\n for (const slide of presentation.slides.items) {\n if (slide.notes === text) return { kind: \"notes\", slide };\n for (const element of slide.elements) {\n const match = visit(element);\n if (match) return { kind: \"node\", element: match };\n }\n }\n return null;\n}\n\nfunction captureSpreadsheetAuxiliary(workbook: ReferenceWorkbook): unknown {\n const value = LOSS_PRESERVATION.get(workbook);\n return value ? structuredClone(value) : undefined;\n}\n\nfunction restoreSpreadsheetAuxiliary(workbook: ReferenceWorkbook, value: unknown): void {\n if (value)\n LOSS_PRESERVATION.set(workbook, value as NonNullable<ReturnType<typeof LOSS_PRESERVATION.get>>);\n}\n\nfunction captureDocumentAuxiliary(document: ReferenceDocument): unknown {\n const value = DOCUMENT_LOSS_PRESERVATION.get(document);\n return value ? structuredClone(value) : undefined;\n}\n\nfunction restoreDocumentAuxiliary(document: ReferenceDocument, value: unknown): void {\n if (value) {\n DOCUMENT_LOSS_PRESERVATION.set(\n document,\n value as NonNullable<ReturnType<typeof DOCUMENT_LOSS_PRESERVATION.get>>,\n );\n }\n}\n\nfunction capturePresentationAuxiliary(presentation: ReferencePresentation): unknown {\n const value = presentationLossState(presentation);\n return value ? structuredClone(value) : undefined;\n}\n\nfunction restorePresentationAuxiliary(presentation: ReferencePresentation, value: unknown): void {\n setPresentationLossState(presentation, value as ReturnType<typeof presentationLossState>);\n}\n\nfunction rawArtifact<Root extends object>(\n artifact: Root,\n modality: \"spreadsheet\" | \"document\" | \"presentation\",\n): Root {\n return requireCompositeState(artifact, modality).rawRoot() as Root;\n}\n\nfunction createStaticFacade<Constructor extends Function>(\n reference: Constructor,\n name: string,\n statics: Readonly<Record<string, (...args: never[]) => unknown>>,\n): Constructor {\n const facade = function ArtifactFacade(): never {\n throw new TypeError(`${name} cannot be constructed directly; use ${name}.create()`);\n };\n Object.setPrototypeOf(facade, reference);\n Object.defineProperty(facade, \"name\", { configurable: true, value: name });\n Object.defineProperty(facade, \"prototype\", { value: reference.prototype });\n for (const [key, value] of Object.entries(statics)) {\n Object.defineProperty(facade, key, { configurable: false, enumerable: false, value });\n }\n return facade as unknown as Constructor;\n}\n\nfunction requireConfiguredRuntime(): ArtifactKernelRuntime {\n if (!configuredRuntime) {\n throw new ArtifactRuntimeError(\n \"ARTIFACT_RUNTIME_UNAVAILABLE\",\n \"No exact artifact runtime is configured; host bootstrap must call configureArtifactRuntime()\",\n );\n }\n return configuredRuntime;\n}\n\nfunction envelopeCommandCount(bytes: Uint8Array): number {\n if (bytes.byteLength < 16) throw new TypeError(\"Native command envelope is truncated\");\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(12, true);\n}\n\nfunction randomNamespace(): bigint {\n const words = crypto.getRandomValues(new Uint32Array(2));\n const namespace = (BigInt(words[0]!) << 32n) | BigInt(words[1]!);\n return namespace === 0n ? randomNamespace() : namespace;\n}\n\nfunction u64Hex(value: bigint): string {\n if (value <= 0n || value > 0xffff_ffff_ffff_ffffn) {\n throw new RangeError(\"Artifact namespace must be a nonzero u64\");\n }\n return value.toString(16).padStart(16, \"0\");\n}\n"],"mappings":"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","names":["textEncoder","generation","Workbook","Document","Presentation","SpreadsheetFile","envelope","DocumentFile","PresentationFile","u64Hex"]}
@@ -393,7 +393,11 @@ var FormulaParser = class {
393
393
  if (this.isOperator("^")) {
394
394
  this.consume();
395
395
  const right = this.withNesting(() => this.power());
396
- left = calculate(left, right, (a, b) => finiteNumber(Math.pow(numeric(a), numeric(b))));
396
+ left = calculate(
397
+ left,
398
+ right,
399
+ (a, b) => finiteNumber(deterministicIntegerPower(numeric(a), numeric(b)))
400
+ );
397
401
  }
398
402
  return left;
399
403
  }
@@ -814,24 +818,24 @@ function callFunction(name, args, budget) {
814
818
  return Math.abs(numeric(args[0] ?? 0));
815
819
  case "ROUND": {
816
820
  const digits = numeric(args[1] ?? 0);
817
- const factor = 10 ** digits;
821
+ const factor = deterministicIntegerPower(10, digits);
818
822
  const value = numeric(args[0] ?? 0) * factor;
819
823
  return Math.sign(value) * Math.round(Math.abs(value)) / factor;
820
824
  }
821
825
  case "ROUNDUP": {
822
826
  const digits = numeric(args[1] ?? 0);
823
- const factor = 10 ** digits;
827
+ const factor = deterministicIntegerPower(10, digits);
824
828
  const value = numeric(args[0] ?? 0) * factor;
825
829
  return Math.sign(value) * Math.ceil(Math.abs(value)) / factor;
826
830
  }
827
831
  case "ROUNDDOWN": {
828
832
  const digits = numeric(args[1] ?? 0);
829
- const factor = 10 ** digits;
833
+ const factor = deterministicIntegerPower(10, digits);
830
834
  const value = numeric(args[0] ?? 0) * factor;
831
835
  return Math.sign(value) * Math.floor(Math.abs(value)) / factor;
832
836
  }
833
837
  case "POWER":
834
- return finiteNumber(Math.pow(numeric(args[0] ?? 0), numeric(args[1] ?? 0)));
838
+ return finiteNumber(deterministicIntegerPower(numeric(args[0] ?? 0), numeric(args[1] ?? 0)));
835
839
  case "SQRT": {
836
840
  const value = numeric(args[0] ?? 0);
837
841
  if (value < 0) throw new FormulaFault("#NUM!");
@@ -903,7 +907,22 @@ function dateValue(value) {
903
907
  }
904
908
  function finiteNumber(value) {
905
909
  if (!Number.isFinite(value)) throw new FormulaFault("#NUM!");
906
- return value;
910
+ return value === 0 ? 0 : value;
911
+ }
912
+ function deterministicIntegerPower(base, exponent) {
913
+ if (Number.isFinite(exponent) && Number.isInteger(exponent) && Math.abs(exponent) <= Number.MAX_SAFE_INTEGER) {
914
+ const reciprocal = exponent < 0;
915
+ let remaining = Math.abs(exponent);
916
+ let factor = reciprocal ? 1 / base : base;
917
+ let result = 1;
918
+ while (remaining !== 0) {
919
+ if (remaining % 2 === 1) result *= factor;
920
+ remaining = Math.floor(remaining / 2);
921
+ if (remaining !== 0) factor *= factor;
922
+ }
923
+ return result;
924
+ }
925
+ return Math.pow(base, exponent);
907
926
  }
908
927
  function boundedText(value, maximum) {
909
928
  if (value.length > maximum) {
@@ -913,7 +932,10 @@ function boundedText(value, maximum) {
913
932
  }
914
933
  function boundedScalar(value, maximum) {
915
934
  if (typeof value === "string") return boundedText(value, maximum);
916
- if (typeof value === "number" && !Number.isFinite(value)) throw new FormulaFault("#NUM!");
935
+ if (typeof value === "number") {
936
+ if (!Number.isFinite(value)) throw new FormulaFault("#NUM!");
937
+ return value === 0 ? 0 : value;
938
+ }
917
939
  return value;
918
940
  }
919
941
  function boundEvaluated(value, maximum) {
@@ -5303,4 +5325,4 @@ export {
5303
5325
  WorkbookComments,
5304
5326
  CommentThread
5305
5327
  };
5306
- //# sourceMappingURL=chunk-XT2EJFCU.js.map
5328
+ //# sourceMappingURL=chunk-SYFNJGH5.js.map