You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/pitfall/pdfkit/node_modules/blob-stream/index.js

52 lines
1.3 KiB
JavaScript

var WritableStream = require('stream').Writable;
var util = require('util');
var Blob = require('blob');
var URL = global.URL || global.webkitURL || global.mozURL;
function BlobStream() {
if (!(this instanceof BlobStream))
return new BlobStream;
WritableStream.call(this);
this._chunks = [];
this._blob = null;
this.length = 0;
}
util.inherits(BlobStream, WritableStream);
BlobStream.prototype._write = function(chunk, encoding, callback) {
// convert chunks to Uint8Arrays (e.g. Buffer when array fallback is being used)
if (!(chunk instanceof Uint8Array))
chunk = new Uint8Array(chunk);
this.length += chunk.length;
this._chunks.push(chunk);
callback();
};
BlobStream.prototype.toBlob = function(type) {
type = type || 'application/octet-stream';
// cache the blob if needed
if (!this._blob) {
this._blob = new Blob(this._chunks, {
type: type
});
this._chunks = []; // free memory
}
// if the cached blob's type doesn't match the requested type, make a new blob
if (this._blob.type !== type)
this._blob = new Blob([this._blob], { type: type });
return this._blob;
};
BlobStream.prototype.toBlobURL = function(type) {
return URL.createObjectURL(this.toBlob(type));
};
module.exports = BlobStream;