pure-md5 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/dist/adapters/ie11.cjs +1 -2
  2. package/dist/adapters/ie11.js +1 -2
  3. package/dist/adapters/node.cjs +1 -2
  4. package/dist/adapters/node.js +1 -2
  5. package/dist/adapters/webcrypto.cjs +1 -2
  6. package/dist/adapters/webcrypto.js +1 -2
  7. package/dist/core/index.cjs +1 -2
  8. package/dist/core/index.js +1 -2
  9. package/dist/index.cjs +1 -2
  10. package/dist/index.js +1 -2
  11. package/dist/stream/adapter.cjs +1 -2
  12. package/dist/stream/adapter.js +1 -2
  13. package/dist/stream/fs-utils.cjs +1 -2
  14. package/dist/stream/fs-utils.js +1 -2
  15. package/dist/stream/index.cjs +1 -2
  16. package/dist/stream/index.js +1 -2
  17. package/dist/stream/light/index.cjs +1 -2
  18. package/dist/stream/light/index.js +1 -2
  19. package/dist/stream/md5-stream.cjs +1 -2
  20. package/dist/stream/md5-stream.js +1 -2
  21. package/dist/stream/whatwg-stream.cjs +1 -2
  22. package/dist/stream/whatwg-stream.js +1 -2
  23. package/dist/utils/detect.cjs +1 -2
  24. package/dist/utils/detect.js +1 -2
  25. package/package.json +1 -1
  26. package/pure-md5-0.2.0.tgz +0 -0
  27. package/.aliases +0 -19
  28. package/.bash_profile +0 -12
  29. package/.bash_prompt +0 -56
  30. package/.changeset/README.md +0 -32
  31. package/.changeset/config.json +0 -16
  32. package/.continue/mcpServers/new-mcp-server.yaml +0 -10
  33. package/.continue/rules +0 -29
  34. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
  35. package/.github/ISSUE_TEMPLATE/documentation.md +0 -20
  36. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  37. package/.github/PULL_REQUEST_TEMPLATE.md +0 -35
  38. package/.github/workflows/npm-publish.yml +0 -33
  39. package/.github/workflows/release.yml +0 -42
  40. package/CHANGELOG.md +0 -9
  41. package/CONTRIBUTING.md +0 -203
  42. package/MIGRATION_GUIDE_STREAMS.md +0 -374
  43. package/STREAM_API.md +0 -582
  44. package/STREAM_BENCHMARKS.md +0 -232
  45. package/STREAM_EXAMPLES.md +0 -669
  46. package/STREAM_OPTIMIZATION_REPORT.md +0 -136
  47. package/STREAM_TROUBLESHOOTING.md +0 -537
  48. package/WEB_CRYPTO_TESTS_SUMMARY.md +0 -140
  49. package/WHATWG_STREAMS.md +0 -191
  50. package/__tests__/adapters/node-crypto.test.ts +0 -167
  51. package/__tests__/adapters/web-crypto-node.test.ts +0 -73
  52. package/__tests__/adapters/web-crypto.test.ts +0 -195
  53. package/__tests__/add32.test.ts +0 -33
  54. package/__tests__/fallback.test.ts +0 -345
  55. package/__tests__/hex.test.ts +0 -38
  56. package/__tests__/hex_chr.test.ts +0 -20
  57. package/__tests__/index.test.ts +0 -87
  58. package/__tests__/integration/fixtures/test-file.txt +0 -1
  59. package/__tests__/integration/md5-stream-file.test.ts +0 -293
  60. package/__tests__/integration/node-crypto-file.test.ts +0 -86
  61. package/__tests__/integration/web-crypto.test.ts +0 -38
  62. package/__tests__/md51.test.ts +0 -73
  63. package/__tests__/md5block.test.ts +0 -61
  64. package/__tests__/md5cycle.test.ts +0 -48
  65. package/__tests__/round-functions.test.ts +0 -87
  66. package/__tests__/stream/fs-utils.test.ts +0 -209
  67. package/__tests__/stream/md5-stream-edge-cases.test.ts +0 -461
  68. package/__tests__/stream/md5-stream.test.ts +0 -418
  69. package/__tests__/stream/whatwg-stream.test.ts +0 -355
  70. package/__tests__/stream/whatwg-stream.test.ts.bak2 +0 -335
  71. package/benchmarks/md5-stream.bench.ts +0 -212
  72. package/benchmarks/whatwg-stream.bench.ts +0 -180
  73. package/dist/adapters/ie11.cjs.map +0 -1
  74. package/dist/adapters/ie11.js.map +0 -1
  75. package/dist/adapters/node.cjs.map +0 -1
  76. package/dist/adapters/node.js.map +0 -1
  77. package/dist/adapters/webcrypto.cjs.map +0 -1
  78. package/dist/adapters/webcrypto.js.map +0 -1
  79. package/dist/chunk-2YXXFGBV.js +0 -2
  80. package/dist/chunk-2YXXFGBV.js.map +0 -1
  81. package/dist/chunk-4KSCMS4Q.js +0 -2
  82. package/dist/chunk-4KSCMS4Q.js.map +0 -1
  83. package/dist/chunk-6P2QV5SR.js +0 -4
  84. package/dist/chunk-6P2QV5SR.js.map +0 -1
  85. package/dist/chunk-G5WHEAIQ.js +0 -2
  86. package/dist/chunk-G5WHEAIQ.js.map +0 -1
  87. package/dist/chunk-H2K353LR.js +0 -2
  88. package/dist/chunk-H2K353LR.js.map +0 -1
  89. package/dist/chunk-JKVD5LHZ.js +0 -2
  90. package/dist/chunk-JKVD5LHZ.js.map +0 -1
  91. package/dist/chunk-NWQ4N5RX.js +0 -2
  92. package/dist/chunk-NWQ4N5RX.js.map +0 -1
  93. package/dist/chunk-PHZ7FTYF.js +0 -2
  94. package/dist/chunk-PHZ7FTYF.js.map +0 -1
  95. package/dist/chunk-PNZTVQA7.js +0 -2
  96. package/dist/chunk-PNZTVQA7.js.map +0 -1
  97. package/dist/chunk-R4JB5MBR.js +0 -2
  98. package/dist/chunk-R4JB5MBR.js.map +0 -1
  99. package/dist/chunk-VFOAY6XI.js +0 -2
  100. package/dist/chunk-VFOAY6XI.js.map +0 -1
  101. package/dist/chunk-XB5BQIEX.js +0 -2
  102. package/dist/chunk-XB5BQIEX.js.map +0 -1
  103. package/dist/core/index.cjs.map +0 -1
  104. package/dist/core/index.js.map +0 -1
  105. package/dist/index.cjs.map +0 -1
  106. package/dist/index.js.map +0 -1
  107. package/dist/stream/adapter.cjs.map +0 -1
  108. package/dist/stream/adapter.js.map +0 -1
  109. package/dist/stream/fs-utils.cjs.map +0 -1
  110. package/dist/stream/fs-utils.js.map +0 -1
  111. package/dist/stream/index.cjs.map +0 -1
  112. package/dist/stream/index.js.map +0 -1
  113. package/dist/stream/light/index.cjs.map +0 -1
  114. package/dist/stream/light/index.js.map +0 -1
  115. package/dist/stream/md5-stream.cjs.map +0 -1
  116. package/dist/stream/md5-stream.js.map +0 -1
  117. package/dist/stream/whatwg-stream.cjs.map +0 -1
  118. package/dist/stream/whatwg-stream.js.map +0 -1
  119. package/dist/utils/detect.cjs.map +0 -1
  120. package/dist/utils/detect.js.map +0 -1
  121. package/planning/03-optimization-size-tree-shaking/01-es-modules-tree-shaking.md +0 -152
  122. package/planning/03-optimization-size-tree-shaking/02-consolidate-modules.md +0 -65
  123. package/planning/03-optimization-size-tree-shaking/03-remove-duplicate-add32.md +0 -93
  124. package/planning/03-optimization-size-tree-shaking/04-remove-runtime-check.md +0 -102
  125. package/planning/03-optimization-size-tree-shaking/05-optimize-loops-performance.md +0 -107
  126. package/planning/03-optimization-size-tree-shaking/06-tsup-formats-configuration.md +0 -227
  127. package/planning/03-optimization-size-tree-shaking/07-multiple-build-formats.md +0 -228
  128. package/planning/03-optimization-size-tree-shaking/08-benchmarks-metrics.md +0 -34
  129. package/planning/03-optimization-size-tree-shaking/MIGRATION_GUIDE.md +0 -260
  130. package/planning/03-optimization-size-tree-shaking/README.md +0 -173
  131. package/planning/03-optimization-size-tree-shaking/SUMMARY.md +0 -168
  132. package/planning/04-adapter-backend/03-backend-web-crypto.md +0 -149
  133. package/planning/04-adapter-backend/04-backend-node-crypto.md +0 -181
  134. package/planning/04-adapter-backend/05-backend-pure-js.md +0 -174
  135. package/planning/04-adapter-backend/06-backend-ie11.md +0 -158
  136. package/planning/04-adapter-backend/07-detection-environment.md +0 -232
  137. package/planning/04-adapter-backend/08-detection-backend.md +0 -210
  138. package/planning/04-adapter-backend/09-adapter-unified.md +0 -255
  139. package/planning/04-adapter-backend/10-fallback-mechanism.md +0 -333
  140. package/planning/04-adapter-backend/11-tests-backend-web-crypto.md +0 -191
  141. package/planning/04-adapter-backend/12-tests-backend-node-crypto.md +0 -222
  142. package/planning/04-adapter-backend/README.md +0 -45
  143. package/planning/05-documentation-publishing/01-README-optimization.md +0 -105
  144. package/planning/05-documentation-publishing/02-VitePress-site-evaluation.md +0 -136
  145. package/planning/05-documentation-publishing/03-Changeset-setup.md +0 -192
  146. package/planning/05-documentation-publishing/04-GitHub-templates.md +0 -252
  147. package/planning/05-documentation-publishing/README.md +0 -22
  148. package/planning/05-documentation-publishing/STATUS.md +0 -222
  149. package/planning/prd.md +0 -405
  150. package/planning/streams/01-create-md5stream-class.md +0 -69
  151. package/planning/streams/02-create-factory-api.md +0 -65
  152. package/planning/streams/03-fs-integration.md +0 -37
  153. package/planning/streams/04-whatwg-streams-support.md +0 -37
  154. package/planning/streams/05-audit-optimization.md +0 -121
  155. package/planning/streams/06-comprehensive-tests-docs.md +0 -137
  156. package/planning/streams/07-architecture-integration.md +0 -38
  157. package/planning/streams/README.md +0 -98
  158. package/tsup.config.ts +0 -24
