in src-js/src/document.ts [1532:1629]
static _consolidateMultipleResponses(
textractResultArray: ApiResponsePages
): ApiResponsePage & ApiResponseWithContent {
if (!textractResultArray?.length) throw new Error(`Input Textract Results list empty!`);
let nPages = 0;
const docMetadata: ApiDocumentMetadata = { Pages: 0 };
let blocks: ApiBlock[] = [];
let modelVersion = "";
let analysisType: null | "AnalyzeDocument" | "DetectText" = null;
let jobStatus: null | "IN_PROGRESS" | "SUCCEEDED" | "PARTIAL_SUCCESS" = null;
let jobStatusMessage: null | string = null;
let warnings: null | ApiResultWarning[] = null;
for (const textractResult of textractResultArray) {
if ("Blocks" in textractResult && textractResult.Blocks) {
blocks = blocks.concat(textractResult.Blocks);
} else {
console.warn("Found Textract response with no content");
}
if ("DocumentMetadata" in textractResult) {
Object.assign(docMetadata, textractResult["DocumentMetadata"]);
nPages = Math.max(nPages, textractResult.DocumentMetadata.Pages);
}
if ("AnalyzeDocumentModelVersion" in textractResult) {
if (analysisType && analysisType !== "AnalyzeDocument") {
throw new Error("Inconsistent textractResults contain both AnalyzeDocument and DetectText results");
}
analysisType = "AnalyzeDocument";
if (modelVersion && modelVersion !== textractResult.AnalyzeDocumentModelVersion) {
console.warn(
`Inconsistent Textract model versions ${modelVersion} and ${textractResult.AnalyzeDocumentModelVersion}: Ignoring latter`
);
} else {
modelVersion = textractResult.AnalyzeDocumentModelVersion;
}
}
if ("DetectDocumentTextModelVersion" in textractResult) {
if (analysisType && analysisType !== "DetectText") {
throw new Error("Inconsistent textractResults contain both AnalyzeDocument and DetectText results");
}
analysisType = "DetectText";
if (modelVersion && modelVersion !== textractResult.DetectDocumentTextModelVersion) {
console.warn(
`Inconsistent Textract model versions ${modelVersion} and ${textractResult.DetectDocumentTextModelVersion}: Ignoring latter`
);
} else {
modelVersion = textractResult.DetectDocumentTextModelVersion;
}
}
if ("JobStatus" in textractResult) {
if (
textractResult.JobStatus == "FAILED" ||
(textractResult.JobStatus || "").toLocaleUpperCase().indexOf("FAIL") >= 0
) {
throw new Error(`Textract results contain failed job of status ${textractResult.JobStatus}`);
} else if (jobStatus && jobStatus !== textractResult.JobStatus) {
throw new Error(
`Textract results inconsistent JobStatus values ${jobStatus}, ${textractResult.JobStatus}`
);
}
jobStatus = textractResult.JobStatus;
}
if ("StatusMessage" in textractResult && textractResult.StatusMessage) {
if (jobStatusMessage && textractResult.StatusMessage !== jobStatusMessage) {
console.warn(`Multiple StatusMessages in Textract results - keeping longest`);
if (textractResult.StatusMessage.length > jobStatusMessage.length) {
jobStatusMessage = textractResult.StatusMessage;
}
} else {
jobStatusMessage = textractResult.StatusMessage;
}
}
if ("Warnings" in textractResult && textractResult.Warnings) {
warnings = warnings ? warnings.concat(textractResult.Warnings) : textractResult.Warnings;
}
}
const content: ApiResponseWithContent = {
DocumentMetadata: docMetadata,
Blocks: blocks,
};
const modelVersionFields =
analysisType == "AnalyzeDocument"
? { AnalyzeDocumentModelVersion: modelVersion }
: analysisType == "DetectText"
? { DetectDocumentTextModelVersion: modelVersion }
: { AnalyzeDocumentModelVersion: modelVersion || "Unknown" };
const jobStatusFields = jobStatus ? { JobStatus: jobStatus } : {};
const statusMessageFields = jobStatusMessage ? { StatusMessage: jobStatusMessage } : {};
const warningFields = warnings ? { ArfBarf: warnings } : {};
return {
...content,
...modelVersionFields,
...jobStatusFields,
...statusMessageFields,
...warningFields,
};
}