UNPKG

univ-conv

Version:

The universal binary and text converter

272 lines 9.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.newBufferFrom = exports.newBuffer = exports.isBuffer = exports.writeToFile = exports.fileURLToReadable = exports.fileToBuffer = exports.getFileSize = exports.closeStream = exports.handleReadable = exports.pipeNodeStream = exports.isWritable = exports.pipeWebStream = exports.isReadable = exports.isWritableStream = exports.isReadableStream = exports.handleReadableStream = exports.handleFileReader = exports.EMPTY_BUFFER = exports.hasBuffer = exports.hasWritableStream = exports.hasReadableStream = exports.EMPTY_BLOB = exports.hasReadAsBinaryStringOnBlob = exports.hasReadAsArrayBufferOnBlob = exports.hasArrayBufferOnBlob = exports.hasStreamOnBlob = exports.hasTextOnBlob = exports.hasBlob = exports.hasWritable = exports.hasReadable = exports.isNode = exports.isReactNative = exports.isBrowser = void 0; let _Writable; let _fileURLToPath; let _stat; let _createReadStream; let _createWriteStream; let _readFile; exports.isBrowser = false; exports.isReactNative = false; exports.isNode = false; if (typeof document !== "undefined") { exports.isBrowser = true; } else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") { exports.isReactNative = true; } else { exports.isNode = true; } exports.hasReadable = false; exports.hasWritable = false; (async () => { Promise.resolve().then(() => require("stream")).then((stream) => { exports.hasReadable = typeof stream.Readable === "function"; exports.hasWritable = typeof stream.Writable === "function"; }); })(); exports.hasBlob = false; exports.hasTextOnBlob = false; exports.hasStreamOnBlob = false; exports.hasArrayBufferOnBlob = false; exports.hasReadAsArrayBufferOnBlob = false; exports.hasReadAsBinaryStringOnBlob = false; if (typeof Blob === "function") { exports.hasBlob = true; exports.EMPTY_BLOB = new Blob([]); if (Blob.prototype.text != null) { exports.hasTextOnBlob = true; } if (Blob.prototype.stream != null) { exports.hasStreamOnBlob = true; } if (Blob.prototype.arrayBuffer != null) { exports.hasArrayBufferOnBlob = true; } if (!exports.isReactNative) { exports.hasReadAsArrayBufferOnBlob = FileReader.prototype.readAsArrayBuffer != null; exports.hasReadAsBinaryStringOnBlob = FileReader.prototype.readAsBinaryString != null; } } exports.hasReadableStream = false; exports.hasWritableStream = false; if (typeof ReadableStream === "function") { exports.hasReadableStream = true; exports.hasWritableStream = true; } exports.hasBuffer = false; if (typeof Buffer === "function") { exports.hasBuffer = true; exports.EMPTY_BUFFER = Buffer.alloc(0); } function handleFileReader(trigger, transform) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onerror = function (ev) { reject(reader.error || ev); }; reader.onload = function () { resolve(transform(reader.result)); }; trigger(reader); }); } exports.handleFileReader = handleFileReader; async function handleReadableStream(source, onData) { const reader = source.getReader(); try { let res; do { res = await reader.read(); const chunk = res.value; if (chunk) { const result = await onData(chunk); if (!result) { break; } } } while (!res.done); reader.releaseLock(); closeStream(source); } catch (e) { reader.releaseLock(); closeStream(source, e); } } exports.handleReadableStream = handleReadableStream; function isReadableStream(stream) { return (exports.hasReadableStream && stream != null && typeof stream.getReader === "function" && typeof stream.cancel === "function"); } exports.isReadableStream = isReadableStream; function isWritableStream(stream) { return (exports.hasWritableStream && stream != null && typeof stream.getWriter === "function" && typeof stream.close === "function"); } exports.isWritableStream = isWritableStream; function isReadable(stream) { return (exports.isNode && stream != null && typeof stream.pipe === "function" && stream.readable); } exports.isReadable = isReadable; async function pipeWebStream(readable, writable) { if (typeof readable.pipeTo === "function") { await readable.pipeTo(writable); } else { const writer = writable.getWriter(); await handleReadableStream(readable, async (chunk) => { await writer.write(chunk); return true; }); } } exports.pipeWebStream = pipeWebStream; function isWritable(stream) { return (exports.isNode && stream != null && typeof stream.pipe === "function" && stream.writable); } exports.isWritable = isWritable; function pipeNodeStream(readable, writable) { return new Promise((resolve, reject) => { readable.once("error", reject); writable.once("error", reject); writable.once("finish", resolve); readable.pipe(writable); }); } exports.pipeNodeStream = pipeNodeStream; async function handleReadable(readable, onData) { if (!_Writable) { _Writable = (await Promise.resolve().then(() => require("stream"))).Writable; } if (readable.destroyed) { return; } const writable = new _Writable({ write(chunk, _, next) { onData(chunk) .then((result) => { if (result) { next(); } else { writable.destroy(); } }) .catch((e) => { writable.destroy(e); }); }, }); await pipeNodeStream(readable, writable); } exports.handleReadable = handleReadable; function closeStream(stream, reason) { if (!stream) { return; } if (isReadable(stream) || isWritable(stream)) { stream.destroy(reason); } else if (isReadableStream(stream)) { if (reason) { stream.cancel(reason).catch((e) => console.debug(e)); } else { stream.cancel().catch((e) => console.debug(e)); } } else if (isWritableStream(stream)) { if (reason) { stream.abort(reason).catch((e) => console.debug(e)); } else { stream.close().catch((e) => console.debug(e)); } } } exports.closeStream = closeStream; async function getFileSize(fileURL) { if (!_fileURLToPath) { _fileURLToPath = (await Promise.resolve().then(() => require("url"))).fileURLToPath; } if (!_stat) { _stat = (await Promise.resolve().then(() => require("fs"))).stat; } const p = _fileURLToPath(fileURL); return await new Promise((resolve, reject) => { _stat(p, (err, stats) => { if (err) { reject(err); return; } resolve(stats.size); }); }); } exports.getFileSize = getFileSize; async function fileToBuffer(filePath) { if (!_readFile) { _readFile = (await Promise.resolve().then(() => require("fs"))).readFile; } return new Promise((resolve, reject) => { _readFile(filePath, (err, data) => { if (err) { reject(err); return; } resolve(data); }); }); } exports.fileToBuffer = fileToBuffer; async function fileURLToReadable(fileURL) { if (!_fileURLToPath) { _fileURLToPath = (await Promise.resolve().then(() => require("url"))).fileURLToPath; } if (!_createReadStream) { _createReadStream = (await Promise.resolve().then(() => require("fs"))).createReadStream; } const filePath = _fileURLToPath(fileURL); return _createReadStream(filePath); } exports.fileURLToReadable = fileURLToReadable; async function writeToFile(readable, fileURL) { if (!_createWriteStream) { _createWriteStream = (await Promise.resolve().then(() => require("fs"))).createWriteStream; } if (!_fileURLToPath) { _fileURLToPath = (await Promise.resolve().then(() => require("url"))).fileURLToPath; } const path = _fileURLToPath(fileURL); const writable = _createWriteStream(path); await pipeNodeStream(readable, writable); } exports.writeToFile = writeToFile; function isBuffer(input) { return exports.hasBuffer && input instanceof Buffer; } exports.isBuffer = isBuffer; function newBuffer(size) { return exports.isNode ? Buffer.alloc(size) : new Uint8Array(size); } exports.newBuffer = newBuffer; function newBufferFrom(ab) { return exports.isNode ? Buffer.from(ab) : new Uint8Array(ab); } exports.newBufferFrom = newBufferFrom; //# sourceMappingURL=Environment.js.map