UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

61 lines (45 loc) 1.76 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); exports.__esModule = true; exports.encode = encode; exports.decode = decode; var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of")); var _alphabet = _interopRequireDefault(require("./alphabet")); function getByte(view, offset) { return offset < view.byteLength ? view.getUint8(offset) : 0; } function getChar(string, offset) { return offset < string.length ? (0, _indexOf.default)(_alphabet.default).call(_alphabet.default, string[offset]) : 0; } function encode(u8Arr) { var buffer = u8Arr.buffer, byteOffset = u8Arr.byteOffset, byteLength = u8Arr.byteLength; var view = new DataView(buffer, byteOffset, byteLength); var str = ''; for (var i = 0; i < view.byteLength; i += 3) { var value = (getByte(view, i) << 16) + (getByte(view, i + 1) << 8) + getByte(view, i + 2); var gstr = ''; for (var j = 0; j < 4; j++) { gstr = _alphabet.default[value & 0x3f] + gstr; value = value >> 6 | 0; } str += gstr; } return str.substr(0, Math.ceil(view.byteLength * 4 / 3)); } function decode(string, start) { if (start === void 0) { start = 0; } var buffer = new ArrayBuffer(Math.floor((string.length - start) * 3 / 4)); var view = new DataView(buffer); for (var i = start; i < string.length; i += 4) { var value = (getChar(string, i) << 18) + (getChar(string, i + 1) << 12) + (getChar(string, i + 2) << 6) + getChar(string, i + 3); for (var j = i * 3 / 4 + 2; j >= i * 3 / 4; j--) { if (j < view.byteLength) view.setUint8(j, value & 0xff); value = value >> 8 | 0; } } return new Uint8Array(buffer); }