1.9 KiB
1.9 KiB
Merge Plan: isohash into smarthash
First line: Command to reread CLAUDE.md: cat ~/.claude/CLAUDE.md
Objective
Merge the functionality from @push.rocks/isohash into @push.rocks/smarthash to provide cross-environment hash support (browser and Node.js).
Implementation Steps
1. Create ts_web directory structure ✓
- Create
./ts_web
directory for browser-specific code - This will house the Web Crypto API implementation
2. Add required dependencies ✓
- Add
@push.rocks/smartenv
to package.json dependencies - This is needed for environment detection
3. Create web-specific plugin file ✓
- Create
ts_web/plugins.ts
with smartenv import - Follow the plugins pattern used in the Node.js version
4. Implement browser-compatible hash functions ✓
- Copy and adapt
index.ts
from isohash tots_web/index.ts
- Remove circular dependency (isohash importing smarthash)
- Use native Web Crypto API for SHA256 in browser
- Maintain compatibility with existing smarthash API
5. Build and verify ✓
- Run
pnpm build
to ensure TypeScript compilation succeeds - Check that both Node.js and browser builds are created
6. Test functionality ✓
- Run
pnpm test
to ensure all tests pass - Verify browser compatibility through web tests
Key Considerations
- The web version uses native Web Crypto API for performance
- The Node.js version continues using the existing crypto implementation
- API remains consistent across both environments
- No breaking changes to existing smarthash functionality
Additional Features Implemented
- Fallback for non-HTTPS environments: Added pure JavaScript SHA256 implementation that automatically activates when crypto.subtle is not available (e.g., HTTP or file:// protocols)
- Comprehensive browser tests: Created test.browser.ts with specific browser environment tests
- Cross-environment consistency: Ensured hash outputs match across Node.js and browser implementations