@opengeni/artifact-tool 0.2.10 → 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
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  loadConfiguredArtifactKernelRuntime
3
- } from "./chunk-U5G2BKM2.js";
3
+ } from "./chunk-LMLPFF3S.js";
4
4
  import {
5
5
  NativeSpreadsheetSession
6
- } from "./chunk-B2ZJRZDA.js";
6
+ } from "./chunk-LVPFJH2Z.js";
7
7
  import {
8
8
  SpreadsheetXlsxCodec
9
- } from "./chunk-QZI5POCC.js";
9
+ } from "./chunk-OVXX4G35.js";
10
10
  import {
11
11
  Workbook
12
- } from "./chunk-XT2EJFCU.js";
12
+ } from "./chunk-SYFNJGH5.js";
13
13
 
14
14
  // src/materializer-cli.ts
15
15
  import { createHash } from "crypto";
@@ -22,6 +22,11 @@ import {
22
22
  encodeSpreadsheetMetadataKernelQuery,
23
23
  encodeSpreadsheetViewportKernelQuery
24
24
  } from "@opengeni/contracts/editable-artifacts";
25
+ import {
26
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION,
27
+ SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
28
+ SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION
29
+ } from "@opengeni/contracts/editable-artifact-versions";
25
30
  var IDENTITY_ARGUMENT = "--opengeni-materializer-identity-v1";
26
31
  var MATERIALIZE_ARGUMENT = "--opengeni-materialize-v1";
27
32
  var VERIFY_ARGUMENT = "--opengeni-verify-materialization-v1";
@@ -353,13 +358,19 @@ function editableArtifactMaterializerCapabilitiesForRuntime(runtime, packageVers
353
358
  fontRegistryHash: EMPTY_FONT_REGISTRY_HASH,
354
359
  policyHash: POLICY_HASH,
355
360
  maxOutputBytes: MAX_OUTPUT_BYTES,
356
- supportedModelSchemaVersions: Object.freeze([1]),
357
- supportedOperationProtocolVersions: Object.freeze([1]),
358
- supportedSnapshotProtocolVersions: Object.freeze([1])
361
+ supportedModelSchemaVersions: Object.freeze([
362
+ SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION
363
+ ]),
364
+ supportedOperationProtocolVersions: Object.freeze([
365
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION
366
+ ]),
367
+ supportedSnapshotProtocolVersions: Object.freeze([
368
+ SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION
369
+ ])
359
370
  });
360
371
  }
