Harden audit findings: correctness, type-safety, Windows conventions & polish
Audit-pass over CODE-AUDIT.md (~48 items closed this pass; all verified — typecheck + 234 tests + eslint + prettier green). Correctness / bugs: - B3: match the release checksum to the asset's filename line (no wrong-hash verify) - B4: newline-safe metadata probe (one --print with a unit-separator delimiter) - B5 / L88: guard the meta event against canceled items; progress no longer promotes a queued item outside pump() - B7: cookie-login promise always resolves (handles destroy-without-close) - L146: trim parser rejects >2 colon-group times; M36: Library selection counts only actionable rows - L11 / L50 / L156 / L57 / L159 / L15 / L3: live queue count, empty-cookie message, schedule picker min, dead-code/comment cleanup Type safety: - Enable noUncheckedIndexedAccess + noFallthroughCasesInSwitch (15 real edge cases fixed) Resilience / Windows / metadata: - R5: settings write failure handled (no unhandled IPC rejection; reconciles to truth) - W1 / W5 / W6: min window size, seeded folder picker, parented sign-in window; L147 dead macOS branches removed - CL1: shared stdout markers; package/builder metadata (license, homepage, repository, copyright, tsbuildinfo glob) Copy / docs / tests: - M37 / SR9 dev-jargon cleanup in hints; M8 / M25 / M26 / L66 / L80 / L81 reconciled - New unit tests for L35 (isValidMediaItem) and L36 (compareVersions) This commit also checkpoints the previously-uncommitted feat/tray-background-clipboard work it builds on: background running + auto-download, library clipboard detection, tray, binary management & library scale, credential encryption at rest, the shared jsonStore and ui/ primitives, and the eslint/prettier tooling. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import js from '@eslint/js'
|
||||
import tseslint from 'typescript-eslint'
|
||||
import globals from 'globals'
|
||||
import prettier from 'eslint-config-prettier'
|
||||
|
||||
// Flat config (ESLint 9 + typescript-eslint 8). Codifies the existing house style
|
||||
// (CC2): typescript-eslint's recommended logic/type rules, with formatting left
|
||||
// entirely to Prettier (eslint-config-prettier turns off any stylistic rules).
|
||||
// Run with `npm run lint`; `npm run format` applies Prettier.
|
||||
export default tseslint.config(
|
||||
{ ignores: ['out/**', 'dist/**', 'node_modules/**', '**/*.cjs'] },
|
||||
js.configs.recommended,
|
||||
...tseslint.configs.recommended,
|
||||
{
|
||||
languageOptions: {
|
||||
globals: { ...globals.node, ...globals.browser }
|
||||
},
|
||||
rules: {
|
||||
// Empty catch blocks are a deliberate best-effort pattern across the app.
|
||||
'no-empty': ['error', { allowEmptyCatch: true }],
|
||||
// Allow a documented @ts-ignore. The preload's window fallback needs one
|
||||
// whose necessity is incremental-build-state-dependent, so @ts-expect-error
|
||||
// (which errors when momentarily unused) is the wrong tool there.
|
||||
'@typescript-eslint/ban-ts-comment': [
|
||||
'error',
|
||||
{ 'ts-ignore': 'allow-with-description', minimumDescriptionLength: 3 }
|
||||
],
|
||||
// Allow intentionally-unused names prefixed with `_` (e.g. IPC event args).
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'error',
|
||||
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
// TypeScript already resolves identifiers/types, so core no-undef only
|
||||
// false-positives on globals and type-only references here.
|
||||
files: ['**/*.{ts,tsx}'],
|
||||
rules: { 'no-undef': 'off' }
|
||||
},
|
||||
// Keep Prettier last so it wins over any formatting-related rule.
|
||||
prettier
|
||||
)
|
||||
Reference in New Issue
Block a user