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" } ] } diff --git a/package.json b/package.json index 1f533761..247d4917 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..dbe76993 100644 --- a/src/v4.js +++ b/src/v4.js @@ -1,7 +1,12 @@ +import native from './native.js'; import rng from './rng.js'; import stringify from './stringify.js'; function v4(options, buf, offset) { + if (native.randomUUID && !buf && !options) { + return native.randomUUID(); + } + options = options || {}; const rnds = options.random || (options.rng || rng)(); 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',