361
372
  function assertManifestCompatibility(manifest, capabilities) {
362
- if (manifest.modelSchemaVersion !== 1 || manifest.operationProtocolVersion !== 1 || manifest.snapshotProtocolVersion !== 1 || manifest.kernelVersion !== capabilities.kernelVersion || manifest.codecVersion !== capabilities.codecVersions[manifest.codecId] || manifest.fontRegistryHash !== capabilities.fontRegistryHash || manifest.policyHash !== capabilities.policyHash || Object.keys(manifest.normalizedOptions).length !== 0) {
373
+ if (manifest.modelSchemaVersion !== SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION || manifest.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION || manifest.snapshotProtocolVersion !== SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION || manifest.kernelVersion !== capabilities.kernelVersion || manifest.codecVersion !== capabilities.codecVersions[manifest.codecId] || manifest.fontRegistryHash !== capabilities.fontRegistryHash || manifest.policyHash !== capabilities.policyHash || Object.keys(manifest.normalizedOptions).length !== 0) {
363
374
  throw incompatible();
364
375
  }
365
376
  }
@@ -546,4 +557,4 @@ export {
546
557
  runArtifactMaterializerCli,
547
558
  editableArtifactMaterializerCapabilitiesForRuntime
548
559
  };
549
- //# sourceMappingURL=chunk-RU5G3HNF.js.map
560
+ //# sourceMappingURL=chunk-XAZTHG6W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/materializer-cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { createHash } from \"node:crypto\";\nimport { once } from \"node:events\";\n\nimport {\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,\n decodeSpreadsheetMetadataKernelProjection,\n decodeSpreadsheetViewportKernelProjection,\n encodeSpreadsheetMetadataKernelQuery,\n encodeSpreadsheetViewportKernelQuery,\n type SpreadsheetArtifactProjectedCellValue,\n type SpreadsheetArtifactFormulaError,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n} from \"@opengeni/contracts/editable-artifact-versions\";\n\nimport { NativeSpreadsheetSession } from \"./native\";\nimport { SpreadsheetXlsxCodec } from \"./spreadsheet-xlsx-codec\";\nimport { Workbook, type SerializedWorkbook } from \"./spreadsheet\";\nimport { loadConfiguredArtifactKernelRuntime } from \"./runtime-development\";\nimport type { ArtifactKernelRuntime } from \"./runtime\";\n\nconst IDENTITY_ARGUMENT = \"--opengeni-materializer-identity-v1\";\nconst MATERIALIZE_ARGUMENT = \"--opengeni-materialize-v1\";\nconst VERIFY_ARGUMENT = \"--opengeni-verify-materialization-v1\";\nconst INPUT_MAGIC = bytes(\"OGAMI001\");\nconst VERIFY_INPUT_MAGIC = bytes(\"OGAVI001\");\nconst OUTPUT_MAGIC = bytes(\"OGAMO001\");\nconst VERIFY_OUTPUT_MAGIC = bytes(\"OGAVO001\");\nconst ERROR_MAGIC = bytes(\"OGAME001\");\nconst MAX_METADATA_BYTES = 256 * 1024;\nconst MAX_SOURCE_BYTES = 512 * 1024 * 1024;\nconst MAX_OUTPUT_BYTES = 512 * 1024 * 1024;\nconst MAX_PROJECTED_RECTANGLE_CELLS = 1_000_000;\nconst VIEWPORT_EDGE = 128;\nconst XLSX_CODEC_ID = \"opengeni.xlsx\";\nconst EMPTY_FONT_REGISTRY_HASH = sha256(bytes(\"opengeni:no-font-registry:v1\"));\nconst POLICY_HASH = sha256(bytes(\"opengeni:materializer:xlsx-native-projection:v1\"));\n\nexport type EditableArtifactNativeMaterializerCapabilities = Readonly<{\n protocol: \"OGAMC001\";\n runtimeKind: \"native\";\n runtimeTarget: string;\n kernelVersion: string;\n codecVersions: Readonly<Record<typeof XLSX_CODEC_ID, string>>;\n fontRegistryHash: string;\n policyHash: string;\n maxOutputBytes: number;\n supportedModelSchemaVersions: readonly [typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION];\n supportedOperationProtocolVersions: readonly [typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION];\n supportedSnapshotProtocolVersions: readonly [typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION];\n}>;\n\ntype MaterializationManifest = Readonly<{\n protocol: \"OGAMJ001\";\n artifactId: string;\n jobId: string;\n versionId: string;\n modality: \"spreadsheet\" | \"document\" | \"presentation\";\n inputSnapshotId: string;\n targetHeadSequence: number;\n stateHash: string;\n sourceByteSize: number;\n sourceContentHash: string;\n modelSchemaVersion: number;\n operationProtocolVersion: number;\n snapshotProtocolVersion: number;\n format: \"xlsx\" | \"pptx\" | \"docx\" | \"pdf\" | \"png\" | \"webp\";\n codecId: string;\n normalizedOptions: Readonly<Record<string, never>>;\n optionsHash: string;\n codecVersion: string;\n kernelVersion: string;\n fontRegistryHash: string;\n policyHash: string;\n}>;\n\ntype SemanticCell = Readonly<{\n row: number;\n column: number;\n formula: string | null;\n value: SpreadsheetArtifactProjectedCellValue;\n}>;\n\ntype SemanticWorkbook = Readonly<{\n version: 1;\n sheets: readonly Readonly<{ name: string; cells: readonly SemanticCell[] }>[];\n}>;\n\ntype ProjectedWorkbook = Readonly<{\n workbook: Workbook;\n semanticHash: string;\n}>;\n\ntype NativeSourceDiagnosticSubcode = \"input_framing\" | \"snapshot_open\" | \"state_mismatch\";\n\nexport async function runArtifactMaterializerCli(\n args: readonly string[],\n environment: Readonly<Record<string, string | undefined>> = process.env,\n): Promise<void> {\n if (args.length !== 1) throw new Error(\"unsupported materializer command\");\n const command = args[0];\n if (command === IDENTITY_ARGUMENT) {\n const capabilities = await loadCapabilities(environment);\n process.stdout.write(JSON.stringify(capabilities));\n return;\n }\n if (command === MATERIALIZE_ARGUMENT) {\n try {\n await materialize(environment);\n } catch (error) {\n if (!(error instanceof MaterializerCliError)) throw error;\n await writeTypedError(error.code, error.diagnosticSubcode);\n }\n return;\n }\n if (command === VERIFY_ARGUMENT) {\n try {\n await verifyMaterialization(environment);\n } catch (error) {\n if (!(error instanceof MaterializerCliError)) throw error;\n await writeTypedError(error.code, error.diagnosticSubcode);\n }\n return;\n }\n throw new Error(\"unsupported materializer command\");\n}\n\nasync function loadCapabilities(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<EditableArtifactNativeMaterializerCapabilities> {\n const loaded = await loadRuntime(environment);\n return editableArtifactMaterializerCapabilitiesForRuntime(\n loaded.runtime,\n loaded.location.artifactTool.packageVersion,\n );\n}\n\nasync function materialize(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<void> {\n let manifest: MaterializationManifest;\n let source: Uint8Array;\n try {\n const reader = new InputReader(process.stdin);\n assertBytes(await reader.readExactly(INPUT_MAGIC.byteLength), INPUT_MAGIC, \"input protocol\");\n const header = await reader.readExactly(12);\n const headerView = new DataView(header.buffer, header.byteOffset, header.byteLength);\n const metadataLength = headerView.getUint32(0, true);\n const sourceLength = safeU64(headerView, 4, \"source length\");\n if (metadataLength < 2 || metadataLength > MAX_METADATA_BYTES) throw invalidSource();\n if (sourceLength <= 0 || sourceLength > MAX_SOURCE_BYTES) throw unsupported();\n manifest = decodeManifest(await reader.readExactly(metadataLength));\n if (sourceLength !== manifest.sourceByteSize) throw invalidSource();\n source = await reader.readExactly(sourceLength);\n await reader.assertEof();\n if (sha256(source) !== manifest.sourceContentHash) throw invalidSource();\n } catch (error) {\n throw classifyInvalidSource(error, \"input_framing\");\n }\n\n const loaded = await loadRuntime(environment);\n const capabilities = editableArtifactMaterializerCapabilitiesForRuntime(\n loaded.runtime,\n loaded.location.artifactTool.packageVersion,\n );\n assertManifestCompatibility(manifest, capabilities);\n if (manifest.modality !== \"spreadsheet\" || manifest.format !== \"xlsx\") throw unsupported();\n\n const projected = projectSpreadsheet(loaded.runtime, source, manifest);\n const outputBlob = await SpreadsheetXlsxCodec.exportXlsx(projected.workbook, {\n unsupportedContent: \"error\",\n fileName: \"workbook.xlsx\",\n });\n const output = new Uint8Array(await outputBlob.arrayBuffer());\n if (output.byteLength <= 0 || output.byteLength > MAX_OUTPUT_BYTES) throw unsupported();\n // Export/import equivalence is checked here for early failure and again by a\n // distinct verifier process after immutable object publication.\n const imported = await SpreadsheetXlsxCodec.importXlsx(output, { unsupportedContent: \"error\" });\n if (semanticHashForWorkbook(imported) !== projected.semanticHash) throw unsupported();\n\n const metadata = canonicalBytes({\n byteSize: output.byteLength,\n codecId: manifest.codecId,\n codecVersion: manifest.codecVersion,\n contentHash: sha256(output),\n fontRegistryHash: manifest.fontRegistryHash,\n format: manifest.format,\n headSequence: manifest.targetHeadSequence,\n kernelVersion: manifest.kernelVersion,\n mimeType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n policyHash: manifest.policyHash,\n protocol: \"OGAMR001\",\n semanticHash: projected.semanticHash,\n stateHash: manifest.stateHash,\n });\n await writeFrame(OUTPUT_MAGIC, metadata, output);\n}\n\nasync function verifyMaterialization(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<void> {\n const reader = new InputReader(process.stdin);\n assertBytes(\n await reader.readExactly(VERIFY_INPUT_MAGIC.byteLength),\n VERIFY_INPUT_MAGIC,\n \"verification protocol\",\n );\n const header = await reader.readExactly(12);\n const view = new DataView(header.buffer, header.byteOffset, header.byteLength);\n const metadataLength = view.getUint32(0, true);\n const outputLength = safeU64(view, 4, \"verification output length\");\n if (metadataLength < 2 || metadataLength > MAX_METADATA_BYTES) throw invalidSource();\n if (outputLength <= 0 || outputLength > MAX_OUTPUT_BYTES) throw unsupported();\n const metadata = decodeVerificationManifest(await reader.readExactly(metadataLength));\n const output = await reader.readExactly(outputLength);\n await reader.assertEof();\n const loaded = await loadCapabilities(environment);\n if (\n metadata.format !== \"xlsx\" ||\n metadata.codecId !== XLSX_CODEC_ID ||\n loaded.codecVersions[XLSX_CODEC_ID] !== metadata.codecVersion\n ) {\n throw unsupported();\n }\n let semanticHash: string;\n try {\n const imported = await SpreadsheetXlsxCodec.importXlsx(output, { unsupportedContent: \"error\" });\n semanticHash = semanticHashForWorkbook(imported);\n } catch {\n throw invalidOutput();\n }\n if (semanticHash !== metadata.expectedSemanticHash) throw invalidOutput();\n await writeFrame(\n VERIFY_OUTPUT_MAGIC,\n canonicalBytes({ protocol: \"OGAVR001\", semanticHash }),\n new Uint8Array(0),\n );\n}\n\nfunction projectSpreadsheet(\n runtime: ArtifactKernelRuntime,\n source: Uint8Array,\n manifest: MaterializationManifest,\n): ProjectedWorkbook {\n let session: NativeSpreadsheetSession;\n try {\n session = NativeSpreadsheetSession.open(runtime, source);\n } catch {\n throw invalidSource(\"snapshot_open\");\n }\n try {\n if (session.stateHash() !== manifest.stateHash) throw invalidSource(\"state_mismatch\");\n const metadataLimit = Math.min(\n session.capabilities.maxQueryResponseBytes,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n );\n const metadata = decodeSpreadsheetMetadataKernelProjection(\n session.query(\n encodeSpreadsheetMetadataKernelQuery({\n maxSheets: Math.max(1, session.capabilities.maxMetadataSheets),\n maxBytes: metadataLimit,\n }),\n ),\n {\n maxSheets: Math.max(1, session.capabilities.maxMetadataSheets),\n maxBytes: metadataLimit,\n },\n );\n if (\n metadata.modeledFeatures.dimensions !== false ||\n metadata.modeledFeatures.hidden !== false ||\n metadata.modeledFeatures.merges !== false\n ) {\n throw unsupported();\n }\n let projectedRectangleCells = 0;\n const semanticSheets: Array<{ name: string; cells: SemanticCell[] }> = [];\n for (const sheet of metadata.sheets) {\n const cells: SemanticCell[] = [];\n if (sheet.usedBounds) {\n const rows = sheet.usedBounds.endRow - sheet.usedBounds.startRow + 1;\n const columns = sheet.usedBounds.endColumn - sheet.usedBounds.startColumn + 1;\n const area = rows * columns;\n if (!Number.isSafeInteger(area) || area <= 0) throw invalidSource();\n projectedRectangleCells += area;\n if (projectedRectangleCells > MAX_PROJECTED_RECTANGLE_CELLS) throw unsupported();\n for (\n let row = sheet.usedBounds.startRow;\n row <= sheet.usedBounds.endRow;\n row += VIEWPORT_EDGE\n ) {\n const rowCount = Math.min(VIEWPORT_EDGE, sheet.usedBounds.endRow - row + 1);\n for (\n let column = sheet.usedBounds.startColumn;\n column <= sheet.usedBounds.endColumn;\n column += VIEWPORT_EDGE\n ) {\n const columnCount = Math.min(VIEWPORT_EDGE, sheet.usedBounds.endColumn - column + 1);\n const maxCells = rowCount * columnCount;\n if (maxCells > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) throw unsupported();\n const query = {\n sheetId: sheet.sheetId,\n startRow: row,\n startColumn: column,\n rowCount,\n columnCount,\n maxCells,\n maxBytes: metadataLimit,\n } as const;\n const viewport = decodeSpreadsheetViewportKernelProjection(\n session.query(encodeSpreadsheetViewportKernelQuery(query)),\n query,\n );\n for (const cell of viewport.cells) {\n assertRepresentableValue(cell.value);\n cells.push({\n row: cell.row,\n column: cell.column,\n formula: cell.formula,\n value: cell.value,\n });\n }\n }\n }\n }\n cells.sort((left, right) => left.row - right.row || left.column - right.column);\n semanticSheets.push({ name: sheet.name, cells });\n }\n const semantic: SemanticWorkbook = Object.freeze({ version: 1, sheets: semanticSheets });\n const workbook = Workbook.fromJSON(toSerializedWorkbook(semantic));\n const semanticHash = sha256(canonicalBytes(semantic));\n // Recalculation through the host projection must agree with every native\n // formula result before the Office codec is allowed to run.\n if (semanticHashForWorkbook(workbook) !== semanticHash) throw unsupported();\n return Object.freeze({ workbook, semanticHash });\n } finally {\n session.dispose();\n }\n}\n\nfunction toSerializedWorkbook(semantic: SemanticWorkbook): SerializedWorkbook {\n return {\n version: 1,\n worksheets: semantic.sheets.map((sheet, index) => ({\n id: `ws/native-${index + 1}`,\n name: sheet.name,\n showGridLines: true,\n freezePanes: { rows: 0, columns: 0 },\n cells: sheet.cells.map((cell) => ({\n row: cell.row,\n col: cell.column,\n value: cell.formula ? null : hostValue(cell.value),\n formula: cell.formula,\n format: {},\n })),\n merges: [],\n columnWidths: [],\n rowHeights: [],\n tables: [],\n charts: [],\n sparklines: [],\n dataValidations: [],\n conditionalFormattings: [],\n images: [],\n })),\n comments: [],\n } as SerializedWorkbook;\n}\n\nfunction semanticHashForWorkbook(workbook: Workbook): string {\n const sheets = workbook.worksheets.items.map((sheet) => {\n const cells: SemanticCell[] = [];\n for (const { row, col, data } of sheet.cellEntries()) {\n const value = data.formula ? workbook.valueAt(sheet, { row, col }) : data.value;\n cells.push({\n row,\n column: col,\n formula: data.formula,\n value: semanticValue(value, data.formula !== null),\n });\n }\n cells.sort((left, right) => left.row - right.row || left.column - right.column);\n return { name: sheet.name, cells };\n });\n return sha256(canonicalBytes({ version: 1, sheets } satisfies SemanticWorkbook));\n}\n\nfunction semanticValue(value: unknown, formula: boolean): SpreadsheetArtifactProjectedCellValue {\n if (value === null || value === undefined) return { kind: \"empty\" };\n if (typeof value === \"boolean\") return { kind: \"boolean\", value };\n if (typeof value === \"number\" && Number.isFinite(value)) return { kind: \"number\", value };\n if (value instanceof Date) {\n const milliseconds = Date.prototype.getTime.call(value);\n if (!Number.isSafeInteger(milliseconds)) throw unsupported();\n return { kind: \"date\", value: new Date(milliseconds).toISOString() };\n }\n if (typeof value === \"string\") {\n if (formula) {\n const error = FORMULA_ERROR_TO_NATIVE[value];\n if (error) return { kind: \"error\", value: error };\n if (value === \"#CYCLE!\") return { kind: \"error\", value: { custom: value } };\n }\n return { kind: \"text\", value };\n }\n throw unsupported();\n}\n\nfunction hostValue(\n value: SpreadsheetArtifactProjectedCellValue,\n): string | number | boolean | Date | null {\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 projected = NATIVE_ERROR_TO_FORMULA[value.value];\n if (!projected) throw unsupported();\n return projected;\n }\n }\n}\n\nfunction assertRepresentableValue(value: SpreadsheetArtifactProjectedCellValue): void {\n hostValue(value);\n}\n\nconst NATIVE_ERROR_TO_FORMULA: Readonly<Record<string, string>> = Object.freeze({\n divide_by_zero: \"#DIV/0!\",\n value: \"#VALUE!\",\n reference: \"#REF!\",\n name: \"#NAME?\",\n number: \"#NUM!\",\n not_available: \"#N/A\",\n});\nconst FORMULA_ERROR_TO_NATIVE: Readonly<Record<string, SpreadsheetArtifactFormulaError>> =\n Object.freeze({\n \"#DIV/0!\": \"divide_by_zero\",\n \"#VALUE!\": \"value\",\n \"#REF!\": \"reference\",\n \"#NAME?\": \"name\",\n \"#NUM!\": \"number\",\n \"#N/A\": \"not_available\",\n });\n\n/**\n * Exact producer profile derived from the same verified native runtime used by\n * the materializer child. The API uses this rather than accepting job identity\n * facts from clients.\n */\nexport function editableArtifactMaterializerCapabilitiesForRuntime(\n runtime: ArtifactKernelRuntime,\n packageVersion: string,\n): EditableArtifactNativeMaterializerCapabilities {\n return Object.freeze({\n protocol: \"OGAMC001\",\n runtimeKind: \"native\",\n runtimeTarget: runtime.target,\n kernelVersion: runtime.buildIdentity,\n codecVersions: Object.freeze({ [XLSX_CODEC_ID]: codecVersion(packageVersion) }),\n fontRegistryHash: EMPTY_FONT_REGISTRY_HASH,\n policyHash: POLICY_HASH,\n maxOutputBytes: MAX_OUTPUT_BYTES,\n supportedModelSchemaVersions: Object.freeze([\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n ] as const),\n supportedOperationProtocolVersions: Object.freeze([\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n ] as const),\n supportedSnapshotProtocolVersions: Object.freeze([\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n ] as const),\n });\n}\n\nfunction assertManifestCompatibility(\n manifest: MaterializationManifest,\n capabilities: EditableArtifactNativeMaterializerCapabilities,\n): void {\n if (\n manifest.modelSchemaVersion !== SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION ||\n manifest.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION ||\n manifest.snapshotProtocolVersion !== SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION ||\n manifest.kernelVersion !== capabilities.kernelVersion ||\n manifest.codecVersion !==\n (capabilities.codecVersions as Readonly<Record<string, string>>)[manifest.codecId] ||\n manifest.fontRegistryHash !== capabilities.fontRegistryHash ||\n manifest.policyHash !== capabilities.policyHash ||\n Object.keys(manifest.normalizedOptions).length !== 0\n ) {\n throw incompatible();\n }\n}\n\nfunction decodeManifest(value: Uint8Array): MaterializationManifest {\n const record = strictCanonicalRecord(value, [\n \"artifactId\",\n \"codecId\",\n \"codecVersion\",\n \"fontRegistryHash\",\n \"format\",\n \"inputSnapshotId\",\n \"jobId\",\n \"kernelVersion\",\n \"modality\",\n \"modelSchemaVersion\",\n \"normalizedOptions\",\n \"operationProtocolVersion\",\n \"optionsHash\",\n \"policyHash\",\n \"protocol\",\n \"snapshotProtocolVersion\",\n \"sourceByteSize\",\n \"sourceContentHash\",\n \"stateHash\",\n \"targetHeadSequence\",\n \"versionId\",\n ]);\n if (\n record.protocol !== \"OGAMJ001\" ||\n !positiveInteger(record.sourceByteSize) ||\n !positiveInteger(record.targetHeadSequence) ||\n !isHash(record.sourceContentHash) ||\n !isHash(record.stateHash) ||\n !isHash(record.optionsHash) ||\n !isHash(record.fontRegistryHash) ||\n !isHash(record.policyHash) ||\n !plainRecord(record.normalizedOptions)\n ) {\n throw invalidSource();\n }\n return record as MaterializationManifest;\n}\n\nfunction decodeVerificationManifest(value: Uint8Array): Readonly<{\n protocol: \"OGAVJ001\";\n format: string;\n codecId: string;\n codecVersion: string;\n expectedSemanticHash: string;\n}> {\n const record = strictCanonicalRecord(value, [\n \"codecId\",\n \"codecVersion\",\n \"expectedSemanticHash\",\n \"format\",\n \"protocol\",\n ]);\n if (record.protocol !== \"OGAVJ001\" || !isHash(record.expectedSemanticHash)) {\n throw invalidSource();\n }\n return record as never;\n}\n\nfunction strictCanonicalRecord(\n value: Uint8Array,\n keys: readonly string[],\n): Record<string, unknown> {\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(value);\n const parsed = JSON.parse(text) as unknown;\n if (!plainRecord(parsed) || JSON.stringify(parsed) !== text) throw invalidSource();\n if (Object.keys(parsed).sort().join(\"\\0\") !== [...keys].sort().join(\"\\0\")) throw invalidSource();\n return parsed;\n}\n\nasync function writeTypedError(\n code: string,\n diagnosticSubcode?: NativeSourceDiagnosticSubcode,\n): Promise<void> {\n await writeFrame(\n ERROR_MAGIC,\n canonicalBytes({\n code,\n protocol: \"OGAMERR1\",\n ...(diagnosticSubcode ? { subcode: diagnosticSubcode } : {}),\n }),\n new Uint8Array(0),\n );\n}\n\nasync function writeFrame(\n magic: Uint8Array,\n metadata: Uint8Array,\n payload: Uint8Array,\n): Promise<void> {\n const header = new Uint8Array(12);\n const view = new DataView(header.buffer);\n view.setUint32(0, metadata.byteLength, true);\n view.setBigUint64(4, BigInt(payload.byteLength), true);\n await writeStdout(magic);\n await writeStdout(header);\n await writeStdout(metadata);\n for (let offset = 0; offset < payload.byteLength; offset += 1024 * 1024) {\n await writeStdout(payload.subarray(offset, Math.min(payload.byteLength, offset + 1024 * 1024)));\n }\n}\n\nasync function writeStdout(value: Uint8Array): Promise<void> {\n if (!process.stdout.write(value)) await once(process.stdout, \"drain\");\n}\n\nclass InputReader {\n readonly #iterator: AsyncIterator<Buffer | string>;\n #buffer = new Uint8Array(0);\n #done = false;\n\n constructor(stream: NodeJS.ReadableStream & AsyncIterable<Buffer | string>) {\n this.#iterator = stream[Symbol.asyncIterator]();\n }\n\n async readExactly(length: number): Promise<Uint8Array> {\n if (!Number.isSafeInteger(length) || length < 0 || length > MAX_SOURCE_BYTES)\n throw invalidSource();\n const result = new Uint8Array(length);\n let offset = 0;\n while (offset < length) {\n if (this.#buffer.byteLength === 0) await this.#fill();\n if (this.#buffer.byteLength === 0) throw invalidSource();\n const count = Math.min(length - offset, this.#buffer.byteLength);\n result.set(this.#buffer.subarray(0, count), offset);\n this.#buffer = this.#buffer.subarray(count);\n offset += count;\n }\n return result;\n }\n\n async assertEof(): Promise<void> {\n if (this.#buffer.byteLength > 0) throw invalidSource();\n if (!this.#done) await this.#fill();\n if (!this.#done || this.#buffer.byteLength > 0) throw invalidSource();\n }\n\n async #fill(): Promise<void> {\n const next = await this.#iterator.next();\n if (next.done) {\n this.#done = true;\n return;\n }\n if (typeof next.value === \"string\") throw invalidSource();\n this.#buffer = new Uint8Array(\n next.value.buffer,\n next.value.byteOffset,\n next.value.byteLength,\n ).slice();\n }\n}\n\nfunction codecVersion(packageVersion: string): string {\n return `xlsx-v1@${packageVersion}`;\n}\n\nfunction canonicalBytes(value: unknown): Uint8Array {\n return bytes(JSON.stringify(value));\n}\n\nfunction bytes(value: string): Uint8Array {\n return new TextEncoder().encode(value);\n}\n\nfunction sha256(value: Uint8Array): string {\n return `sha256:${createHash(\"sha256\").update(value).digest(\"hex\")}`;\n}\n\nfunction safeU64(view: DataView, offset: number, label: string): number {\n const value = view.getBigUint64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new Error(`${label} exceeds safe integer`);\n return Number(value);\n}\n\nfunction assertBytes(actual: Uint8Array, expected: Uint8Array, label: string): void {\n if (\n actual.byteLength !== expected.byteLength ||\n !actual.every((byte, index) => byte === expected[index])\n ) {\n throw new Error(`${label} is invalid`);\n }\n}\n\nfunction plainRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nfunction positiveInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\nfunction isHash(value: unknown): value is string {\n return typeof value === \"string\" && /^sha256:[0-9a-f]{64}$/u.test(value);\n}\n\nclass MaterializerCliError extends Error {\n readonly code:\n | \"unsupported_semantics\"\n | \"source_identity_mismatch\"\n | \"kernel_incompatible\"\n | \"output_verification_failed\";\n\n constructor(\n code: MaterializerCliError[\"code\"],\n readonly diagnosticSubcode?: NativeSourceDiagnosticSubcode,\n ) {\n super(code);\n this.name = \"MaterializerCliError\";\n this.code = code;\n }\n}\n\nfunction unsupported(): MaterializerCliError {\n return new MaterializerCliError(\"unsupported_semantics\");\n}\nfunction invalidSource(diagnosticSubcode?: NativeSourceDiagnosticSubcode): MaterializerCliError {\n return new MaterializerCliError(\"source_identity_mismatch\", diagnosticSubcode);\n}\nfunction incompatible(): MaterializerCliError {\n return new MaterializerCliError(\"kernel_incompatible\");\n}\nfunction invalidOutput(): MaterializerCliError {\n return new MaterializerCliError(\"output_verification_failed\");\n}\n\nfunction classifyInvalidSource(\n error: unknown,\n diagnosticSubcode: NativeSourceDiagnosticSubcode,\n): unknown {\n return error instanceof MaterializerCliError && error.code === \"source_identity_mismatch\"\n ? invalidSource(error.diagnosticSubcode ?? diagnosticSubcode)\n : error;\n}\n\nasync function loadRuntime(\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<Awaited<ReturnType<typeof loadConfiguredArtifactKernelRuntime>>> {\n try {\n return await loadConfiguredArtifactKernelRuntime(environment);\n } catch {\n throw incompatible();\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  disposeArtifact,
10
10
  getArtifactCompositeDiagnostics,
11
11
  getConfiguredArtifactRuntime
12
- } from "./chunk-6PBM7FKI.js";
12
+ } from "./chunk-QA3NXBAG.js";
13
13
  import "./chunk-HTJBLBDE.js";
