From 5d127ea7af84df47d4e79512092b54a8c1fc8c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Unneb=C3=A4ck?= Date: Mon, 29 Nov 2021 16:32:52 +0100 Subject: [PATCH 1/3] feat: use native crypto.randomUUID when available --- package.json | 1 + src/native-browser.js | 4 ++++ src/native.js | 3 +++ src/v4.js | 5 +++++ wdio.conf.js | 9 +++++++++ 5 files changed, 22 insertions(+) create mode 100644 src/native-browser.js create mode 100644 src/native.js diff --git a/package.json b/package.json index 53963d3e..f95d4b6d 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "module": "./dist/esm-node/index.js", "browser": { "./dist/md5.js": "./dist/md5-browser.js", + "./dist/native.js": "./dist/native-browser.js", "./dist/rng.js": "./dist/rng-browser.js", "./dist/sha1.js": "./dist/sha1-browser.js", "./dist/esm-node/index.js": "./dist/esm-browser/index.js" diff --git a/src/native-browser.js b/src/native-browser.js new file mode 100644 index 00000000..9760d14f --- /dev/null +++ b/src/native-browser.js @@ -0,0 +1,4 @@ +const randomUUID = + typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); + +export default { randomUUID }; diff --git a/src/native.js b/src/native.js new file mode 100644 index 00000000..14f8b8f3 --- /dev/null +++ b/src/native.js @@ -0,0 +1,3 @@ +import crypto from 'crypto'; + +export default { randomUUID: crypto.randomUUID }; diff --git a/src/v4.js b/src/v4.js index 520613a4..319c0e8b 100644 --- a/src/v4.js +++ b/src/v4.js @@ -1,9 +1,14 @@ +import native from './native.js'; import rng from './rng.js'; import stringify from './stringify.js'; function v4(options, buf, offset) { options = options || {}; + if (native.randomUUID && buf == null && options.random == null && options.rng == null) { + return native.randomUUID(); + } + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` diff --git a/wdio.conf.js b/wdio.conf.js index 9303b0ee..2ba83d67 100644 --- a/wdio.conf.js +++ b/wdio.conf.js @@ -34,6 +34,14 @@ const capabilities = [ }, // Chrome + // Chrome 92 introduced native support for crypto.randomUUID + { + ...commonCapabilities, + browserName: 'Chrome', + browser_version: '92.0', + os: 'Windows', + os_version: '10', + }, { ...commonCapabilities, browserName: 'Chrome', @@ -41,6 +49,7 @@ const capabilities = [ os: 'Windows', os_version: '10', }, + // Chrome 49 released on 2016-03-02 was the last version supported on Windows XP, Windows Vista, Mac OS X 10.6, 10.7, and 10.8 { ...commonCapabilities, browserName: 'Chrome', From 282774a3245bb58a2be87a7db1316be45307e09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Unneb=C3=A4ck?= Date: Tue, 30 Nov 2021 09:42:05 +0100 Subject: [PATCH 2/3] fix: tweak options checking in v4 --- src/v4.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/v4.js b/src/v4.js index 319c0e8b..dbe76993 100644 --- a/src/v4.js +++ b/src/v4.js @@ -3,12 +3,12 @@ import rng from './rng.js'; import stringify from './stringify.js'; function v4(options, buf, offset) { - options = options || {}; - - if (native.randomUUID && buf == null && options.random == null && options.rng == null) { + if (native.randomUUID && !buf && !options) { return native.randomUUID(); } + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` From e447adfa74e6fa5e8801600662a35e5f925e5667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Unneb=C3=A4ck?= Date: Tue, 30 Nov 2021 09:43:40 +0100 Subject: [PATCH 3/3] fix: tweak webpack bundlewatch config --- bundlewatch.config.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bundlewatch.config.json b/bundlewatch.config.json index 91b8b756..1b33eb8a 100644 --- a/bundlewatch.config.json +++ b/bundlewatch.config.json @@ -5,9 +5,9 @@ { "path": "./examples/browser-rollup/dist/v4-size.js", "maxSize": "0.7 kB" }, { "path": "./examples/browser-rollup/dist/v5-size.js", "maxSize": "1.5 kB" }, - { "path": "./examples/browser-webpack/dist/v1-size.js", "maxSize": "1.3 kB" }, - { "path": "./examples/browser-webpack/dist/v3-size.js", "maxSize": "2.5 kB" }, - { "path": "./examples/browser-webpack/dist/v4-size.js", "maxSize": "1.0 kB" }, - { "path": "./examples/browser-webpack/dist/v5-size.js", "maxSize": "1.9 kB" } + { "path": "./examples/browser-webpack/dist/v1-size.js", "maxSize": "1.0 kB" }, + { "path": "./examples/browser-webpack/dist/v3-size.js", "maxSize": "2.1 kB" }, + { "path": "./examples/browser-webpack/dist/v4-size.js", "maxSize": "0.7 kB" }, + { "path": "./examples/browser-webpack/dist/v5-size.js", "maxSize": "1.5 kB" } ] }