refactor(*): 代码质量 - 优化前后端实现并完善协议与画布验证

This commit is contained in:
ddcat666
2026-10-08 19:38:57 +08:00
parent 9be3aa8235
commit 87ecb3000c
724 changed files with 3046 additions and 3885 deletions

View File

@@ -1,4 +1,5 @@
import axios from "axios";
import { readFileAsDataUrl } from "@/lib/image-utils";
import type { ApiEnvelope, ApiVideoResponse, RequestOptions, SeedanceTask, VideoGenerationResult } from "./video-contracts";
@@ -54,29 +55,23 @@ export async function assertVideoBlob(blob: Blob) {
export function delay(ms: number, signal?: AbortSignal) {
return new Promise<void>((resolve, reject) => {
if (signal?.aborted) {
reject(new DOMException("Aborted", "AbortError"));
return;
}
const timer = setTimeout(resolve, ms);
signal?.addEventListener(
"abort",
() => {
clearTimeout(timer);
reject(new DOMException("Aborted", "AbortError"));
},
{ once: true },
);
let timer: ReturnType<typeof setTimeout> | undefined;
const finish = (aborted: boolean) => {
clearTimeout(timer);
signal?.removeEventListener("abort", cancel);
if (aborted) reject(new DOMException("Aborted", "AbortError"));
else resolve();
};
const cancel = () => finish(true);
if (signal?.aborted) { cancel(); return; }
signal?.addEventListener("abort", cancel, { once: true });
timer = setTimeout(() => finish(false), ms);
});
}
export function blobToDataUrl(blob: Blob) {
return new Promise<string>((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(String(reader.result || ""));
reader.onerror = () => reject(new Error("读取本地素材失败"));
reader.readAsDataURL(blob);
});
export async function blobToDataUrl(blob: Blob) {
try { return await readFileAsDataUrl(blob); }
catch { throw new Error("读取本地素材失败"); }
}
export async function videoResultFromUrl(url: string, options?: RequestOptions): Promise<VideoGenerationResult> {