buffer-readable
Version:
convert a string/Buffer/Uint8Array to a readable stream, support highWaterMark and adjustable push delay
48 lines (47 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BufferReadable = void 0;
const stream_1 = require("stream");
class BufferReadable extends stream_1.Readable {
constructor(buffer, opts) {
super(Object.assign(Object.assign({}, opts), { objectMode: false }));
this.__delay = 0;
this.__pos = 0;
if (Buffer.isBuffer(buffer)) {
this.__buffer = buffer;
}
else if (typeof buffer === "string" || buffer instanceof Uint8Array) {
this.__buffer = Buffer.from(buffer);
}
else {
throw new Error("arguments type error");
}
this.__buffer_len = this.__buffer.length;
const delay = opts === null || opts === void 0 ? void 0 : opts.delay;
if (typeof delay === "number" && Number.isSafeInteger(delay) && delay > 0) {
this.__delay = delay;
}
}
_read(size) {
if (this.__pos >= this.__buffer_len) {
this.push(null);
}
else {
const start = this.__pos;
const end = start + size;
const chunk = this.__buffer.slice(start, end);
this.__pos = end;
setTimeout(() => {
this.push(chunk);
if (end >= this.__buffer_len) {
this.push(null);
}
}, this.__delay);
}
}
_destroy(error, callback) {
this.__buffer = null;
callback(error);
}
}
exports.BufferReadable = BufferReadable;