/** * 素材命令(重命名 / 删除 / 分类保存)失败原因的统一出口。 * * Rust 侧的项目身份 / 版本 CAS 拒绝是**结构化错误码**(`project-identity-conflict` / * `project-revision-conflict`):直接透出就是给用户看一串代码。这里只翻译已知的码, * 其余错误原样透出 —— 宁可显示后端原文,也不把原因吞掉换成「操作失败」这种无信息文案。 * * 口径与 `resourceVersionReplacementErrorMessage` 里同样的两条映射逐字一致, * 三条链路给用户的说法必须一样。 */ export function projectAssetCommandErrorMessage( error: unknown, fallback: string, ): string { let message = ''; if (typeof error === 'string') { message = error.trim(); } else if (error instanceof Error) { message = error.message.trim(); } else if (error !== null && error !== undefined) { message = String(error).trim(); } if (!message) { return fallback; } if (message.includes('project-revision-conflict')) { return '项目已被其它操作改动,请刷新后重试'; } if (message.includes('project-identity-conflict')) { return '项目身份不一致,请重新打开项目后再试'; } return message; }