From b60d069c026abfe727c3abed7ace90f586db0be2 Mon Sep 17 00:00:00 2001 From: shinya Date: Tue, 24 Jun 2025 10:30:36 +0800 Subject: [PATCH] feat: move config to ts --- Dockerfile | 1 - config.example.json | 4 -- config.json | 85 -------------------------- next.config.js | 4 -- src/components/NextImage.tsx | 58 ------------------ src/lib/config.ts | 115 +++++++++++++++++++++++++++++------ 6 files changed, 97 insertions(+), 170 deletions(-) delete mode 100644 config.example.json delete mode 100644 config.json delete mode 100644 src/components/NextImage.tsx diff --git a/Dockerfile b/Dockerfile index d095043..259d6da 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,7 +40,6 @@ COPY --from=builder /app/public ./public COPY --from=builder /app/.next ./.next COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json -COPY --from=builder /app/config.json ./config.json COPY --from=builder /app/next.config.js ./next.config.js # 切换到非特权用户 diff --git a/config.example.json b/config.example.json deleted file mode 100644 index dd7aff1..0000000 --- a/config.example.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "cache_time": 7200, - "api_site": {} -} diff --git a/config.json b/config.json deleted file mode 100644 index 24d5e68..0000000 --- a/config.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "cache_time": 7200, - "api_site": { - "dyttzy": { - "api": "http://caiji.dyttzyapi.com/api.php/provide/vod", - "name": "电影天堂资源", - "detail": "http://caiji.dyttzyapi.com" - }, - "ruyi": { - "api": "https://cj.rycjapi.com/api.php/provide/vod", - "name": "如意资源" - }, - "bfzy": { - "api": "https://bfzyapi.com/api.php/provide/vod", - "name": "暴风资源" - }, - "tyyszy": { - "api": "https://tyyszy.com/api.php/provide/vod", - "name": "天涯资源" - }, - "ffzy": { - "api": "http://ffzy5.tv/api.php/provide/vod", - "name": "非凡影视", - "detail": "http://ffzy5.tv" - }, - "heimuer": { - "api": "https://json.heimuer.xyz/api.php/provide/vod", - "name": "黑木耳", - "detail": "https://heimuer.tv" - }, - "zy360": { - "api": "https://360zy.com/api.php/provide/vod", - "name": "360资源" - }, - "iqiyi": { - "api": "https://www.iqiyizyapi.com/api.php/provide/vod", - "name": "iqiyi资源" - }, - "wolong": { - "api": "https://wolongzyw.com/api.php/provide/vod", - "name": "卧龙资源" - }, - "hwba": { - "api": "https://cjhwba.com/api.php/provide/vod", - "name": "华为吧资源" - }, - "jisu": { - "api": "https://jszyapi.com/api.php/provide/vod", - "name": "极速资源", - "detail": "https://jszyapi.com" - }, - "dbzy": { - "api": "https://dbzy.tv/api.php/provide/vod", - "name": "豆瓣资源" - }, - "mozhua": { - "api": "https://mozhuazy.com/api.php/provide/vod", - "name": "魔爪资源" - }, - "mdzy": { - "api": "https://www.mdzyapi.com/api.php/provide/vod", - "name": "魔都资源" - }, - "zuid": { - "api": "https://api.zuidapi.com/api.php/provide/vod", - "name": "最大资源" - }, - "yinghua": { - "api": "https://m3u8.apiyhzy.com/api.php/provide/vod", - "name": "樱花资源" - }, - "wujin": { - "api": "https://api.wujinapi.me/api.php/provide/vod", - "name": "无尽资源" - }, - "wwzy": { - "api": "https://wwzy.tv/api.php/provide/vod", - "name": "旺旺短剧" - }, - "ikun": { - "api": "https://ikunzyapi.com/api.php/provide/vod", - "name": "iKun资源" - } - } -} diff --git a/next.config.js b/next.config.js index f6ea510..a68985a 100644 --- a/next.config.js +++ b/next.config.js @@ -14,14 +14,10 @@ const nextConfig = { { protocol: 'https', hostname: '**', - port: '', - pathname: '**', }, { protocol: 'http', hostname: '**', - port: '', - pathname: '**', }, ], }, diff --git a/src/components/NextImage.tsx b/src/components/NextImage.tsx deleted file mode 100644 index e0bae90..0000000 --- a/src/components/NextImage.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import Image, { ImageProps } from 'next/image'; -import * as React from 'react'; - -import { cn } from '@/lib/utils'; - -type NextImageProps = { - useSkeleton?: boolean; - classNames?: { - image?: string; - blur?: string; - }; - alt: string; -} & ( - | { width: string | number; height: string | number } - | { layout: 'fill'; width?: string | number; height?: string | number } -) & - ImageProps; - -/** - * - * @description Must set width using `w-` className - * @param useSkeleton add background with pulse animation, don't use it if image is transparent - */ -export default function NextImage({ - useSkeleton = false, - src, - width, - height, - alt, - className, - classNames, - ...rest -}: NextImageProps) { - const [status, setStatus] = React.useState( - useSkeleton ? 'loading' : 'complete' - ); - const widthIsSet = className?.includes('w-') ?? false; - - return ( -
- {alt} setStatus('complete')} - {...rest} - /> -
- ); -} diff --git a/src/lib/config.ts b/src/lib/config.ts index fede9ed..986c49d 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -1,6 +1,3 @@ -import fs from 'fs'; -import path from 'path'; - export interface ApiSite { key: string; api: string; @@ -8,6 +5,13 @@ export interface ApiSite { detail?: string; } +// 配置文件中的 API 站点类型(不包含 key 属性) +export interface ApiSiteConfig { + api: string; + name: string; + detail?: string; +} + export interface StorageConfig { type: 'localstorage' | 'database'; database?: { @@ -22,7 +26,7 @@ export interface StorageConfig { export interface Config { cache_time?: number; api_site: { - [key: string]: ApiSite; + [key: string]: ApiSiteConfig; }; storage?: StorageConfig; } @@ -48,28 +52,103 @@ export const API_CONFIG = { }, }; -let config: Config | null = null; +// 配置数据,直接嵌入不再从文件读取 +const CONFIG_DATA: Config = { + cache_time: 7200, + api_site: { + dyttzy: { + api: 'http://caiji.dyttzyapi.com/api.php/provide/vod', + name: '电影天堂资源', + detail: 'http://caiji.dyttzyapi.com', + }, + ruyi: { + api: 'https://cj.rycjapi.com/api.php/provide/vod', + name: '如意资源', + }, + bfzy: { + api: 'https://bfzyapi.com/api.php/provide/vod', + name: '暴风资源', + }, + tyyszy: { + api: 'https://tyyszy.com/api.php/provide/vod', + name: '天涯资源', + }, + ffzy: { + api: 'http://ffzy5.tv/api.php/provide/vod', + name: '非凡影视', + detail: 'http://ffzy5.tv', + }, + heimuer: { + api: 'https://json.heimuer.xyz/api.php/provide/vod', + name: '黑木耳', + detail: 'https://heimuer.tv', + }, + zy360: { + api: 'https://360zy.com/api.php/provide/vod', + name: '360资源', + }, + iqiyi: { + api: 'https://www.iqiyizyapi.com/api.php/provide/vod', + name: 'iqiyi资源', + }, + wolong: { + api: 'https://wolongzyw.com/api.php/provide/vod', + name: '卧龙资源', + }, + hwba: { + api: 'https://cjhwba.com/api.php/provide/vod', + name: '华为吧资源', + }, + jisu: { + api: 'https://jszyapi.com/api.php/provide/vod', + name: '极速资源', + detail: 'https://jszyapi.com', + }, + dbzy: { + api: 'https://dbzy.tv/api.php/provide/vod', + name: '豆瓣资源', + }, + mozhua: { + api: 'https://mozhuazy.com/api.php/provide/vod', + name: '魔爪资源', + }, + mdzy: { + api: 'https://www.mdzyapi.com/api.php/provide/vod', + name: '魔都资源', + }, + zuid: { + api: 'https://api.zuidapi.com/api.php/provide/vod', + name: '最大资源', + }, + yinghua: { + api: 'https://m3u8.apiyhzy.com/api.php/provide/vod', + name: '樱花资源', + }, + wujin: { + api: 'https://api.wujinapi.me/api.php/provide/vod', + name: '无尽资源', + }, + wwzy: { + api: 'https://wwzy.tv/api.php/provide/vod', + name: '旺旺短剧', + }, + ikun: { + api: 'https://ikunzyapi.com/api.php/provide/vod', + name: 'iKun资源', + }, + }, +}; export function getConfig(): Config { - if (config) { - return config; - } - - const configPath = path.join(process.cwd(), 'config.json'); - const configContent = fs.readFileSync(configPath, 'utf-8'); - const parsedConfig = JSON.parse(configContent) as Config; - config = parsedConfig; - return parsedConfig; + return CONFIG_DATA; } export function getCacheTime(): number { - const config = getConfig(); - return config.cache_time || 300; // 默认5分钟缓存 + return CONFIG_DATA.cache_time || 300; // 默认5分钟缓存 } export function getApiSites(): ApiSite[] { - const config = getConfig(); - return Object.entries(config.api_site).map(([key, site]) => ({ + return Object.entries(CONFIG_DATA.api_site).map(([key, site]) => ({ ...site, key, }));