js-md5 0.8.3 → 0.9.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.
- package/.github/workflows/ci.yml +48 -0
- package/.github/workflows/publish.yml +32 -0
- package/CHANGELOG.md +18 -0
- package/LICENSE.txt +1 -1
- package/README.md +32 -6
- package/build/md5-lite.js +612 -0
- package/build/md5-lite.min.js +10 -0
- package/build/md5-lite.min.mjs +10 -0
- package/build/md5-lite.mjs +589 -0
- package/build/md5-lite.node.mjs +625 -0
- package/build/md5.js +898 -0
- package/build/md5.min.js +3 -3
- package/build/md5.min.mjs +10 -0
- package/build/md5.mjs +870 -0
- package/build/md5.modern.js +852 -0
- package/build/md5.modern.min.js +10 -0
- package/build/md5.modern.min.mjs +10 -0
- package/build/md5.modern.mjs +829 -0
- package/build/md5.modern.node.mjs +865 -0
- package/build/md5.node.mjs +911 -0
- package/jsdoc.json +7 -0
- package/package.json +42 -10
- package/rollup.config.mjs +106 -0
- package/src/md5.js +73 -43
- package/src/md5.mjs +4 -0
package/jsdoc.json
ADDED
package/package.json
CHANGED
|
@@ -1,24 +1,56 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "js-md5",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "A simple MD5 hash function for JavaScript supports UTF-8 encoding.",
|
|
5
5
|
"main": "src/md5.js",
|
|
6
|
+
"module": "build/md5.mjs",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./index.d.ts",
|
|
10
|
+
"node": {
|
|
11
|
+
"import": "./build/md5.node.mjs",
|
|
12
|
+
"require": "./src/md5.js"
|
|
13
|
+
},
|
|
14
|
+
"import": "./build/md5.mjs",
|
|
15
|
+
"require": "./src/md5.js",
|
|
16
|
+
"default": "./src/md5.js"
|
|
17
|
+
},
|
|
18
|
+
"./src/md5.js": "./src/md5.js",
|
|
19
|
+
"./build/md5.js": "./build/md5.js",
|
|
20
|
+
"./build/md5.min.js": "./build/md5.min.js",
|
|
21
|
+
"./build/md5.mjs": "./build/md5.mjs",
|
|
22
|
+
"./build/md5.min.mjs": "./build/md5.min.mjs",
|
|
23
|
+
"./build/md5.node.mjs": "./build/md5.node.mjs",
|
|
24
|
+
"./build/md5.modern.js": "./build/md5.modern.js",
|
|
25
|
+
"./build/md5.modern.min.js": "./build/md5.modern.min.js",
|
|
26
|
+
"./build/md5.modern.mjs": "./build/md5.modern.mjs",
|
|
27
|
+
"./build/md5.modern.min.mjs": "./build/md5.modern.min.mjs",
|
|
28
|
+
"./build/md5.modern.node.mjs": "./build/md5.modern.node.mjs",
|
|
29
|
+
"./build/md5-lite.js": "./build/md5-lite.js",
|
|
30
|
+
"./build/md5-lite.min.js": "./build/md5-lite.min.js",
|
|
31
|
+
"./build/md5-lite.mjs": "./build/md5-lite.mjs",
|
|
32
|
+
"./build/md5-lite.min.mjs": "./build/md5-lite.min.mjs",
|
|
33
|
+
"./build/md5-lite.node.mjs": "./build/md5-lite.node.mjs",
|
|
34
|
+
"./package.json": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
"types": "./index.d.ts",
|
|
6
37
|
"devDependencies": {
|
|
38
|
+
"@rollup/plugin-commonjs": "^29.0.3",
|
|
39
|
+
"@rollup/plugin-terser": "^1.0.0",
|
|
7
40
|
"expect.js": "~0.3.1",
|
|
8
41
|
"jsdoc": "~4.0.2",
|
|
9
|
-
"mocha": "
|
|
10
|
-
"nyc": "^
|
|
42
|
+
"mocha": "^11.7.6",
|
|
43
|
+
"nyc": "^18.0.0",
|
|
11
44
|
"requirejs": "^2.1.22",
|
|
12
|
-
"
|
|
13
|
-
"
|
|
45
|
+
"rollup": "^4.43.0",
|
|
46
|
+
"tiny-worker": "^2.3.0"
|
|
14
47
|
},
|
|
15
48
|
"scripts": {
|
|
16
|
-
"test": "nyc mocha tests/node-test.js",
|
|
49
|
+
"test": "nyc mocha tests/node-test.js && node tests/build-test.js && node tests/esm-test.mjs",
|
|
17
50
|
"report": "nyc --reporter=html --reporter=text mocha tests/node-test.js",
|
|
18
|
-
"
|
|
19
|
-
"doc": "rm -rf doc
|
|
20
|
-
"
|
|
21
|
-
"build": "npm run-script compress;npm run-script doc"
|
|
51
|
+
"coverage": "nyc report --reporter=text-lcov > coverage.lcov",
|
|
52
|
+
"doc": "rm -rf doc && jsdoc -c jsdoc.json src README.md -d doc",
|
|
53
|
+
"build": "rollup -c && npm run doc"
|
|
22
54
|
},
|
|
23
55
|
"repository": {
|
|
24
56
|
"type": "git",
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import commonjs from '@rollup/plugin-commonjs';
|
|
2
|
+
import terser from '@rollup/plugin-terser';
|
|
3
|
+
|
|
4
|
+
const featureNames = {
|
|
5
|
+
legacy: 'FEATURE_LEGACY',
|
|
6
|
+
hmac: 'FEATURE_HMAC',
|
|
7
|
+
base64: 'FEATURE_BASE64',
|
|
8
|
+
buffer: 'FEATURE_BUFFER'
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const variants = [
|
|
12
|
+
{
|
|
13
|
+
name: 'md5',
|
|
14
|
+
features: {legacy: true, hmac: true, base64: true, buffer: true}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'md5.modern',
|
|
18
|
+
features: {legacy: false, hmac: true, base64: true, buffer: true}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'md5-lite',
|
|
22
|
+
features: {legacy: false, hmac: false, base64: false, buffer: false}
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
const disableNodeJs = {
|
|
27
|
+
name: 'disable-node-js',
|
|
28
|
+
transform(code, id) {
|
|
29
|
+
if (id.endsWith('/src/md5.js')) {
|
|
30
|
+
const nodeJsDeclaration = /^\s*var NODE_JS = .*;$/m;
|
|
31
|
+
if (!nodeJsDeclaration.test(code)) {
|
|
32
|
+
this.error('Could not find the NODE_JS declaration');
|
|
33
|
+
}
|
|
34
|
+
return code.replace(nodeJsDeclaration, ' var NODE_JS = false;');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const setFeatures = (features) => {
|
|
40
|
+
return {
|
|
41
|
+
name: 'set-features',
|
|
42
|
+
transform(code, id) {
|
|
43
|
+
if (id.endsWith('/src/md5.js')) {
|
|
44
|
+
Object.entries(featureNames).forEach(([feature, name]) => {
|
|
45
|
+
const declaration = `var ${name} = true;`;
|
|
46
|
+
if (!code.includes(declaration)) {
|
|
47
|
+
throw new Error(`Could not find declaration for ${name}`);
|
|
48
|
+
}
|
|
49
|
+
code = code.replace(declaration, `var ${name} = ${features[feature]};`);
|
|
50
|
+
});
|
|
51
|
+
return code;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
function build(variant) {
|
|
58
|
+
return [
|
|
59
|
+
{
|
|
60
|
+
input: 'src/md5.js',
|
|
61
|
+
output: {
|
|
62
|
+
file: `build/${variant.name}.js`
|
|
63
|
+
},
|
|
64
|
+
plugins: [setFeatures(variant.features)]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
input: 'src/md5.mjs',
|
|
68
|
+
external: ['crypto', 'buffer'],
|
|
69
|
+
output: {
|
|
70
|
+
file: `build/${variant.name}.node.mjs`,
|
|
71
|
+
format: 'es'
|
|
72
|
+
},
|
|
73
|
+
plugins: [setFeatures(variant.features), commonjs({
|
|
74
|
+
strictRequires: false
|
|
75
|
+
})]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
input: 'src/md5.mjs',
|
|
79
|
+
output: {
|
|
80
|
+
file: `build/${variant.name}.mjs`,
|
|
81
|
+
format: 'es'
|
|
82
|
+
},
|
|
83
|
+
plugins: [setFeatures(variant.features), disableNodeJs, commonjs({
|
|
84
|
+
strictRequires: false,
|
|
85
|
+
ignore: ['crypto', 'buffer']
|
|
86
|
+
})]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
input: `build/${variant.name}.js`,
|
|
90
|
+
output: {
|
|
91
|
+
file: `build/${variant.name}.min.js`
|
|
92
|
+
},
|
|
93
|
+
plugins: [terser()]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
input: `build/${variant.name}.mjs`,
|
|
97
|
+
output: {
|
|
98
|
+
file: `build/${variant.name}.min.mjs`,
|
|
99
|
+
format: 'es'
|
|
100
|
+
},
|
|
101
|
+
plugins: [terser()]
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export default [...variants.map((variant) => build(variant))].flat();
|
package/src/md5.js
CHANGED
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
* [js-md5]{@link https://github.com/emn178/js-md5}
|
|
3
3
|
*
|
|
4
4
|
* @namespace md5
|
|
5
|
-
* @version 0.
|
|
5
|
+
* @version 0.9.2
|
|
6
6
|
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
|
7
|
-
* @copyright Chen, Yi-Cyuan 2014-
|
|
7
|
+
* @copyright Chen, Yi-Cyuan 2014-2026
|
|
8
8
|
* @license MIT
|
|
9
9
|
*/
|
|
10
10
|
(function () {
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
+
var FEATURE_LEGACY = true;
|
|
14
|
+
var FEATURE_HMAC = true;
|
|
15
|
+
var FEATURE_BASE64 = true;
|
|
16
|
+
var FEATURE_BUFFER = true;
|
|
17
|
+
|
|
13
18
|
var INPUT_ERROR = 'input is invalid type';
|
|
14
19
|
var FINALIZE_ERROR = 'finalize already called';
|
|
15
20
|
var WINDOW = typeof window === 'object';
|
|
@@ -17,8 +22,9 @@
|
|
|
17
22
|
if (root.JS_MD5_NO_WINDOW) {
|
|
18
23
|
WINDOW = false;
|
|
19
24
|
}
|
|
20
|
-
var WEB_WORKER =
|
|
21
|
-
|
|
25
|
+
var WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && typeof self !== 'undefined' && self instanceof WorkerGlobalScope;
|
|
26
|
+
/* istanbul ignore next */
|
|
27
|
+
var NODE_JS = !root.JS_MD5_NO_NODE_JS && !WINDOW && typeof process === 'object' && process.versions && process.versions.node;
|
|
22
28
|
if (NODE_JS) {
|
|
23
29
|
root = global;
|
|
24
30
|
} else if (WEB_WORKER) {
|
|
@@ -26,12 +32,24 @@
|
|
|
26
32
|
}
|
|
27
33
|
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
|
|
28
34
|
var AMD = typeof define === 'function' && define.amd;
|
|
29
|
-
|
|
35
|
+
/* istanbul ignore next */
|
|
36
|
+
var ARRAY_BUFFER = FEATURE_LEGACY ?
|
|
37
|
+
!root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined' : true;
|
|
30
38
|
var HEX_CHARS = '0123456789abcdef'.split('');
|
|
31
39
|
var EXTRA = [128, 32768, 8388608, -2147483648];
|
|
32
40
|
var SHIFT = [0, 8, 16, 24];
|
|
33
|
-
var OUTPUT_TYPES = ['hex', 'array', 'digest', '
|
|
34
|
-
|
|
41
|
+
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
|
|
42
|
+
/* istanbul ignore else */
|
|
43
|
+
if (FEATURE_BUFFER) {
|
|
44
|
+
OUTPUT_TYPES.push('buffer');
|
|
45
|
+
}
|
|
46
|
+
/* istanbul ignore else */
|
|
47
|
+
if (FEATURE_BASE64) {
|
|
48
|
+
OUTPUT_TYPES.push('base64');
|
|
49
|
+
}
|
|
50
|
+
/* istanbul ignore next */
|
|
51
|
+
var BASE64_ENCODE_CHAR = FEATURE_BASE64 ?
|
|
52
|
+
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('') : null;
|
|
35
53
|
|
|
36
54
|
var blocks = [], buffer8;
|
|
37
55
|
if (ARRAY_BUFFER) {
|
|
@@ -41,14 +59,16 @@
|
|
|
41
59
|
}
|
|
42
60
|
|
|
43
61
|
var isArray = Array.isArray;
|
|
44
|
-
|
|
62
|
+
/* istanbul ignore else */
|
|
63
|
+
if (FEATURE_LEGACY && (root.JS_MD5_NO_NODE_JS || !isArray)) {
|
|
45
64
|
isArray = function (obj) {
|
|
46
65
|
return Object.prototype.toString.call(obj) === '[object Array]';
|
|
47
66
|
};
|
|
48
67
|
}
|
|
49
68
|
|
|
50
69
|
var isView = ArrayBuffer.isView;
|
|
51
|
-
|
|
70
|
+
/* istanbul ignore else */
|
|
71
|
+
if (FEATURE_LEGACY && ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
|
|
52
72
|
isView = function (obj) {
|
|
53
73
|
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
|
|
54
74
|
};
|
|
@@ -176,10 +196,8 @@
|
|
|
176
196
|
var nodeWrap = function (method) {
|
|
177
197
|
var crypto = require('crypto')
|
|
178
198
|
var Buffer = require('buffer').Buffer;
|
|
179
|
-
var bufferFrom;
|
|
180
|
-
if (
|
|
181
|
-
bufferFrom = Buffer.from;
|
|
182
|
-
} else {
|
|
199
|
+
var bufferFrom = Buffer.from;
|
|
200
|
+
if (FEATURE_LEGACY && (root.JS_MD5_NO_BUFFER_FROM || !bufferFrom)) {
|
|
183
201
|
bufferFrom = function (message) {
|
|
184
202
|
return new Buffer(message);
|
|
185
203
|
};
|
|
@@ -746,7 +764,10 @@
|
|
|
746
764
|
* @example
|
|
747
765
|
* hash.buffer();
|
|
748
766
|
*/
|
|
749
|
-
|
|
767
|
+
/* istanbul ignore else */
|
|
768
|
+
if (FEATURE_BUFFER) {
|
|
769
|
+
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
|
|
770
|
+
}
|
|
750
771
|
|
|
751
772
|
/**
|
|
752
773
|
* @method base64
|
|
@@ -758,23 +779,26 @@
|
|
|
758
779
|
* @example
|
|
759
780
|
* hash.base64();
|
|
760
781
|
*/
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
v1 = bytes
|
|
765
|
-
|
|
766
|
-
|
|
782
|
+
/* istanbul ignore else */
|
|
783
|
+
if (FEATURE_BASE64) {
|
|
784
|
+
Md5.prototype.base64 = function () {
|
|
785
|
+
var v1, v2, v3, base64Str = '', bytes = this.array();
|
|
786
|
+
for (var i = 0; i < 15;) {
|
|
787
|
+
v1 = bytes[i++];
|
|
788
|
+
v2 = bytes[i++];
|
|
789
|
+
v3 = bytes[i++];
|
|
790
|
+
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
|
|
791
|
+
BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
|
|
792
|
+
BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
|
|
793
|
+
BASE64_ENCODE_CHAR[v3 & 63];
|
|
794
|
+
}
|
|
795
|
+
v1 = bytes[i];
|
|
767
796
|
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
|
|
768
|
-
BASE64_ENCODE_CHAR[(v1 << 4
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
|
|
774
|
-
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
|
|
775
|
-
'==';
|
|
776
|
-
return base64Str;
|
|
777
|
-
};
|
|
797
|
+
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
|
|
798
|
+
'==';
|
|
799
|
+
return base64Str;
|
|
800
|
+
};
|
|
801
|
+
}
|
|
778
802
|
|
|
779
803
|
/**
|
|
780
804
|
* HmacMd5 class
|
|
@@ -828,23 +852,29 @@
|
|
|
828
852
|
this.inner = true;
|
|
829
853
|
this.sharedMemory = sharedMemory;
|
|
830
854
|
}
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
this.inner = false;
|
|
837
|
-
var innerHash = this.array();
|
|
838
|
-
Md5.call(this, this.sharedMemory);
|
|
839
|
-
this.update(this.oKeyPad);
|
|
840
|
-
this.update(innerHash);
|
|
855
|
+
/* istanbul ignore else */
|
|
856
|
+
if (FEATURE_HMAC) {
|
|
857
|
+
HmacMd5.prototype = new Md5();
|
|
858
|
+
|
|
859
|
+
HmacMd5.prototype.finalize = function () {
|
|
841
860
|
Md5.prototype.finalize.call(this);
|
|
842
|
-
|
|
843
|
-
|
|
861
|
+
if (this.inner) {
|
|
862
|
+
this.inner = false;
|
|
863
|
+
var innerHash = this.array();
|
|
864
|
+
Md5.call(this, this.sharedMemory);
|
|
865
|
+
this.update(this.oKeyPad);
|
|
866
|
+
this.update(innerHash);
|
|
867
|
+
Md5.prototype.finalize.call(this);
|
|
868
|
+
}
|
|
869
|
+
};
|
|
870
|
+
}
|
|
844
871
|
|
|
845
872
|
var exports = createMethod();
|
|
846
873
|
exports.md5 = exports;
|
|
847
|
-
|
|
874
|
+
/* istanbul ignore else */
|
|
875
|
+
if (FEATURE_HMAC) {
|
|
876
|
+
exports.md5.hmac = createHmacMethod();
|
|
877
|
+
}
|
|
848
878
|
|
|
849
879
|
if (COMMON_JS) {
|
|
850
880
|
module.exports = exports;
|
package/src/md5.mjs
ADDED