UNPKG

univ-conv

Version:

The universal binary and text converter

83 lines 3.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BinaryConverter = 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"); class BinaryConverter extends AbstractConverter_1.AbstractConverter { constructor() { super(...arguments); this.type = "binary"; } empty() { return ""; } is(input, options) { return typeof input === "string" && options.inputStringType === "binary"; } async _from(input, options) { if (typeof input === "string" && options.inputStringType === "binary") { if ((0, core_1.hasNoStartLength)(options)) { return input; } const { start, end } = await this._getStartEnd(input, options); return input.substring(start, end); } if ((0, AbstractConverter_1._)().is("blob", input, options) && Environment_1.hasReadAsBinaryStringOnBlob) { const startEnd = (0, core_1.getStartEnd)(options, input.size); let start = startEnd.start; const end = startEnd.end; const bufferSize = options.bufferSize; const chunks = []; for (; start < end; start += bufferSize) { const blobChunk = input.slice(start, start + bufferSize); const chunk = await (0, Environment_1.handleFileReader)((reader) => reader.readAsBinaryString(blobChunk), (data) => data); chunks.push(chunk); } return chunks.join(""); } const u8 = await (0, AbstractConverter_1._)().convert("uint8array", input, options); return Array.from(u8, (e) => String.fromCharCode(e)).join(""); } _getStartEnd(input, options) { return Promise.resolve((0, core_1.getStartEnd)(options, input.length)); } _isEmpty(input) { return !input; } _merge(chunks) { return Promise.resolve(chunks.join("")); } _size(input) { return Promise.resolve(input.length); } async _toArrayBuffer(input, options) { const u8 = await this._toUint8Array(input, options); return u8.buffer.slice(u8.byteOffset, u8.byteOffset + u8.byteLength); } 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) { if (!(0, core_1.hasNoStartLength)(options)) { const startEnd = await this._getStartEnd(input, options); const start = startEnd.start; const end = startEnd.end; input = input.substring(start, end); } const u8 = Environment_1.hasBuffer ? Buffer.from(input, "binary") : Uint8Array.from(input.split(""), (e) => e.charCodeAt(0)); return u8; } } exports.BinaryConverter = BinaryConverter; //# sourceMappingURL=BinaryConverter.js.map