univ-conv
Version:
The universal binary and text converter
83 lines • 3.37 kB
JavaScript
;
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