UNPKG

univ-conv

Version:

The universal binary and text converter

69 lines 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ArrayBufferConverter = void 0; const base64_arraybuffer_1 = require("base64-arraybuffer"); const AbstractConverter_1 = require("./AbstractConverter"); const core_1 = require("./core"); const Environment_1 = require("./Environment"); const StringUtil_1 = require("./StringUtil"); const hasSharedArrayBuffer = typeof SharedArrayBuffer === "function"; class ArrayBufferConverter extends AbstractConverter_1.AbstractConverter { constructor() { super(...arguments); this.type = "arraybuffer"; } empty() { return core_1.EMPTY_ARRAY_BUFFER; } is(input) { return (input instanceof ArrayBuffer || (hasSharedArrayBuffer && input instanceof SharedArrayBuffer)); } async _from(input, options) { const converter = (0, AbstractConverter_1._)()._find(input, options); return await converter.toArrayBuffer(input, options); } _getStartEnd(input, options) { return Promise.resolve((0, core_1.getStartEnd)(options, input.byteLength)); } _isEmpty(input) { return input.byteLength === 0; } _merge(chunks) { const byteLength = chunks.reduce((sum, chunk) => { return sum + chunk.byteLength; }, 0); const u8 = (0, Environment_1.newBuffer)(byteLength); let pos = 0; for (const chunk of chunks) { u8.set((0, Environment_1.newBufferFrom)(chunk), pos); pos += chunk.byteLength; } return Promise.resolve(u8.buffer); } _size(input) { return Promise.resolve(input.byteLength); } async _toArrayBuffer(input, options) { if ((0, core_1.hasNoStartLength)(options)) { return input; } const { start, end } = await this._getStartEnd(input, options); return input.slice(start, end); } async _toBase64(input, options) { const u8 = await this._toUint8Array(input, options); return (0, base64_arraybuffer_1.encode)(u8); } async _toText(input, options) { const u8 = await this._toUint8Array(input, options); const textHelper = await (0, StringUtil_1.getTextHelper)(); return await textHelper.bufferToText(u8, options); } async _toUint8Array(input, options) { const ab = await this._toArrayBuffer(input, options); return Environment_1.hasBuffer ? Buffer.from(ab) : new Uint8Array(ab); } } exports.ArrayBufferConverter = ArrayBufferConverter; //# sourceMappingURL=ArrayBufferConverter.js.map