### Added

- Modern and lite builds generated from the same source.
- support ESM.
- Set up GitHub release action / provenance

### Fixed
- Fix uploading coverage to coveralls
- fix recognize environment is node when use browserfs
This commit is contained in:
Yi-Cyuan Chen
2026-07-20 10:19:42 +08:00
parent 6f25176e1e
commit b02f0d93f3
37 changed files with 10048 additions and 1073 deletions
+72 -42
View File
@@ -30,14 +30,19 @@
* [js-md5]{@link https://github.com/emn178/js-md5}
*
* @namespace md5
* @version 0.8.0
* @version 0.9.0
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2023
* @copyright Chen, Yi-Cyuan 2014-2026
* @license MIT
*/
(function () {
'use strict';
var FEATURE_LEGACY = true;
var FEATURE_HMAC = true;
var FEATURE_BASE64 = true;
var FEATURE_BUFFER = true;
var INPUT_ERROR = 'input is invalid type';
var FINALIZE_ERROR = 'finalize already called';
var WINDOW = typeof window === 'object';
@@ -46,7 +51,8 @@
WINDOW = false;
}
var WEB_WORKER = !WINDOW && typeof self === 'object';
var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
/* istanbul ignore next */
var NODE_JS = !root.JS_MD5_NO_NODE_JS && !WINDOW && typeof process === 'object' && process.versions && process.versions.node;
if (NODE_JS) {
root = global;
} else if (WEB_WORKER) {
@@ -54,12 +60,24 @@
}
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
var AMD = typeof define === 'function' && define.amd;
var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
/* istanbul ignore next */
var ARRAY_BUFFER = FEATURE_LEGACY ?
!root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined' : true;
var HEX_CHARS = '0123456789abcdef'.split('');
var EXTRA = [128, 32768, 8388608, -2147483648];
var SHIFT = [0, 8, 16, 24];
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
/* istanbul ignore else */
if (FEATURE_BUFFER) {
OUTPUT_TYPES.push('buffer');
}
/* istanbul ignore else */
if (FEATURE_BASE64) {
OUTPUT_TYPES.push('base64');
}
/* istanbul ignore next */
var BASE64_ENCODE_CHAR = FEATURE_BASE64 ?
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('') : null;
var blocks = [], buffer8;
if (ARRAY_BUFFER) {
@@ -69,14 +87,16 @@
}
var isArray = Array.isArray;
if (root.JS_MD5_NO_NODE_JS || !isArray) {
/* istanbul ignore else */
if (FEATURE_LEGACY && (root.JS_MD5_NO_NODE_JS || !isArray)) {
isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
var isView = ArrayBuffer.isView;
if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
/* istanbul ignore else */
if (FEATURE_LEGACY && ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
isView = function (obj) {
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
};
@@ -204,10 +224,8 @@
var nodeWrap = function (method) {
var crypto = require('crypto')
var Buffer = require('buffer').Buffer;
var bufferFrom;
if (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {
bufferFrom = Buffer.from;
} else {
var bufferFrom = Buffer.from;
if (FEATURE_LEGACY && (root.JS_MD5_NO_BUFFER_FROM || !bufferFrom)) {
bufferFrom = function (message) {
return new Buffer(message);
};
@@ -774,7 +792,10 @@
* @example
* hash.buffer();
*/
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
/* istanbul ignore else */
if (FEATURE_BUFFER) {
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
}
/**
* @method base64
@@ -786,23 +807,26 @@
* @example
* hash.base64();
*/
Md5.prototype.base64 = function () {
var v1, v2, v3, base64Str = '', bytes = this.array();
for (var i = 0; i < 15;) {
v1 = bytes[i++];
v2 = bytes[i++];
v3 = bytes[i++];
/* istanbul ignore else */
if (FEATURE_BASE64) {
Md5.prototype.base64 = function () {
var v1, v2, v3, base64Str = '', bytes = this.array();
for (var i = 0; i < 15;) {
v1 = bytes[i++];
v2 = bytes[i++];
v3 = bytes[i++];
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
BASE64_ENCODE_CHAR[v3 & 63];
}
v1 = bytes[i];
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
BASE64_ENCODE_CHAR[v3 & 63];
}
v1 = bytes[i];
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
'==';
return base64Str;
};
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
'==';
return base64Str;
};
}
/**
* HmacMd5 class
@@ -856,23 +880,29 @@
this.inner = true;
this.sharedMemory = sharedMemory;
}
HmacMd5.prototype = new Md5();
/* istanbul ignore else */
if (FEATURE_HMAC) {
HmacMd5.prototype = new Md5();
HmacMd5.prototype.finalize = function () {
Md5.prototype.finalize.call(this);
if (this.inner) {
this.inner = false;
var innerHash = this.array();
Md5.call(this, this.sharedMemory);
this.update(this.oKeyPad);
this.update(innerHash);
HmacMd5.prototype.finalize = function () {
Md5.prototype.finalize.call(this);
}
};
if (this.inner) {
this.inner = false;
var innerHash = this.array();
Md5.call(this, this.sharedMemory);
this.update(this.oKeyPad);
this.update(innerHash);
Md5.prototype.finalize.call(this);
}
};
}
var exports = createMethod();
exports.md5 = exports;
exports.md5.hmac = createHmacMethod();
/* istanbul ignore else */
if (FEATURE_HMAC) {
exports.md5.hmac = createHmacMethod();
}
if (COMMON_JS) {
module.exports = exports;
@@ -918,7 +948,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Mon Jul 20 2026 10:19:21 GMT+0800 (Taipei Standard Time)
</footer>
<script> prettyPrint(); </script>