14
14
  import "./chunk-VOJHMSM3.js";
15
15
  import {
@@ -56,7 +56,7 @@ import {
56
56
  TrackedChange,
57
57
  TrackedChanges
58
58
  } from "./chunk-66CT2ZRP.js";
59
- import "./chunk-B2ZJRZDA.js";
59
+ import "./chunk-LVPFJH2Z.js";
60
60
  import {
61
61
  SpreadsheetFidelityError,
62
62
  SpreadsheetSecurityError
@@ -87,7 +87,7 @@ import {
87
87
  Worksheet,
88
88
  WorksheetCollection,
89
89
  validateSerializedWorkbook
90
- } from "./chunk-XT2EJFCU.js";
90
+ } from "./chunk-SYFNJGH5.js";
91
91
  import "./chunk-4FRFNNBM.js";
92
92
  import "./chunk-FGZM4FQ6.js";
93
93
  import "./chunk-Q2FFHEY7.js";
@@ -99,7 +99,7 @@ import {
99
99
  import {
100
100
  FileBlob
101
101
  } from "./chunk-4BSENMAE.js";
102
- import "./chunk-N2IHNWBS.js";
102
+ import "./chunk-4YYYUZQH.js";
103
103
  import "./chunk-VUNV25KB.js";
104
104
  export {
105
105
  ArtifactConflictError,
package/dist/kernel.d.ts CHANGED
@@ -80,22 +80,3 @@ export declare class ArtifactKernelRegistry {
80
80
  select(modality: ArtifactModality, required?: Partial<Pick<ArtifactKernelCapabilities, "calculate" | "layout" | "collaboration">>, order?: readonly ArtifactKernelKind[]): ArtifactKernelSelection;
81
81
  available(): readonly ArtifactKernel[];
82
82
  }
83
- export declare const ARTIFACT_OPERATION_MAX_BYTES: number;
84
- export declare const ARTIFACT_OPERATION_MAX_COMMANDS = 10000;
85
- export declare const ARTIFACT_OPERATION_MAX_VECTOR_ACTORS = 1024;
86
- export declare const ARTIFACT_OPERATION_MAX_STRING_BYTES: number;
87
- export declare const ARTIFACT_OPERATION_MAX_JSON_DEPTH = 64;
88
- export declare const ARTIFACT_OPERATION_MAX_JSON_NODES = 100000;
89
- /**
90
- * Deterministic codec retained only for historical TypeScript conformance
91
- * fixtures.
92
- *
93
- * @deprecated OGAR duplicates authored identity/causality and must never be
94
- * persisted, submitted, or lowered by a production runtime. Use the canonical
95
- * OGATX001 envelope with an identity-free OGASC001 command payload from
96
- * `@opengeni/contracts/editable-artifacts`.
97
- */
98
- export declare const ArtifactCommandBatchCodec: {
99
- encode(batch: ArtifactCommandBatch): Uint8Array;
100
- decode(bytes: Uint8Array): ArtifactCommandBatch;
101
- };
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runArtifactMaterializerCli
4
- } from "./chunk-RU5G3HNF.js";
5
- import "./chunk-U5G2BKM2.js";
6
- import "./chunk-B2ZJRZDA.js";
7
- import "./chunk-QZI5POCC.js";
4
+ } from "./chunk-XAZTHG6W.js";
5
+ import "./chunk-LMLPFF3S.js";
6
+ import "./chunk-LVPFJH2Z.js";
7
+ import "./chunk-OVXX4G35.js";
8
8
  import "./chunk-J6N7IR44.js";
9
- import "./chunk-XT2EJFCU.js";
9
+ import "./chunk-SYFNJGH5.js";
10
10
  import "./chunk-4FRFNNBM.js";
11
11
  import "./chunk-FGZM4FQ6.js";
12
12
  import "./chunk-72SYDU4O.js";
13
13
  import "./chunk-Q2FFHEY7.js";
14
14
  import "./chunk-O24KTEGP.js";
15
15
  import "./chunk-4BSENMAE.js";
16
- import "./chunk-ZCJYRJGB.js";
17
- import "./chunk-N2IHNWBS.js";
16
+ import "./chunk-4XJE7NRA.js";
17
+ import "./chunk-4YYYUZQH.js";
18
18
  import "./chunk-VUNV25KB.js";
19
19
 
20
20
  // src/materializer-cli-entry.ts
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { COMMITTED_TRANSACTION_PROTOCOL_VERSION, SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION, SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION } from "@opengeni/contracts/editable-artifact-versions";
2
3
  import type { ArtifactKernelRuntime } from "./runtime.js";
3
4
  declare const XLSX_CODEC_ID = "opengeni.xlsx";
4
5
  export type EditableArtifactNativeMaterializerCapabilities = Readonly<{
@@ -10,9 +11,9 @@ export type EditableArtifactNativeMaterializerCapabilities = Readonly<{
10
11
  fontRegistryHash: string;
11
12
  policyHash: string;
12
13
  maxOutputBytes: number;
13
- supportedModelSchemaVersions: readonly [1];
14
- supportedOperationProtocolVersions: readonly [1];
15
- supportedSnapshotProtocolVersions: readonly [1];
14
+ supportedModelSchemaVersions: readonly [typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION];
15
+ supportedOperationProtocolVersions: readonly [typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION];
16
+ supportedSnapshotProtocolVersions: readonly [typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION];
16
17
  }>;
17
18
  export declare function runArtifactMaterializerCli(args: readonly string[], environment?: Readonly<Record<string, string | undefined>>): Promise<void>;
18
19
  /**
@@ -2,20 +2,20 @@
2
2
  import {
3
3
  editableArtifactMaterializerCapabilitiesForRuntime,
4
4
  runArtifactMaterializerCli
5
- } from "./chunk-RU5G3HNF.js";
6
- import "./chunk-U5G2BKM2.js";
7
- import "./chunk-B2ZJRZDA.js";
8
- import "./chunk-QZI5POCC.js";
5
+ } from "./chunk-XAZTHG6W.js";
6
+ import "./chunk-LMLPFF3S.js";
7
+ import "./chunk-LVPFJH2Z.js";
8
+ import "./chunk-OVXX4G35.js";
9
9
  import "./chunk-J6N7IR44.js";
10
- import "./chunk-XT2EJFCU.js";
10
+ import "./chunk-SYFNJGH5.js";
11
11
  import "./chunk-4FRFNNBM.js";
12
12
  import "./chunk-FGZM4FQ6.js";
13
13
  import "./chunk-72SYDU4O.js";
14
14
  import "./chunk-Q2FFHEY7.js";
15
15
  import "./chunk-O24KTEGP.js";
16
16
  import "./chunk-4BSENMAE.js";
17
- import "./chunk-ZCJYRJGB.js";
18
- import "./chunk-N2IHNWBS.js";
17
+ import "./chunk-4XJE7NRA.js";
18
+ import "./chunk-4YYYUZQH.js";
19
19
  import "./chunk-VUNV25KB.js";
20
20
  export {
21
21
  editableArtifactMaterializerCapabilitiesForRuntime,
package/dist/native.d.ts CHANGED
@@ -14,7 +14,7 @@ export type NativeSpreadsheetAuthoredTransaction = Readonly<{
14
14
  /** Exact canonical OGATX001 bytes passed to Rust. */
15
15
  intentBytes: Uint8Array;
16
16
  requestHash: string;
17
- /** One whole canonical OGACO001 transaction returned by Rust. */
17
+ /** One whole canonical OGACO002 transaction returned by Rust. */
18
18
  committedTransactionBytes: Uint8Array;
19
19
  }>;
20
20
  export type CreateNativeArtifactSessionInput = Readonly<{
package/dist/native.js CHANGED
@@ -11,8 +11,8 @@ import {
11
11
  encodeSpreadsheetArtifactCommandBatch,
12
12
  openNativeArtifactSession,
13
13
  spreadsheetSheetId
14
- } from "./chunk-B2ZJRZDA.js";
15
- import "./chunk-N2IHNWBS.js";
14
+ } from "./chunk-LVPFJH2Z.js";
15
+ import "./chunk-4YYYUZQH.js";
16
16
  import "./chunk-VUNV25KB.js";
17
17
  export {
18
18
  NativeDocumentSession,
@@ -1,3 +1,4 @@
1
+ import { COMMITTED_TRANSACTION_PROTOCOL_VERSION, DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION, PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION, SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION, SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION } from "@opengeni/contracts/editable-artifact-versions";
1
2
  export type ArtifactOfficeModality = "spreadsheet" | "document" | "presentation";
2
3
  export type ArtifactOfficeMimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | "application/vnd.openxmlformats-officedocument.wordprocessingml.document" | "application/vnd.openxmlformats-officedocument.presentationml.presentation";
3
4
  export type PreparedArtifactOfficeImport = Readonly<{
@@ -13,21 +14,30 @@ export type PreparedArtifactOfficeImport = Readonly<{
13
14
  byteSize: number;
14
15
  contentHash: `sha256:${string}`;
15
16
  stateHash: `sha256:${string}`;
16
- modelSchemaVersion: 1;
17
+ modelSchemaVersion: typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION;
17
18
  kernelVersion: string;
18
19
  coveredCausalFrontier: readonly Readonly<{
19
20
  replicaId: string;
20
21
  counter: number;
21
22
  }>[];
22
- operationProtocolVersion: 1;
23
- crdtStateVersion: 1;
23
+ operationProtocolVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;
24
+ crdtStateVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;
24
25
  }> | Readonly<{
25
- modality: "document" | "presentation";
26
+ modality: "document";
26
27
  bytes: Uint8Array;
27
28
  byteSize: number;
28
29
  contentHash: `sha256:${string}`;
29
30
  stateHash: `sha256:${string}`;
30
- modelSchemaVersion: 1;
31
+ modelSchemaVersion: typeof DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION;
32
+ kernelVersion: string;
33
+ nativeRevision: number;
34
+ }> | Readonly<{
35
+ modality: "presentation";
36
+ bytes: Uint8Array;
37
+ byteSize: number;
38
+ contentHash: `sha256:${string}`;
39
+ stateHash: `sha256:${string}`;
40
+ modelSchemaVersion: typeof PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION;
31
41
  kernelVersion: string;
32
42
  nativeRevision: number;
33
43
  }>;
@@ -3,7 +3,17 @@ import "./chunk-VUNV25KB.js";
3
3
  // src/office-import.ts
4
4
  import { createHash } from "crypto";
5
5
  import { decodeEditableArtifactCausalFrontier } from "@opengeni/contracts/editable-artifact-causal-frontier";
6
- import { EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES } from "@opengeni/contracts/editable-artifacts";
6
+ import {
7
+ EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,
8
+ currentEditableArtifactCompatibility
9
+ } from "@opengeni/contracts/editable-artifacts";
10
+ import {
11
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION,
12
+ DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
13
+ PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
14
+ SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
15
+ SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION
16
+ } from "@opengeni/contracts/editable-artifact-versions";
7
17
  var ArtifactOfficeSourceUnsupportedError = class extends Error {
8
18
  constructor(extension, options) {
9
19
  super(`The ${extension} source could not be imported`, options);
@@ -63,7 +73,8 @@ async function prepareArtifactOfficeImport(input) {
63
73
  }
64
74
  function validateSnapshot(value, modality, expectedRuntimeTarget, expectedKernelVersion) {
65
75
  const snapshot = exactNamespace(value, "artifact snapshot");
66
- if (snapshot.schemaVersion !== 1 || snapshot.modality !== modality || snapshot.runtimeTarget !== expectedRuntimeTarget || snapshot.kernelVersion !== expectedKernelVersion || snapshot.modelSchemaVersion !== 1 || snapshot.snapshotVersion !== 1 || !/^sha256:[0-9a-f]{64}$/u.test(snapshot.stateHash)) {
76
+ const current = currentEditableArtifactCompatibility(modality);
77
+ if (snapshot.schemaVersion !== 1 || snapshot.modality !== modality || snapshot.runtimeTarget !== expectedRuntimeTarget || snapshot.kernelVersion !== expectedKernelVersion || snapshot.modelSchemaVersion !== current.modelSchemaVersion || snapshot.snapshotVersion !== current.snapshotVersion || !/^sha256:[0-9a-f]{64}$/u.test(snapshot.stateHash)) {
67
78
  throw new TypeError("Imported snapshot differs from the verified native runtime boundary");
68
79
  }
69
80
  if (!(snapshot.snapshotBytes instanceof Uint8Array) || snapshot.snapshotBytes.byteLength < 1 || snapshot.snapshotBytes.byteLength > EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES) {
@@ -75,29 +86,35 @@ function validateSnapshot(value, modality, expectedRuntimeTarget, expectedKernel
75
86
  byteSize: bytes.byteLength,
76
87
  contentHash: sha256(bytes),
77
88
  stateHash: snapshot.stateHash,
78
- modelSchemaVersion: 1,
79
89
  kernelVersion: snapshot.kernelVersion
80
90
  };
81
91
  if (snapshot.modality === "spreadsheet") {
82
- if (!(snapshot.coveredCausalFrontierBytes instanceof Uint8Array) || snapshot.operationProtocolVersion !== 1 || snapshot.crdtStateVersion !== 1) {
92
+ if (!(snapshot.coveredCausalFrontierBytes instanceof Uint8Array) || snapshot.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION || snapshot.crdtStateVersion !== SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION) {
83
93
  throw new TypeError("Imported spreadsheet snapshot coverage is invalid");
84
94
  }
85
95
  return Object.freeze({
86
96
  ...common,
87
97
  modality: "spreadsheet",
98
+ modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
88
99
  coveredCausalFrontier: decodeEditableArtifactCausalFrontier(
89
100
  snapshot.coveredCausalFrontierBytes
90
101
  ),
91
- operationProtocolVersion: 1,
92
- crdtStateVersion: 1
102
+ operationProtocolVersion: COMMITTED_TRANSACTION_PROTOCOL_VERSION,
103
+ crdtStateVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION
93
104
  });
94
105
  }
95
106
  if (!Number.isSafeInteger(snapshot.nativeRevision) || snapshot.nativeRevision < 0) {
96
107
  throw new TypeError("Imported serialized snapshot revision is invalid");
97
108
  }
98
- return Object.freeze({
109
+ return snapshot.modality === "document" ? Object.freeze({
99
110
  ...common,
100
- modality: snapshot.modality,
111
+ modality: "document",
112
+ modelSchemaVersion: DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
113
+ nativeRevision: snapshot.nativeRevision
114
+ }) : Object.freeze({
115
+ ...common,
116
+ modality: "presentation",
117
+ modelSchemaVersion: PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
101
118
  nativeRevision: snapshot.nativeRevision
102
119
  });
103
120
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/office-import.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { decodeEditableArtifactCausalFrontier } from \"@opengeni/contracts/editable-artifact-causal-frontier\";\nimport { EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES } from \"@opengeni/contracts/editable-artifacts\";\nimport type { ArtifactSnapshot } from \"./snapshot\";\n\nexport type ArtifactOfficeModality = \"spreadsheet\" | \"document\" | \"presentation\";\nexport type ArtifactOfficeMimeType =\n | \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n | \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n | \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n\nexport type PreparedArtifactOfficeImport = Readonly<{\n source: Readonly<{\n filename: string;\n byteSize: number;\n contentHash: `sha256:${string}`;\n mimeType: ArtifactOfficeMimeType;\n }>;\n snapshot:\n | Readonly<{\n modality: \"spreadsheet\";\n bytes: Uint8Array;\n byteSize: number;\n contentHash: `sha256:${string}`;\n stateHash: `sha256:${string}`;\n modelSchemaVersion: 1;\n kernelVersion: string;\n coveredCausalFrontier: readonly Readonly<{ replicaId: string; counter: number }>[];\n operationProtocolVersion: 1;\n crdtStateVersion: 1;\n }>\n | Readonly<{\n modality: \"document\" | \"presentation\";\n bytes: Uint8Array;\n byteSize: number;\n contentHash: `sha256:${string}`;\n stateHash: `sha256:${string}`;\n modelSchemaVersion: 1;\n kernelVersion: string;\n nativeRevision: number;\n }>;\n}>;\n\n/** The Office container is valid input bytes but cannot be modeled safely. */\nexport class ArtifactOfficeSourceUnsupportedError extends Error {\n constructor(extension: \".xlsx\" | \".docx\" | \".pptx\", options: ErrorOptions) {\n super(`The ${extension} source could not be imported`, options);\n this.name = \"ArtifactOfficeSourceUnsupportedError\";\n }\n}\n\n/** Import bounded Office bytes through the exact verified facade, without a local path. */\nexport async function prepareArtifactOfficeImport(\n input: Readonly<{\n facade: unknown;\n modality: ArtifactOfficeModality;\n filename: string;\n mimeType: ArtifactOfficeMimeType;\n bytes: Uint8Array;\n expectedRuntimeTarget: string;\n expectedKernelVersion: string;\n }>,\n): Promise<PreparedArtifactOfficeImport> {\n const expected = officeFormat(input.modality);\n if (input.mimeType !== expected.mimeType) {\n throw new TypeError(\"Office MIME type does not match artifact modality\");\n }\n if (!input.filename.toLowerCase().endsWith(expected.extension)) {\n throw new TypeError(`Office filename must end with ${expected.extension}`);\n }\n if (!(input.bytes instanceof Uint8Array) || input.bytes.byteLength < 1) {\n throw new TypeError(\"Office source bytes must be a nonempty Uint8Array\");\n }\n if (input.bytes.byteLength > EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES) {\n throw new RangeError(\"Office source exceeds the editable artifact product limit\");\n }\n const sourceBytes = Uint8Array.from(input.bytes);\n const module = exactModule(input.facade);\n const fileBlob = exactNamespace(module.FileBlob, \"FileBlob\");\n const fromBytes = exactFunction(fileBlob.fromBytes, \"FileBlob.fromBytes\");\n const createSnapshot = exactFunction(module.createArtifactSnapshot, \"createArtifactSnapshot\");\n const disposeArtifact = exactFunction(module.disposeArtifact, \"disposeArtifact\");\n const importer = officeImporter(module, input.modality);\n const blob = Reflect.apply(fromBytes, fileBlob, [\n sourceBytes,\n { name: input.filename, type: input.mimeType },\n ]);\n let artifact: unknown;\n try {\n artifact = await importer(blob);\n } catch (cause) {\n throw new ArtifactOfficeSourceUnsupportedError(expected.extension, { cause });\n }\n try {\n const snapshot = validateSnapshot(\n Reflect.apply(createSnapshot, module, [artifact]),\n input.modality,\n input.expectedRuntimeTarget,\n input.expectedKernelVersion,\n );\n return Object.freeze({\n source: Object.freeze({\n filename: input.filename,\n byteSize: sourceBytes.byteLength,\n contentHash: sha256(sourceBytes),\n mimeType: input.mimeType,\n }),\n snapshot,\n });\n } finally {\n Reflect.apply(disposeArtifact, module, [artifact]);\n }\n}\n\nfunction validateSnapshot(\n value: unknown,\n modality: ArtifactOfficeModality,\n expectedRuntimeTarget: string,\n expectedKernelVersion: string,\n): PreparedArtifactOfficeImport[\"snapshot\"] {\n const snapshot = exactNamespace(value, \"artifact snapshot\") as unknown as ArtifactSnapshot;\n if (\n snapshot.schemaVersion !== 1 ||\n snapshot.modality !== modality ||\n snapshot.runtimeTarget !== expectedRuntimeTarget ||\n snapshot.kernelVersion !== expectedKernelVersion ||\n snapshot.modelSchemaVersion !== 1 ||\n snapshot.snapshotVersion !== 1 ||\n !/^sha256:[0-9a-f]{64}$/u.test(snapshot.stateHash)\n ) {\n throw new TypeError(\"Imported snapshot differs from the verified native runtime boundary\");\n }\n if (\n !(snapshot.snapshotBytes instanceof Uint8Array) ||\n snapshot.snapshotBytes.byteLength < 1 ||\n snapshot.snapshotBytes.byteLength > EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES\n ) {\n throw new TypeError(\"Imported snapshot bytes are outside the product limit\");\n }\n const bytes = Uint8Array.from(snapshot.snapshotBytes);\n const common = {\n bytes,\n byteSize: bytes.byteLength,\n contentHash: sha256(bytes),\n stateHash: snapshot.stateHash as `sha256:${string}`,\n modelSchemaVersion: 1 as const,\n kernelVersion: snapshot.kernelVersion,\n };\n if (snapshot.modality === \"spreadsheet\") {\n if (\n !(snapshot.coveredCausalFrontierBytes instanceof Uint8Array) ||\n snapshot.operationProtocolVersion !== 1 ||\n snapshot.crdtStateVersion !== 1\n ) {\n throw new TypeError(\"Imported spreadsheet snapshot coverage is invalid\");\n }\n return Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n coveredCausalFrontier: decodeEditableArtifactCausalFrontier(\n snapshot.coveredCausalFrontierBytes,\n ),\n operationProtocolVersion: 1 as const,\n crdtStateVersion: 1 as const,\n });\n }\n if (!Number.isSafeInteger(snapshot.nativeRevision) || snapshot.nativeRevision < 0) {\n throw new TypeError(\"Imported serialized snapshot revision is invalid\");\n }\n return Object.freeze({\n ...common,\n modality: snapshot.modality,\n nativeRevision: snapshot.nativeRevision,\n });\n}\n\nfunction officeImporter(\n module: Record<string, unknown>,\n modality: ArtifactOfficeModality,\n): (input: unknown) => Promise<unknown> {\n const namespaceName =\n modality === \"spreadsheet\"\n ? \"SpreadsheetFile\"\n : modality === \"document\"\n ? \"DocumentFile\"\n : \"PresentationFile\";\n const methodName =\n modality === \"spreadsheet\"\n ? \"importXlsx\"\n : modality === \"document\"\n ? \"importDocx\"\n : \"importPptx\";\n const namespace = exactNamespace(module[namespaceName], namespaceName);\n const method = exactFunction(namespace[methodName], `${namespaceName}.${methodName}`);\n return async (blob) => await Reflect.apply(method, namespace, [blob]);\n}\n\nfunction officeFormat(modality: ArtifactOfficeModality): Readonly<{\n extension: \".xlsx\" | \".docx\" | \".pptx\";\n mimeType: ArtifactOfficeMimeType;\n}> {\n if (modality === \"spreadsheet\") {\n return {\n extension: \".xlsx\",\n mimeType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n };\n }\n if (modality === \"document\") {\n return {\n extension: \".docx\",\n mimeType: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n };\n }\n return {\n extension: \".pptx\",\n mimeType: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n };\n}\n\nfunction exactModule(value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(\"Verified artifact facade must be a module namespace\");\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactNamespace(value: unknown, label: string): Record<string, unknown> {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n throw new TypeError(`Verified artifact facade is missing ${label}`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactFunction(value: unknown, label: string): (...args: unknown[]) => unknown {\n if (typeof value !== \"function\") {\n throw new TypeError(`Verified artifact facade is missing ${label}()`);\n }\n return value as (...args: unknown[]) => unknown;\n}\n\nfunction sha256(bytes: Uint8Array): `sha256:${string}` {\n return `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/office-import.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { decodeEditableArtifactCausalFrontier } from \"@opengeni/contracts/editable-artifact-causal-frontier\";\nimport {\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n currentEditableArtifactCompatibility,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n} from \"@opengeni/contracts/editable-artifact-versions\";\nimport type { ArtifactSnapshot } from \"./snapshot\";\n\nexport type ArtifactOfficeModality = \"spreadsheet\" | \"document\" | \"presentation\";\nexport type ArtifactOfficeMimeType =\n | \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n | \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n | \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n\nexport type PreparedArtifactOfficeImport = Readonly<{\n source: Readonly<{\n filename: string;\n byteSize: number;\n contentHash: `sha256:${string}`;\n mimeType: ArtifactOfficeMimeType;\n }>;\n snapshot:\n | Readonly<{\n modality: \"spreadsheet\";\n bytes: Uint8Array;\n byteSize: number;\n contentHash: `sha256:${string}`;\n stateHash: `sha256:${string}`;\n modelSchemaVersion: typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION;\n kernelVersion: string;\n coveredCausalFrontier: readonly Readonly<{ replicaId: string; counter: number }>[];\n operationProtocolVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;\n crdtStateVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;\n }>\n | Readonly<{\n modality: \"document\";\n bytes: Uint8Array;\n byteSize: number;\n contentHash: `sha256:${string}`;\n stateHash: `sha256:${string}`;\n modelSchemaVersion: typeof DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION;\n kernelVersion: string;\n nativeRevision: number;\n }>\n | Readonly<{\n modality: \"presentation\";\n bytes: Uint8Array;\n byteSize: number;\n contentHash: `sha256:${string}`;\n stateHash: `sha256:${string}`;\n modelSchemaVersion: typeof PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION;\n kernelVersion: string;\n nativeRevision: number;\n }>;\n}>;\n\n/** The Office container is valid input bytes but cannot be modeled safely. */\nexport class ArtifactOfficeSourceUnsupportedError extends Error {\n constructor(extension: \".xlsx\" | \".docx\" | \".pptx\", options: ErrorOptions) {\n super(`The ${extension} source could not be imported`, options);\n this.name = \"ArtifactOfficeSourceUnsupportedError\";\n }\n}\n\n/** Import bounded Office bytes through the exact verified facade, without a local path. */\nexport async function prepareArtifactOfficeImport(\n input: Readonly<{\n facade: unknown;\n modality: ArtifactOfficeModality;\n filename: string;\n mimeType: ArtifactOfficeMimeType;\n bytes: Uint8Array;\n expectedRuntimeTarget: string;\n expectedKernelVersion: string;\n }>,\n): Promise<PreparedArtifactOfficeImport> {\n const expected = officeFormat(input.modality);\n if (input.mimeType !== expected.mimeType) {\n throw new TypeError(\"Office MIME type does not match artifact modality\");\n }\n if (!input.filename.toLowerCase().endsWith(expected.extension)) {\n throw new TypeError(`Office filename must end with ${expected.extension}`);\n }\n if (!(input.bytes instanceof Uint8Array) || input.bytes.byteLength < 1) {\n throw new TypeError(\"Office source bytes must be a nonempty Uint8Array\");\n }\n if (input.bytes.byteLength > EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES) {\n throw new RangeError(\"Office source exceeds the editable artifact product limit\");\n }\n const sourceBytes = Uint8Array.from(input.bytes);\n const module = exactModule(input.facade);\n const fileBlob = exactNamespace(module.FileBlob, \"FileBlob\");\n const fromBytes = exactFunction(fileBlob.fromBytes, \"FileBlob.fromBytes\");\n const createSnapshot = exactFunction(module.createArtifactSnapshot, \"createArtifactSnapshot\");\n const disposeArtifact = exactFunction(module.disposeArtifact, \"disposeArtifact\");\n const importer = officeImporter(module, input.modality);\n const blob = Reflect.apply(fromBytes, fileBlob, [\n sourceBytes,\n { name: input.filename, type: input.mimeType },\n ]);\n let artifact: unknown;\n try {\n artifact = await importer(blob);\n } catch (cause) {\n throw new ArtifactOfficeSourceUnsupportedError(expected.extension, { cause });\n }\n try {\n const snapshot = validateSnapshot(\n Reflect.apply(createSnapshot, module, [artifact]),\n input.modality,\n input.expectedRuntimeTarget,\n input.expectedKernelVersion,\n );\n return Object.freeze({\n source: Object.freeze({\n filename: input.filename,\n byteSize: sourceBytes.byteLength,\n contentHash: sha256(sourceBytes),\n mimeType: input.mimeType,\n }),\n snapshot,\n });\n } finally {\n Reflect.apply(disposeArtifact, module, [artifact]);\n }\n}\n\nfunction validateSnapshot(\n value: unknown,\n modality: ArtifactOfficeModality,\n expectedRuntimeTarget: string,\n expectedKernelVersion: string,\n): PreparedArtifactOfficeImport[\"snapshot\"] {\n const snapshot = exactNamespace(value, \"artifact snapshot\") as unknown as ArtifactSnapshot;\n const current = currentEditableArtifactCompatibility(modality);\n if (\n snapshot.schemaVersion !== 1 ||\n snapshot.modality !== modality ||\n snapshot.runtimeTarget !== expectedRuntimeTarget ||\n snapshot.kernelVersion !== expectedKernelVersion ||\n snapshot.modelSchemaVersion !== current.modelSchemaVersion ||\n snapshot.snapshotVersion !== current.snapshotVersion ||\n !/^sha256:[0-9a-f]{64}$/u.test(snapshot.stateHash)\n ) {\n throw new TypeError(\"Imported snapshot differs from the verified native runtime boundary\");\n }\n if (\n !(snapshot.snapshotBytes instanceof Uint8Array) ||\n snapshot.snapshotBytes.byteLength < 1 ||\n snapshot.snapshotBytes.byteLength > EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES\n ) {\n throw new TypeError(\"Imported snapshot bytes are outside the product limit\");\n }\n const bytes = Uint8Array.from(snapshot.snapshotBytes);\n const common = {\n bytes,\n byteSize: bytes.byteLength,\n contentHash: sha256(bytes),\n stateHash: snapshot.stateHash as `sha256:${string}`,\n kernelVersion: snapshot.kernelVersion,\n };\n if (snapshot.modality === \"spreadsheet\") {\n if (\n !(snapshot.coveredCausalFrontierBytes instanceof Uint8Array) ||\n snapshot.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION ||\n snapshot.crdtStateVersion !== SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION\n ) {\n throw new TypeError(\"Imported spreadsheet snapshot coverage is invalid\");\n }\n return Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n coveredCausalFrontier: decodeEditableArtifactCausalFrontier(\n snapshot.coveredCausalFrontierBytes,\n ),\n operationProtocolVersion: COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n crdtStateVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n });\n }\n if (!Number.isSafeInteger(snapshot.nativeRevision) || snapshot.nativeRevision < 0) {\n throw new TypeError(\"Imported serialized snapshot revision is invalid\");\n }\n return snapshot.modality === \"document\"\n ? Object.freeze({\n ...common,\n modality: \"document\" as const,\n modelSchemaVersion: DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n nativeRevision: snapshot.nativeRevision,\n })\n : Object.freeze({\n ...common,\n modality: \"presentation\" as const,\n modelSchemaVersion: PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n nativeRevision: snapshot.nativeRevision,\n });\n}\n\nfunction officeImporter(\n module: Record<string, unknown>,\n modality: ArtifactOfficeModality,\n): (input: unknown) => Promise<unknown> {\n const namespaceName =\n modality === \"spreadsheet\"\n ? \"SpreadsheetFile\"\n : modality === \"document\"\n ? \"DocumentFile\"\n : \"PresentationFile\";\n const methodName =\n modality === \"spreadsheet\"\n ? \"importXlsx\"\n : modality === \"document\"\n ? \"importDocx\"\n : \"importPptx\";\n const namespace = exactNamespace(module[namespaceName], namespaceName);\n const method = exactFunction(namespace[methodName], `${namespaceName}.${methodName}`);\n return async (blob) => await Reflect.apply(method, namespace, [blob]);\n}\n\nfunction officeFormat(modality: ArtifactOfficeModality): Readonly<{\n extension: \".xlsx\" | \".docx\" | \".pptx\";\n mimeType: ArtifactOfficeMimeType;\n}> {\n if (modality === \"spreadsheet\") {\n return {\n extension: \".xlsx\",\n mimeType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n };\n }\n if (modality === \"document\") {\n return {\n extension: \".docx\",\n mimeType: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n };\n }\n return {\n extension: \".pptx\",\n mimeType: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n };\n}\n\nfunction exactModule(value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(\"Verified artifact facade must be a module namespace\");\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactNamespace(value: unknown, label: string): Record<string, unknown> {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n throw new TypeError(`Verified artifact facade is missing ${label}`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactFunction(value: unknown, label: string): (...args: unknown[]) => unknown {\n if (typeof value !== \"function\") {\n throw new TypeError(`Verified artifact facade is missing ${label}()`);\n }\n return value as (...args: unknown[]) => unknown;\n}\n\nfunction sha256(bytes: Uint8Array): `sha256:${string}` {\n return `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n}\n"],"mappings":"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","names":[]}
@@ -9,7 +9,7 @@ import {
9
9
  disposeArtifact,
10
10
  getArtifactCompositeDiagnostics,
11
11
  getConfiguredArtifactRuntime
12
- } from "./chunk-6PBM7FKI.js";
12
+ } from "./chunk-QA3NXBAG.js";
13
13
  import "./chunk-HTJBLBDE.js";
14
14
  import "./chunk-VOJHMSM3.js";
15
15
  import {
@@ -56,7 +56,7 @@ import {
56
56
  TrackedChange,
57
57
  TrackedChanges
58
58
  } from "./chunk-66CT2ZRP.js";
59
- import "./chunk-B2ZJRZDA.js";
59
+ import "./chunk-LVPFJH2Z.js";
60
60
  import {
61
61
  SpreadsheetFidelityError,
62
62
  SpreadsheetSecurityError
@@ -87,13 +87,13 @@ import {
87
87
  Worksheet,
88
88
  WorksheetCollection,
89
89
  validateSerializedWorkbook
90
- } from "./chunk-XT2EJFCU.js";
90
+ } from "./chunk-SYFNJGH5.js";
91
91
  import "./chunk-4FRFNNBM.js";
92
92
  import "./chunk-FGZM4FQ6.js";
93
93
  import "./chunk-Q2FFHEY7.js";
94
94
  import "./chunk-O24KTEGP.js";
95
95
  import "./chunk-4BSENMAE.js";
96
- import "./chunk-N2IHNWBS.js";
96
+ import "./chunk-4YYYUZQH.js";
97
97
  import "./chunk-VUNV25KB.js";
98
98
  export {
99
99
  ChartSeriesCollection,
@@ -9,7 +9,7 @@ import {
9
9
  disposeArtifact,
10
10
  getArtifactCompositeDiagnostics,
11
11
  getConfiguredArtifactRuntime
12
- } from "./chunk-6PBM7FKI.js";
12
+ } from "./chunk-QA3NXBAG.js";
13
13
  import "./chunk-HTJBLBDE.js";
14
14
  import "./chunk-VOJHMSM3.js";
15
15
  import {
@@ -56,7 +56,7 @@ import {
56
56
  TrackedChange,
57
57
  TrackedChanges
58
58
  } from "./chunk-66CT2ZRP.js";
59
- import "./chunk-B2ZJRZDA.js";
59
+ import "./chunk-LVPFJH2Z.js";
60
60
  import {
61
61
  SpreadsheetFidelityError,
62
62
  SpreadsheetSecurityError
@@ -87,13 +87,13 @@ import {
87
87
  Worksheet,
88
88
  WorksheetCollection,
89
89
  validateSerializedWorkbook
90
- } from "./chunk-XT2EJFCU.js";
90
+ } from "./chunk-SYFNJGH5.js";
91
91
  import "./chunk-4FRFNNBM.js";
92
92
  import "./chunk-FGZM4FQ6.js";
93
93
  import "./chunk-Q2FFHEY7.js";
94
94
  import "./chunk-O24KTEGP.js";
95
95
  import "./chunk-4BSENMAE.js";
96
- import "./chunk-N2IHNWBS.js";
96
+ import "./chunk-4YYYUZQH.js";
97
97
  import "./chunk-VUNV25KB.js";
98
98
  export {
99
99
  ChartSeriesCollection,
@@ -9,7 +9,7 @@ import {
9
9
  disposeArtifact,
10
10
  getArtifactCompositeDiagnostics,
11
11
  getConfiguredArtifactRuntime
12
- } from "./chunk-6PBM7FKI.js";
12
+ } from "./chunk-QA3NXBAG.js";
13
13
  import "./chunk-HTJBLBDE.js";
14
14
  import "./chunk-VOJHMSM3.js";
15
15
  import {
@@ -56,7 +56,7 @@ import {
56
56
  TrackedChange,
57
57
  TrackedChanges
58
58
  } from "./chunk-66CT2ZRP.js";
59
- import "./chunk-B2ZJRZDA.js";
59
+ import "./chunk-LVPFJH2Z.js";
60
60
  import {
61
61
  SpreadsheetFidelityError,
62
62
  SpreadsheetSecurityError
@@ -87,13 +87,13 @@ import {
87
87
  Worksheet,
88
88
  WorksheetCollection,
89
89
  validateSerializedWorkbook
90
- } from "./chunk-XT2EJFCU.js";
90
+ } from "./chunk-SYFNJGH5.js";
91
91
  import "./chunk-4FRFNNBM.js";
92
92
  import "./chunk-FGZM4FQ6.js";
93
93
  import "./chunk-Q2FFHEY7.js";
94
94
  import "./chunk-O24KTEGP.js";
95
95
  import "./chunk-4BSENMAE.js";
96
- import "./chunk-N2IHNWBS.js";
96
+ import "./chunk-4YYYUZQH.js";
97
97
  import "./chunk-VUNV25KB.js";
98
98
  export {
99
99
  ChartSeriesCollection,