Enhance validation for DICOM viewer input data
- Added validation checks for nested stacks and stack objects to ensure imageIds are valid arrays of strings. - Implemented console warnings for invalid entries, including nested stacks and stack objects, to aid in debugging. - Improved error handling for unknown or invalid entries in the parsed data.
This commit is contained in:
+739
-734
File diff suppressed because it is too large
Load Diff
@@ -52,15 +52,22 @@ export function mountDicomViewers() {
|
|||||||
|
|
||||||
if (Array.isArray(parsed)) {
|
if (Array.isArray(parsed)) {
|
||||||
const out: any[] = [];
|
const out: any[] = [];
|
||||||
parsed.forEach(item => {
|
parsed.forEach((item, itemIdx) => {
|
||||||
// Case object with nested stacks: { caseId, stacks: [ { name, imageIds } ] }
|
// Case object with nested stacks: { caseId, stacks: [ { name, imageIds } ] }
|
||||||
if (item && typeof item === 'object' && Array.isArray(item.stacks)) {
|
if (item && typeof item === "object" && Array.isArray(item.stacks)) {
|
||||||
const caseId = item.caseId || item.caseUID || item.case || undefined;
|
const caseId = item.caseId || item.caseUID || item.case || undefined;
|
||||||
item.stacks.forEach((s: any) => {
|
item.stacks.forEach((s: any, sIdx: number) => {
|
||||||
let imageIds: string[] = [];
|
let imageIds: string[] = [];
|
||||||
if (Array.isArray(s)) imageIds = s;
|
if (Array.isArray(s)) imageIds = s;
|
||||||
else if (Array.isArray(s.imageIds)) imageIds = s.imageIds;
|
else if (Array.isArray(s.imageIds)) imageIds = s.imageIds;
|
||||||
else if (Array.isArray(s.i)) imageIds = s.i;
|
else if (Array.isArray(s.i)) imageIds = s.i;
|
||||||
|
|
||||||
|
// Validation
|
||||||
|
if (!Array.isArray(imageIds) || imageIds.length === 0 || !imageIds.every(x => typeof x === "string")) {
|
||||||
|
console.warn(`data-named-stacks: skipping invalid nested stack at parsed[${itemIdx}].stacks[${sIdx}]`, s);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
out.push({
|
out.push({
|
||||||
imageIds: toWadouri(imageIds),
|
imageIds: toWadouri(imageIds),
|
||||||
name: s.name || s.label || undefined,
|
name: s.name || s.label || undefined,
|
||||||
@@ -73,6 +80,12 @@ export function mountDicomViewers() {
|
|||||||
// Stack object: { imageIds, i, name, caseId }
|
// Stack object: { imageIds, i, name, caseId }
|
||||||
if (item && typeof item === 'object' && (Array.isArray(item.imageIds) || Array.isArray(item.i))) {
|
if (item && typeof item === 'object' && (Array.isArray(item.imageIds) || Array.isArray(item.i))) {
|
||||||
const imageIds = Array.isArray(item.imageIds) ? item.imageIds : item.i;
|
const imageIds = Array.isArray(item.imageIds) ? item.imageIds : item.i;
|
||||||
|
|
||||||
|
if (!Array.isArray(imageIds) || imageIds.length === 0 || !imageIds.every(x => typeof x === "string")) {
|
||||||
|
console.warn(`data-named-stacks: skipping invalid stack object at parsed[${itemIdx}]`, item);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
out.push({
|
out.push({
|
||||||
imageIds: toWadouri(imageIds),
|
imageIds: toWadouri(imageIds),
|
||||||
name: item.name || item.label || undefined,
|
name: item.name || item.label || undefined,
|
||||||
@@ -86,6 +99,9 @@ export function mountDicomViewers() {
|
|||||||
out.push(toDescriptor(item));
|
out.push(toDescriptor(item));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unknown / invalid entry
|
||||||
|
console.warn(`data-named-stacks: unknown or invalid entry at parsed[${itemIdx}] — skipping`, item);
|
||||||
});
|
});
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user