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,2 +0,0 @@
1
- 'use strict';var g=require('fs'),stream=require('stream');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var g__default=/*#__PURE__*/_interopDefault(g);function E(o,n){return o+n&4294967295}var b=E;function C(o,n,i,e,t){let r=t||b;return n=r(r(n,o),r(i,e)),n}function O(o,n,i,e){var r=(e||b)(o<<n|o>>>32-n,i);return r}function y(o,n,i,e,t,r,s){return n=C(o,n,e,r,s),O(n,t,i,s)}function S(o,n,i,e,t,r,s,u){return y(i&e|~i&t,n,i,r,s,u,o)}function D(o,n,i,e,t,r,s,u){return y(i&t|e&~t,n,i,r,s,u,o)}function F(o,n,i,e,t,r,s,u){return y(i^e^t,n,i,r,s,u,o)}function v(o,n,i,e,t,r,s,u){return y(e^(i|~t),n,i,r,s,u,o)}function $(o,n,i){typeof i>"u"&&(i=b);let e=o[0],t=o[1],r=o[2],s=o[3],u=S.bind(null,i);e=u(e,t,r,s,n[0],7,-680876936),s=u(s,e,t,r,n[1],12,-389564586),r=u(r,s,e,t,n[2],17,606105819),t=u(t,r,s,e,n[3],22,-1044525330),e=u(e,t,r,s,n[4],7,-176418897),s=u(s,e,t,r,n[5],12,1200080426),r=u(r,s,e,t,n[6],17,-1473231341),t=u(t,r,s,e,n[7],22,-45705983),e=u(e,t,r,s,n[8],7,1770035416),s=u(s,e,t,r,n[9],12,-1958414417),r=u(r,s,e,t,n[10],17,-42063),t=u(t,r,s,e,n[11],22,-1990404162),e=u(e,t,r,s,n[12],7,1804603682),s=u(s,e,t,r,n[13],12,-40341101),r=u(r,s,e,t,n[14],17,-1502002290),t=u(t,r,s,e,n[15],22,1236535329);let a=D.bind(null,i);e=a(e,t,r,s,n[1],5,-165796510),s=a(s,e,t,r,n[6],9,-1069501632),r=a(r,s,e,t,n[11],14,643717713),t=a(t,r,s,e,n[0],20,-373897302),e=a(e,t,r,s,n[5],5,-701558691),s=a(s,e,t,r,n[10],9,38016083),r=a(r,s,e,t,n[15],14,-660478335),t=a(t,r,s,e,n[4],20,-405537848),e=a(e,t,r,s,n[9],5,568446438),s=a(s,e,t,r,n[14],9,-1019803690),r=a(r,s,e,t,n[3],14,-187363961),t=a(t,r,s,e,n[8],20,1163531501),e=a(e,t,r,s,n[13],5,-1444681467),s=a(s,e,t,r,n[2],9,-51403784),r=a(r,s,e,t,n[7],14,1735328473),t=a(t,r,s,e,n[12],20,-1926607734);let f=F.bind(null,i);e=f(e,t,r,s,n[5],4,-378558),s=f(s,e,t,r,n[8],11,-2022574463),r=f(r,s,e,t,n[11],16,1839030562),t=f(t,r,s,e,n[14],23,-35309556),e=f(e,t,r,s,n[1],4,-1530992060),s=f(s,e,t,r,n[4],11,1272893353),r=f(r,s,e,t,n[7],16,-155497632),t=f(t,r,s,e,n[10],23,-1094730640),e=f(e,t,r,s,n[13],4,681279174),s=f(s,e,t,r,n[0],11,-358537222),r=f(r,s,e,t,n[3],16,-722521979),t=f(t,r,s,e,n[6],23,76029189),e=f(e,t,r,s,n[9],4,-640364487),s=f(s,e,t,r,n[12],11,-421815835),r=f(r,s,e,t,n[15],16,530742520),t=f(t,r,s,e,n[2],23,-995338651);let m=v.bind(null,i);e=m(e,t,r,s,n[0],6,-198630844),s=m(s,e,t,r,n[7],10,1126891415),r=m(r,s,e,t,n[14],15,-1416354905),t=m(t,r,s,e,n[5],21,-57434055),e=m(e,t,r,s,n[12],6,1700485571),s=m(s,e,t,r,n[3],10,-1894986606),r=m(r,s,e,t,n[10],15,-1051523),t=m(t,r,s,e,n[1],21,-2054922799),e=m(e,t,r,s,n[8],6,1873313359),s=m(s,e,t,r,n[15],10,-30611744),r=m(r,s,e,t,n[6],15,-1560198380),t=m(t,r,s,e,n[13],21,1309151649),e=m(e,t,r,s,n[4],6,-145523070),s=m(s,e,t,r,n[11],10,-1120210379),r=m(r,s,e,t,n[2],15,718787259),t=m(t,r,s,e,n[9],21,-343485551),o[0]=i(e,o[0]),o[1]=i(t,o[1]),o[2]=i(r,o[2]),o[3]=i(s,o[3]);}var d=$;var j="0123456789abcdef".split(""),x=j;function T(o){let n="";for(let i=0;i<4;i++)n+=x[o>>i*8+4&15]+x[o>>i*8&15];return n}function _(o){let n=o.length,i=new Array(n);for(let e=0;e<n;e++)i[e]=T(o[e]);return i.join("")}var w=_;var M=class o extends stream.Transform{constructor(i){super({readableObjectMode:false,writableObjectMode:false});this.initialMD5State=[1732584193,-271733879,-1732584194,271733878];this.bufferCapacity=64;this.buffer=new Uint8Array(this.bufferCapacity);this.add32=i?.add32||b,this.state={state:[...this.initialMD5State],bytesProcessed:0,bufferLength:0,buffer:this.buffer};}_transform(i,e,t){try{let r=i,s=r.length;if(s===0){t();return}if(this.state.bufferLength>0){let f=this.state.bufferLength,m=64-f,l=Math.min(s,m);for(let c=0;c<l;c++)this.buffer[f+c]=r[c];if(this.state.bufferLength+=l,this.state.bufferLength===64&&this._processBufferBlock(),l===s){t();return}let h=s-l;for(let c=0;c<h;c++)r[c]=r[l+c];let p=Buffer.alloc(h);for(let c=0;c<h;c++)p[c]=r[c];r=p;}let u=Math.floor(r.length/64);for(let f=0;f<u;f++){let m=f*64,l=[];for(let h=0;h<16;h++){let p=m+h*4;l[h]=r[p]+(r[p+1]<<8)+(r[p+2]<<16)+(r[p+3]<<24);}d(this.state.state,l,this.add32),this.state.bytesProcessed+=64;}let a=r.length%64;if(a>0){this.buffer.length<a&&(this.buffer=new Uint8Array(a),this.state.buffer=this.buffer);for(let f=0;f<a;f++)this.buffer[f]=r[u*64+f];this.state.bufferLength=a;}t();}catch(r){t(r);}}_processBufferBlock(){let i=this.state.buffer,e=[];for(let t=0;t<16;t++){let r=t*4;e[t]=i[r]+(i[r+1]<<8)+(i[r+2]<<16)+(i[r+3]<<24);}d(this.state.state,e,this.add32),this.state.bytesProcessed+=64,this.state.bufferLength=0;}_flush(i){try{let{state:e,bufferLength:t,buffer:r}=this.state,s=new Array(16).fill(0);for(let a=0;a<t;a++)s[a>>2]|=(r[a]&255)<<(a%4<<3);if(s[t>>2]|=128<<(t%4<<3),t>55){d(e,s,this.add32);for(let a=0;a<16;a++)s[a]=0;}s[14]=(this.state.bytesProcessed+t)*8,s[15]=0,d(e,s,this.add32);let u=w(e);this.emit("md5",{digest:u,bytesProcessed:this.state.bytesProcessed+t}),i();}catch(e){i(e);}}getCurrentState(){return {state:[...this.state.state],bytesProcessed:this.state.bytesProcessed+this.state.bufferLength}}getBytesProcessed(){return this.state.bytesProcessed+this.state.bufferLength}reset(){this.state={state:[...this.initialMD5State],bytesProcessed:0,bufferLength:0,buffer:this.buffer},this.buffer=new Uint8Array(this.bufferCapacity),this.state.buffer=this.buffer,this.state.bufferLength=0;}static fromStream(i,e){let t=new o(e),r=U.call(t,i);return {stream:t,result:r}}};function B(o){return new M(o)}async function U(o){return new Promise((n,i)=>{let e=[];o.pipe(this).on("md5",t=>{e.push(t);}).on("error",i).on("finish",()=>{n(e[0]);});})}function H(o,n){let i=o.length,e=[1732584193,-271733879,-1732584194,271733878],t;for(t=64;t<=i;t+=64){let u=I(o,t-64);d(e,u,n);}let r=i-t+64,s=new Array(16).fill(0);for(let u=0;u<r;u++)s[u>>2]|=(o[i-r+u]&255)<<(u%4<<3);if(s[r>>2]|=128<<(r%4<<3),r>55){d(e,s,n);for(let u=0;u<16;u++)s[u]=0;}return s[14]=i*8,s[15]=0,d(e,s,n),e}function I(o,n){let i=[];for(let e=0;e<64;e+=4)i[e>>2]=(o[n+e]||0)+((o[n+e+1]||0)<<8)+((o[n+e+2]||0)<<16)+((o[n+e+3]||0)<<24);return i}var P=H;function A(o){return w(P(o,b))}async function R(o,n={}){if(typeof o!="string"||o.trim()==="")throw new Error("Invalid file path: must be a non-empty string");if(!g__default.default.existsSync(o))throw new Error(`File not found: ${o}`);let i;try{i=g__default.default.statSync(o);}catch(t){throw new Error(`Failed to access file ${o}: ${t.message}`)}if(!i.isFile())throw new Error(`Path is not a file: ${o}`);let e=g__default.default.createReadStream(o,{highWaterMark:n.chunkSize||64*1024});try{return await L(e,{onProgress:n.onProgress,totalSize:i.size})}finally{e.destroy();}}async function L(o,n={}){if(!o||typeof o.on!="function")throw new Error("Invalid readable stream: stream must have event listener support");let i=B(),e=0;return n.onProgress&&o.on("data",t=>{e+=t.length,n.onProgress?.(e);}),o.on("error",t=>{i.destroy(t);}),o.on("end",()=>{i.end();}),new Promise((t,r)=>{i.on("md5",s=>{t(s);}).on("error",s=>{r(s);}),o.pipe(i);})}async function de(o,n={}){return (await R(o,n)).digest}async function le(o,n={}){return (await L(o,n)).digest}async function he(o,n,i={}){return (await R(o,i)).digest.toLowerCase()===n.toLowerCase()}function pe(o){if(typeof o!="string"||o.trim()==="")throw new Error("Invalid file path: must be a non-empty string");if(!g__default.default.existsSync(o))throw new Error(`File not found: ${o}`);let n;try{n=g__default.default.statSync(o);}catch(e){throw new Error(`Failed to access file ${o}: ${e.message}`)}if(!n.isFile())throw new Error(`Path is not a file: ${o}`);let i;try{i=g__default.default.readFileSync(o);}catch(e){throw new Error(`Failed to read file ${o}: ${e.message}`)}return A(i)}function ge(o,n){let i=0;return e=>{if(o>0){let t=Math.min(100,e/o*100);Math.floor(t)!==Math.floor(i)&&(n(t),i=t);}}}exports.createProgressTracker=ge;exports.hashFile=R;exports.hashFileDigest=de;exports.hashFileStream=L;exports.hashFileStreamDigest=le;exports.hashFileSync=pe;exports.verifyFile=he;//# sourceMappingURL=fs-utils.cjs.map
2
- //# sourceMappingURL=fs-utils.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/add32.ts","../../src/round-functions.ts","../../src/md5cycle.ts","../../src/hex_chr.ts","../../src/hex.ts","../../src/stream/md5-stream.ts","../../src/md5buf.ts","../../src/core/index.ts","../../src/stream/fs-utils.ts"],"names":["add32","x","y","add32_default","cmn1","q","a","t","fn","add","cmn2","s","b","result","cmn","ff","c","d","gg","hh","ii","md5cycle","k","fff","ggg","hhh","iii","md5cycle_default","hex_chr","hex_chr_default","rhex","n","j","hex","l","i","hex_default","MD5Stream","_MD5Stream","Transform","options","chunk","_encoding","callback","data","dataLength","currentBufferLength","neededBytes","bytesToCopy","remainingData","remainingBuffer","fullBlocks","blockStart","block","idx","remaining","error","buffer","state","bufferLength","tail","digest","source","stream","pipeThroughMD5","createMD5Stream","resolve","reject","results","md5buf","length","md5blkBuf","offset","md5blks","md5buf_default","md5Buffer","hashFile","filePath","fs","stats","readStream","hashFileStream","md5Stream","bytesProcessed","hashFileDigest","hashFileStreamDigest","verifyFile","expectedDigest","hashFileSync","content","createProgressTracker","totalSize","onUpdate","lastPercentage","current","percentage"],"mappings":"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","file":"fs-utils.cjs","sourcesContent":["function add32(x: number, y: number): number {\n //let lsw = (x & 0xffff) + (y & 0xffff);\n //let msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n //return (msw << 16) | (lsw & 0xffff);\n return (x + y) & 0xffffffff;\n}\n\nexport default add32;\n","import add32 from './add32';\n\ntype Add32Function = (x: number, y: number) => number;\n\nfunction cmn1(q: number, a: number, x: number, t: number, fn?: Add32Function) {\n const add = fn || add32;\n a = add(add(a, q), add(x, t));\n return a;\n}\n\nfunction cmn2(a: number, s: number, b: number, fn?: Add32Function) {\n const add = fn || add32;\n var result = add((a << s) | (a >>> (32 - s)), b);\n return result;\n}\n\nfunction cmn(\n q: number,\n a: number,\n b: number,\n x: number,\n s: number,\n t: number,\n fn?: Add32Function\n) {\n a = cmn1(q, a, x, t, fn);\n return cmn2(a, s, b, fn);\n}\n\nexport function ff(\n fn: Add32Function,\n a: number,\n b: number,\n c: number,\n d: number,\n x: number,\n s: number,\n t: number\n): number {\n return cmn((b & c) | (~b & d), a, b, x, s, t, fn);\n}\n\nexport function gg(\n fn: Add32Function,\n a: number,\n b: number,\n c: number,\n d: number,\n x: number,\n s: number,\n t: number\n): number {\n return cmn((b & d) | (c & ~d), a, b, x, s, t, fn);\n}\n\nexport function hh(\n fn: Add32Function,\n a: number,\n b: number,\n c: number,\n d: number,\n x: number,\n s: number,\n t: number\n): number {\n return cmn(b ^ c ^ d, a, b, x, s, t, fn);\n}\n\nexport function ii(\n fn: Add32Function,\n a: number,\n b: number,\n c: number,\n d: number,\n x: number,\n s: number,\n t: number\n): number {\n return cmn(c ^ (b | ~d), a, b, x, s, t, fn);\n}\n","import add32 from './add32';\nimport { ff, gg, hh, ii } from './round-functions';\n\ntype Add32Function = (x: number, y: number) => number;\n\nfunction md5cycle(x: number[], k: number[], fn?: Add32Function): void {\n if (typeof fn === 'undefined') {\n fn = add32;\n }\n let a = x[0];\n let b = x[1];\n let c = x[2];\n let d = x[3];\n\n const fff = ff.bind(null, fn);\n a = fff(a, b, c, d, k[0], 7, -680876936);\n d = fff(d, a, b, c, k[1], 12, -389564586);\n c = fff(c, d, a, b, k[2], 17, 606105819);\n b = fff(b, c, d, a, k[3], 22, -1044525330);\n a = fff(a, b, c, d, k[4], 7, -176418897);\n d = fff(d, a, b, c, k[5], 12, 1200080426);\n c = fff(c, d, a, b, k[6], 17, -1473231341);\n b = fff(b, c, d, a, k[7], 22, -45705983);\n a = fff(a, b, c, d, k[8], 7, 1770035416);\n d = fff(d, a, b, c, k[9], 12, -1958414417);\n c = fff(c, d, a, b, k[10], 17, -42063);\n b = fff(b, c, d, a, k[11], 22, -1990404162);\n a = fff(a, b, c, d, k[12], 7, 1804603682);\n d = fff(d, a, b, c, k[13], 12, -40341101);\n c = fff(c, d, a, b, k[14], 17, -1502002290);\n b = fff(b, c, d, a, k[15], 22, 1236535329);\n\n const ggg = gg.bind(null, fn);\n a = ggg(a, b, c, d, k[1], 5, -165796510);\n d = ggg(d, a, b, c, k[6], 9, -1069501632);\n c = ggg(c, d, a, b, k[11], 14, 643717713);\n b = ggg(b, c, d, a, k[0], 20, -373897302);\n a = ggg(a, b, c, d, k[5], 5, -701558691);\n d = ggg(d, a, b, c, k[10], 9, 38016083);\n c = ggg(c, d, a, b, k[15], 14, -660478335);\n b = ggg(b, c, d, a, k[4], 20, -405537848);\n a = ggg(a, b, c, d, k[9], 5, 568446438);\n d = ggg(d, a, b, c, k[14], 9, -1019803690);\n c = ggg(c, d, a, b, k[3], 14, -187363961);\n b = ggg(b, c, d, a, k[8], 20, 1163531501);\n a = ggg(a, b, c, d, k[13], 5, -1444681467);\n d = ggg(d, a, b, c, k[2], 9, -51403784);\n c = ggg(c, d, a, b, k[7], 14, 1735328473);\n b = ggg(b, c, d, a, k[12], 20, -1926607734);\n\n const hhh = hh.bind(null, fn);\n a = hhh(a, b, c, d, k[5], 4, -378558);\n d = hhh(d, a, b, c, k[8], 11, -2022574463);\n c = hhh(c, d, a, b, k[11], 16, 1839030562);\n b = hhh(b, c, d, a, k[14], 23, -35309556);\n a = hhh(a, b, c, d, k[1], 4, -1530992060);\n d = hhh(d, a, b, c, k[4], 11, 1272893353);\n c = hhh(c, d, a, b, k[7], 16, -155497632);\n b = hhh(b, c, d, a, k[10], 23, -1094730640);\n a = hhh(a, b, c, d, k[13], 4, 681279174);\n d = hhh(d, a, b, c, k[0], 11, -358537222);\n c = hhh(c, d, a, b, k[3], 16, -722521979);\n b = hhh(b, c, d, a, k[6], 23, 76029189);\n a = hhh(a, b, c, d, k[9], 4, -640364487);\n d = hhh(d, a, b, c, k[12], 11, -421815835);\n c = hhh(c, d, a, b, k[15], 16, 530742520);\n b = hhh(b, c, d, a, k[2], 23, -995338651);\n\n const iii = ii.bind(null, fn);\n a = iii(a, b, c, d, k[0], 6, -198630844);\n d = iii(d, a, b, c, k[7], 10, 1126891415);\n c = iii(c, d, a, b, k[14], 15, -1416354905);\n b = iii(b, c, d, a, k[5], 21, -57434055);\n a = iii(a, b, c, d, k[12], 6, 1700485571);\n d = iii(d, a, b, c, k[3], 10, -1894986606);\n c = iii(c, d, a, b, k[10], 15, -1051523);\n b = iii(b, c, d, a, k[1], 21, -2054922799);\n a = iii(a, b, c, d, k[8], 6, 1873313359);\n d = iii(d, a, b, c, k[15], 10, -30611744);\n c = iii(c, d, a, b, k[6], 15, -1560198380);\n b = iii(b, c, d, a, k[13], 21, 1309151649);\n a = iii(a, b, c, d, k[4], 6, -145523070);\n d = iii(d, a, b, c, k[11], 10, -1120210379);\n c = iii(c, d, a, b, k[2], 15, 718787259);\n b = iii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = fn(a, x[0]);\n x[1] = fn(b, x[1]);\n x[2] = fn(c, x[2]);\n x[3] = fn(d, x[3]);\n}\n\nexport default md5cycle;\n","const hex_chr: string[] = \"0123456789abcdef\".split(\"\");\n\nexport default hex_chr;\n","import hex_chr from './hex_chr';\n\nfunction rhex(n: number): string {\n let s = '';\n for (let j = 0; j < 4; j++)\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f];\n return s;\n}\n\nfunction hex(x: number[]): string {\n const l = x.length;\n const result: string[] = new Array(l);\n for (let i = 0; i < l; i++) result[i] = rhex(x[i]);\n return result.join('');\n}\n\nexport default hex;\n","/**\n * MD5Stream - Node.js Transform stream for MD5 hash computation\n * Provides streaming MD5 hashing with minimal overhead\n */\n\nimport { Transform, TransformCallback } from 'stream';\nimport md5cycle from '../md5cycle';\nimport hex from '../hex';\nimport add32 from '../add32';\n\n/**\n * State interface for MD5 computation\n */\ninterface MD5State {\n state: number[];\n bytesProcessed: number;\n bufferLength: number;\n buffer: Uint8Array;\n}\n\n/**\n * Options for MD5Stream constructor\n */\ninterface MD5StreamOptions {\n /**\n * Custom add32 function for compatibility testing\n */\n add32?: (x: number, y: number) => number;\n}\n\n/**\n * MD5Stream - Node.js Transform stream for computing MD5 hashes\n * \n * Usage example:\n * ```ts\n * import fs from 'fs';\n * import { MD5Stream } from 'pure-md5';\n * \n * const stream = new MD5Stream();\n * stream.on('md5', (result) => {\n * console.log('MD5:', result.digest);\n * console.log('Bytes:', result.bytesProcessed);\n * });\n * \n * fs.createReadStream('file.txt').pipe(stream);\n * ```\n */\nexport class MD5Stream extends Transform {\n private state: MD5State;\n private add32: (x: number, y: number) => number;\n private readonly initialMD5State = [1732584193, -271733879, -1732584194, 271733878];\n private readonly bufferCapacity: number = 64;\n private buffer: Uint8Array = new Uint8Array(this.bufferCapacity);\n\n /**\n * Create new MD5Stream instance\n * @param options - Stream options\n */\n constructor(options?: MD5StreamOptions) {\n super({\n readableObjectMode: false,\n writableObjectMode: false\n });\n\n this.add32 = options?.add32 || add32;\n this.state = {\n state: [...this.initialMD5State],\n bytesProcessed: 0,\n bufferLength: 0,\n buffer: this.buffer\n };\n }\n\n /**\n * Process data chunk and update MD5 state\n * @param chunk - Data chunk to process\n * @param callback - Callback to signal chunk processing complete\n */\n _transform(chunk: Buffer, _encoding: BufferEncoding, callback: TransformCallback): void {\n try {\n let data = chunk as Buffer;\n const dataLength = data.length;\n \n if (dataLength === 0) {\n callback();\n return;\n }\n\n // Combine with remaining buffer if needed\n if (this.state.bufferLength > 0) {\n const currentBufferLength = this.state.bufferLength;\n const neededBytes = 64 - currentBufferLength;\n const bytesToCopy = Math.min(dataLength, neededBytes);\n \n // Copy data to buffer\n for (let i = 0; i < bytesToCopy; i++) {\n this.buffer[currentBufferLength + i] = data[i];\n }\n \n this.state.bufferLength += bytesToCopy;\n \n // If buffer is full, process it\n if (this.state.bufferLength === 64) {\n this._processBufferBlock();\n }\n \n // If we used all data, we're done\n if (bytesToCopy === dataLength) {\n callback();\n return;\n }\n \n // Move to next position in original data\n // Shift remaining data to beginning of buffer\n const remainingData = dataLength - bytesToCopy;\n for (let i = 0; i < remainingData; i++) {\n data[i] = data[bytesToCopy + i];\n }\n // Create a new buffer with only the remaining data\n const remainingBuffer = Buffer.alloc(remainingData);\n for (let i = 0; i < remainingData; i++) {\n remainingBuffer[i] = data[i];\n }\n data = remainingBuffer;\n }\n \n // Process full 64-byte blocks directly from data\n const fullBlocks = Math.floor(data.length / 64);\n \n for (let i = 0; i < fullBlocks; i++) {\n const blockStart = i * 64;\n const block: number[] = [];\n \n for (let j = 0; j < 16; j++) {\n const idx = blockStart + j * 4;\n block[j] = \n data[idx] +\n (data[idx + 1] << 8) +\n (data[idx + 2] << 16) +\n (data[idx + 3] << 24);\n }\n \n md5cycle(this.state.state, block, this.add32);\n this.state.bytesProcessed += 64;\n }\n \n // Store remaining bytes in buffer\n const remaining = data.length % 64;\n if (remaining > 0) {\n // Ensure buffer is large enough\n if (this.buffer.length < remaining) {\n this.buffer = new Uint8Array(remaining);\n this.state.buffer = this.buffer;\n }\n \n // Copy remaining bytes to buffer\n for (let i = 0; i < remaining; i++) {\n this.buffer[i] = data[fullBlocks * 64 + i];\n }\n this.state.bufferLength = remaining;\n }\n \n callback();\n } catch (error) {\n callback(error as Error);\n }\n }\n\n /**\n * Process the current buffer as a complete block\n */\n private _processBufferBlock(): void {\n const buffer = this.state.buffer;\n const block: number[] = [];\n \n for (let j = 0; j < 16; j++) {\n const idx = j * 4;\n block[j] = \n buffer[idx] +\n (buffer[idx + 1] << 8) +\n (buffer[idx + 2] << 16) +\n (buffer[idx + 3] << 24);\n }\n \n md5cycle(this.state.state, block, this.add32);\n this.state.bytesProcessed += 64;\n this.state.bufferLength = 0;\n }\n\n /**\n * Finalize MD5 computation and emit result\n * @param callback - Callback to signal flush complete\n */\n _flush(callback: TransformCallback): void {\n try {\n const { state, bufferLength, buffer } = this.state;\n \n // Final padding\n const tail: number[] = new Array(16).fill(0);\n \n // Copy remaining buffer\n for (let i = 0; i < bufferLength; i++) {\n tail[i >> 2] |= (buffer[i] & 0xff) << ((i % 4) << 3);\n }\n \n // Append 0x80\n tail[bufferLength >> 2] |= 0x80 << ((bufferLength % 4) << 3);\n \n // If not enough space for length, process current block\n if (bufferLength > 55) {\n md5cycle(state, tail, this.add32);\n for (let i = 0; i < 16; i++) {\n tail[i] = 0;\n }\n }\n \n // Append length (in bits) - include remaining bytes\n tail[14] = (this.state.bytesProcessed + bufferLength) * 8;\n tail[15] = 0; // High 32 bits of length (not used for typical files)\n \n // Final MD5 cycle\n md5cycle(state, tail, this.add32);\n \n // Generate hex digest\n const digest = hex(state);\n \n // Emit result\n this.emit('md5', {\n digest,\n bytesProcessed: this.state.bytesProcessed + bufferLength\n });\n \n callback();\n } catch (error) {\n callback(error as Error);\n }\n }\n\n /**\n * Get current MD5 state (for debugging/testing)\n * @returns Current internal state\n */\n public getCurrentState(): { state: number[]; bytesProcessed: number } {\n return {\n state: [...this.state.state],\n bytesProcessed: this.state.bytesProcessed + this.state.bufferLength\n };\n }\n\n /**\n * Get bytes processed so far\n * @returns Number of bytes processed\n */\n public getBytesProcessed(): number {\n return this.state.bytesProcessed + this.state.bufferLength;\n }\n\n /**\n * Reset the stream state\n * Note: This resets the internal MD5 state but not the stream's ended state.\n * For full stream reset, use destroy() and create a new instance.\n */\n public reset(): void {\n // Reset internal MD5 state\n this.state = {\n state: [...this.initialMD5State],\n bytesProcessed: 0,\n bufferLength: 0,\n buffer: this.buffer\n };\n this.buffer = new Uint8Array(this.bufferCapacity);\n this.state.buffer = this.buffer;\n this.state.bufferLength = 0;\n }\n\n /**\n * Static method to create MD5Stream from existing readable stream\n * @param source - Source readable stream\n * @param options - MD5Stream options\n * @returns Object containing stream and result promise\n */\n static fromStream(\n source: import('stream').Readable,\n options?: MD5StreamOptions\n ): { stream: MD5Stream; result: Promise<MD5Result> } {\n const stream = new MD5Stream(options);\n const result = pipeThroughMD5.call(stream, source);\n \n return { stream, result };\n }\n}\n\n/**\n * Factory function to create MD5Stream instance\n * @param options - MD5Stream options\n * @returns New MD5Stream instance\n */\nexport function createMD5Stream(options?: MD5StreamOptions): MD5Stream {\n return new MD5Stream(options);\n}\n\n/**\n * Result type for MD5 computation\n */\nexport interface MD5Result {\n /**\n * MD5 hash as hex string\n */\n digest: string;\n /**\n * Number of bytes processed\n */\n bytesProcessed: number;\n}\n\n/**\n * Pipe through MD5 stream helper\n * @param this - MD5Stream instance\n * @param source - Source readable stream to process\n * @returns Promise with MD5 result\n */\nexport async function pipeThroughMD5(\n this: MD5Stream,\n source: import('stream').Readable\n): Promise<MD5Result> {\n return new Promise((resolve, reject) => {\n const results: MD5Result[] = [];\n \n source\n .pipe(this)\n .on('md5', (result: MD5Result) => {\n results.push(result);\n })\n .on('error', reject)\n .on('finish', () => {\n resolve(results[0]);\n });\n });\n}\n\n/**\n * Static method to create MD5Stream from existing readable stream\n * @param source - Source readable stream\n * @param options - MD5Stream options\n * @returns Object containing stream and result promise\n */\nexport function fromStream(\n source: import('stream').Readable,\n options?: MD5StreamOptions\n): { stream: MD5Stream; result: Promise<MD5Result> } {\n const stream = new MD5Stream(options);\n const result = pipeThroughMD5.call(stream, source);\n \n return { stream, result };\n}\n","import md5cycle from './md5cycle';\n\ntype Add32Function = (x: number, y: number) => number;\n\n/**\n * Compute MD5 hash of a Buffer\n * @param buffer - Input Buffer to hash\n * @param add32 - Optional custom add32 function\n * @returns MD5 hash as array of numbers\n */\nfunction md5buf(buffer: Buffer, add32?: Add32Function): number[] {\n const length = buffer.length;\n const state = [1732584193, -271733879, -1732584194, 271733878];\n \n // Process full 64-byte blocks\n let i;\n for (i = 64; i <= length; i += 64) {\n const block = md5blkBuf(buffer, i - 64);\n md5cycle(state, block, add32);\n }\n \n // Handle remaining bytes\n const remaining = length - i + 64;\n const tail: number[] = new Array(16).fill(0);\n \n // Copy remaining bytes from the end of the buffer\n for (let j = 0; j < remaining; j++) {\n tail[j >> 2] |= (buffer[length - remaining + j] & 0xff) << ((j % 4) << 3);\n }\n \n // Append 0x80\n tail[remaining >> 2] |= 0x80 << ((remaining % 4) << 3);\n \n // If not enough space for length, process current block\n if (remaining > 55) {\n md5cycle(state, tail, add32);\n for (let k = 0; k < 16; k++) {\n tail[k] = 0;\n }\n }\n \n // Append length (in bits)\n tail[14] = length * 8;\n tail[15] = 0; // High 32 bits of length (not used for typical files)\n \n // Final MD5 cycle\n md5cycle(state, tail, add32);\n return state;\n}\n\n/**\n * Convert a 64-byte slice of buffer to MD5 block format\n * @param buffer - Input buffer\n * @param offset - Offset to start from\n * @returns Array of 16 32-bit words\n */\nfunction md5blkBuf(buffer: Buffer, offset: number): number[] {\n const md5blks: number[] = [];\n for (let i = 0; i < 64; i += 4) {\n md5blks[i >> 2] =\n (buffer[offset + i] || 0) +\n ((buffer[offset + i + 1] || 0) << 8) +\n ((buffer[offset + i + 2] || 0) << 16) +\n ((buffer[offset + i + 3] || 0) << 24);\n }\n return md5blks;\n}\n\nexport default md5buf;\n","/**\n * Core MD5 implementation - Pure JavaScript\n * No dependencies, no environment detection\n * This is the minimal, tree-shakeable core\n */\n\nimport hex from '../hex';\nimport md51 from '../md51';\nimport md5buf from '../md5buf';\nimport add32 from '../add32';\n\n/**\n * Compute MD5 hash of a string\n * @param string - Input string to hash\n * @returns MD5 hash as hex string\n */\nexport function md5Core(string: string): string {\n // Use the original implementation\n const fn = add32;\n return hex(md51(string, fn));\n}\n\n/**\n * Compute MD5 hash of a Buffer\n * @param buffer - Input Buffer to hash\n * @returns MD5 hash as hex string\n */\nexport function md5Buffer(buffer: Buffer): string {\n const fn = add32;\n return hex(md5buf(buffer, fn));\n}\n\nexport { md5Core as md5 };\n","/**\n * File System Utilities for MD5 hashing\n * Provides convenient utilities for hashing files through Node.js file system streams\n */\n\nimport fs from 'fs';\nimport { Readable } from 'stream';\nimport { MD5Result, createMD5Stream } from './md5-stream.js';\nimport { md5Buffer } from '../core/index.js';\n\n/**\n * Options for file hashing operations\n */\nexport interface HashFileOptions {\n /**\n * Chunk size for reading file (default: 64KB)\n */\n chunkSize?: number;\n \n /**\n * Progress callback for tracking hashing progress\n * @param current - Current position in bytes\n */\n onProgress?: (current: number) => void;\n}\n\n/**\n * Hash a file by its path\n * @param filePath - Path to the file to hash\n * @param options - Optional configuration\n * @returns Promise with MD5 result (digest and bytes processed)\n * \n * @example\n * ```ts\n * import { hashFile } from 'pure-md5';\n * \n * const result = await hashFile('path/to/file.txt');\n * console.log('MD5:', result.digest);\n * console.log('Bytes:', result.bytesProcessed);\n * ```\n */\nexport async function hashFile(\n filePath: string,\n options: HashFileOptions = {}\n): Promise<MD5Result> {\n // Validate file path\n if (typeof filePath !== 'string' || filePath.trim() === '') {\n throw new Error('Invalid file path: must be a non-empty string');\n }\n\n // Check if file exists\n if (!fs.existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n // Get file stats to check if it's a file (not directory)\n let stats: fs.Stats;\n try {\n stats = fs.statSync(filePath);\n } catch (error) {\n throw new Error(`Failed to access file ${filePath}: ${(error as Error).message}`);\n }\n\n if (!stats.isFile()) {\n throw new Error(`Path is not a file: ${filePath}`);\n }\n\n // Create readable stream\n const readStream = fs.createReadStream(filePath, {\n highWaterMark: options.chunkSize || 64 * 1024 // 64KB default\n });\n\n try {\n return await hashFileStream(readStream, {\n onProgress: options.onProgress,\n totalSize: stats.size\n });\n } finally {\n // Ensure stream is destroyed to free resources\n readStream.destroy();\n }\n}\n\n/**\n * Hash data from an existing readable stream\n * @param readStream - Readable stream to hash\n * @param options - Optional configuration\n * @returns Promise with MD5 result (digest and bytes processed)\n * \n * @example\n * ```ts\n * import { createReadStream } from 'fs';\n * import { hashFileStream } from 'pure-md5';\n * \n * const stream = createReadStream('path/to/file.txt');\n * const result = await hashFileStream(stream);\n * console.log('MD5:', result.digest);\n * ```\n */\nexport async function hashFileStream(\n readStream: Readable,\n options: {\n onProgress?: (current: number) => void;\n totalSize?: number;\n } = {}\n): Promise<MD5Result> {\n // Validate stream\n if (!readStream || typeof readStream.on !== 'function') {\n throw new Error('Invalid readable stream: stream must have event listener support');\n }\n\n // Create MD5 stream\n const md5Stream = createMD5Stream();\n\n // Track progress if callback provided\n let bytesProcessed = 0;\n \n if (options.onProgress) {\n readStream.on('data', (chunk: Buffer) => {\n bytesProcessed += chunk.length;\n options.onProgress?.(bytesProcessed);\n });\n }\n\n // Handle stream errors\n readStream.on('error', (error) => {\n md5Stream.destroy(error);\n });\n\n // Handle stream end\n readStream.on('end', () => {\n md5Stream.end();\n });\n\n // Pipe stream through MD5\n return new Promise<MD5Result>((resolve, reject) => {\n md5Stream\n .on('md5', (result: MD5Result) => {\n resolve(result);\n })\n .on('error', (error) => {\n reject(error);\n });\n \n readStream.pipe(md5Stream);\n });\n}\n\n/**\n * Hash a file and return only the hex digest\n * @param filePath - Path to the file to hash\n * @param options - Optional configuration\n * @returns Promise with MD5 hex digest string\n * \n * @example\n * ```ts\n * import { hashFileDigest } from 'pure-md5';\n * \n * const digest = await hashFileDigest('path/to/file.txt');\n * console.log('MD5:', digest);\n * ```\n */\nexport async function hashFileDigest(\n filePath: string,\n options: HashFileOptions = {}\n): Promise<string> {\n const result = await hashFile(filePath, options);\n return result.digest;\n}\n\n/**\n * Hash a file stream and return only the hex digest\n * @param readStream - Readable stream to hash\n * @param options - Optional configuration\n * @returns Promise with MD5 hex digest string\n */\nexport async function hashFileStreamDigest(\n readStream: Readable,\n options: { onProgress?: (current: number) => void; totalSize?: number } = {}\n): Promise<string> {\n const result = await hashFileStream(readStream, options);\n return result.digest;\n}\n\n/**\n * Verify file integrity by comparing MD5 hash\n * @param filePath - Path to the file to verify\n * @param expectedDigest - Expected MD5 hex digest\n * @param options - Optional configuration\n * @returns Promise with verification result\n * \n * @example\n * ```ts\n * import { verifyFile } from 'pure-md5';\n * \n * const isVerified = await verifyFile(\n * 'path/to/file.txt',\n * '5d41402abc4b2a76b9719d911017c592'\n * );\n * console.log('Verified:', isVerified);\n * ```\n */\nexport async function verifyFile(\n filePath: string,\n expectedDigest: string,\n options: HashFileOptions = {}\n): Promise<boolean> {\n const result = await hashFile(filePath, options);\n return result.digest.toLowerCase() === expectedDigest.toLowerCase();\n}\n\n/**\n * Get MD5 hash of a file synchronously (not recommended for large files)\n * @param filePath - Path to the file to hash\n * @returns MD5 hex digest string\n * \n * @example\n * ```ts\n * import { hashFileSync } from 'pure-md5';\n * \n * const digest = hashFileSync('path/to/file.txt');\n * console.log('MD5:', digest);\n * ```\n */\nexport function hashFileSync(filePath: string): string {\n // Validate file path\n if (typeof filePath !== 'string' || filePath.trim() === '') {\n throw new Error('Invalid file path: must be a non-empty string');\n }\n\n // Check if file exists\n if (!fs.existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n // Get file stats\n let stats: fs.Stats;\n try {\n stats = fs.statSync(filePath);\n } catch (error) {\n throw new Error(`Failed to access file ${filePath}: ${(error as Error).message}`);\n }\n\n if (!stats.isFile()) {\n throw new Error(`Path is not a file: ${filePath}`);\n }\n\n // Read entire file into memory (not recommended for large files)\n let content: Buffer;\n try {\n content = fs.readFileSync(filePath);\n } catch (error) {\n throw new Error(`Failed to read file ${filePath}: ${(error as Error).message}`);\n }\n\n // Use synchronous MD5 computation with Buffer support\n return md5Buffer(content);\n}\n\n/**\n * Utility to create a progress tracker for file hashing\n * @param totalSize - Total size of the file being hashed\n * @param onUpdate - Callback with progress percentage (0-100)\n * @returns Progress callback function\n * \n * @example\n * ```ts\n * import { hashFile, createProgressTracker } from 'pure-md5';\n * \n * const totalSize = 1024 * 1024 * 100; // 100MB\n * const progress = createProgressTracker(totalSize, (percent) => {\n * console.log(`Progress: ${percent.toFixed(1)}%`);\n * });\n * \n * const result = await hashFile('large-file.bin', { onProgress: progress });\n * ```\n */\nexport function createProgressTracker(\n totalSize: number,\n onUpdate: (percentage: number) => void\n): (current: number) => void {\n let lastPercentage = 0;\n \n return (current: number) => {\n if (totalSize > 0) {\n const percentage = Math.min(100, (current / totalSize) * 100);\n \n // Only update if percentage changed significantly\n if (Math.floor(percentage) !== Math.floor(lastPercentage)) {\n onUpdate(percentage);\n lastPercentage = percentage;\n }\n }\n };\n}\n"]}
@@ -1,137 +0,0 @@
1
- import { Readable } from 'stream';
2
- import { MD5Result } from './md5-stream.cjs';
3
-
4
- /**
5
- * File System Utilities for MD5 hashing
6
- * Provides convenient utilities for hashing files through Node.js file system streams
7
- */
8
-
9
- /**
10
- * Options for file hashing operations
11
- */
12
- interface HashFileOptions {
13
- /**
14
- * Chunk size for reading file (default: 64KB)
15
- */
16
- chunkSize?: number;
17
- /**
18
- * Progress callback for tracking hashing progress
19
- * @param current - Current position in bytes
20
- */
21
- onProgress?: (current: number) => void;
22
- }
23
- /**
24
- * Hash a file by its path
25
- * @param filePath - Path to the file to hash
26
- * @param options - Optional configuration
27
- * @returns Promise with MD5 result (digest and bytes processed)
28
- *
29
- * @example
30
- * ```ts
31
- * import { hashFile } from 'pure-md5';
32
- *
33
- * const result = await hashFile('path/to/file.txt');
34
- * console.log('MD5:', result.digest);
35
- * console.log('Bytes:', result.bytesProcessed);
36
- * ```
37
- */
38
- declare function hashFile(filePath: string, options?: HashFileOptions): Promise<MD5Result>;
39
- /**
40
- * Hash data from an existing readable stream
41
- * @param readStream - Readable stream to hash
42
- * @param options - Optional configuration
43
- * @returns Promise with MD5 result (digest and bytes processed)
44
- *
45
- * @example
46
- * ```ts
47
- * import { createReadStream } from 'fs';
48
- * import { hashFileStream } from 'pure-md5';
49
- *
50
- * const stream = createReadStream('path/to/file.txt');
51
- * const result = await hashFileStream(stream);
52
- * console.log('MD5:', result.digest);
53
- * ```
54
- */
55
- declare function hashFileStream(readStream: Readable, options?: {
56
- onProgress?: (current: number) => void;
57
- totalSize?: number;
58
- }): Promise<MD5Result>;
59
- /**
60
- * Hash a file and return only the hex digest
61
- * @param filePath - Path to the file to hash
62
- * @param options - Optional configuration
63
- * @returns Promise with MD5 hex digest string
64
- *
65
- * @example
66
- * ```ts
67
- * import { hashFileDigest } from 'pure-md5';
68
- *
69
- * const digest = await hashFileDigest('path/to/file.txt');
70
- * console.log('MD5:', digest);
71
- * ```
72
- */
73
- declare function hashFileDigest(filePath: string, options?: HashFileOptions): Promise<string>;
74
- /**
75
- * Hash a file stream and return only the hex digest
76
- * @param readStream - Readable stream to hash
77
- * @param options - Optional configuration
78
- * @returns Promise with MD5 hex digest string
79
- */
80
- declare function hashFileStreamDigest(readStream: Readable, options?: {
81
- onProgress?: (current: number) => void;
82
- totalSize?: number;
83
- }): Promise<string>;
84
- /**
85
- * Verify file integrity by comparing MD5 hash
86
- * @param filePath - Path to the file to verify
87
- * @param expectedDigest - Expected MD5 hex digest
88
- * @param options - Optional configuration
89
- * @returns Promise with verification result
90
- *
91
- * @example
92
- * ```ts
93
- * import { verifyFile } from 'pure-md5';
94
- *
95
- * const isVerified = await verifyFile(
96
- * 'path/to/file.txt',
97
- * '5d41402abc4b2a76b9719d911017c592'
98
- * );
99
- * console.log('Verified:', isVerified);
100
- * ```
101
- */
102
- declare function verifyFile(filePath: string, expectedDigest: string, options?: HashFileOptions): Promise<boolean>;
103
- /**
104
- * Get MD5 hash of a file synchronously (not recommended for large files)
105
- * @param filePath - Path to the file to hash
106
- * @returns MD5 hex digest string
107
- *
108
- * @example
109
- * ```ts
110
- * import { hashFileSync } from 'pure-md5';
111
- *
112
- * const digest = hashFileSync('path/to/file.txt');
113
- * console.log('MD5:', digest);
114
- * ```
115
- */
116
- declare function hashFileSync(filePath: string): string;
117
- /**
118
- * Utility to create a progress tracker for file hashing
119
- * @param totalSize - Total size of the file being hashed
120
- * @param onUpdate - Callback with progress percentage (0-100)
121
- * @returns Progress callback function
122
- *
123
- * @example
124
- * ```ts
125
- * import { hashFile, createProgressTracker } from 'pure-md5';
126
- *
127
- * const totalSize = 1024 * 1024 * 100; // 100MB
128
- * const progress = createProgressTracker(totalSize, (percent) => {
129
- * console.log(`Progress: ${percent.toFixed(1)}%`);
130
- * });
131
- *
132
- * const result = await hashFile('large-file.bin', { onProgress: progress });
133
- * ```
134
- */
135
- declare function createProgressTracker(totalSize: number, onUpdate: (percentage: number) => void): (current: number) => void;
136
-
137
- export { type HashFileOptions, createProgressTracker, hashFile, hashFileDigest, hashFileStream, hashFileStreamDigest, hashFileSync, verifyFile };
@@ -1,137 +0,0 @@
1
- import { Readable } from 'stream';
2
- import { MD5Result } from './md5-stream.js';
3
-
4
- /**
5
- * File System Utilities for MD5 hashing
6
- * Provides convenient utilities for hashing files through Node.js file system streams
7
- */
8
-
9
- /**
10
- * Options for file hashing operations
11
- */
12
- interface HashFileOptions {
13
- /**
14
- * Chunk size for reading file (default: 64KB)
15
- */
16
- chunkSize?: number;
17
- /**
18
- * Progress callback for tracking hashing progress
19
- * @param current - Current position in bytes
20
- */
21
- onProgress?: (current: number) => void;
22
- }
23
- /**
24
- * Hash a file by its path
25
- * @param filePath - Path to the file to hash
26
- * @param options - Optional configuration
27
- * @returns Promise with MD5 result (digest and bytes processed)
28
- *
29
- * @example
30
- * ```ts
31
- * import { hashFile } from 'pure-md5';
32
- *
33
- * const result = await hashFile('path/to/file.txt');
34
- * console.log('MD5:', result.digest);
35
- * console.log('Bytes:', result.bytesProcessed);
36
- * ```
37
- */
38
- declare function hashFile(filePath: string, options?: HashFileOptions): Promise<MD5Result>;
39
- /**
40
- * Hash data from an existing readable stream
41
- * @param readStream - Readable stream to hash
42
- * @param options - Optional configuration
43
- * @returns Promise with MD5 result (digest and bytes processed)
44
- *
45
- * @example
46
- * ```ts
47
- * import { createReadStream } from 'fs';
48
- * import { hashFileStream } from 'pure-md5';
49
- *
50
- * const stream = createReadStream('path/to/file.txt');
51
- * const result = await hashFileStream(stream);
52
- * console.log('MD5:', result.digest);
53
- * ```
54
- */
55
- declare function hashFileStream(readStream: Readable, options?: {
56
- onProgress?: (current: number) => void;
57
- totalSize?: number;
58
- }): Promise<MD5Result>;
59
- /**
60
- * Hash a file and return only the hex digest
61
- * @param filePath - Path to the file to hash
62
- * @param options - Optional configuration
63
- * @returns Promise with MD5 hex digest string
64
- *
65
- * @example
66
- * ```ts
67
- * import { hashFileDigest } from 'pure-md5';
68
- *
69
- * const digest = await hashFileDigest('path/to/file.txt');
70
- * console.log('MD5:', digest);
71
- * ```
72
- */
73
- declare function hashFileDigest(filePath: string, options?: HashFileOptions): Promise<string>;
74
- /**
75
- * Hash a file stream and return only the hex digest
76
- * @param readStream - Readable stream to hash
77
- * @param options - Optional configuration
78
- * @returns Promise with MD5 hex digest string
79
- */
80
- declare function hashFileStreamDigest(readStream: Readable, options?: {
81
- onProgress?: (current: number) => void;
82
- totalSize?: number;
83
- }): Promise<string>;
84
- /**
85
- * Verify file integrity by comparing MD5 hash
86
- * @param filePath - Path to the file to verify
87
- * @param expectedDigest - Expected MD5 hex digest
88
- * @param options - Optional configuration
89
- * @returns Promise with verification result
90
- *
91
- * @example
92
- * ```ts
93
- * import { verifyFile } from 'pure-md5';
94
- *
95
- * const isVerified = await verifyFile(
96
- * 'path/to/file.txt',
97
- * '5d41402abc4b2a76b9719d911017c592'
98
- * );
99
- * console.log('Verified:', isVerified);
100
- * ```
101
- */
102
- declare function verifyFile(filePath: string, expectedDigest: string, options?: HashFileOptions): Promise<boolean>;
103
- /**
104
- * Get MD5 hash of a file synchronously (not recommended for large files)
105
- * @param filePath - Path to the file to hash
106
- * @returns MD5 hex digest string
107
- *
108
- * @example
109
- * ```ts
110
- * import { hashFileSync } from 'pure-md5';
111
- *
112
- * const digest = hashFileSync('path/to/file.txt');
113
- * console.log('MD5:', digest);
114
- * ```
115
- */
116
- declare function hashFileSync(filePath: string): string;
117
- /**
118
- * Utility to create a progress tracker for file hashing
119
- * @param totalSize - Total size of the file being hashed
120
- * @param onUpdate - Callback with progress percentage (0-100)
121
- * @returns Progress callback function
122
- *
123
- * @example
124
- * ```ts
125
- * import { hashFile, createProgressTracker } from 'pure-md5';
126
- *
127
- * const totalSize = 1024 * 1024 * 100; // 100MB
128
- * const progress = createProgressTracker(totalSize, (percent) => {
129
- * console.log(`Progress: ${percent.toFixed(1)}%`);
130
- * });
131
- *
132
- * const result = await hashFile('large-file.bin', { onProgress: progress });
133
- * ```
134
- */
135
- declare function createProgressTracker(totalSize: number, onUpdate: (percentage: number) => void): (current: number) => void;
136
-
137
- export { type HashFileOptions, createProgressTracker, hashFile, hashFileDigest, hashFileStream, hashFileStreamDigest, hashFileSync, verifyFile };
@@ -1,2 +0,0 @@
1
- export{g as createProgressTracker,a as hashFile,c as hashFileDigest,b as hashFileStream,d as hashFileStreamDigest,f as hashFileSync,e as verifyFile}from'../chunk-H2K353LR.js';import'../chunk-NWQ4N5RX.js';import'../chunk-JKVD5LHZ.js';import'../chunk-R4JB5MBR.js';import'../chunk-2YXXFGBV.js';//# sourceMappingURL=fs-utils.js.map
2
- //# sourceMappingURL=fs-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"fs-utils.js"}
@@ -1,2 +0,0 @@
1
- 'use strict';var stream=require('stream'),D=require('fs');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var D__default=/*#__PURE__*/_interopDefault(D);function U(o,r){return o+r&4294967295}var d=U;function T(o,r,a,e,t){let s=t||d;return r=s(s(r,o),s(a,e)),r}function $(o,r,a,e){var s=(e||d)(o<<r|o>>>32-r,a);return s}function R(o,r,a,e,t,s,n){return r=T(o,r,e,s,n),$(r,t,a,n)}function B(o,r,a,e,t,s,n,i){return R(a&e|~a&t,r,a,s,n,i,o)}function F(o,r,a,e,t,s,n,i){return R(a&t|e&~t,r,a,s,n,i,o)}function A(o,r,a,e,t,s,n,i){return R(a^e^t,r,a,s,n,i,o)}function L(o,r,a,e,t,s,n,i){return R(e^(a|~t),r,a,s,n,i,o)}function j(o,r,a){typeof a>"u"&&(a=d);let e=o[0],t=o[1],s=o[2],n=o[3],i=B.bind(null,a);e=i(e,t,s,n,r[0],7,-680876936),n=i(n,e,t,s,r[1],12,-389564586),s=i(s,n,e,t,r[2],17,606105819),t=i(t,s,n,e,r[3],22,-1044525330),e=i(e,t,s,n,r[4],7,-176418897),n=i(n,e,t,s,r[5],12,1200080426),s=i(s,n,e,t,r[6],17,-1473231341),t=i(t,s,n,e,r[7],22,-45705983),e=i(e,t,s,n,r[8],7,1770035416),n=i(n,e,t,s,r[9],12,-1958414417),s=i(s,n,e,t,r[10],17,-42063),t=i(t,s,n,e,r[11],22,-1990404162),e=i(e,t,s,n,r[12],7,1804603682),n=i(n,e,t,s,r[13],12,-40341101),s=i(s,n,e,t,r[14],17,-1502002290),t=i(t,s,n,e,r[15],22,1236535329);let u=F.bind(null,a);e=u(e,t,s,n,r[1],5,-165796510),n=u(n,e,t,s,r[6],9,-1069501632),s=u(s,n,e,t,r[11],14,643717713),t=u(t,s,n,e,r[0],20,-373897302),e=u(e,t,s,n,r[5],5,-701558691),n=u(n,e,t,s,r[10],9,38016083),s=u(s,n,e,t,r[15],14,-660478335),t=u(t,s,n,e,r[4],20,-405537848),e=u(e,t,s,n,r[9],5,568446438),n=u(n,e,t,s,r[14],9,-1019803690),s=u(s,n,e,t,r[3],14,-187363961),t=u(t,s,n,e,r[8],20,1163531501),e=u(e,t,s,n,r[13],5,-1444681467),n=u(n,e,t,s,r[2],9,-51403784),s=u(s,n,e,t,r[7],14,1735328473),t=u(t,s,n,e,r[12],20,-1926607734);let f=A.bind(null,a);e=f(e,t,s,n,r[5],4,-378558),n=f(n,e,t,s,r[8],11,-2022574463),s=f(s,n,e,t,r[11],16,1839030562),t=f(t,s,n,e,r[14],23,-35309556),e=f(e,t,s,n,r[1],4,-1530992060),n=f(n,e,t,s,r[4],11,1272893353),s=f(s,n,e,t,r[7],16,-155497632),t=f(t,s,n,e,r[10],23,-1094730640),e=f(e,t,s,n,r[13],4,681279174),n=f(n,e,t,s,r[0],11,-358537222),s=f(s,n,e,t,r[3],16,-722521979),t=f(t,s,n,e,r[6],23,76029189),e=f(e,t,s,n,r[9],4,-640364487),n=f(n,e,t,s,r[12],11,-421815835),s=f(s,n,e,t,r[15],16,530742520),t=f(t,s,n,e,r[2],23,-995338651);let m=L.bind(null,a);e=m(e,t,s,n,r[0],6,-198630844),n=m(n,e,t,s,r[7],10,1126891415),s=m(s,n,e,t,r[14],15,-1416354905),t=m(t,s,n,e,r[5],21,-57434055),e=m(e,t,s,n,r[12],6,1700485571),n=m(n,e,t,s,r[3],10,-1894986606),s=m(s,n,e,t,r[10],15,-1051523),t=m(t,s,n,e,r[1],21,-2054922799),e=m(e,t,s,n,r[8],6,1873313359),n=m(n,e,t,s,r[15],10,-30611744),s=m(s,n,e,t,r[6],15,-1560198380),t=m(t,s,n,e,r[13],21,1309151649),e=m(e,t,s,n,r[4],6,-145523070),n=m(n,e,t,s,r[11],10,-1120210379),s=m(s,n,e,t,r[2],15,718787259),t=m(t,s,n,e,r[9],21,-343485551),o[0]=a(e,o[0]),o[1]=a(t,o[1]),o[2]=a(s,o[2]),o[3]=a(n,o[3]);}var b=j;var z="0123456789abcdef".split(""),S=z;function H(o){let r="";for(let a=0;a<4;a++)r+=S[o>>a*8+4&15]+S[o>>a*8&15];return r}function _(o){let r=o.length,a=new Array(r);for(let e=0;e<r;e++)a[e]=H(o[e]);return a.join("")}var g=_;var M=class o extends stream.Transform{constructor(a){super({readableObjectMode:false,writableObjectMode:false});this.initialMD5State=[1732584193,-271733879,-1732584194,271733878];this.bufferCapacity=64;this.buffer=new Uint8Array(this.bufferCapacity);this.add32=a?.add32||d,this.state={state:[...this.initialMD5State],bytesProcessed:0,bufferLength:0,buffer:this.buffer};}_transform(a,e,t){try{let s=a,n=s.length;if(n===0){t();return}if(this.state.bufferLength>0){let f=this.state.bufferLength,m=64-f,l=Math.min(n,m);for(let c=0;c<l;c++)this.buffer[f+c]=s[c];if(this.state.bufferLength+=l,this.state.bufferLength===64&&this._processBufferBlock(),l===n){t();return}let h=n-l;for(let c=0;c<h;c++)s[c]=s[l+c];let y=Buffer.alloc(h);for(let c=0;c<h;c++)y[c]=s[c];s=y;}let i=Math.floor(s.length/64);for(let f=0;f<i;f++){let m=f*64,l=[];for(let h=0;h<16;h++){let y=m+h*4;l[h]=s[y]+(s[y+1]<<8)+(s[y+2]<<16)+(s[y+3]<<24);}b(this.state.state,l,this.add32),this.state.bytesProcessed+=64;}let u=s.length%64;if(u>0){this.buffer.length<u&&(this.buffer=new Uint8Array(u),this.state.buffer=this.buffer);for(let f=0;f<u;f++)this.buffer[f]=s[i*64+f];this.state.bufferLength=u;}t();}catch(s){t(s);}}_processBufferBlock(){let a=this.state.buffer,e=[];for(let t=0;t<16;t++){let s=t*4;e[t]=a[s]+(a[s+1]<<8)+(a[s+2]<<16)+(a[s+3]<<24);}b(this.state.state,e,this.add32),this.state.bytesProcessed+=64,this.state.bufferLength=0;}_flush(a){try{let{state:e,bufferLength:t,buffer:s}=this.state,n=new Array(16).fill(0);for(let u=0;u<t;u++)n[u>>2]|=(s[u]&255)<<(u%4<<3);if(n[t>>2]|=128<<(t%4<<3),t>55){b(e,n,this.add32);for(let u=0;u<16;u++)n[u]=0;}n[14]=(this.state.bytesProcessed+t)*8,n[15]=0,b(e,n,this.add32);let i=g(e);this.emit("md5",{digest:i,bytesProcessed:this.state.bytesProcessed+t}),a();}catch(e){a(e);}}getCurrentState(){return {state:[...this.state.state],bytesProcessed:this.state.bytesProcessed+this.state.bufferLength}}getBytesProcessed(){return this.state.bytesProcessed+this.state.bufferLength}reset(){this.state={state:[...this.initialMD5State],bytesProcessed:0,bufferLength:0,buffer:this.buffer},this.buffer=new Uint8Array(this.bufferCapacity),this.state.buffer=this.buffer,this.state.bufferLength=0;}static fromStream(a,e){let t=new o(e),s=x.call(t,a);return {stream:t,result:s}}};function w(o){return new M(o)}async function x(o){return new Promise((r,a)=>{let e=[];o.pipe(this).on("md5",t=>{e.push(t);}).on("error",a).on("finish",()=>{r(e[0]);});})}function O(o,r){let a=new M(r),e=x.call(a,o);return {stream:a,result:e}}function I(o,r){let a=o.length,e=[1732584193,-271733879,-1732584194,271733878],t;for(t=64;t<=a;t+=64){let i=q(o,t-64);b(e,i,r);}let s=a-t+64,n=new Array(16).fill(0);for(let i=0;i<s;i++)n[i>>2]|=(o[a-s+i]&255)<<(i%4<<3);if(n[s>>2]|=128<<(s%4<<3),s>55){b(e,n,r);for(let i=0;i<16;i++)n[i]=0;}return n[14]=a*8,n[15]=0,b(e,n,r),e}function q(o,r){let a=[];for(let e=0;e<64;e+=4)a[e>>2]=(o[r+e]||0)+((o[r+e+1]||0)<<8)+((o[r+e+2]||0)<<16)+((o[r+e+3]||0)<<24);return a}var C=I;function E(o){return g(C(o,d))}async function P(o,r={}){if(typeof o!="string"||o.trim()==="")throw new Error("Invalid file path: must be a non-empty string");if(!D__default.default.existsSync(o))throw new Error(`File not found: ${o}`);let a;try{a=D__default.default.statSync(o);}catch(t){throw new Error(`Failed to access file ${o}: ${t.message}`)}if(!a.isFile())throw new Error(`Path is not a file: ${o}`);let e=D__default.default.createReadStream(o,{highWaterMark:r.chunkSize||64*1024});try{return await v(e,{onProgress:r.onProgress,totalSize:a.size})}finally{e.destroy();}}async function v(o,r={}){if(!o||typeof o.on!="function")throw new Error("Invalid readable stream: stream must have event listener support");let a=w(),e=0;return r.onProgress&&o.on("data",t=>{e+=t.length,r.onProgress?.(e);}),o.on("error",t=>{a.destroy(t);}),o.on("end",()=>{a.end();}),new Promise((t,s)=>{a.on("md5",n=>{t(n);}).on("error",n=>{s(n);}),o.pipe(a);})}async function G(o,r={}){return (await P(o,r)).digest}async function J(o,r={}){return (await v(o,r)).digest}async function K(o,r,a={}){return (await P(o,a)).digest.toLowerCase()===r.toLowerCase()}function N(o){if(typeof o!="string"||o.trim()==="")throw new Error("Invalid file path: must be a non-empty string");if(!D__default.default.existsSync(o))throw new Error(`File not found: ${o}`);let r;try{r=D__default.default.statSync(o);}catch(e){throw new Error(`Failed to access file ${o}: ${e.message}`)}if(!r.isFile())throw new Error(`Path is not a file: ${o}`);let a;try{a=D__default.default.readFileSync(o);}catch(e){throw new Error(`Failed to read file ${o}: ${e.message}`)}return E(a)}function Q(o,r){let a=0;return e=>{if(o>0){let t=Math.min(100,e/o*100);Math.floor(t)!==Math.floor(a)&&(r(t),a=t);}}}var V=[1732584193,-271733879,-1732584194,271733878],p=class o{constructor(r,a={}){this.result=null;this.resultResolver=null;this.consumed=false;this.bufferCapacity=64;this.buffer=new Uint8Array(this.bufferCapacity);this.sourceStream=r,this.state={state:[...V],bytesProcessed:0,bufferLength:0,buffer:this.buffer},this.add32=a.add32||d,this.resultPromise=new Promise(e=>{this.resultResolver=e;});}getReader(){if(this.consumed)throw new Error("Cannot get reader from MD5ReadableStream: stream has already been consumed");this.consumed=true;let{readable:r,writable:a}=new TransformStream({transform:async(e,t)=>{await this.processChunk(e),t.enqueue(e);},flush:async e=>{this.finalize(),this.resultResolver&&this.resultResolver(this.result);}});return this.sourceStream.pipeTo(a).catch(e=>{console.error("Error piping stream:",e),this.resultResolver&&this.resultResolver({digest:"",bytesProcessed:this.state.bytesProcessed});}),r.getReader()}async processChunk(r){let a;r instanceof Blob?a=new Uint8Array(await r.arrayBuffer()):r instanceof ArrayBuffer?a=new Uint8Array(r):a=r;let e=a.length;if(e===0)return;if(this.state.bufferLength>0){let n=this.state.bufferLength,i=64-n,u=Math.min(e,i);for(let l=0;l<u;l++)this.buffer[n+l]=a[l];if(this.state.bufferLength+=u,this.state.bufferLength===64&&this._processBufferBlock(),u===e)return;let f=e-u,m=new Uint8Array(f);for(let l=0;l<f;l++)m[l]=a[u+l];a=m;}let t=Math.floor(a.length/64);for(let n=0;n<t;n++){let i=n*64,u=[];for(let f=0;f<16;f++){let m=i+f*4;u[f]=a[m]+(a[m+1]<<8)+(a[m+2]<<16)+(a[m+3]<<24);}b(this.state.state,u,this.add32),this.state.bytesProcessed+=64;}let s=a.length%64;if(s>0){this.buffer.length<s&&(this.buffer=new Uint8Array(s),this.state.buffer=this.buffer);for(let n=0;n<s;n++)this.buffer[n]=a[t+n];this.state.bufferLength=s;}}_processBufferBlock(){let r=this.state.buffer,a=[];for(let e=0;e<16;e++){let t=e*4;a[e]=r[t]+(r[t+1]<<8)+(r[t+2]<<16)+(r[t+3]<<24);}b(this.state.state,a,this.add32),this.state.bytesProcessed+=64,this.state.bufferLength=0;}finalize(){let{state:r,bufferLength:a,buffer:e}=this.state,t=new Array(16).fill(0);for(let n=0;n<a;n++)t[n>>2]|=(e[n]&255)<<(n%4<<3);if(t[a>>2]|=128<<(a%4<<3),a>55){b(r,t,this.add32);for(let n=0;n<16;n++)t[n]=0;}t[14]=(this.state.bytesProcessed+a)*8,t[15]=0,b(r,t,this.add32);let s=g(r);this.result={digest:s,bytesProcessed:this.state.bytesProcessed+a};}getResult(){return this.resultPromise}getCurrentState(){return {state:[...this.state.state],bytesProcessed:this.state.bytesProcessed+this.state.bufferLength}}getBytesProcessed(){return this.state.bytesProcessed+this.state.bufferLength}static hash(r,a){let e=new o(r,a),t=e.getReader();return new Promise((s,n)=>{let i=0;t.read().then(function u({done:f,value:m}){if(f){s(e.getResult());return}i+=m.length,t.read().then(u);}).catch(n);})}static hashFile(r,a){let e=r.stream();return o.hash(e,a)}static hashBlob(r,a){return new Promise((e,t)=>{let s=new FileReader;s.onload=n=>{try{let i=n.target?.result,u=new ReadableStream({start(f){f.enqueue(new Uint8Array(i)),f.close();}});e(o.hash(u,a));}catch(i){t(i);}},s.onerror=()=>t(s.error),s.readAsArrayBuffer(r);})}};function X(o,r){return new p(o,r)}async function Y(o,r){let a=o.getReader(),e=new p(o,r),t=0;for(;;){let{done:s,value:n}=await a.read();if(s)break;n&&(t+=n.length);}return e.getResult()}async function Z(o,r){return p.hashFile(o,r)}async function k(o,r){return p.hashBlob(o,r)}async function ee(o,r){let a=o.getReader(),e=new p(o,r),t=0;for(;;){let{done:s,value:n}=await a.read();if(s)break;n&&(t+=n.length);}return e.getResult()}Object.defineProperty(M,"fromStream",{value:O,writable:false,configurable:false});exports.MD5ReadableStream=p;exports.MD5Stream=M;exports.consumeWithMD5=ee;exports.createMD5ReadableStream=X;exports.createMD5Stream=w;exports.createProgressTracker=Q;exports.fromStream=O;exports.hashBlob=k;exports.hashFile=P;exports.hashFileDigest=G;exports.hashFileStream=v;exports.hashFileStreamDigest=J;exports.hashFileSync=N;exports.hashFileWHATWG=Z;exports.hashReadableStream=Y;exports.pipeThroughMD5=x;exports.verifyFile=K;//# sourceMappingURL=index.cjs.map
2
- //# sourceMappingURL=index.cjs.map