import { isValidColor } from 'src/shared/utils/validator.utils'; import { Vec2, Line, BezierSegment, LayerObject, Layer, } from './renderer.interfaces'; export const isValidVec2 = (subject: Vec2) => Array.isArray(subject) && subject.length === 2 && subject.every((entry) => !isNaN(entry)); export const isValidLine = (subject: Line) => // Segments must be array Array.isArray(subject.segments) && // Every segment must contain at least a valid end point subject.segments.every((segment) => { // Check segment vector if (segment.start && !isValidVec2(segment.start)) return false; if (!segment.end || !isValidVec2(segment.end)) return false; // Check bezier vector const bezier = segment as BezierSegment; if (bezier.startControl && !isValidVec2(bezier.startControl)) return false; if (bezier.endControl && !isValidVec2(bezier.endControl)) return false; return true; }) && // Color must be a valid color value isValidColor(subject.color) && // Closed must be a boolean (subject.closed == null || typeof subject.closed === 'boolean'); export const isValidLayerObject = (object: LayerObject) => // Must be of correct type ['line', 'room', 'curve', 'object'].includes(object.type) && // If has segments, must be a valid line (!(object as Line).segments || isValidLine(object as Line)) && // Name must be present object.name != null; export const isValidLayer = (layer: Layer) => // Must have correct color value isValidColor(layer.color) && // Must have contents Array.isArray(layer.contents) && // Must have valid contents layer.contents.every(isValidLayerObject) && // Must be named layer.name != null;