mirror of
https://github.com/martinlegend/neogdsync.git
synced 2026-07-22 06:08:29 +00:00
Correctness: - Edits made while a sync runs are no longer dropped. Vault event handlers now ignore only paths the sync itself wrote (Syncer.syncWrites) instead of suppressing all events behind a global flag, and pending ops are cleared per-op right after success instead of in a bulk sweep that also wiped ops re-queued mid-sync. - Renames now propagate to Drive: handlePush compares the Drive-side name and calls files.rename, so a local a.md -> b.md no longer leaves the old name on Drive (which later caused duplicate uploads after a rebuild). - A 'modify' op with no index entry (index lost/reset) looks the file up on Drive by path before uploading, preventing duplicate files on Drive. - Excluded paths queued in pendingOps are cleared instead of sticking in the "N pending" counter forever; exclusion logic is now shared between event handlers and the sync engine (src/exclude.ts), so user glob patterns apply consistently. computeDiff no longer reports newly-excluded snapshot entries as deletions. - Files first seen via unknown Drive changes (syncedAt=0) now go through conflict handling instead of silently overwriting the remote copy. - index.db is written via tmp-file + rename with recovery on load, so a crash mid-save can no longer silently reset the index. - Multipart upload boundary is randomized; a file containing the fixed boundary string no longer corrupts the upload. Auth / settings: - authProxyUrl is actually used now (it was silently ignored) and is editable in settings; DriveApi credentials update in place so PathIndex never holds a stale instance; token cache is keyed by token+proxy. - Exclude patterns are editable in settings (README advertised this but there was no UI). Performance / UX: - Force Pull and pull-new-from-Drive download with a small concurrency pool (settings.concurrency, previously dead config). - Unknown-change resolution fetches each file's metadata once instead of twice. - First run with a non-empty vault shows a notice explaining that an initial Force Push/Pull is required. Security / hygiene: - OAuth proxy escapes HTML in the callback pages (reflected XSS via ?error=...), and README now accurately describes that token refresh goes through the proxy and how to self-host it. - Removed stale compiled artifacts (src/*.js) and dead code (listRevisions); fixed package.json metadata (MIT, author, scripts). - Added vitest with unit tests for exclusion, snapshot diffing, and index persistence/recovery (17 tests). Claude-Session: https://claude.ai/code/session_011DimwV9zDr1ViCXRCZPxC9 Co-authored-by: Claude <noreply@anthropic.com>
18 lines
431 B
JSON
18 lines
431 B
JSON
{
|
|
"compilerOptions": {
|
|
"inlineSourceMap": true,
|
|
"inlineSources": true,
|
|
"module": "ESNext",
|
|
"target": "ES2018",
|
|
"allowImportingTsExtensions": true,
|
|
"moduleResolution": "bundler",
|
|
"importHelpers": true,
|
|
"strict": true,
|
|
"skipLibCheck": true,
|
|
"noImplicitAny": true,
|
|
"noUnusedLocals": false,
|
|
"noUnusedParameters": false,
|
|
"lib": ["ES2018", "DOM"]
|
|
},
|
|
"include": ["src/**/*.ts"]
|
|
}
|