UNPKG

node-libcurl

Version:

The fastest http(s) client (and much more) for Node.js - Node.js bindings for libcurl

68 lines 2.15 kB
"use strict"; 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