Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/locales/ach-UG/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,9 @@
"edit_conflict": "Edit Conflict",
"confirm_override_when_edit_conflict": "This script was edited in another instance. Replacing it will overwrite those changes. Would you like to keep this version instead?",
"save_abort_when_edit_conflict": "The script was edited in another instance. Save aborted.",
"scriptname_conflict": "Script Name Conflict",
"confirm_save_when_scriptname_conflict": "This script name is already used by another script. Do you still want to save it?",
"save_abort_when_scriptname_conflict": "This script name is already used by another script. Save aborted.",
"eslint_config_format_error": "crwdns8614:0crwdne8614:0",
"export_success": "crwdns8616:0crwdne8616:0",
"get_backup_dir_url_failed": "crwdns8618:0crwdne8618:0",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/de-DE/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@
"edit_conflict": "Bearbeitungskonflikt",
"confirm_override_when_edit_conflict": "Dieses Skript wurde in einer anderen Instanz bearbeitet. Beim Ersetzen werden diese Änderungen überschrieben. Möchten Sie stattdessen diese Version behalten?",
"save_abort_when_edit_conflict": "Dieses Skript wurde in einer anderen Instanz bearbeitet. Speichern abgebrochen.",
"scriptname_conflict": "Skriptname-Konflikt",
"confirm_save_when_scriptname_conflict": "Dieser Skriptname wird bereits von einem anderen Skript verwendet. Möchten Sie ihn trotzdem speichern?",
"save_abort_when_scriptname_conflict": "Dieser Skriptname wird bereits von einem anderen Skript verwendet. Speichern abgebrochen.",
"eslint_config_format_error": "eslint-Konfigurationsformat-Fehler",
"export_success": "Export erfolgreich",
"get_backup_dir_url_failed": "Backup-Verzeichnis-Adresse abrufen fehlgeschlagen",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/en-US/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@
"edit_conflict": "Edit Conflict",
"confirm_override_when_edit_conflict": "This script was edited in another instance. Replacing it will overwrite those changes. Would you like to keep this version instead?",
"save_abort_when_edit_conflict": "The script was edited in another instance. Save aborted.",
"scriptname_conflict": "Script Name Conflict",
"confirm_save_when_scriptname_conflict": "This script name is already used by another script. Do you still want to save it?",
"save_abort_when_scriptname_conflict": "This script name is already used by another script. Save aborted.",
"eslint_config_format_error": "eslint configuration format error",
"export_success": "Dump success saved",
"get_backup_dir_url_failed": "Failed to get backup directory address",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/ja-JP/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@
"edit_conflict": "編集の競合",
"confirm_override_when_edit_conflict": "このスクリプトは別のインスタンスで編集されています。置き換えるとその変更は上書きされます。このバージョンを保持しますか?",
"save_abort_when_edit_conflict": "このスクリプトは別のインスタンスで編集されています。保存は中止されました。",
"scriptname_conflict": "スクリプト名の競合",
"confirm_save_when_scriptname_conflict": "このスクリプト名はすでに別のスクリプトで使用されています。それでも保存しますか?",
"save_abort_when_scriptname_conflict": "このスクリプト名はすでに別のスクリプトで使用されています。保存を中止しました。",
"eslint_config_format_error": "ESLint設定フォーマットエラー",
"export_success": "エクスポートに成功しました",
"get_backup_dir_url_failed": "バックアップディレクトリアドレスの取得に失敗しました",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/ru-RU/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@
"edit_conflict": "Конфликт редактирования",
"confirm_override_when_edit_conflict": "Этот скрипт был изменён в другом экземпляре. Замена приведёт к перезаписи этих изменений. Хотите сохранить эту версию?",
"save_abort_when_edit_conflict": "Скрипт был изменён в другом экземпляре. Сохранение отменено.",
"scriptname_conflict": "Конфликт имени скрипта",
"confirm_save_when_scriptname_conflict": "Это имя скрипта уже используется другим скриптом. Вы всё равно хотите сохранить его?",
"save_abort_when_scriptname_conflict": "Это имя скрипта уже используется другим скриптом. Сохранение отменено.",
"eslint_config_format_error": "Ошибка формата конфигурации ESLint",
"export_success": "Экспорт успешен",
"get_backup_dir_url_failed": "Ошибка получения адреса папки резервных копий",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/vi-VN/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@
"edit_conflict": "Xung đột chỉnh sửa",
"confirm_override_when_edit_conflict": "Tập lệnh này đã được chỉnh sửa ở một phiên bản khác. Việc thay thế sẽ ghi đè các thay đổi đó. Bạn có muốn giữ phiên bản này không?",
"save_abort_when_edit_conflict": "Tập lệnh đã được chỉnh sửa ở một phiên bản khác. Đã hủy lưu.",
"scriptname_conflict": "Xung đột tên script",
"confirm_save_when_scriptname_conflict": "Tên script này đã được sử dụng bởi một script khác. Bạn vẫn muốn lưu chứ?",
"save_abort_when_scriptname_conflict": "Tên script này đã được sử dụng bởi một script khác. Đã hủy lưu.",
"eslint_config_format_error": "Lỗi định dạng cấu hình eslint",
"export_success": "Đổ dữ liệu thành công đã lưu",
"get_backup_dir_url_failed": "Không thể lấy địa chỉ thư mục sao lưu",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/zh-CN/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@
"edit_conflict": "编辑冲突",
"confirm_override_when_edit_conflict": "此脚本已在其他实例中被修改。替换将覆盖这些更改。是否要保留此版本?",
"save_abort_when_edit_conflict": "该脚本已在其他实例中被修改,保存已中止。",
"scriptname_conflict": "脚本名称冲突",
"confirm_save_when_scriptname_conflict": "该脚本名称已被其他脚本使用,是否仍要保存?",
"save_abort_when_scriptname_conflict": "该脚本名称已被其他脚本使用,已取消保存。",
"eslint_config_format_error": "ESLint配置格式错误",
"export_success": "导出成功",
"get_backup_dir_url_failed": "获取备份目录地址失败",
Expand Down
3 changes: 3 additions & 0 deletions src/locales/zh-TW/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@
"edit_conflict": "編輯衝突",
"confirm_override_when_edit_conflict": "此腳本已在其他實例中被修改。替換將覆蓋這些變更。是否要保留此版本?",
"save_abort_when_edit_conflict": "此腳本已在其他實例中被修改,已中止儲存。",
"scriptname_conflict": "腳本名稱衝突",
"confirm_save_when_scriptname_conflict": "此腳本名稱已被其他腳本使用,是否仍要儲存?",
"save_abort_when_scriptname_conflict": "此腳本名稱已被其他腳本使用,已取消儲存。",
"eslint_config_format_error": "ESLint設定格式錯誤",
"export_success": "匯出成功",
"get_backup_dir_url_failed": "取得備份目錄網址失敗",
Expand Down
30 changes: 30 additions & 0 deletions src/pages/options/routes/script/ScriptEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
});
callbackEditor(node.editor);
return node.editor.dispose.bind(node.editor);
}, [node?.editor]);

