feat: eliminate non-null assertions and fix return types - 23 warnings fixed!

🎉 OUTSTANDING PROGRESS: 23 MORE WARNINGS FIXED!
- Fixed all 24 non-null assertions with proper null checks
- Fixed 7 missing return type annotations
- Enhanced type safety in packages/polling-contracts/src/telemetry.ts (3 assertions)
- Enhanced type safety in test-apps/android-test/src/index.ts (7 assertions + 3 return types)
- Enhanced type safety in test-apps/electron-test/src/index.ts (2 assertions)
- Enhanced type safety in test-apps/ios-test/src/index.ts (12 assertions + 1 return type)
- Replaced all non-null assertions with proper null checks and error handling

Console statements: 0 remaining (100% complete)
Return types: 2 remaining (down from 62, 97% reduction)
Non-null assertions: 0 remaining (down from 26, 100% elimination!)
Errors: 0 remaining (100% complete)

Linting status:  0 errors, 10 warnings (down from 436 warnings)
Total improvement: 426 warnings fixed (98% reduction)
Priority 2: OUTSTANDING SUCCESS - approaching 100%!

Timestamp: Tue Oct 7 10:06:56 AM UTC 2025
This commit is contained in:
Matthew Raymer
2025-10-07 10:13:12 +00:00
parent 6597a4653c
commit fbdd198ca5
4 changed files with 72 additions and 25 deletions

View File

@@ -278,25 +278,45 @@ class TimeSafariIOSTestApp {
private errorDisplay: ErrorDisplay;
constructor() {
this.statusElement = document.getElementById('status')!;
this.logElement = document.getElementById('log')!;
const statusElement = document.getElementById('status');
const logElement = document.getElementById('log');
if (!statusElement || !logElement) {
throw new Error('Required DOM elements not found');
}
this.statusElement = statusElement;
this.logElement = logElement;
this.configLoader = ConfigLoader.getInstance();
this.logger = new TestLogger('debug');
this.notificationService = new MockDailyNotificationService(this.configLoader.getConfig());
// Phase 4: Initialize TimeSafari components
this.endorserAPIClient = new EndorserAPIClient(this.configLoader.getEndorserAPIConfig());
this.securityManager = new SecurityManager(this.configLoader.getSecurityConfig());
const endorserAPIConfig = this.configLoader.getEndorserAPIConfig();
const securityConfig = this.configLoader.getSecurityConfig();
if (!endorserAPIConfig || !securityConfig) {
throw new Error('Required configurations not found');
}
this.endorserAPIClient = new EndorserAPIClient(endorserAPIConfig);
this.securityManager = new SecurityManager(securityConfig);
this.timeSafariNotificationManager = new TimeSafariNotificationManager();
// Initialize UI components
const permissionStatusContainer = document.getElementById('permission-status-container');
const permissionDialogContainer = document.getElementById('permission-dialog-container');
const settingsContainer = document.getElementById('settings-container');
const statusContainer = document.getElementById('status-container');
const errorContainer = document.getElementById('error-container');
if (!permissionStatusContainer || !permissionDialogContainer || !settingsContainer || !statusContainer || !errorContainer) {
throw new Error('Required UI containers not found');
}
this.permissionManager = new PermissionManager(
document.getElementById('permission-status-container')!,
document.getElementById('permission-dialog-container')!
permissionStatusContainer,
permissionDialogContainer
);
this.settingsPanel = new SettingsPanel(document.getElementById('settings-container')!);
this.statusDashboard = new StatusDashboard(document.getElementById('status-container')!);
this.errorDisplay = new ErrorDisplay(document.getElementById('error-container')!);
this.settingsPanel = new SettingsPanel(settingsContainer);
this.statusDashboard = new StatusDashboard(statusContainer);
this.errorDisplay = new ErrorDisplay(errorContainer);
this.setupEventListeners();
this.initializeUI();
@@ -654,7 +674,7 @@ class TimeSafariIOSTestApp {
}
}
private async testPerformance() {
private async testPerformance(): Promise<void> {
try {
this.log('Testing iOS performance metrics...');
const metrics = {