UNPKG

@sunney/flareutils

Version:

Small Utilities and little goodies that make developing with Cloudflare easier and faster.

81 lines 2.63 kB
function toIntArray(str) { let w1; let w2; let u; const r4 = []; const r = []; let i = 0; // pad string to avoid discarding last chars const s = `${str}\0\0\0`; const l = s.length - 1; while (i < l) { w1 = s.charCodeAt(i++); w2 = s.charCodeAt(i + 1); if (w1 < 0x0080) // 0x0000 - 0x007f code point: basic ascii r4.push(w1); else if (w1 < 0x0800) { // 0x0080 - 0x07ff code point r4.push(((w1 >>> 6) & 0x1f) | 0xc0); r4.push(((w1 >>> 0) & 0x3f) | 0x80); } else if ((w1 & 0xf800) !== 0xd800) { // 0x0800 - 0xd7ff / 0xe000 - 0xffff code point r4.push(((w1 >>> 12) & 0x0f) | 0xe0); r4.push(((w1 >>> 6) & 0x3f) | 0x80); r4.push(((w1 >>> 0) & 0x3f) | 0x80); } else if ((w1 & 0xfc00) === 0xd800 && (w2 & 0xfc00) === 0xdc00) { // 0xd800 - 0xdfff surrogate / 0x10ffff - 0x10000 code point u = ((w2 & 0x3f) | ((w1 & 0x3f) << 10)) + 0x10000; r4.push(((u >>> 18) & 0x07) | 0xf0); r4.push(((u >>> 12) & 0x3f) | 0x80); r4.push(((u >>> 6) & 0x3f) | 0x80); r4.push(((u >>> 0) & 0x3f) | 0x80); i++; } /* add integer (four utf-8 value) to array */ if (r4.length > 3) { // little endian r.push((r4.shift() << 0) | (r4.shift() << 8) | (r4.shift() << 16) | (r4.shift() << 24)); } } return r; } function add(a, b) { const lsb = (a & 0xffff) + (b & 0xffff); const msb = (a >>> 16) + (b >>> 16) + (lsb >>> 16); return (msb << 16) | (lsb & 0xffff); } function seed_mix(arr) { arr[0] ^= arr[1] << 11; arr[3] = add(arr[3], arr[0]); arr[1] = add(arr[1], arr[2]); arr[1] ^= arr[2] >>> 2; arr[4] = add(arr[4], arr[1]); arr[2] = add(arr[2], arr[3]); arr[2] ^= arr[3] << 8; arr[5] = add(arr[5], arr[2]); arr[3] = add(arr[3], arr[4]); arr[3] ^= arr[4] >>> 16; arr[6] = add(arr[6], arr[3]); arr[4] = add(arr[4], arr[5]); arr[4] ^= arr[5] << 10; arr[7] = add(arr[7], arr[4]); arr[5] = add(arr[5], arr[6]); arr[5] ^= arr[6] >>> 4; arr[0] = add(arr[0], arr[5]); arr[6] = add(arr[6], arr[7]); arr[6] ^= arr[7] << 8; arr[1] = add(arr[1], arr[6]); arr[7] = add(arr[7], arr[0]); arr[7] ^= arr[0] >>> 9; arr[2] = add(arr[2], arr[7]); arr[0] = add(arr[0], arr[1]); return arr; } export { toIntArray, add, seed_mix }; //# sourceMappingURL=helpers.js.map