// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. export function isArrayOf(v: unknown, check: (e: unknown) => boolean): v is T[] { if (!Array.isArray(v)) { return false; } return v.every(check); } export function isStringArray(v: unknown): v is string[] { return isArrayOf(v, (e) => typeof e === 'string'); } export function isRecordOf(v: unknown, check: (e: unknown) => boolean): v is Record { if (typeof v !== 'object' || !v) { return false; } if (!(Object.keys(v).every((k) => typeof k === 'string'))) { return false; } if (!(Object.values(v).every(check))) { return false; } return true; } export function ensureString(v: unknown): string { return typeof v === 'string' ? v : ''; } export function ensureNumber(v: unknown): number { return typeof v === 'number' ? v : 0; } export function secureGetFromRecord(v: Record | undefined, key: string) { return typeof v === 'object' && v && Object.prototype.hasOwnProperty.call(v, key) ? v[key] : undefined; } export function includes(array: T[], value: U) { return array.includes(value as T); }