From bba940235d5c4778ec289f9e65dae0cd526038ef Mon Sep 17 00:00:00 2001 From: Robert Kieffer Date: Sat, 9 Sep 2017 12:08:07 -0700 Subject: [PATCH] eslint (#219) * eslint * s/;// * eslint * s/;// * Add eqeqeq, brace-style, and one-var rules * fix broken test (not related to eslint) * fix test for real --- .eslintrc.json | 5 +- lib/md5-browser.js | 264 ++++++++++++++++++++++---------------------- lib/md5.js | 22 ++-- lib/rng-browser.js | 6 +- lib/sha1-browser.js | 6 +- lib/sha1.js | 22 ++-- lib/v35.js | 18 ++- package.json | 1 + test/test.js | 37 +++++-- v1.js | 6 +- v4.js | 2 +- v5.js | 2 +- 12 files changed, 204 insertions(+), 187 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 638b0a56f..734a8e14c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,16 +7,16 @@ "mocha": true }, "extends": ["eslint:recommended"], - "installedESLint": true, "rules": { "array-bracket-spacing": ["warn", "never"], "arrow-body-style": ["warn", "as-needed"], "arrow-parens": ["warn", "as-needed"], "arrow-spacing": "warn", - "brace-style": "warn", + "brace-style": ["warn", "1tbs"], "camelcase": "warn", "comma-spacing": ["warn", {"after": true}], "dot-notation": "warn", + "eqeqeq": ["warn", "smart"], "indent": ["warn", 2, { "SwitchCase": 1, "FunctionDeclaration": {"parameters": 1}, @@ -33,6 +33,7 @@ "no-trailing-spaces": "warn", "no-undef": "error", "no-unused-vars": ["warn", {"args": "none"}], + "one-var": ["warn", "never"], "padded-blocks": ["warn", "never"], "object-curly-spacing": ["warn", "never"], "quotes": ["warn", "single"], diff --git a/lib/md5-browser.js b/lib/md5-browser.js index d7f82dff1..9b3b6c7ef 100644 --- a/lib/md5-browser.js +++ b/lib/md5-browser.js @@ -19,10 +19,9 @@ * See http://pajhome.org.uk/crypt/md5 for more info. */ -'use strict;' +'use strict'; function md5(bytes) { - if (typeof(bytes) == 'string') { var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape bytes = new Array(msg.length); @@ -32,187 +31,186 @@ function md5(bytes) { return md5ToHexEncodedArray( wordsToMd5( bytesToWords(bytes) - , bytes.length * 8) - ) + , bytes.length * 8) + ); } - /* +/* * Convert an array of little-endian words to an array of bytes */ function md5ToHexEncodedArray(input) { - var i - var x - var output = [] - var length32 = input.length * 32 - var hexTab = '0123456789abcdef' - var hex + var i; + var x; + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + var hex; for (i = 0; i < length32; i += 8) { - x = (input[i >> 5] >>> (i % 32)) & 0xFF + x = (input[i >> 5] >>> (i % 32)) & 0xFF; - hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16) + hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); - output.push(hex) + output.push(hex); } - return output + return output; } - /* +/* * Calculate the MD5 of an array of little-endian words, and a bit length. */ -function wordsToMd5 (x, len) { +function wordsToMd5(x, len) { /* append padding */ - x[len >> 5] |= 0x80 << (len % 32) - x[(((len + 64) >>> 9) << 4) + 14] = len + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; - var i - var olda - var oldb - var oldc - var oldd - var a = 1732584193 - var b = -271733879 - var c = -1732584194 + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; - var d = 271733878 + var d = 271733878; for (i = 0; i < x.length; i += 16) { - olda = a - oldb = b - oldc = c - oldd = d - - a = md5ff(a, b, c, d, x[i], 7, -680876936) - d = md5ff(d, a, b, c, x[i + 1], 12, -389564586) - c = md5ff(c, d, a, b, x[i + 2], 17, 606105819) - b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330) - a = md5ff(a, b, c, d, x[i + 4], 7, -176418897) - d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426) - c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341) - b = md5ff(b, c, d, a, x[i + 7], 22, -45705983) - a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416) - d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417) - c = md5ff(c, d, a, b, x[i + 10], 17, -42063) - b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162) - a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682) - d = md5ff(d, a, b, c, x[i + 13], 12, -40341101) - c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290) - b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329) - - a = md5gg(a, b, c, d, x[i + 1], 5, -165796510) - d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632) - c = md5gg(c, d, a, b, x[i + 11], 14, 643717713) - b = md5gg(b, c, d, a, x[i], 20, -373897302) - a = md5gg(a, b, c, d, x[i + 5], 5, -701558691) - d = md5gg(d, a, b, c, x[i + 10], 9, 38016083) - c = md5gg(c, d, a, b, x[i + 15], 14, -660478335) - b = md5gg(b, c, d, a, x[i + 4], 20, -405537848) - a = md5gg(a, b, c, d, x[i + 9], 5, 568446438) - d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690) - c = md5gg(c, d, a, b, x[i + 3], 14, -187363961) - b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501) - a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467) - d = md5gg(d, a, b, c, x[i + 2], 9, -51403784) - c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473) - b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734) - - a = md5hh(a, b, c, d, x[i + 5], 4, -378558) - d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463) - c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562) - b = md5hh(b, c, d, a, x[i + 14], 23, -35309556) - a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060) - d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353) - c = md5hh(c, d, a, b, x[i + 7], 16, -155497632) - b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640) - a = md5hh(a, b, c, d, x[i + 13], 4, 681279174) - d = md5hh(d, a, b, c, x[i], 11, -358537222) - c = md5hh(c, d, a, b, x[i + 3], 16, -722521979) - b = md5hh(b, c, d, a, x[i + 6], 23, 76029189) - a = md5hh(a, b, c, d, x[i + 9], 4, -640364487) - d = md5hh(d, a, b, c, x[i + 12], 11, -421815835) - c = md5hh(c, d, a, b, x[i + 15], 16, 530742520) - b = md5hh(b, c, d, a, x[i + 2], 23, -995338651) - - a = md5ii(a, b, c, d, x[i], 6, -198630844) - d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415) - c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905) - b = md5ii(b, c, d, a, x[i + 5], 21, -57434055) - a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571) - d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606) - c = md5ii(c, d, a, b, x[i + 10], 15, -1051523) - b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799) - a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359) - d = md5ii(d, a, b, c, x[i + 15], 10, -30611744) - c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380) - b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649) - a = md5ii(a, b, c, d, x[i + 4], 6, -145523070) - d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379) - c = md5ii(c, d, a, b, x[i + 2], 15, 718787259) - b = md5ii(b, c, d, a, x[i + 9], 21, -343485551) - - a = safeAdd(a, olda) - b = safeAdd(b, oldb) - c = safeAdd(c, oldc) - d = safeAdd(d, oldd) + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); } - return [a, b, c, d] + return [a, b, c, d]; } - /* +/* * Convert an array bytes to an array of little-endian words * Characters >255 have their high-byte silently ignored. */ function bytesToWords(input) { - - var i - var output = [] - output[(input.length >> 2) - 1] = undefined + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; for (i = 0; i < output.length; i += 1) { - output[i] = 0 + output[i] = 0; } - var length8 = input.length * 8 + var length8 = input.length * 8; for (i = 0; i < length8; i += 8) { - output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32) + output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); } - return output + return output; } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ -function safeAdd (x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF) - var msw = (x >> 16) + (y >> 16) + (lsw >> 16) - return (msw << 16) | (lsw & 0xFFFF) +function safeAdd(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left. */ -function bitRotateLeft (num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)) +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); } /* * These functions implement the four basic operations the algorithm uses. */ -function md5cmn (q, a, b, x, s, t) { - return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b) +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); } -function md5ff (a, b, c, d, x, s, t) { - return md5cmn((b & c) | ((~b) & d), a, b, x, s, t) +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); } -function md5gg (a, b, c, d, x, s, t) { - return md5cmn((b & d) | (c & (~d)), a, b, x, s, t) +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); } -function md5hh (a, b, c, d, x, s, t) { - return md5cmn(b ^ c ^ d, a, b, x, s, t) +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | (~d)), a, b, x, s, t); } -function md5ii (a, b, c, d, x, s, t) { - return md5cmn(c ^ (b | (~d)), a, b, x, s, t) -} -module.exports = md5; \ No newline at end of file +module.exports = md5; diff --git a/lib/md5.js b/lib/md5.js index 1645d6bb5..d336ee9b5 100644 --- a/lib/md5.js +++ b/lib/md5.js @@ -3,19 +3,17 @@ var crypto = require('crypto'); function md5(bytes) { - // support modern Buffer API - if (typeof Buffer.from === 'function') { - if (Array.isArray(bytes)) bytes = Buffer.from(bytes); - else if (typeof bytes === 'string') bytes = Buffer.from(bytes, 'utf8'); - } + if (typeof Buffer.from === 'function') { + // Support modern Buffer API + if (Array.isArray(bytes)) bytes = Buffer.from(bytes); + else if (typeof bytes === 'string') bytes = Buffer.from(bytes, 'utf8'); + } else { + // Support pre-v4 Buffer API + if (Array.isArray(bytes)) bytes = new Buffer(bytes); + else if (typeof bytes === 'string') bytes = new Buffer(bytes, 'utf8'); + } - // support pre-v4 Buffer API - else { - if (Array.isArray(bytes)) bytes = new Buffer(bytes); - else if (typeof bytes === 'string') bytes = new Buffer(bytes, 'utf8'); - } - - return crypto.createHash('md5').update(bytes).digest(); + return crypto.createHash('md5').update(bytes).digest(); } module.exports = md5; diff --git a/lib/rng-browser.js b/lib/rng-browser.js index ab8438262..aaf40f727 100644 --- a/lib/rng-browser.js +++ b/lib/rng-browser.js @@ -3,12 +3,14 @@ // and inconsistent support for the `crypto` API. We do the best we can via // feature-detection -if (typeof(crypto) != 'undefined' && crypto.getRandomValues) { +var getRandomValues = typeof(crypto) != 'undefined' && crypto.getRandomValues; + +if (getRandomValues) { // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef module.exports = function whatwgRNG() { - crypto.getRandomValues(rnds8); + getRandomValues(rnds8); return rnds8; }; } else { diff --git a/lib/sha1-browser.js b/lib/sha1-browser.js index dbc318420..5758ed75c 100644 --- a/lib/sha1-browser.js +++ b/lib/sha1-browser.js @@ -54,7 +54,11 @@ function sha1(bytes) { W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); } - var a = H[0], b = H[1], c = H[2], d = H[3], e = H[4]; + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; for (var t=0; t<80; t++) { var s = Math.floor(t/20); diff --git a/lib/sha1.js b/lib/sha1.js index e8771ce54..926fef39e 100644 --- a/lib/sha1.js +++ b/lib/sha1.js @@ -3,19 +3,17 @@ var crypto = require('crypto'); function sha1(bytes) { - // support modern Buffer API - if (typeof Buffer.from === 'function') { - if (Array.isArray(bytes)) bytes = Buffer.from(bytes); - else if (typeof bytes === 'string') bytes = Buffer.from(bytes, 'utf8'); - } + if (typeof Buffer.from === 'function') { + // Support modern Buffer API + if (Array.isArray(bytes)) bytes = Buffer.from(bytes); + else if (typeof bytes === 'string') bytes = Buffer.from(bytes, 'utf8'); + } else { + // Support pre-v4 Buffer API + if (Array.isArray(bytes)) bytes = new Buffer(bytes); + else if (typeof bytes === 'string') bytes = new Buffer(bytes, 'utf8'); + } - // support pre-v4 Buffer API - else { - if (Array.isArray(bytes)) bytes = new Buffer(bytes); - else if (typeof bytes === 'string') bytes = new Buffer(bytes, 'utf8'); - } - - return crypto.createHash('sha1').update(bytes).digest(); + return crypto.createHash('sha1').update(bytes).digest(); } module.exports = sha1; diff --git a/lib/v35.js b/lib/v35.js index 3e01871c6..a0cb9a521 100644 --- a/lib/v35.js +++ b/lib/v35.js @@ -21,22 +21,21 @@ function stringToBytes(str) { -module.exports = function(name, version, hashfunc){ - - var generateUUID = function (value, namespace, buf, offset) { +module.exports = function(name, version, hashfunc) { + var generateUUID = function(value, namespace, buf, offset) { var off = buf && offset || 0; - + if (typeof(value) == 'string') value = stringToBytes(value); if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); - if (!Array.isArray(namespace) || namespace.length != 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); + if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); // Per 4.3 var bytes = hashfunc(namespace.concat(value)); bytes[6] = (bytes[6] & 0x0f) | version; bytes[8] = (bytes[8] & 0x3f) | 0x80; - + if (buf) { for (var idx = 0; idx < 16; ++idx) { buf[off+idx] = bytes[idx]; @@ -44,14 +43,13 @@ module.exports = function(name, version, hashfunc){ } return buf || bytesToUuid(bytes); - } + }; - generateUUID.name = name + generateUUID.name = name; // Pre-defined namespaces, per Appendix C generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; return generateUUID; - -} +}; diff --git a/package.json b/package.json index aa8786b66..3e5b5ef32 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "uuid": "./bin/uuid" }, "devDependencies": { + "eslint": "4.5.0", "mocha": "3.1.2", "runmd": "0.1.7" }, diff --git a/test/test.js b/test/test.js index bc111b08b..97072ad23 100644 --- a/test/test.js +++ b/test/test.js @@ -1,6 +1,7 @@ var assert = require('assert'); var uuid = require('../'); +var crypto = require('crypto'); // Verify ordering of v1 ids created with explicit times var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 @@ -14,7 +15,7 @@ var HASH_SAMPLES = [ // Extended ascii chars { - input: '\t\b\f !\"#$%&\'()*+,-.\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF', + input: '\t\b\f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF', sha1: 'ca4a426a3d536f14cfd79011e79e10d64de950a0', md5: 'e8098ec21950f841731d28749129d3ee', }, @@ -42,7 +43,7 @@ function compare(name, ids) { ids = ids.sort(); var sorted = ([].concat(ids)).sort(); - assert(sorted.toString() == ids.toString(), name + ' have expected order'); + assert(sorted.toString() === ids.toString(), name + ' have expected order'); }); } @@ -71,16 +72,25 @@ test('mathRNG', function() { }); test('cryptoRNG', function() { + // Clear require cache so we can monkey with it, below + delete require.cache[require.resolve('../lib/rng-browser')]; + // We shim the web crypto API to trigger cryptoRNG code path in rng module, // then unshim once we've required it global.crypto = { getRandomValues: function(arr) { - return randomFillSync(arr); + var bytes = crypto.randomBytes(arr.length); + for (var i = 0; i < arr.length; i++) { + arr[i] = bytes[i]; + } + return arr; } }; var rng = require('../lib/rng-browser'); delete global.crypto; + assert.equal(rng.name, 'whatwgRNG'); + var bytes = rng(); assert.equal(bytes.length, 16); @@ -135,15 +145,17 @@ test('v3', function() { var buf = new Array(16); var testBuf = [0x91, 0x25, 0xa8, 0xdc, 0x52, 0xee, 0x36, 0x5b, 0xa5, 0xaa, 0x81, 0xb0, 0xb3, 0x68, 0x1c, 0xf6]; v3('hello.example.com', v3.DNS, buf); - assert.ok(buf.length === testBuf.length && buf.every(function (elem, idx) { return elem === testBuf[idx]; })); + assert.ok(buf.length === testBuf.length && buf.every(function(elem, idx) { + return elem === testBuf[idx]; + })); // test offsets as well buf = new Array(19); for (var i=0; i<3; ++i) buf[i] = 'landmaster'; v3('hello.example.com', v3.DNS, buf, 3); - assert.ok(buf.length === testBuf.length+3 && buf.every(function (elem, idx) { + assert.ok(buf.length === testBuf.length+3 && buf.every(function(elem, idx) { return (idx >= 3) ? (elem === testBuf[idx-3]) : (elem === 'landmaster'); - }), "hello"); + }), 'hello'); }); test('v5', function() { @@ -158,13 +170,15 @@ test('v5', function() { var buf = new Array(16); var testBuf = [0xfd, 0xda, 0x76, 0x5f, 0xfc, 0x57, 0x56, 0x04, 0xa2, 0x69, 0x52, 0xa7, 0xdf, 0x81, 0x64, 0xec]; v5('hello.example.com', v5.DNS, buf); - assert.ok(buf.length === testBuf.length && buf.every(function (elem, idx) { return elem === testBuf[idx]; })); + assert.ok(buf.length === testBuf.length && buf.every(function(elem, idx) { + return elem === testBuf[idx]; + })); // test offsets as well buf = new Array(19); for (var i=0; i<3; ++i) buf[i] = 'landmaster'; v5('hello.example.com', v5.DNS, buf, 3); - assert.ok(buf.length === testBuf.length+3 && buf.every(function (elem, idx) { + assert.ok(buf.length === testBuf.length+3 && buf.every(function(elem, idx) { return (idx >= 3) ? (elem === testBuf[idx-3]) : (elem === 'landmaster'); })); }); @@ -190,7 +204,7 @@ compare('uuids with time option', [ test('msec', function() { assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), + uuid.v1({msecs: TIME}) !== uuid.v1({msecs: TIME}), 'IDs created at same msec are different' ); }); @@ -234,7 +248,7 @@ test('explicit options product expected id', function() { clockseq: 0x385c, node: [0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10] }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); + assert(id === 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); }); test('ids spanning 1ms boundary are 100ns apart', function() { @@ -242,7 +256,8 @@ test('ids spanning 1ms boundary are 100ns apart', function() { var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - var before = u0.split('-')[0], after = u1.split('-')[0]; + var before = u0.split('-')[0]; + var after = u1.split('-')[0]; var dt = parseInt(after, 16) - parseInt(before, 16); assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); }); diff --git a/v1.js b/v1.js index 082e22769..d84c0f452 100644 --- a/v1.js +++ b/v1.js @@ -6,10 +6,12 @@ var bytesToUuid = require('./lib/bytesToUuid'); // Inspired by https://github.com/LiosK/UUID.js // and http://docs.python.org/library/uuid.html -var _nodeId, _clockseq; +var _nodeId; +var _clockseq; // Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; +var _lastMSecs = 0; +var _lastNSecs = 0; // See https://github.com/broofa/node-uuid for API details function v1(options, buf, offset) { diff --git a/v4.js b/v4.js index 38b6f76a9..1f07be1c5 100644 --- a/v4.js +++ b/v4.js @@ -5,7 +5,7 @@ function v4(options, buf, offset) { var i = buf && offset || 0; if (typeof(options) == 'string') { - buf = options == 'binary' ? new Array(16) : null; + buf = options === 'binary' ? new Array(16) : null; options = null; } options = options || {}; diff --git a/v5.js b/v5.js index 358f6570c..4945baf38 100644 --- a/v5.js +++ b/v5.js @@ -1,3 +1,3 @@ var v35 = require('./lib/v35.js'); var sha1 = require('./lib/sha1'); -module.exports = v35('v5', 0x50, sha1); \ No newline at end of file +module.exports = v35('v5', 0x50, sha1);