node-libcurl
Version:
The fastest http(s) client (and much more) for Node.js - Node.js bindings for libcurl
68 lines • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CurlMimePart = void 0;
/**
* Copyright (c) Jonathan Cardoso Machado. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
require("./moduleSetup");
const CurlReadFunc_1 = require("./enum/CurlReadFunc");
const bindings = require('../lib/binding/node_libcurl.node');
// @ts-expect-error - we are abusing TS merging here to have sane types for the addon classes
const CurlMimePart = bindings.CurlMimePart;
exports.CurlMimePart = CurlMimePart;
// Add setDataStream method implementation
CurlMimePart.prototype.setDataStream = function (stream, unpause, size) {
let streamEnded = false;
let streamError = null;
const onReadable = () => {
unpause();
};
const onEnd = () => {
streamEnded = true;
unpause();
cleanup();
};
const onError = (err) => {
streamError = err;
streamEnded = true;
unpause();
cleanup();
};
const cleanup = () => {
stream.off('readable', onReadable);
stream.off('end', onEnd);
stream.off('error', onError);
};
stream.pause();
stream.on('readable', onReadable);
stream.on('end', onEnd);
stream.on('error', onError);
// -1 works for unknown sizes
const callbackSize = size !== undefined ? size : -1;
return this.setDataCallback(callbackSize, {
read: (requestedSize) => {
if (streamError) {
throw streamError;
}
if (streamEnded) {
return null;
}
const data = stream.read(requestedSize);
if (data === null) {
if (streamEnded) {
return null;
}
return CurlReadFunc_1.CurlReadFunc.Pause;
}
return data instanceof Buffer ? data : Buffer.from(data);
},
free: () => {
cleanup();
stream.destroy();
},
});
};
//# sourceMappingURL=CurlMimePart.js.map