From 1835ee7e548b814bea368cfb4c4a62ce247c6eba Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Tue, 13 Jan 2015 02:53:09 +0100 Subject: [PATCH] Whoops, forgot the build for v1.0.0 --- gulpfile.js | 28 +++++++++++++ index.js | 1 + lib/stream-length.js | 99 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 12 +++++- 4 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 gulpfile.js create mode 100644 index.js create mode 100644 lib/stream-length.js diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..bb7f05f --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,28 @@ +var gulp = require('gulp'); + +/* CoffeeScript compile deps */ +var path = require('path'); +var gutil = require('gulp-util'); +var concat = require('gulp-concat'); +var rename = require('gulp-rename'); +var coffee = require('gulp-coffee'); +var cache = require('gulp-cached'); +var remember = require('gulp-remember'); +var plumber = require('gulp-plumber'); + +var source = ["lib/**/*.coffee", "index.coffee"] + +gulp.task('coffee', function() { + return gulp.src(source, {base: "."}) + .pipe(plumber()) + .pipe(cache("coffee")) + .pipe(coffee({bare: true}).on('error', gutil.log)).on('data', gutil.log) + .pipe(remember("coffee")) + .pipe(gulp.dest(".")); +}); + +gulp.task('watch', function () { + gulp.watch(source, ['coffee']); +}); + +gulp.task('default', ['coffee', 'watch']); \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..19a8e28 --- /dev/null +++ b/index.js @@ -0,0 +1 @@ +module.exports = require("./lib/stream-length"); diff --git a/lib/stream-length.js b/lib/stream-length.js new file mode 100644 index 0000000..944e101 --- /dev/null +++ b/lib/stream-length.js @@ -0,0 +1,99 @@ +var Promise, createRetrieverPromise, fs, nodeifyWrapper, retrieveBuffer, retrieveCoreHttpStream, retrieveFilesystemStream, retrieveRequestHttpStream; + +Promise = require("bluebird"); + +fs = Promise.promisifyAll(require("fs")); + +nodeifyWrapper = function(callback, func) { + return func().nodeify(callback); +}; + +createRetrieverPromise = function(stream, retriever) { + return new Promise(function(resolve, reject) { + return retriever(stream, function(result) { + if (result != null) { + if (result instanceof Error) { + console.log("REJECTING...", result); + return reject(result); + } else { + return resolve(result); + } + } else { + return reject(new Error("Could not find a length using this lengthRetriever.")); + } + }); + }); +}; + +retrieveBuffer = function(stream, callback) { + if (stream instanceof Buffer) { + return callback(stream.length); + } else { + return callback(null); + } +}; + +retrieveFilesystemStream = function(stream, callback) { + var _ref; + if (stream.hasOwnProperty("fd")) { + if (stream.end !== void 0 && stream.end !== Infinity && stream.start !== void 0) { + return callback(stream.end + 1 - ((_ref = stream.start) != null ? _ref : 0)); + } else { + return Promise["try"](function() { + return fs.statAsync(stream.path); + }).then(function(stat) { + var _ref1; + return callback(stat.size - ((_ref1 = stream.start) != null ? _ref1 : 0)); + })["catch"](function(err) { + return callback(err); + }); + } + } else { + return callback(null); + } +}; + +retrieveCoreHttpStream = function(stream, callback) { + if (stream.hasOwnProperty("httpVersion") && (stream.headers["content-length"] != null)) { + return callback(parseInt(stream.headers["content-length"])); + } else { + return callback(null); + } +}; + +retrieveRequestHttpStream = function(stream, callback) { + if (stream.hasOwnProperty("httpModule")) { + return stream.on("response", function(response) { + if (response.headers["content-length"] != null) { + return callback(parseInt(response.headers["content-length"])); + } else { + return callback(null); + } + }); + } else { + return callback(null); + } +}; + +module.exports = function(stream, options, callback) { + if (options == null) { + options = {}; + } + return nodeifyWrapper(callback, function() { + var retriever, retrieverPromises, _i, _j, _len, _len1, _ref, _ref1; + retrieverPromises = []; + if (options.lengthRetrievers != null) { + _ref = options.lengthRetrievers; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + retriever = _ref[_i]; + retrieverPromises.push(createRetrieverPromise(stream, retriever)); + } + } + _ref1 = [retrieveBuffer, retrieveFilesystemStream, retrieveCoreHttpStream, retrieveRequestHttpStream]; + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + retriever = _ref1[_j]; + retrieverPromises.push(createRetrieverPromise(stream, retriever)); + } + return Promise.any(retrieverPromises); + }); +}; diff --git a/package.json b/package.json index 6fe58b1..4a07d6e 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,16 @@ "bluebird": "^2.6.2" }, "devDependencies": { - "request": "^2.51.0" + "request": "^2.51.0", + "gulp": "~3.8.0", + "gulp-cached": "~0.0.3", + "gulp-coffee": "~2.0.1", + "gulp-concat": "~2.2.0", + "gulp-livereload": "~2.1.0", + "gulp-nodemon": "~1.0.4", + "gulp-plumber": "~0.6.3", + "gulp-remember": "~0.2.0", + "gulp-rename": "~1.2.0", + "gulp-util": "~2.2.17" } }