"use strict"; const Promise = require("bluebird"); const fs = require("fs"); function analyzeBuffer(buffer) { return buffer.length; } function analyzeBlob(blob) { return blob.size; } function analyzeStream(stream) { return Promise.try(() => { return fs.promises.stat(stream.path); }).then((stat) => { return stat.size; }); } function analyzeString(string) { // NOTE: string.length would produce the size in *code units*, but we want the size in *bytes* return (new TextEncoder().encode(string)).length; } module.exports = function getFilesize(file) { if (typeof file === "string") { return analyzeString(file); } else if (typeof Blob !== "undefined" && file instanceof Blob) { return analyzeBlob(file); } else if (Buffer.isBuffer(file)) { return analyzeBuffer(file); } else if (file._readableState != null && file.path != null) { return analyzeStream(file); } else { throw new Error(`Invalid file passed`); // FIXME: Validate } };