-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Changing our support to only cover the last two major safari versions on OSX as our stats show that this will cover our users and we can move more quickly to some modern Javascript and improve performance for everyone else by not including dead code. This allows us to drop our CRYPTO.randomUUID polyfill as it is supported in Safari 16+.
- Loading branch information
Showing
7 changed files
with
11 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,68 +1 @@ | ||
export async function loadPolyfills() { | ||
//we need CRYPTO.randomUUID until we drop support for Safari 15.x | ||
installUUIDPolyfill(); | ||
} | ||
|
||
function installUUIDPolyfill() { | ||
const CRYPTO = window.crypto; | ||
|
||
if (!CRYPTO.randomUUID) { | ||
// we might be able to optimize this by requesting more bytes than we need at a time | ||
const rng = function () { | ||
// WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto | ||
let rnds8 = new Uint8Array(16); | ||
|
||
if (!CRYPTO.getRandomValues) { | ||
throw new Error(`Unable to generate bytes for UUID`); | ||
} | ||
|
||
return CRYPTO.getRandomValues ? CRYPTO.getRandomValues(rnds8) : CRYPTO.randomFillSync(rnds8); | ||
}; | ||
|
||
/* | ||
* Convert array of 16 byte values to UUID string format of the form: | ||
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX | ||
*/ | ||
const byteToHex = []; | ||
for (let i = 0; i < 256; ++i) { | ||
byteToHex[i] = (i + 0x100).toString(16).substr(1); | ||
} | ||
|
||
const bytesToUuid = function (buf) { | ||
let bth = byteToHex; | ||
// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 | ||
return [ | ||
bth[buf[0]], | ||
bth[buf[1]], | ||
bth[buf[2]], | ||
bth[buf[3]], | ||
'-', | ||
bth[buf[4]], | ||
bth[buf[5]], | ||
'-', | ||
bth[buf[6]], | ||
bth[buf[7]], | ||
'-', | ||
bth[buf[8]], | ||
bth[buf[9]], | ||
'-', | ||
bth[buf[10]], | ||
bth[buf[11]], | ||
bth[buf[12]], | ||
bth[buf[13]], | ||
bth[buf[14]], | ||
bth[buf[15]], | ||
].join(''); | ||
}; | ||
|
||
CRYPTO.randomUUID = function uuidv4() { | ||
let rnds = rng(); | ||
|
||
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved` | ||
rnds[6] = (rnds[6] & 0x0f) | 0x40; | ||
rnds[8] = (rnds[8] & 0x3f) | 0x80; | ||
|
||
return bytesToUuid(rnds); | ||
}; | ||
} | ||
} | ||
export async function loadPolyfills() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters