Files
ftb-project-management/apps/web/lib/product-overview-persistence.ts
2026-06-30 15:21:44 +08:00

36 lines
1.2 KiB
TypeScript

export function shouldPersistRemoteOverview(overview: unknown): boolean {
if (!Array.isArray(overview) || overview.length === 0) return false;
return overview.some(hasFrontendTreeSignal);
}
function hasFrontendTreeSignal(product: unknown): boolean {
if (!isRecord(product)) return false;
const projects = Array.isArray(product.projects) ? product.projects : [];
const versions = Array.isArray(product.versions) ? product.versions : [];
return projects.some(isFrontendProject) || versions.some(isFrontendVersion);
}
function isFrontendProject(project: unknown): boolean {
return (
isRecord(project) &&
typeof project.id === 'string' &&
project.id.startsWith('proj-') &&
typeof project.name === 'string'
);
}
function isFrontendVersion(version: unknown): boolean {
if (!isRecord(version) || typeof version.id !== 'string' || typeof version.name !== 'string') return false;
return (
version.id.startsWith('ver-') ||
typeof version.status === 'string' ||
typeof version.expectedReleaseDate === 'string' ||
Array.isArray(version.members) ||
typeof version.priority === 'string'
);
}
function isRecord(value: unknown): value is Record<string, unknown> {
return typeof value === 'object' && value !== null;
}