scratch-vm/src/util/base64-util.js

34 lines
913 B
JavaScript
Raw Normal View History

MicroBit extension, Scratch Link first draft. (#1230) * First microbit gui tests * Fixed JSONRPC inheritance. Renamed ScratchBLE/ScratchBT files. Removed ScratchBT test code from Microbit extension. Renamed addLine to log. * Fixed log comments. Removed addLine from Microbit. * Adding auto-connect to Microbit at extension loading. Adding hack for displayText block to Scratch-Link. * Resolved merge conflicts and brought in latest microbit extension example code. * Updated microbit write tests for displayText and displaySymbol blocks. Some linting. * Some linting and adding of BLE Characteristic consts. * Linting fixes. * Moving micro:bit device connection code all to the MicroBit class, decoupling Scratch3MicroBitBlocks from connection code. * Removing old disconenct handlers from MicroBit class. Moved service into new BLEUUID data structure. * Renamed _write to _send. Moved all BLE encoding concerns to the _send method. * Using the util log. Some linting. * Added _read method to MicroBit class. Renamed _send to _write. * Some linting and formatting comments. * First pass at peripheral chooser pattern for ScratchBLE. * Testing characteristicDidChange events, and some changes to ScratchBLE on ready events. * Refactoring work on PeripheralChooser and ScratchBLE. * Some variable renaming and method signature stubs. * Peripheral chooser method signatures. * Moved base64 encoding/decoding to util. Some method signature formatting. * Adding test stubs for new util and io classes. * Adding test stub for MicroBit extension. * Clean up for PR. * Clean up for PR. * Final cleanup for PR. * Removed logging to console. * Adding 'btoa' and 'atob' node modules and using them in Base64Util.
2018-06-18 14:56:51 -04:00
const atob = require('atob');
const btoa = require('btoa');
class Base64Util {
/**
* Convert a base64 encoded string to a Uint8Array.
* @param {string} base64 - a base64 encoded string.
* @return {Uint8Array} - a decoded Uint8Array.
*/
static base64ToUint8Array (base64) {
const binaryString = atob(base64);
const len = binaryString.length;
const array = new Uint8Array(len);
for (let i = 0; i < len; i++) {
array[i] = binaryString.charCodeAt(i);
}
return array;
}
/**
* Convert a Uint8Array to a base64 encoded string.
* @param {Uint8Array} array - the array to convert.
* @return {string} - the base64 encoded string.
*/
static uint8ArrayToBase64 (array) {
const base64 = btoa(String.fromCharCode.apply(null, array));
return base64;
}
}
module.exports = Base64Util;