refactor: deduplicate runtime validation into shared module

This commit is contained in:
2026-06-16 09:30:09 +02:00
committed by Milas Holsting
parent c3b3c606db
commit 9d8a497c48
3 changed files with 49 additions and 84 deletions

View File

@@ -5,42 +5,7 @@ import { updateQualityOptions } from "./quality";
import { safeLocalStorage } from "./storage";
import { streamUrlForMode } from "./source";
import { loadVideoSource } from "./video";
import type { ModeSource } from "./types";
const isRecord = (v: unknown): v is Record<string, unknown> =>
typeof v === "object" && v !== null && !Array.isArray(v);
const isStringArray = (v: unknown): v is string[] =>
Array.isArray(v) && v.every((item) => typeof item === "string");
const isSubtitleItemArray = (v: unknown): v is { lang: string; token: string }[] =>
Array.isArray(v) &&
v.every(
(item) => isRecord(item) && typeof item.lang === "string" && typeof item.token === "string",
);
const parseModeSources = (v: unknown): Record<string, ModeSource> => {
if (!isRecord(v)) return {};
const out: Record<string, ModeSource> = {};
for (const [key, value] of Object.entries(v)) {
if (!isRecord(value)) continue;
if (typeof value.token !== "string" || value.token === "") continue;
const subtitles = value.subtitles == null ? [] : value.subtitles;
if (!isSubtitleItemArray(subtitles)) continue;
const qualities = value.qualities;
out[key] = {
token: value.token,
type: typeof value.type === "string" ? value.type : undefined,
subtitles,
qualities: isStringArray(qualities) ? qualities : undefined,
};
}
return out;
};
import { isRecord, parseModeSources } from "./validate";
const alternateModeFor = (mode: string): "sub" | "dub" | null => {
if (mode === "sub") return "dub";