45 lines
1.9 KiB
Markdown
45 lines
1.9 KiB
Markdown
# 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 to `ts_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 |