Spaces:
Paused
Paused
| /* globals atob, btoa, crypto */ | |
| /* istanbul ignore file */ | |
| const bytes = require('./core') | |
| bytes.from = (_from, _encoding) => { | |
| if (_from instanceof DataView) return _from | |
| if (_from instanceof ArrayBuffer) return new DataView(_from) | |
| let buffer | |
| if (typeof _from === 'string') { | |
| if (!_encoding) { | |
| _encoding = 'utf-8' | |
| } else if (_encoding === 'base64') { | |
| buffer = Uint8Array.from(atob(_from), c => c.charCodeAt(0)).buffer | |
| return new DataView(buffer) | |
| } | |
| if (_encoding !== 'utf-8') throw new Error('Browser support for encodings other than utf-8 not implemented') | |
| return new DataView((new TextEncoder()).encode(_from).buffer) | |
| } else if (typeof _from === 'object') { | |
| if (ArrayBuffer.isView(_from)) { | |
| if (_from.byteLength === _from.buffer.byteLength) return new DataView(_from.buffer) | |
| else return new DataView(_from.buffer, _from.byteOffset, _from.byteLength) | |
| } | |
| } | |
| throw new Error('Unkown type. Cannot convert to ArrayBuffer') | |
| } | |
| bytes.toString = (_from, encoding) => { | |
| _from = bytes(_from, encoding) | |
| const uint = new Uint8Array(_from.buffer, _from.byteOffset, _from.byteLength) | |
| const str = String.fromCharCode(...uint) | |
| if (encoding === 'base64') { | |
| /* would be nice to find a way to do this directly from a buffer | |
| * instead of doing two string conversions | |
| */ | |
| return btoa(str) | |
| } else { | |
| return str | |
| } | |
| } | |
| bytes.native = (_from, encoding) => { | |
| if (_from instanceof Uint8Array) return _from | |
| _from = bytes.from(_from, encoding) | |
| return new Uint8Array(_from.buffer, _from.byteOffset, _from.byteLength) | |
| } | |
| if (process.browser) bytes._randomFill = (...args) => crypto.getRandomValues(...args) | |
| module.exports = bytes | |