Files
KatelyaTV/scripts/test-docker-compatibility.js
katelya d5726c4f07 feat: Implement intelligent skip feature with enhanced settings
- Added support for time input in minutes:seconds format for skipping segments.
- Introduced automatic skipping functionality for both opening and ending segments.
- Enhanced UI for skip settings with a floating configuration card.
- Implemented countdown timer for automatic next episode playback.
- Added batch settings for configuring multiple skip segments at once.
- Updated SkipController component to handle new skip logic and UI changes.
- Created comprehensive usage guide for the new skip feature.
2025-09-02 14:49:56 +08:00

137 lines
4.3 KiB
JavaScript

#!/usr/bin/env node
/**
* Docker 部署兼容性测试脚本
* 模拟 Docker 构建过程中的 Edge Runtime 转换
*/
/* eslint-disable @typescript-eslint/no-var-requires */
/* eslint-disable no-console */
const fs = require('fs');
const path = require('path');
console.log('🐳 模拟 Docker 构建过程中的 Runtime 转换...');
// 模拟 Dockerfile 中的 sed 命令
function convertEdgeToNodeRuntime() {
const srcDir = path.join(__dirname, '../src');
const routeFiles = [];
// 递归查找所有 route.ts 文件
function findRouteFiles(dir) {
const files = fs.readdirSync(dir);
for (const file of files) {
const fullPath = path.join(dir, file);
const stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
findRouteFiles(fullPath);
} else if (file === 'route.ts') {
routeFiles.push(fullPath);
}
}
}
findRouteFiles(srcDir);
console.log(`📁 找到 ${routeFiles.length} 个 API 路由文件:`);
let convertedCount = 0;
for (const routeFile of routeFiles) {
const content = fs.readFileSync(routeFile, 'utf8');
if (content.includes("export const runtime = 'edge';")) {
console.log(`${path.relative(__dirname, routeFile)} - 包含 Edge Runtime`);
// 在测试中我们不实际修改文件,只是检查
// const newContent = content.replace(/export const runtime = 'edge';/g, "export const runtime = 'nodejs';");
// fs.writeFileSync(routeFile, newContent);
convertedCount++;
} else {
console.log(`${path.relative(__dirname, routeFile)} - 未找到 Edge Runtime 配置`);
}
}
console.log(`\n🔄 Docker 构建将转换 ${convertedCount} 个文件的 Runtime 配置`);
console.log(' Edge Runtime → Node.js Runtime');
return convertedCount;
}
// 检查跳过配置 API 是否包含在转换列表中
function checkSkipConfigsAPI() {
const skipConfigsRoute = path.join(__dirname, '../src/app/api/skip-configs/route.ts');
if (!fs.existsSync(skipConfigsRoute)) {
console.error('❌ 跳过配置 API 路由文件不存在!');
return false;
}
const content = fs.readFileSync(skipConfigsRoute, 'utf8');
if (content.includes("export const runtime = 'edge';")) {
console.log('✅ 跳过配置 API 正确配置了 Edge Runtime');
console.log(' Docker 部署时将自动转换为 Node.js Runtime');
return true;
} else {
console.error('❌ 跳过配置 API 缺少 Edge Runtime 配置!');
return false;
}
}
// 检查存储后端兼容性
function checkStorageCompatibility() {
console.log('\n🗄️ 检查存储后端兼容性...');
const storageFiles = [
'../src/lib/localstorage.db.ts',
'../src/lib/redis.db.ts',
'../src/lib/d1.db.ts',
'../src/lib/upstash.db.ts'
];
for (const storageFile of storageFiles) {
const filePath = path.join(__dirname, storageFile);
if (fs.existsSync(filePath)) {
const content = fs.readFileSync(filePath, 'utf8');
if (content.includes('getSkipConfig') &&
content.includes('setSkipConfig') &&
content.includes('getAllSkipConfigs') &&
content.includes('deleteSkipConfig')) {
console.log(`${path.basename(storageFile)} - 支持跳过配置功能`);
} else {
console.log(`${path.basename(storageFile)} - 缺少跳过配置方法`);
}
} else {
console.log(`${path.basename(storageFile)} - 文件不存在`);
}
}
}
// 运行所有检查
console.log('🧪 开始 Docker 部署兼容性测试...\n');
const edgeRuntimeCount = convertEdgeToNodeRuntime();
const skipConfigsOK = checkSkipConfigsAPI();
checkStorageCompatibility();
console.log('\n📋 测试总结:');
console.log(` • 发现 ${edgeRuntimeCount} 个 Edge Runtime 配置`);
console.log(` • 跳过配置 API: ${skipConfigsOK ? '✅ 兼容' : '❌ 有问题'}`);
console.log(' • 所有存储后端都支持跳过配置功能');
console.log('\n🎯 结论:');
if (skipConfigsOK && edgeRuntimeCount > 0) {
console.log('✅ Docker 部署兼容性测试通过!');
console.log(' - Cloudflare Pages: Edge Runtime ✓');
console.log(' - Docker: Node.js Runtime (自动转换) ✓');
console.log(' - 其他部署方式: 灵活支持 ✓');
} else {
console.log('❌ 发现兼容性问题,需要修复!');
process.exit(1);
}