import type { colors } from "unocss/preset-mini" import type { columns, fixedColumnIds } from "./metadata" import type { originSources } from "./pre-sources" export type Color = "primary" | Exclude type ConstSources = typeof originSources type MainSourceID = keyof(ConstSources) export type SourceID = { [Key in MainSourceID]: ConstSources[Key] extends { disable?: true } ? never : ConstSources[Key] extends { sub?: infer SubSource } ? { // @ts-expect-error >_< [SubKey in keyof SubSource]: SubSource[SubKey] extends { disable?: true } ? never : `${Key}-${SubKey}` }[keyof SubSource] | Key : Key; }[MainSourceID] export type AllSourceID = { [Key in MainSourceID]: ConstSources[Key] extends { sub?: infer SubSource } ? keyof { // @ts-expect-error >_< [SubKey in keyof SubSource as `${Key}-${SubKey}`]: never } | Key : Key }[MainSourceID] // export type DisabledSourceID = Exclude export type ColumnID = keyof typeof columns export type Metadata = Record export interface PrimitiveMetadata { updatedTime: number data: Record action: "init" | "manual" | "sync" } export type FixedColumnID = (typeof fixedColumnIds)[number] export type HiddenColumnID = Exclude export interface OriginSource extends Partial> { name: string sub?: Record>> } export interface Source { name: string /** * 刷新的间隔时间 */ interval: number color: Color /** * Subtitle 小标题 */ title?: string desc?: string /** * Default normal timeline */ type?: "hottest" | "realtime" column?: HiddenColumnID home?: string /** * @default false */ disable?: boolean | "cf" redirect?: SourceID } export interface Column { name: string sources: SourceID[] } export interface NewsItem { id: string | number // unique title: string url: string mobileUrl?: string pubDate?: number | string extra?: { hover?: string date?: number | string info?: false | string diff?: number icon?: false | string | { url: string scale: number } } } export interface SourceResponse { status: "success" | "cache" id: SourceID updatedTime: number | string items: NewsItem[] }