pure-md5 0.2.0 → 0.2.2

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 (177) hide show
  1. package/README.md +38 -24
  2. package/dist/adapters/ie11.cjs +1 -2
  3. package/dist/adapters/ie11.js +1 -2
  4. package/dist/adapters/node.cjs +1 -2
  5. package/dist/adapters/node.js +1 -2
  6. package/dist/adapters/webcrypto.cjs +1 -2
  7. package/dist/adapters/webcrypto.js +1 -2
  8. package/dist/index.cjs +1 -2
  9. package/dist/index.d.ts +149 -5
  10. package/dist/index.js +3 -2
  11. package/dist/md5.cjs +1 -0
  12. package/dist/md5.d.ts +20 -0
  13. package/dist/md5.js +1 -0
  14. package/dist/stream/md5-stream.cjs +1 -2
  15. package/dist/stream/md5-stream.js +1 -2
  16. package/dist/stream/whatwg-stream.cjs +1 -2
  17. package/dist/stream/whatwg-stream.js +1 -2
  18. package/dist/utils/detect.cjs +1 -2
  19. package/dist/utils/detect.js +3 -2
  20. package/package.json +10 -15
  21. package/pure-md5-0.2.1.tgz +0 -0
  22. package/test-tree-shake.mjs +12 -0
  23. package/.aliases +0 -19
  24. package/.bash_profile +0 -12
  25. package/.bash_prompt +0 -56
  26. package/.changeset/README.md +0 -32
  27. package/.changeset/config.json +0 -16
  28. package/.continue/mcpServers/new-mcp-server.yaml +0 -10
  29. package/.continue/rules +0 -29
  30. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
  31. package/.github/ISSUE_TEMPLATE/documentation.md +0 -20
  32. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  33. package/.github/PULL_REQUEST_TEMPLATE.md +0 -35
  34. package/.github/workflows/npm-publish.yml +0 -33
  35. package/.github/workflows/release.yml +0 -42
  36. package/CHANGELOG.md +0 -9
  37. package/CONTRIBUTING.md +0 -203
  38. package/MIGRATION_GUIDE_STREAMS.md +0 -374
  39. package/STREAM_API.md +0 -582
  40. package/STREAM_BENCHMARKS.md +0 -232
  41. package/STREAM_EXAMPLES.md +0 -669
  42. package/STREAM_OPTIMIZATION_REPORT.md +0 -136
  43. package/STREAM_TROUBLESHOOTING.md +0 -537
  44. package/WEB_CRYPTO_TESTS_SUMMARY.md +0 -140
  45. package/WHATWG_STREAMS.md +0 -191
  46. package/__tests__/adapters/node-crypto.test.ts +0 -167
  47. package/__tests__/adapters/web-crypto-node.test.ts +0 -73
  48. package/__tests__/adapters/web-crypto.test.ts +0 -195
  49. package/__tests__/add32.test.ts +0 -33
  50. package/__tests__/fallback.test.ts +0 -345
  51. package/__tests__/hex.test.ts +0 -38
  52. package/__tests__/hex_chr.test.ts +0 -20
  53. package/__tests__/index.test.ts +0 -87
  54. package/__tests__/integration/fixtures/test-file.txt +0 -1
  55. package/__tests__/integration/md5-stream-file.test.ts +0 -293
  56. package/__tests__/integration/node-crypto-file.test.ts +0 -86
  57. package/__tests__/integration/web-crypto.test.ts +0 -38
  58. package/__tests__/md51.test.ts +0 -73
  59. package/__tests__/md5block.test.ts +0 -61
  60. package/__tests__/md5cycle.test.ts +0 -48
  61. package/__tests__/round-functions.test.ts +0 -87
  62. package/__tests__/stream/fs-utils.test.ts +0 -209
  63. package/__tests__/stream/md5-stream-edge-cases.test.ts +0 -461
  64. package/__tests__/stream/md5-stream.test.ts +0 -418
  65. package/__tests__/stream/whatwg-stream.test.ts +0 -355
  66. package/__tests__/stream/whatwg-stream.test.ts.bak2 +0 -335
  67. package/benchmarks/md5-stream.bench.ts +0 -212
  68. package/benchmarks/whatwg-stream.bench.ts +0 -180
  69. package/dist/adapters/ie11.cjs.map +0 -1
  70. package/dist/adapters/ie11.js.map +0 -1
  71. package/dist/adapters/node.cjs.map +0 -1
  72. package/dist/adapters/node.js.map +0 -1
  73. package/dist/adapters/webcrypto.cjs.map +0 -1
  74. package/dist/adapters/webcrypto.js.map +0 -1
  75. package/dist/chunk-2YXXFGBV.js +0 -2
  76. package/dist/chunk-2YXXFGBV.js.map +0 -1
  77. package/dist/chunk-4KSCMS4Q.js +0 -2
  78. package/dist/chunk-4KSCMS4Q.js.map +0 -1
  79. package/dist/chunk-6P2QV5SR.js +0 -4
  80. package/dist/chunk-6P2QV5SR.js.map +0 -1
  81. package/dist/chunk-G5WHEAIQ.js +0 -2
  82. package/dist/chunk-G5WHEAIQ.js.map +0 -1
  83. package/dist/chunk-H2K353LR.js +0 -2
  84. package/dist/chunk-H2K353LR.js.map +0 -1
  85. package/dist/chunk-JKVD5LHZ.js +0 -2
  86. package/dist/chunk-JKVD5LHZ.js.map +0 -1
  87. package/dist/chunk-NWQ4N5RX.js +0 -2
  88. package/dist/chunk-NWQ4N5RX.js.map +0 -1
  89. package/dist/chunk-PHZ7FTYF.js +0 -2
  90. package/dist/chunk-PHZ7FTYF.js.map +0 -1
  91. package/dist/chunk-PNZTVQA7.js +0 -2
  92. package/dist/chunk-PNZTVQA7.js.map +0 -1
  93. package/dist/chunk-R4JB5MBR.js +0 -2
  94. package/dist/chunk-R4JB5MBR.js.map +0 -1
  95. package/dist/chunk-VFOAY6XI.js +0 -2
  96. package/dist/chunk-VFOAY6XI.js.map +0 -1
  97. package/dist/chunk-XB5BQIEX.js +0 -2
  98. package/dist/chunk-XB5BQIEX.js.map +0 -1
  99. package/dist/core/index.cjs +0 -2
  100. package/dist/core/index.cjs.map +0 -1
  101. package/dist/core/index.d.cts +0 -19
  102. package/dist/core/index.d.ts +0 -19
  103. package/dist/core/index.js +0 -2
  104. package/dist/core/index.js.map +0 -1
  105. package/dist/index.cjs.map +0 -1
  106. package/dist/index.d.cts +0 -84
  107. package/dist/index.js.map +0 -1
  108. package/dist/stream/adapter.cjs +0 -2
  109. package/dist/stream/adapter.cjs.map +0 -1
  110. package/dist/stream/adapter.d.cts +0 -63
  111. package/dist/stream/adapter.d.ts +0 -63
  112. package/dist/stream/adapter.js +0 -2
  113. package/dist/stream/adapter.js.map +0 -1
  114. package/dist/stream/fs-utils.cjs +0 -2
  115. package/dist/stream/fs-utils.cjs.map +0 -1
  116. package/dist/stream/fs-utils.d.cts +0 -137
  117. package/dist/stream/fs-utils.d.ts +0 -137
  118. package/dist/stream/fs-utils.js +0 -2
  119. package/dist/stream/fs-utils.js.map +0 -1
  120. package/dist/stream/index.cjs +0 -2
  121. package/dist/stream/index.cjs.map +0 -1
  122. package/dist/stream/index.d.cts +0 -4
  123. package/dist/stream/index.d.ts +0 -4
  124. package/dist/stream/index.js +0 -2
  125. package/dist/stream/index.js.map +0 -1
  126. package/dist/stream/light/index.cjs +0 -2
  127. package/dist/stream/light/index.cjs.map +0 -1
  128. package/dist/stream/light/index.d.cts +0 -4
  129. package/dist/stream/light/index.d.ts +0 -4
  130. package/dist/stream/light/index.js +0 -2
  131. package/dist/stream/light/index.js.map +0 -1
  132. package/dist/stream/md5-stream.cjs.map +0 -1
  133. package/dist/stream/md5-stream.js.map +0 -1
  134. package/dist/stream/whatwg-stream.cjs.map +0 -1
  135. package/dist/stream/whatwg-stream.js.map +0 -1
  136. package/dist/types-edGoGJ5V.d.cts +0 -42
  137. package/dist/types-edGoGJ5V.d.ts +0 -42
  138. package/dist/utils/detect.cjs.map +0 -1
  139. package/dist/utils/detect.js.map +0 -1
  140. package/planning/03-optimization-size-tree-shaking/01-es-modules-tree-shaking.md +0 -152
  141. package/planning/03-optimization-size-tree-shaking/02-consolidate-modules.md +0 -65
  142. package/planning/03-optimization-size-tree-shaking/03-remove-duplicate-add32.md +0 -93
  143. package/planning/03-optimization-size-tree-shaking/04-remove-runtime-check.md +0 -102
  144. package/planning/03-optimization-size-tree-shaking/05-optimize-loops-performance.md +0 -107
  145. package/planning/03-optimization-size-tree-shaking/06-tsup-formats-configuration.md +0 -227
  146. package/planning/03-optimization-size-tree-shaking/07-multiple-build-formats.md +0 -228
  147. package/planning/03-optimization-size-tree-shaking/08-benchmarks-metrics.md +0 -34
  148. package/planning/03-optimization-size-tree-shaking/MIGRATION_GUIDE.md +0 -260
  149. package/planning/03-optimization-size-tree-shaking/README.md +0 -173
  150. package/planning/03-optimization-size-tree-shaking/SUMMARY.md +0 -168
  151. package/planning/04-adapter-backend/03-backend-web-crypto.md +0 -149
  152. package/planning/04-adapter-backend/04-backend-node-crypto.md +0 -181
  153. package/planning/04-adapter-backend/05-backend-pure-js.md +0 -174
  154. package/planning/04-adapter-backend/06-backend-ie11.md +0 -158
  155. package/planning/04-adapter-backend/07-detection-environment.md +0 -232
  156. package/planning/04-adapter-backend/08-detection-backend.md +0 -210
  157. package/planning/04-adapter-backend/09-adapter-unified.md +0 -255
  158. package/planning/04-adapter-backend/10-fallback-mechanism.md +0 -333
  159. package/planning/04-adapter-backend/11-tests-backend-web-crypto.md +0 -191
  160. package/planning/04-adapter-backend/12-tests-backend-node-crypto.md +0 -222
  161. package/planning/04-adapter-backend/README.md +0 -45
  162. package/planning/05-documentation-publishing/01-README-optimization.md +0 -105
  163. package/planning/05-documentation-publishing/02-VitePress-site-evaluation.md +0 -136
  164. package/planning/05-documentation-publishing/03-Changeset-setup.md +0 -192
  165. package/planning/05-documentation-publishing/04-GitHub-templates.md +0 -252
  166. package/planning/05-documentation-publishing/README.md +0 -22
  167. package/planning/05-documentation-publishing/STATUS.md +0 -222
  168. package/planning/prd.md +0 -405
  169. package/planning/streams/01-create-md5stream-class.md +0 -69
  170. package/planning/streams/02-create-factory-api.md +0 -65
  171. package/planning/streams/03-fs-integration.md +0 -37
  172. package/planning/streams/04-whatwg-streams-support.md +0 -37
  173. package/planning/streams/05-audit-optimization.md +0 -121
  174. package/planning/streams/06-comprehensive-tests-docs.md +0 -137
  175. package/planning/streams/07-architecture-integration.md +0 -38
  176. package/planning/streams/README.md +0 -98
  177. 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