import { ScadNumber } from './ScadNumber'; export type Vector2 = readonly [T, T] | [T, T] | { x: T; y: T }; export type Vector3 = | readonly [T, T, T] | [T, T, T] | { x: T; y: T; z: T }; export type Vector = Vector2 | Vector3; export function isVector2( val: Vector2 | any, isPlain?: (x: any) => x is T ): val is Vector2 { if (!val || typeof val !== 'object') { return false; } if (Array.isArray(val) && val.length === 2) { return !isPlain || val.every(isPlain); } if ('x' in val && 'y' in val) { return !isPlain || (isPlain(val.x) && isPlain(val.y)); } return false; } export function isVector3( val: Vector3 | any, isPlain?: (x: any) => x is T ): val is Vector3 { if (!val || typeof val !== 'object') { return false; } if (Array.isArray(val) && val.length === 3) { return !isPlain || val.every(isPlain); } if ('x' in val && 'y' in val && 'z' in val) { return !isPlain || (isPlain(val.x) && isPlain(val.y) && isPlain(val.z)); } return false; } export function isVector(val: Vector | any): val is Vector { return isVector2(val) || isVector3(val); }