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/jsdoc.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "templates": {
3
+ "default": {
4
+ "includeDate": false
5
+ }
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,24 +1,56 @@
1
1
  {
2
2
  "name": "js-md5",
3
- "version": "0.8.3",
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.2.0",
10
- "nyc": "^15.1.0",
42
+ "mocha": "^11.7.6",
43
+ "nyc": "^18.0.0",
11
44
  "requirejs": "^2.1.22",
12
- "tiny-worker": "^2.3.0",
13
- "uglify-js": "^3.1.9"
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
- "coveralls": "nyc report --reporter=text-lcov | coveralls",
19
- "doc": "rm -rf doc;jsdoc src README.md -d doc",
20
- "compress": "uglifyjs src/md5.js -c -m eval --comments --output build/md5.min.js",
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.8.3
5
+ * @version 0.9.2
6
6
  * @author Chen, Yi-Cyuan [emn178@gmail.com]
7
- * @copyright Chen, Yi-Cyuan 2014-2023
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 = !WINDOW && typeof self === 'object';
21
- var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
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
- var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
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', 'buffer', 'arrayBuffer', 'base64'];
34
- var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
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
- if (root.JS_MD5_NO_NODE_JS || !isArray) {
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
- if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
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 (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {
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
- Md5.prototype.buffer = Md5.prototype.arrayBuffer;
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
- Md5.prototype.base64 = function () {
762
- var v1, v2, v3, base64Str = '', bytes = this.array();
763
- for (var i = 0; i < 15;) {
764
- v1 = bytes[i++];
765
- v2 = bytes[i++];
766
- v3 = bytes[i++];
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 | v2 >>> 4) & 63] +
769
- BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
770
- BASE64_ENCODE_CHAR[v3 & 63];
771
- }
772
- v1 = bytes[i];
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
- HmacMd5.prototype = new Md5();
832
-
833
- HmacMd5.prototype.finalize = function () {
834
- Md5.prototype.finalize.call(this);
835
- if (this.inner) {
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
- exports.md5.hmac = createHmacMethod();
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
@@ -0,0 +1,4 @@
1
+ import md5 from './md5.js';
2
+
3
+ export { md5 };
4
+ export default md5;