Files
openmaic/OpenMAIC/lib/document/transforms/utils.ts
2026-08-16 14:58:47 +08:00

49 lines
1.7 KiB
TypeScript

import type { DocumentArtifact } from '../types';
function cloneRecord(value: Record<string, unknown>): Record<string, unknown> {
return structuredClone(value);
}
export function cloneDocumentArtifact(artifact: DocumentArtifact): DocumentArtifact {
return {
...artifact,
metadata: { ...artifact.metadata },
blocks: artifact.blocks.map((block) => ({
...block,
bbox: block.bbox ? { ...block.bbox } : undefined,
metadata: block.metadata ? cloneRecord(block.metadata) : undefined,
})),
assets: artifact.assets.map((asset) => ({
...asset,
metadata: asset.metadata ? cloneRecord(asset.metadata) : undefined,
})),
citations: artifact.citations?.map((citation) => ({
...citation,
metadata: citation.metadata ? cloneRecord(citation.metadata) : undefined,
})),
diagnostics: artifact.diagnostics?.map((diagnostic) => ({
...diagnostic,
metadata: diagnostic.metadata ? cloneRecord(diagnostic.metadata) : undefined,
})),
transforms: artifact.transforms?.map((record) => ({
...record,
options: record.options ? cloneRecord(record.options) : undefined,
diagnostics: record.diagnostics?.map((diagnostic) => ({
...diagnostic,
metadata: diagnostic.metadata ? cloneRecord(diagnostic.metadata) : undefined,
})),
})),
};
}
export function documentTextLength(artifact: DocumentArtifact): number {
return artifact.blocks.reduce(
(total, block) => total + (block.text?.length ?? 0) + (block.html?.length ?? 0),
0,
);
}
export function throwIfAborted(signal?: AbortSignal): void {
if (signal?.aborted) throw new DOMException('Document transform was aborted', 'AbortError');
}