1*c8dee2aaSAndroid Build Coastguard Worker 2*c8dee2aaSAndroid Build Coastguard Worker// General purpose utility functions go in this file. 3*c8dee2aaSAndroid Build Coastguard Worker 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Workerfunction allAreFinite(args) { 6*c8dee2aaSAndroid Build Coastguard Worker for (var i = 0; i < args.length; i++) { 7*c8dee2aaSAndroid Build Coastguard Worker if (args[i] !== undefined && !Number.isFinite(args[i])) { 8*c8dee2aaSAndroid Build Coastguard Worker return false; 9*c8dee2aaSAndroid Build Coastguard Worker } 10*c8dee2aaSAndroid Build Coastguard Worker } 11*c8dee2aaSAndroid Build Coastguard Worker return true; 12*c8dee2aaSAndroid Build Coastguard Worker} 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Workerfunction toBase64String(bytes) { 15*c8dee2aaSAndroid Build Coastguard Worker if (typeof Buffer !== 'undefined') { // Are we on node? 16*c8dee2aaSAndroid Build Coastguard Worker return Buffer.from(bytes).toString('base64'); 17*c8dee2aaSAndroid Build Coastguard Worker } else { 18*c8dee2aaSAndroid Build Coastguard Worker // From https://stackoverflow.com/a/25644409 19*c8dee2aaSAndroid Build Coastguard Worker // because the naive solution of 20*c8dee2aaSAndroid Build Coastguard Worker // btoa(String.fromCharCode.apply(null, bytes)); 21*c8dee2aaSAndroid Build Coastguard Worker // would occasionally throw "Maximum call stack size exceeded" 22*c8dee2aaSAndroid Build Coastguard Worker var CHUNK_SIZE = 0x8000; //arbitrary number 23*c8dee2aaSAndroid Build Coastguard Worker var index = 0; 24*c8dee2aaSAndroid Build Coastguard Worker var length = bytes.length; 25*c8dee2aaSAndroid Build Coastguard Worker var result = ''; 26*c8dee2aaSAndroid Build Coastguard Worker var slice; 27*c8dee2aaSAndroid Build Coastguard Worker while (index < length) { 28*c8dee2aaSAndroid Build Coastguard Worker slice = bytes.slice(index, Math.min(index + CHUNK_SIZE, length)); 29*c8dee2aaSAndroid Build Coastguard Worker result += String.fromCharCode.apply(null, slice); 30*c8dee2aaSAndroid Build Coastguard Worker index += CHUNK_SIZE; 31*c8dee2aaSAndroid Build Coastguard Worker } 32*c8dee2aaSAndroid Build Coastguard Worker return btoa(result); 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker} 35*c8dee2aaSAndroid Build Coastguard Worker 36