fix: 0.9.1 快照收尾修复与稳健性增强 - 快照目录对归一化匹配(Windows同目录异写不误拦、与scanCacheStore同款逻辑双向同步)、截断结果保存快照拦截提示(防对照新文件误报)、folder:scan IPC校验抽scanIpc纯逻辑模块单测全覆盖(缓存源选择惰性读盘)、对照模式导出报告附变迁对照表(三格式当前/基线状态与大小、标签收敛SNAPSHOT_CHANGE_LABEL共享映射、E2E对照导出写盘断言)、顶层ErrorBoundary渲染兜底(错误面板一键重载防白屏)、文档四件套同步
This commit is contained in:
+6
-22
@@ -6,7 +6,7 @@ import fs from 'fs'
|
||||
import { parseState, clampBounds, type AppState } from './windowState'
|
||||
import { decodeText, type DecodeResult } from './decode'
|
||||
import { scanFolders, SEMANTIC_MAX_BYTES, type ScanCacheEntry } from './folderScan'
|
||||
import { isIgnoreRulesArray } from './ignoreRules'
|
||||
import { resolveScanArgs } from './scanIpc'
|
||||
import {
|
||||
parseScanCacheStore,
|
||||
putScanCache,
|
||||
@@ -313,28 +313,12 @@ ipcMain.handle(
|
||||
ignoreRules?: unknown
|
||||
) => {
|
||||
try {
|
||||
// 增量缓存防御性校验:仅接受数组形态(渲染端从上次扫描结果携带,损坏即不沿用)
|
||||
const cache =
|
||||
Array.isArray(previous) && previous.every(
|
||||
(c) =>
|
||||
typeof c === 'object' &&
|
||||
c !== null &&
|
||||
typeof (c as ScanCacheEntry).rel === 'string' &&
|
||||
typeof (c as ScanCacheEntry).status === 'string'
|
||||
)
|
||||
? (previous as ScanCacheEntry[])
|
||||
: undefined
|
||||
// 渲染端未携带内存缓存时(跨会话首次扫描),尝试注入 userData 落盘的持久化缓存
|
||||
let prev = cache
|
||||
if (prev === undefined) {
|
||||
const stored = getScanCache(loadScanCacheStore(), leftDir, rightDir)
|
||||
if (stored !== null && stored.length > 0) prev = stored
|
||||
}
|
||||
// 忽略规则防御性校验:仅接受字符串数组形态(渲染端从偏好携带,损坏即忽略)
|
||||
const ignore = isIgnoreRulesArray(ignoreRules) ? ignoreRules : undefined
|
||||
// 入参防御性校验与增量缓存源选择(内存缓存优先,未携带/非法回退 userData 落盘缓存,惰性读盘)
|
||||
const args = resolveScanArgs(previous, ignoreRules, () =>
|
||||
getScanCache(loadScanCacheStore(), leftDir, rightDir)
|
||||
)
|
||||
const result = await scanFolders(leftDir, rightDir, {
|
||||
...(prev ? { previous: prev } : {}),
|
||||
...(ignore ? { ignore } : {}),
|
||||
...args,
|
||||
...(semantic
|
||||
? {
|
||||
// 语义判等解码复用解码 worker(大缓冲后台解码,与文件打开共用同一管线)
|
||||
|
||||
Reference in New Issue
Block a user