fix(stores): 配置文件形状不符先备份再回退;日志尾部同步落盘
- commands/connections/settings 三个 store 原先只对 JSON.parse 抛错做 .bak 备份,合法 JSON 但形状不符(如 [1,2,3])会静默回退空/默认,下次 写盘把命令库/书签凭据/自定义主题整体销毁。现统一为形状不符也先备份 (与 knownHosts 的 fail-closed 策略对齐),三个 store 测试补对应用例 - sanitizeRules 回退分支返回预设副本而非模块级共享数组引用,并在回退时 记录 warning(原先连警告都没有) - 会话日志尾部:logStop 触发的最后一轮 flush 改同步落盘(在途异步写未 落地时由 drain 循环做保序的最终同步轮),before-quit 不再丢日志尾巴
This commit is contained in:
1 parent
e23010f950
commit
172cce1962
6 files changed
+253
-19
No files matched your search
@@ -94,6 +94,27 @@ console.log('[highlight rules]')
|
||||
const out = (await roundTrip({ highlightRules: [] })).highlightRules
|
||||
ok(out.length === 0, 'an explicitly empty rule list stays empty')
|
||||
}
|
||||
{
|
||||
// A non-array highlightRules is a shape error, not "no rules": the built-in
|
||||
// rules come back as copies (mutating a loaded list must not poison the
|
||||
// module-level preset table) and the fallback is recorded in the warnings log.
|
||||
writeFileSync(
|
||||
join(userData, 'settings.json'),
|
||||
JSON.stringify({ highlightRules: { nope: true } }),
|
||||
'utf8'
|
||||
)
|
||||
const first = store.loadSettings().highlightRules
|
||||
ok(first.length > 0, `a non-array highlightRules loads the built-in rules (got ${first.length})`)
|
||||
const second = store.loadSettings().highlightRules
|
||||
ok(first !== second, 'each load hands out its own array, not the shared preset list')
|
||||
first.length = 0
|
||||
const afterMutation = store.loadSettings().highlightRules
|
||||
ok(afterMutation.length > 0, 'emptying a loaded rule list does not affect the next load')
|
||||
const log = existsSync(join(userData, 'settings-warnings.log'))
|
||||
? readFileSync(join(userData, 'settings-warnings.log'), 'utf8')
|
||||
: ''
|
||||
ok(log.includes('highlightRules: not an array'), 'the fallback is recorded in settings-warnings.log')
|
||||
}
|
||||
|
||||
// ---- 3. value bands ---------------------------------------------------------
|
||||
console.log('[value bands]')
|
||||
|
||||
Reference in new issue
Block a user