Check warning on line 82 in src/pages/options/routes/script/ScriptEditor.tsx

View workflow job for this annotation

GitHub Actions / Run tests

React Hook useEffect has missing dependencies: 'callbackEditor', 'getScript', 'hotKeys', 'id', 'node', and 'onChange'. Either include them or remove the dependency array. If 'callbackEditor' changes too often, find the parent component that defines it and wrap that definition in useCallback

return <CodeEditor key={id} id={id} ref={ref} className={className} code={code} diffCode="" editable />;
};
Expand Down Expand Up @@ -240,6 +240,36 @@
return prepareScriptByCode(code, existingScript.origin || "", targetUUID, false, scriptDAO, { byEditor: true })
.then(async (prepareScript) => {
const { script, oldScript } = prepareScript;
// 新增/更改名字时,有相同名字的脚本的话,提醒一下是否真的储存
if (
(!oldScript || oldScript.name !== script.name || oldScript.namespace !== script.namespace) &&
script.name &&
script.namespace
) {
const searchResult = await scriptDAO.findByNameAndNamespace(script.name, script.namespace);
if (searchResult && searchResult.uuid !== targetUUID) {
const modalResult = await new Promise((resolve) => {
modal.confirm!({
focusLock: false,
simple: false,
closable: true,
title: t("scriptname_conflict"),
content: t("confirm_save_when_scriptname_conflict"),
onOk: () => {
resolve("yes");
},
onCancel: () => {
resolve("no");
},
});
});
setTimeout(e.focus.bind(e), 50);
if (modalResult === "no") {
Message.warning(t("save_abort_when_scriptname_conflict"));
return Promise.reject(new Error("This script name is already used by another script. Save aborted."));
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里在用户选择“不保存”时通过 Promise.reject(new Error(...)) 中止流程,会被外层 save().catch() 统一当作 invalid_script_code 处理并弹出错误提示;同时 run 菜单里 await save(...) 没有兜底 catch,取消保存会导致运行流程抛错/潜在未处理的 Promise rejection。建议为“用户主动取消保存”使用可识别的中止信号(如专用错误类型/错误码),并在 save() 的 catch 中对该类中止分支直接静默返回/仅保留 warning,不要走 invalid_script_code 提示;调用方(如 run)也应捕获并直接 return。

Suggested change
return Promise.reject(new Error("This script name is already used by another script. Save aborted."));
// 用户主动取消保存:中止当前保存流程,但不触发 Promise rejection
return;

Copilot uses AI. Check for mistakes.
}
}
}
if (targetUUID) {
if (existingScript.createtime !== 0) {
if (!oldScript || oldScript.uuid !== targetUUID) {
Expand Down
Loading