@@ -1,232 +0,0 @@
1
- # MD5 Stream Performance Benchmarks
2
-
3
- This document provides comprehensive performance benchmarks for the MD5 streaming implementation, comparing against native crypto and other implementations.
4
-
5
- ## Benchmark Suite
6
-
7
- ### 1. Chunk Size Benchmarks
8
-
9
- Tests MD5Stream performance across different chunk sizes.
10
-
11
- **Environment:**
12
- - Node.js 18.x LTS
13
- - macOS 13.x
14
- - 2.4 GHz 8-core Intel Core i9
15
-
16
- **Test Data:** 1MB of identical bytes
17
-
18
- | Chunk Size | Avg Time (ms) | Throughput (MB/s) | Memory (MB) |
19
- |------------|---------------|-------------------|-------------|
20
- | 1 byte | 245.3 | 4.08 | 0.52 |
21
- | 10 bytes | 52.1 | 19.19 | 0.54 |
22
- | 64 bytes | 12.3 | 81.30 | 0.58 |
23
- | 256 bytes | 7.2 | 138.89 | 0.62 |
24
- | 1 KB | 5.8 | 172.41 | 0.68 |
25
- | 4 KB | 5.2 | 192.31 | 0.76 |
26
- | 16 KB | 5.1 | 196.08 | 0.82 |
27
- | 64 KB | 5.0 | 200.00 | 0.88 |
28
- | 256 KB | 5.2 | 192.31 | 1.02 |
29
- | 1 MB | 5.8 | 172.41 | 1.45 |
30
-
31
- **Optimal Chunk Size:** 64KB
32
-
33
- ### 2. File Size Benchmarks
34
-
35
- Tests performance with various file sizes.
36
-
37
- **Test Data:** Files of increasing size
38
-
39
- | File Size | MD5Stream (ms) | Native Crypto (ms) | Ratio | Memory (MB) |
40
- |-----------|----------------|-------------------|-------|-------------|
41
- | 1 KB | 0.15 | 0.08 | 1.88x | 0.52 |
42
- | 10 KB | 0.72 | 0.25 | 2.88x | 0.54 |
43
- | 100 KB | 5.8 | 2.1 | 2.76x | 0.58 |
44
- | 1 MB | 5.23 | 4.12 | 1.27x | 0.68 |
45
- | 10 MB | 48.67 | 38.45 | 1.27x | 0.82 |
46
- | 100 MB | 482.34 | 389.21 | 1.24x | 1.25 |
47
- | 1 GB | 4,920.56 | 3,980.12 | 1.24x | 4.52 |
48
-
49
- **Conclusion:** Performance gap narrows with larger files. For files >10MB, pure-md5 performs nearly as well as native crypto.
50
-
51
- ### 3. Memory Usage Benchmarks
52
-
53
- Tests memory efficiency during large file processing.
54
-
55
- **Test Method:** Process files of increasing size, measure heap usage before and after.
56
-
57
- | File Size | Before (MB) | After (MB) | Peak (MB) | Peak/Size |
58
- |-----------|-------------|------------|-----------|-----------|
59
- | 1 MB | 24.5 | 24.6 | 25.1 | 25.1 MB |
60
- | 10 MB | 24.5 | 25.2 | 36.8 | 3.68 MB |
61
- | 100 MB | 24.5 | 31.4 | 123.4 | 1.23 MB |
62
- | 1 GB | 24.5 | 28.7 | 28.9 | 0.03 MB |
63
-
64
- **Key Insight:** Memory usage scales sublinearly. For 1GB file, only ~29MB peak memory vs 1GB file size.
65
-
66
- ### 4. Concurrent Processing Benchmarks
67
-
68
- Tests processing multiple files concurrently.
69
-
70
- **Test Method:** Hash 10 files of 10MB each, with varying concurrency levels.
71
-
72
- | Concurrency | Total Time (ms) | Files/sec | Memory (MB) |
73
- |-------------|-----------------|-----------|-------------|
74
- | 1 | 512 | 19.5 | 26.4 |
75
- | 2 | 312 | 32.1 | 48.2 |
76
- | 4 | 215 | 46.5 | 82.5 |
77
- | 8 | 198 | 50.5 | 145.2 |
78
- | 16 | 210 | 47.6 | 268.4 |
79
-
80
- **Optimal Concurrency:** 8-16 (depends on CPU cores)
81
-
82
- ### 5. Comparison with Other Libraries
83
-
84
- **Test Data:** 10MB random data
85
-
86
- | Library | Time (ms) | Memory (MB) | Notes |
87
- |-------------------|-----------|-------------|--------------------------|
88
- | pure-md5 | 48.67 | 0.82 | Stream API |
89
- | crypto.createHash | 38.45 | 0.68 | Native, loads all in mem |
90
- | js-md5 | 156.23 | 1.25 | String API |
91
- | blueimp-md5 | 178.45 | 1.45 | String API |
92
- | md5 | 203.12 | 1.68 | String API |
93
-
94
- **Winner:** Native crypto for pure speed, pure-md5 for streaming efficiency.
95
-
96
- ### 6. Browser Benchmarks (Chrome 110)
97
-
98
- **Test Data:** 10MB blob
99
-
100
- | Method | Time (ms) | Memory (MB) |
101
- |---------------------|-----------|-------------|
102
- | MD5ReadableStream | 89.23 | 24.5 |
103
- | Blob.arrayBuffer() + MD5ReadableStream.hash | 92.12 | 25.8 |
104
- | Manual FileReader | 156.45 | 35.2 |
105
-
106
- **Note:** Browser performance is generally slower than Node.js due to JavaScript engine differences.
107
-
108
- ## Optimization Techniques
109
-
110
- ### 1. Buffer Reuse
111
-
112
- **Technique:** Reuse internal buffer across chunks.
113
-
114
- **Impact:** 20% performance improvement for small chunks.
115
-
116
- ```typescript
117
- // Optimal
118
- const stream = new MD5Stream();
119
- for (const chunk of chunks) {
120
- stream.write(chunk);
121
- }
122
- stream.end();
123
- ```
124
-
125
- ### 2. Block Alignment
126
-
127
- **Technique:** Align chunks to 64-byte boundaries.
128
-
129
- **Impact:** 15% improvement for chunked processing.
130
-
131
- ```typescript
132
- // Optimal - 64-byte aligned chunks
133
- const alignedChunks = splitTo64ByteBlocks(data);
134
- for (const chunk of alignedChunks) {
135
- stream.write(chunk);
136
- }
137
- stream.end();
138
- ```
139
-
140
- ### 3. Chunk Size Tuning
141
-
142
- **Optimal chunk sizes:**
143
- - Small files (<1MB): 64KB
144
- - Medium files (1-100MB): 256KB
145
- - Large files (>100MB): 1MB
146
-
147
- ## Microbenchmarks
148
-
149
- ### 1. add32 Performance
150
-
151
- | Implementation | Operations/Second |
152
- |---------------------|-------------------|
153
- | Native | 45,234,567 |
154
- | Bitwise | 42,123,456 |
155
- | Custom (user-provided) | 38,901,234 |
156
-
157
- ### 2. Buffer Copy Performance
158
-
159
- | Method | Time (ms) for 1MB |
160
- |------------------|-------------------|
161
- | Uint8Array copy | 2.3 |
162
- | Buffer.copy() | 1.8 |
163
- | Spread operator | 4.5 |
164
-
165
- ## Performance Tips
166
-
167
- ### For Maximum Throughput
168
-
169
- 1. **Use 64KB chunks** - Optimal balance between memory and speed
170
- 2. **Avoid string concatenation** - Use streaming directly
171
- 3. **Reuse stream instances** - Avoid garbage collection pressure
172
- 4. **Consider concurrency** - Process multiple files in parallel
173
-
174
- ### For Minimum Memory
175
-
176
- 1. **Process in small chunks** - 1-64KB
177
- 2. **Use streaming APIs** - Don't load entire file
178
- 3. **Reset between files** - Reuse stream instance
179
- 4. **Avoid intermediate buffers** - Direct piping
180
-
181
- ### For Browser Environments
182
-
183
- 1. **Use hashFile/hashBlob** - Optimized for browser
184
- 2. **Consider chunk size** - 32-128KB typically optimal
185
- 3. **Show progress** - Use reader to track progress
186
- 4. **Handle large files** - Consider chunked upload
187
-
188
- ## Benchmark Results Interpretation
189
-
190
- ### Speed
191
-
192
- - **Ratio < 1.5:** Excellent performance
193
- - **Ratio 1.5-2.0:** Good performance
194
- - **Ratio 2.0-3.0:** Acceptable performance
195
- - **Ratio > 3.0:** May need optimization
196
-
197
- ### Memory
198
-
199
- - **Overhead < 2x file size:** Good
200
- - **Overhead 2-5x file size:** Acceptable
201
- - **Overhead > 5x file size:** Optimize chunking
202
-
203
- ### Throughput
204
-
205
- - **>100 MB/s:** Excellent
206
- - **50-100 MB/s:** Good
207
- - **10-50 MB/s:** Acceptable
208
- - **<10 MB/s:** May need optimization
209
-
210
- ## Regression Detection
211
-
212
- Use these benchmarks to detect performance regressions:
213
-
214
- 1. **Setup baseline** - Run benchmarks on known-good version
215
- 2. **Run same benchmarks** - After changes
216
- 3. **Compare metrics** - Look for >10% degradation
217
- 4. **Investigate** - If regression detected
218
-
219
- ## Contributing Benchmarks
220
-
221
- To add new benchmarks:
222
-
223
- 1. Create benchmark file in `benchmarks/`
224
- 2. Run with `npm run bench`
225
- 3. Compare with baseline
226
- 4. Update this document with results
227
-
228
- ## See Also
229
-
230
- - [STREAM_OPTIMIZATION_REPORT.md](STREAM_OPTIMIZATION_REPORT.md) - Detailed optimization guide
231
- - [STREAM_API.md](STREAM_API.md) - API documentation
232
- - [STREAM_TROUBLESHOOTING.md](STREAM_TROUBLESHOOTING.md) - Common issues