import { SCREEN_CHANGE_TYPE_VALUES, SCREEN_DETECTION_TYPE_VALUES, } from '../ScreenChangePayload'; export function validateScreenName(screenName: any) { if (typeof screenName !== 'string') { throw new Error( `Invalid screenName: Expected a string but received ${typeof screenName}.` ); } if (screenName.length === 0) { throw new Error('Invalid screenName: Value cannot be an empty string.'); } } export function validateChangeType(changeType: any) { if (!SCREEN_CHANGE_TYPE_VALUES.includes(changeType)) { throw new Error( `Invalid changeType: Expected one of [${SCREEN_CHANGE_TYPE_VALUES.join(', ')}] but received '${changeType}'.` ); } } export function validateDetectionType(detectionType: any) { if (!SCREEN_DETECTION_TYPE_VALUES.includes(detectionType)) { throw new Error( `Invalid detectionType: Expected one of [${SCREEN_DETECTION_TYPE_VALUES.join(', ')}] but received '${detectionType}'.` ); } } export function validateScreenHierarchy(screenHierarchy: any) { if (!Array.isArray(screenHierarchy)) { throw new Error( `Invalid screenHierarchy: Expected an array but received ${typeof screenHierarchy}.` ); } if (screenHierarchy.length === 0) { throw new Error('Invalid screenHierarchy: Array cannot be empty.'); } screenHierarchy.forEach((element, index) => { try { validateScreenHierarchyElement(element); } catch (error) { throw new Error( `Invalid screenHierarchyElement at index ${index}: ${getErrorMessage(error)}` ); } }); } function validateScreenHierarchyElement(element: any) { if (!element || typeof element !== 'object') { throw new Error(`Expected an object but received ${typeof element}.`); } if (!('screenName' in element)) { throw new Error(`Missing required property 'screenName'.`); } if (typeof element.screenName !== 'string') { throw new Error( `Property 'screenName' must be a string but received ${typeof element.screenName}.` ); } if (element.screenName.length === 0) { throw new Error(`Property 'screenName' cannot be an empty string.`); } if ('screenType' in element) { if (typeof element.screenType !== 'string') { throw new Error( `Property 'screenType' must be a string but received ${typeof element.screenType}.` ); } if (element.screenType.length === 0) { throw new Error(`Property 'screenType' cannot be an empty string.`); } } } function getErrorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); }