Comprehensive type safety improvements across all CLI handlers and daemon:
**Error handling type fixes:**
- Add 'error instanceof Error' checks before accessing error.message throughout
- Fix all error/retryError/stdError/upsError type assertions
- Replace direct error.message with proper type guards
**Switch case improvements:**
- Wrap case block declarations in braces to satisfy deno-lint
- Fix no-case-declarations warnings in CLI command handlers
**Null/undefined safety:**
- Add checks for config.snmp and config.thresholds before access
- Fix IUpsStatus lastStatusChange to handle undefined with default value
- Add proper null checks in legacy configuration paths
**Type annotations:**
- Add explicit type annotations to lambda parameters (groupId, updateAvailable, etc.)
- Add TUpsModel type cast for 'cyberpower' default
- Import and use INupstConfig type where needed
**Parameter type fixes:**
- Fix implicit 'any' type errors in array callbacks
- Add type annotations to filter/find/map parameters
Files modified:
- ts/cli.ts: config.snmp/thresholds null checks, unused error variable fixes
- ts/cli/group-handler.ts: 4 error.message fixes + 2 parameter type annotations
- ts/cli/service-handler.ts: 3 error.message fixes
- ts/cli/ups-handler.ts: 5 error.message fixes + config checks + TUpsModel import
- ts/daemon.ts: 8 error.message fixes + IUpsStatus lastStatusChange fix + updateAvailable type
- ts/nupst.ts: 1 error.message fix
- ts/systemd.ts: 5 error.message fixes + parameter type annotation
All tests passing (3/3 SNMP tests + 10/10 logger tests)
Type check: ✓ No errors
- Add Buffer import from node:buffer to manager.ts and types.ts
- Fix error handling type assertions (error/retryError/stdError as unknown)
- Add explicit type annotation to byte parameter in isPrintableAscii check
- All tests now passing (3 SNMP tests + 10 logger tests)
- Remove tapbundle and @git.zone/tstest dependency
- Use Deno.test() and @std/assert for all tests
- Update test imports to use jsr:@std/assert
- All 10 logger tests passing with native Deno test runner
- Simplified test configuration in deno.json
- Tests are now completely dependency-free (only standard library)
- Update tapbundle imports from @push.rocks to @git.zone/tstest
- Change all test file imports from .js to .ts extensions
- Tests verified working with Deno runtime
- All 10 logger tests passing
- SNMP tests ready for Deno execution
- Rewrite README.md for Deno-based binary distribution
- Update installation instructions for binary downloads
- Document new subcommand CLI structure
- Add troubleshooting, security, and development sections
- Remove Node.js references, add Deno information
- Add comprehensive v4.0.0 changelog entry
- Document all breaking changes
- List new features and technical improvements
- Provide migration guide and command mapping
- Include technical details and benefits
- Create MIGRATION.md guide for v3.x to v4.0 upgrade
- Step-by-step migration instructions
- Configuration compatibility information
- Troubleshooting common migration issues
- Rollback procedures
- Post-migration best practices
Major Changes:
- Reorganized commands into logical groups (service, ups, group)
- Added new subcommand structure:
- nupst service <enable|disable|start|stop|restart|status|logs|start-daemon>
- nupst ups <add|edit|remove|list|test>
- nupst group <add|edit|remove|list>
- nupst config [show]
- Added --version/-v flag support
- Added restart subcommand for service
- Added command aliases (ls, rm)
- Renamed delete() to remove() in handlers
- Maintained backward compatibility with deprecation warnings
- Updated all help messages to reflect new structure
- Added showVersion(), showServiceHelp(), showUpsHelp() methods
- Fixed readline imports to use node:readline
Breaking Changes:
- Old command format (e.g. 'nupst add') is deprecated
- Users should migrate to new format (e.g. 'nupst ups add')
- Backward compatibility maintained with warnings for now
- Created scripts/compile-all.sh for all 5 platforms
- Successfully compiled binaries for:
- Linux x64 (345MB)
- Linux ARM64 (340MB)
- macOS x64 (337MB)
- macOS ARM64 (334MB)
- Windows x64 (345MB)
- Added --no-check flag to bypass npm:net-snmp type issues
- Updated .gitignore for Deno artifacts
- Tested compiled binary - working successfully
Note: Binaries embed npm:net-snmp with native bindings
Warning from Deno about cross-platform node_modules compatibility noted
- Created deno.json configuration
- Updated all imports to use npm:net-snmp@3.20.0
- Changed all Node.js built-in imports to node: specifiers
- Updated all .js extensions to .ts in imports
- Created mod.ts as Deno entry point
- Ready for Phase 3: CLI simplification