21 lines
788 B
TypeScript

/** Explicit switches take precedence over the common beat-sync phrase shortcut. */
export function resolveSmartEditIntent<
T extends {
mode?: string;
prompt?: string;
beatSync?: boolean;
variants?: number;
music?: { url: string };
},
>(draft: T) {
const prompt = draft.prompt || "";
const beatSync =
draft.beatSync ??
(/卡点|beat[ -]?sync/i.test(prompt) &&
!/(?:不|不要|无需|不用|取消|关闭).{0,5}卡点|no beat[ -]?sync/i.test(prompt));
return { ...draft, beatSync, variants: draft.variants ?? (draft.mode === "ads" ? 3 : 1) };
}
export function assertBeatMusic(draft: { beatSync?: boolean; music?: { url: string } }) {
if (draft.beatSync && !draft.music?.url) throw Error("音乐卡点需要先选择或上传背景音乐");
}